Silk Performer 21.0 へようこそ

発行日： 2020-10-21

Silk Performer 21.0 へようこそ

  • Silk Performer 21.0
  • UI のツアー
  • アップグレードとライセンス情報
  • 入門

新機能

  • Silk Performer 21.0 の新機能

主なセクション

  • .NET テストのサポート
  • Java テストのサポート
  • TrueLog Explorer
  • Performance Explorer

チュートリアルとデモ

  • Web 2.0 アプリケーションのテスト (プロトコルレベル)
  • Web 2.0 アプリケーションのテスト (ブラウザ駆動型)
  • モバイル デバイスの Web アプリケーションのテスト
  • クラウド上でのテスト
  • Citrix アプリケーションのテスト
  • Oracle Forms / Oracle Applications のテスト
  • ターミナル エミュレーション アプリケーションのテスト

コード サンプル

  • Benchmark Description Language (BDL) リファレンス

オンライン リソース

  • Micro Focus Web サイト
  • Silk Performer YouTube ビデオ
  • Silk Performer オンライン ドキュメント
  • Silk Performer On-Demand Training
  • Silk Performer サポートとサービス
  • Silk Performer 製品アップデート
  • Silk Performer Community
  • Silk Performer Blog
  • Silk Performer Knowledge Base

フィードバックをお寄せください

  • Micro Focus へのお問い合わせ
  • このヘルプに関するフィードバックを電子メールで送る


インストール ガイド

  • はじめに
    『Silk Performer インストール ガイド』について説明します。
  • Silk Performer のライセンス
    Silk Performer のライセンス ポリシーとして、2 種類のライセンス モデルと仮想ユーザー タイプについて説明します。また、各仮想ユーザー タイプが構成するすべてのアプリケーションの種類も一覧します。
  • Silk Performer のインストール
    Silk Performer インストール プロセスの概要について説明します。
  • オプション コンポーネントのインストール
  • リモート コンピュータ上でエージェント ソフトウェアのインストール
    リモート コンピュータ上で Silk Performer エージェント ソフトウェアをセットアップする手順について説明します。


はじめに

このヘルプでは、Silk Performer をインストール/アンインストール、および、負荷テスト環境を準備をする際に必要な情報を提供します。ハードウェア、ソフトウェア、OS の要件、および、インストールの代替オプションなどについても説明します。

Silk Performer をインストールする前に、セットアップ ウィザードは インストールや使用時に必要なすべてのソフトウェアがコンピュータ上にインストールされているかどうかを確認します。インストールされていない場合、セットアップ ウィザードは不足したソフトウェアをインストールするための選択肢を提示します。

  • システム要件
    Silk Performer のシステム要件および前提条件を示します。
  • パフォーマンスとスケーラビリティ マトリクス
    エージェントあたりの最大仮想ユーザー数の推奨値を計算する際のガイダンスを示します。
親トピック: インストール ガイド


システム要件

以下のセクションでは、Silk Performer をインストールして実行するためのシステム要件について説明します。

Silk Performer のエージェント ソフトウェア、もしくはコントローラとエージェントの両ソフトウェアを実行し、大規模負荷テストを実行するために Silk Performer のポテンシャルを最大限に利用するには、お持ちのシステムが次の最小要件を満たしている必要があります。 自作機 (ベアボーンキット、ショップ ブランド機を含む) は動作保証外です。

ハードウェア要件

システム領域 | 要件
プロセッサ | Intel Core 2 Duo、または同等の CPU
RAM | 4 GB
ハード ディスク領域 | コントローラ ソフトウェア インストールに 2.5 GB エージェントのみをインストールする場合に 1 GB 行う負荷テストのサイズに応じて、その結果ファイルのための十分な空き容量がお使いのハードディスク上にあるかどうか確認してください。
ネットワーク | テスト対象システム、および、すべての Silk Performer エージェント コンピュータとのネットワーク接続。

オペレーティング システムの要件

  • Silk Performer コントローラ、および Silk Performer エージェントは、Microsoft Windows 8.1 以降、または Microsoft Windows Server 2012 以降にインストールできます。
  • ネットワーク エミュレーション ドライバのインストールは、現時点では Microsoft Windows 10、および Microsoft Windows Server 2016 と 2019 をサポートしません。

ソフトウェア要件

Silk Performer をインストールし、実行するには、お持ちのシステムに、最小限のソフトウェア コンポーネント群が必要となります。

必要とされるコンポーネントは、インストールの種類によって異なります。たとえば、Silk Performer Java Explorer を実行するには、適切な Java Development Kit がシステムにインストールされている必要があります。それぞれの Web サイトからコンポーネントをダウンロードしてください。
  • Internet Explorer 11、Google Chrome、Mozilla Firefox、Microsoft Edge、Opera (ブラウザ駆動型負荷テスト用)

  • ドキュメント参照用の PDF ビューア

  • Citrix Receiver (Microsoft Windows 4.9.7 (LTSR) 用) 以降 (Citrix アプリケーションのテスト用)
  • Java Runtime Environment (JRE)：64 ビット オペレーティング システムでは、32 ビット版と 64 ビット版の両方をインストールする必要があります。
  • Java Development Kit 7、8 (32 ビット) (Java Explorer を使用した Java アプリケーションのテスト用)
  • Visual Studio 2015、2017、2019 (Visual Studio 拡張機能用)。

マルチユーザー システム上での Silk Performer での作業

Silk Performer を、マルチユーザーによるアクセスを有効にしたターミナル サービスを提供するマシンにインストールできます。一般に、複数のセッションを同時に作業することは推奨されません。それでも作業する必要がある場合には、次の点にご注意ください。

  • 記録：Silk Performer Recorder はシステム全体のフック機構を使用します。あるユーザーが Recorder を開始すると、すべてのほかのユーザーのトラフィックも同様に記録される可能性があります。
  • Workbench：複数のユーザーが同時に異なるプロジェクトで作業することができます。同じプロジェクトで作業することは推奨されません。2 番目以降のユーザーに対しては、プロジェクトは読み取り専用モードで開かれます。
  • テストの実行：複数のユーザーが 1 つのマシンから同時にテストを実行できます。ただし、テストを同時に複数実行すると、同じリソース (CPU、メモリ、ネットワークバンド幅) を共有するため、互いに影響を与えます。
  • テストの監視： Performance Explorer は、テストを実行している複数のテスト測定値間の違いを区別しません。よって、誤ったテストのリアルタイム値が表示される可能性があります。
親トピック: はじめに


パフォーマンスとスケーラビリティ マトリクス

エージェントごとの最大仮想ユーザー数

以下のテーブルに、エージェント コンピュータのハードウェア リソースとテストする Web アプリケーションの種類に基づく、エージェント コンピュータあたりの推奨最大仮想ユーザー数を示します。

注: SSL を使用したアプリケーションのテストでは、可能な仮想ユーザー数が 35% 減少します。[エラー時に TrueLog を生成する] を有効にしたテストでは、可能な仮想ユーザー数が 30% 減少します。低レベルの API (Web 低レベル) を使用した Web アプリケーションのテストでは、可能な仮想ユーザー数が 20% 増加します。
システム | OS | Web ビジネス アプリケーション | SSL による Web ビジネス アプリケーション (-35%) | TrueLog On Error (-30%) | SSL による TrueLog On Error | Web 低レベル (+20%)
Intel Xeon Quadcore 3 GHz、16 GB RAM | Windows Server 2008 R2 | 6500 | 4225 | 4550 | 2958 | 7800
Intel Core i7 Quadcore 2.8 GHz、8 GB RAM | Windows 8.1 | 6500 | 4225 | 4550 | 2958 | 7800
Intel Core2 Duo 3 GHz、4 GB RAM | Windows 7 Enterprise | 4700 | 3055 | 3290 | 2139 | 5640
注: Web ビジネス アプリケーションは、ページレベル API (HTML/HTTP) を使用します。Web 低レベルは、低レベルの API (HTTP) を使用します。

クラウド エージェントあたりの仮想ユーザー数

注: クラウドベース エージェントあたりの最大仮想ユーザー数は、テストするアプリケーションの種類に関係なく 1,000 となります。

以下のテーブルに、テストするアプリケーションの種類に基いて、クラウド ベースのエージェントで通常サポートされる仮想ユーザー数を示します。

テスト対象アプリケーション | クラウド ベースのエージェントでサポートされる仮想ユーザー数
ブラウザ駆動型負荷テスト | 5
Java/.NET | 250
セキュア Web (SSL) | 600
Web | 800

テスト パラメータ

上の表の数値は、以下のような特徴を持つ現実的なワークロードを使用して決定したものです。

  • リクエストされる全 Web ページのページ構成は、一般的な公開 Web ページ相当とする。
  • 仮想ユーザーのページ ビュー間の平均思考時間は 32 秒であった。
  • 1 人の仮想ユーザーは、4 つ同時使用接続によってエミュレートされた。

つまり、シミュレートされる仮想ユーザー数は、1 つの一般的な Web サイトに同時にアクセスしている実際のユーザー数に相当し、次のような結果になります。

  • ページあたりの平均ヒット数：39
  • 平均ページ サイズ：130 KB
  • ページ間の平均思考時間：32 秒

Web プロトコル仮想ユーザーのエージェント容量

Silk Performer は以下のパラメータを考慮した公式を使用して、マシンの容量を決定します。
  • CPU 数
  • CPU ごとのコア数
  • CPU 速度
  • メモリ サイズ

結果は、対応するパラメータを持つエージェント マシン上で Web プロトコル スクリプトを実行できる仮想ユーザーの数で表されます。

他の仮想ユーザー タイプのエージェント容量

特定のエージェント マシン上で実行可能な仮想ユーザー数を決定するために、使用するテクノロジに依存する特定の係数で Web プロトコル仮想ユーザー数に重み付けを行います。
注: 一部のテクノロジでは、CPU やメモリの制限というよりも単に OS の制限事項により、仮想ユーザーの最大数がマシンごとに定義されます。
親トピック: はじめに
親トピック: 入門


Silk Performer のライセンス

Silk Performer のライセンス モデルは、仮想ユーザー (VUser) に基づきます。

Silk Performer Workbench を起動して使用するためのライセンスは必要ありません。ライセンスが無くても、スクリプトを作成したり、カスタマイズしたり、負荷テストの設定を変更することができます。また、スクリプトの試行やベースラインの実行などの 1 つの仮想ユーザーのみの実行にも、ライセンスは必要ありません。

負荷テストの実行を開始すると、実行に使用される仮想ユーザーに対してライセンスが必要になります。

Silk Performer には、2 種類のライセンス モデルがあります。

  • オンプレミス ライセンス
  • オンライン ライセンス

以前のバージョンの Silk Performer からアップグレードした場合、新しいバージョンで負荷テストを実行するには、新しいライセンスが必要です。アップグレードの過程では、90 日間古いライセンスを使用できます。

Silk Performer には、3 種類の仮想ユーザー タイプがあります。それぞれのタイプでさまざまなアプリケーションの種類をシミュレートできます。

  • Web
  • Standard
  • Premium
VUser タイプ | アプリケーションの種類
Web | Web ブラウザ駆動 GUI レベル テスト (選択した Web ブラウザを使用した単一セッション モード) HTTP(S) (Web ブラウザ低レベル) HTTP(S)/HTML (Web ブラウザ高レベル) HTTP(S)/XML (Web サービス, SOAP) HTTP ライブ ストリーミング (HLS) Silverlight モバイル SAP NetWeaver WebDAV (MS Outlook Web Access) 電子メール (SMTP/POP) FTP TCP/IP UDP AMF0/AMF3/FLEX Java over HTTP DLL インターフェイス
Standard | Web すべてとそれに加えて： Visual Studio 拡張機能 Java Add-On DB2-CLI Add-On OCI Add-On ODBC Add-On Visual Basic Add-On (Framework) ディレクトリ サーバー (LDAP) CORBA Add-On
Premium | 標準 すべてとそれに加えて： GUI レベル テスト (UFT Developer (Silk4J)、UFT Developer (Silk4NET)、Silk Test Classic) Remedy Web ARS SAPGUI Add-On for Silk Performer Oracle Applications/Forms Add-On PeopleSoft Add-On Siebel Add-On Citrix Add-On ターミナル エミュレーション (グリーン スクリーン) Add-On Tuxedo/ATMI Add-On
  • オンプレミス ライセンス
    2 種類のオンプレミス ライセンスについてと、フローティング ライセンスおよびライセンス サーバー関連の基本情報について説明します。
  • オンライン ライセンス
    オンライン ライセンスとは何か、オンライン ライセンスを使用してライセンスを取得する方法、オンライン ライセンスとオンプレミス ライセンスの両方を使用する方法について説明します。
  • Silk Performer SOA Edition のライセンス
    SOA Edition の概要とライセンスの動作、および SOA Edition を使ってテストできる対象について説明します。
親トピック: インストール ガイド
関連タスク
ライセンス サーバー上へ Silk Meter をインストールする


オンプレミス ライセンス

オンプレミス ライセンスとして、Silk Performer は 2 種類のライセンスを提供します。

  • スタンドアロン ライセンス
  • フローティング ライセンス

フローティング ライセンスは、ライセンスをライセンス サーバーにインストールすることによって、ユーザー間でライセンスを共有することができます。スタンドアロン ライセンスは、特定のマシンに結び付けられます。Silk 製品では、Silk Meter と Micro Focus AutoPass の 2 種類のライセンス管理テクノロジを利用できます。Silk Meter は、従来のライセンス管理テクノロジで、スタンドアロン ライセンスとフローティング ライセンスの両方をサポートします。AutoPass の場合は、現時点ではフローティング ライセンスのみをサポートします。ただし、AutoPass では、使いやすい使用状況のレポート機能を利用できます。

次の点にご注意ください。

  • 複数のライセンス サーバーがある場合は、それぞれのライセンス サーバーに結び付けられたライセンスを含んだ複数のライセンス ファイルが必要となります。
  • Silk Performer ライセンス ファイルを受け取っている場合は、そのファイルをライセンス サーバーにインストールします。
  • ライセンス ファイルを受け取っていない場合は、オンラインのライセンス生成プログラムを使って生成します。
  • Silk Performer ライセンスの生成
    Silk Performer ライセンスを生成する方法について説明します。
  • ホスト ID を調べる
    ライセンスをインストールするコンピュータのホスト ID を調べます。Silk Performer ライセンス ファイルを取得するには、ホスト ID が必要です。
  • Silk Meter のインストール
    Silk Meter ライセンス サーバー ソフトウェアをインストールする前に知っておく必要がある事項について説明します。
  • ライセンス設定を変更する
    Silk Meter ライセンス サーバーのホスト名またはポートが変更された場合は、ライセンス サーバーの設定を変更します。
親トピック: Silk Performer のライセンス


Silk Performer ライセンスの生成

Silk Performer で負荷テストを実行するには、有効なライセンスが必要です。Silk Performer を購入すると、オンラインのライセンス生成プログラムを使用してライセンス ファイルを生成できます。オンラインのライセンス生成プログラムにアクセスするには、Firefox や Chrome などの SSL 対応ブラウザが必要です。ライセンス ファイルの生成方法に関する指示が含まれた電子メールを受け取ります。これらの指示がなかった場合は、http://support.microfocus.com でカスタマー ケアにお問い合わせください。

親トピック: オンプレミス ライセンス
関連概念
Silk Performer のインストール
関連タスク
ライセンス サーバー上へ Silk Meter をインストールする


ホスト ID を調べる

ライセンスは、フローティング ライセンスの場合はライセンス サーバーに、スタンドアロン ライセンスの場合は Silk Performer コントローラ マシンに結び付ける必要があります。ライセンスとマシンを結びつけるには、ホスト ID が必要です。Silk Meter では、ホスト ID は LAN カードの MAC アドレスであり、次の方法で調べることができます。

  1. ライセンスをインストールするマシン上でコマンド プロンプトを開いて、コマンド ipconfig/all を入力します。 ネットワーク アダプタとさまざまな情報が表示されます。
  2. LAN カードの MAC アドレスまたは物理アドレスであるホスト ID (00-BF-00-1C-D3-3D など) を確認します。
    ヒント: 仮想マシンや VPN 接続が設定されている場合など、システムの設定によっては、コンピュータに異なる MAC アドレスを持つ複数のネットワーク アダプタが存在することがあります。物理 LAN カードのホスト ID を確認してください。
AutoPass ライセンス サーバーでは、ホスト ID は ロック コード と呼ばれ、インストール タブの ライセンス メニューに表示されます。AutoPass ライセンス サーバーのインストールと使い方については、Micro Focus Marketplace の対応する製品ページを参照してください。
親トピック: オンプレミス ライセンス


Silk Meter のインストール

Silk Meter ライセンス ファイルをお持ちの場合は、Silk Performer をインストールするときにライセンスもインストールできます。有効な Silk Performer ライセンスをお持ちでない場合は、オンラインのライセンス生成プログラムを使用してライセンス ファイルを生成してください。

ライセンス サーバー上に Silk Meter をインストールして実行するためには、ライセンス ファイルは必要ありません。しかし、Silk Performerの負荷テストを実行する前に、ライセンス ファイルをインポートする必要があります。Silk MeterPolicy Administrator. を使用してライセンス ファイルをインポートできます。

複数のライセンス サーバーがある場合は、それぞれのライセンス サーバーに結び付けられたライセンスを含んだ複数のライセンス ファイルが必要となります。1 つの Silk Meter ライセンス サーバーで、複数の製品のライセンスを管理できます。

Silk Meter ライセンス サーバーの要件

Silk Meter をインストールする前に、リリース ノートを参照して、ライセンス サーバーが要件を満たしていることを確認します。

  • 以前のバージョンの Silk Meter をアンインストールする
    最新バージョンをインストールする前に、Silk Meter をアンインストールします。
  • ライセンス サーバー上へ Silk Meter をインストールする
    Silk Meter ライセンス管理ソフトウェアをインストールして、Silk 製品のライセンスを管理します。
親トピック: オンプレミス ライセンス
関連タスク
Silk Performer ライセンスの生成


以前のバージョンの Silk Meter をアンインストールする

Silk Meter の以前のバージョンがライセンス サーバーにインストールされている場合は、最新バージョンの Silk Meter をインストールする前にアンインストールする必要があります。

  1. スタート > すべてのプログラム > Silk > Silk Meter > Uninstall を選択します。
  2. Yes をクリックして Silk Meter をアンインストールします。 Remove Settings ダイアログ ボックスが開きます。
  3. No をクリックした場合には、Silk Meter の設定が保持されます。
    重要: 現在、Silk Meter ライセンス サーバー上に存在するライセンス ポリシーを維持するには、No をクリックしなければなりません。
  4. コンピュータを再起動します。
Silk Meter がアンインストールされ、最新バージョンの Silk Meter がインストール可能になりました。
親トピック: Silk Meter のインストール


ライセンス サーバー上へ Silk Meter をインストールする

Silk Meter をインストールする前に、以下の情報を確認してください。
  • ユーザー アカウントに管理者権限があること。
  • Silk Meter のインスタンスがライセンス サーバーにインストールされていないこと。
  1. 製品更新サイト を開いて、Silk Meter を検索します。
  2. 最新の Silk Meterインストール ファイル をダウンロードし保存します。
  3. EXE ファイルを保存した場所まで移動して、ダブルクリックします。 標準インストールの場合、デフォルトのオプションで Silk Meter インストール ウィザードの指示に従ってください。
    重要: セットアップによってコンピュータを再起動することを要求された場合は、コンピュータを再起動します。
親トピック: Silk Meter のインストール
関連タスク
Silk Performer ライセンスの生成


ライセンス設定を変更する

ライセンス設定ツール を使用して、ライセンス設定を変更できます。このユーティリティは、Silk Performer セットアップによってインストールされます。

  1. スタート > すべてのプログラム > Silk > Silk Performer21.0 > ライセンス設定ツール を選択します。
  2. アプリケーション リスト ボックスから、ライセンス設定を変更する製品を選択します。
  3. 使用するライセンス テクノロジとして、Silk Meter または AutoPass を選択します。
  4. Licensing mode では、Use a license server (ライセンス サーバーを使用する) または Use standalone licensing (スタンドアロン ライセンスを使用する) を選択します。
    注: スタンドアロン ライセンスは、Silk Meter の場合にのみ使用できます。
  5. ライセンス サーバーを使用する場合は、Silk Meter または AutoPass ライセンス サーバーのコンピュータ名を Host フィールドに入力します。 ネットワーク管理者が別のポートを定義したのでないかぎり、Port Number は変更しないでください。デフォルトのポート番号は、Silk Meter の場合は 5416 で、AutoPass の場合は 5814 になります。
  6. Apply をクリックして、ライセンス設定をアクティブ化します。
  7. ライセンス サーバーを使用する場合は、Test Connection をクリックして、指定したホストとポートでライセンス サーバーがアクセス可能かどうかを確認します。 接続に成功すると、Status フィールドに SUCCESS メッセージが表示されます。
    注: 場合により、ライセンス サーバー ホスト フィールドに、ライセンス サーバーの名前を licenseserver など単純な名前で指定すると、うまくいかない場合があります。Silk Meter ライセンス サーバーとの接続に失敗しました というメッセージ ボックスが開きます。この問題を解決するには、licenseserver.mycompany.com など、完全修飾名によるホスト名を再度指定してください。
  8. Close をクリックして、ライセンス設定を完了します。
親トピック: オンプレミス ライセンス


オンライン ライセンス

オンプレミス ライセンスのほかに、オンライン ライセンスを取得することもできます。これは、CloudBurst アカウントから Micro Focus クレジットを使用してライセンスを購入することを意味します。

負荷テストを実行する際に、オンプレミス ライセンスとオンライン ライセンスの両方を使用するか、オンプレミス ライセンスだけを使用するか、オンライン ライセンスだけを使用するかのいずれかを、Silk Performer で設定することができます。メニューから 設定 > システム をクリックし、ライセンス管理 タブをクリックして、ライセンス オプション で使用する設定を選択します。

所有するオンプレミス ライセンスの数を調べるには、メニューから ヘルプ をクリックし、Silk Performer のバージョン情報 をクリックします。たとえば、50 Virtual Users (Web) オンプレミス ライセンスが利用可能な状態で、計画している負荷テストでは 60 仮想ユーザーを必要とする場合には、オンライン ライセンスを使用すれば 10 仮想ユーザーの不足分をすばやく補うことができます。

追加の仮想ユーザーが急に必要になった場合や、一部の負荷テストで思いがけずに仮想ユーザーがさらに必要になった場合、あるいは、期間限定で大量の仮想ユーザーが必要になった場合などに、オンライン ライセンスは特に便利に使用できます。オンライン ライセンスは、簡単にすばやく仮想ユーザー数を増加することができます。

オンライン ライセンスは 24 時間有効です。ライセンスを最初に使用したときに、有効期間のカウントが始まります。オンライン ライセンスの料金についての情報は、「CloudBurst 負荷テストの料金」トピックの「仮想ユーザーのライセンス料金」セクションを参照してください。

親トピック: Silk Performer のライセンス


Silk Performer SOA Edition のライセンス

Silk Performer SOA Edition について

Silk Performer SOA Edition（Service Oriented Architecture）は、Web サービスやリモート Java/.NET コンポーネントなどのリモート サービスや API のテストに対象を絞ったエディションです。

SOA Edition のライセンスの動作について

SOA Edition は完全な Silk Performer インストールですが、SOA Edition ライセンスによって制限されます。このライセンスで、次のことが可能になります。
  • 最大 5 仮想ユーザーまでの負荷テストの実行
  • .NET または Java テストの実行
  • 基本的な Web および XML テストの実行

SOA Edition を使ってテストできる対象

リモート コンポーネントをテストするには、最初にテスト クライアントを作成する必要があります。テスト クライアントを作成するために、Silk Performer は次のアプローチを提供します。
  • Java Explorer を使ったビジュアル作成（プログラム不要）
  • .NET Explorer を使ったビジュアル作成（プログラム不要）
  • 既存のテスト クライアントの記録
  • JUnit テストのインポート
  • NUnit テストのインポート
  • Java クラスのインポート
  • .NET クラスのインポート
親トピック: Silk Performer のライセンス


Silk Performer のインストール

Silk Performer のインストールには、次の 3 種類のオプションがあります。
  • 完全インストール
  • エージェントのみのインストール
  • SOA Edition のインストール

グラフィカル ユーザー インターフェイス（GUI）形式の標準インストーラでは、インストール時にこれらのオプションを選択できます。GUI を表示せずにユーザー操作なしで Silk Performer をインストールすることもできます。この機能は、「サイレント モード インストール」と呼ばれます。

Silk Performer で負荷テストを実行するには、最低 1 台のコンピュータ上には、完全なソフトウェアをインストールする必要があります。完全インストールには、Workbench、ドキュメント、およびサンプル ファイルが含まれます。Workbench は、負荷テスト コントローラとエージェントを含む統合スクリプト開発環境です。他のコンピュータを負荷テスト エージェントとして使用するには、これらのコンピュータ上にエージェント ソフトウェアをインストールします。

  • 完全インストール
    負荷テストを行えるように、Silk Performer のフル システムを単一コンピュータ上にインストールします。
  • エージェントのみのインストール
    リモート コンピュータ上に Silk Performer エージェントをインストールすることにより、Silk Performer スクリプトを実行できます。
  • SOA Edition のインストール
    Java アプリケーションおよび .NET アプリケーションの負荷テストを行えるように、Silk Performer SOA Edition をインストールします。
  • サイレント モードでの Silk Performer のインストール
    サイレント モードでインストールすると、ユーザーが操作することなく、Silk Performer をインストールできます。
親トピック: インストール ガイド


完全インストール

Silk Performer の完全インストールでインストールされる機能は次のとおりです。

  • Silk Performer Workbench
  • Silk Performer エージェント
  • Performance Explorer
  • TrueLog Explorer
  • Java Explorer
  • .NET Explorer
  • すべてのサンプル
注: 問題が発生する可能性を避けるため、権限に制約のない管理者アカウントでインストールを実行してください。
  1. Silk Performer のインストーラをダウンロードしたら、ダブルクリックしてセットアップ ウィザードを開始します。
  2. 著作権情報 ページが開きます。次へ をクリックして 開始画面 を読み、再度 次へ をクリックします。
  3. 使用許諾契約 ページが開きます。使用許諾契約の条項を注意深くお読みください。使用許諾契約の条項に同意する場合は、使用許諾契約の条項に同意する チェック ボックスをオンにして、次へ をクリックします。
  4. 完全な Silk Performer 環境をインストールするには、Silk Performer 21.0 インストール セットを選択して、次へ をクリックします。
  5. インストールのカスタマイズ ページが表示されます。インストールするコンポーネントを選択します。
    • Silk Performer 21.0 Workbench ：このオプションを選択すると、Java および .NET アプリケーションの負荷テストを行うための完全な Silk Performer 環境がインストールされます。
    • 高度なインストール：このオプションを選択すると、Silk Performer とともにインストールするツールを選択できます。
  6. インストール フォルダの選択 ページが表示されます。インストール フォルダを指定します。
    1. 選択 をクリックします。
    2. インストール フォルダを指定します。
    3. OK をクリックします。
    4. デフォルトのインストール フォルダに戻す場合は、デフォルト フォルダに復元 をクリックします。
    注: 製品（たとえば、Silk Performer や TrueLog Explorer など）のサブフォルダは、自動的に作成されます。
    注: Silk Performer は、ローカル ドライブにインストールしなければなりません。
  7. デスクトップにショートカット アイコンを作成するかどうかを選択し、次へ をクリックします。
  8. インストール前の要約 ページで情報を確認します。
    • 設定を変更するには、前へ をクリックして、適切なページに戻ります。
    • 必要な設定を終えたら、インストール をクリックして、インストール処理を開始します。
    インストール中 ページの進捗バーにより、インストール処理の状況が分かります。
  9. ライセンス モードの選択 ページが開きます。 次のいずれかのオプションを選択して、次へ をクリックします。
    • 評価版 - Silk Performer の評価版をインストールすると、製品のすべての機能を 45 日間使用できます。使用は 10 仮想ユーザーに制限されています。後から、製品版へのアップグレードをご希望の場合には、営業担当までお問い合わせください。
    • ライセンス版 - Silk Performer ライセンスが必要な Silk Performer の無制限版をインストールします。
  10. インストール中に選択したコンポーネントによっては、ライセンス オプションの選択 ページが開く場合があります。ライセンス管理を必要とするコンポーネントをインストールしておらず、このページが開かない場合は、次のステップに進んでください。次のいずれかのオプションを選択して、次へ をクリックします。
    • ローカルまたはリモート サーバーを使用する：ライセンス サーバー ホスト フィールドに、Silk Meter または AutoPass がインストールされているコンピュータの名前を入力します。ネットワーク管理者が別のポートを定義したのでない限り、デフォルト ポート番号 (Silk Meter の場合は 5461 、AutoPass の場合は 5814) は変更しないでください。接続のテスト をクリックして、指定したホストとポートで ライセンス サーバーがアクセス可能かどうかを確認します。
      注: 場合により、ライセンス サーバー ホスト フィールドに、ライセンス サーバーの名前を licenseserver など単純な名前で指定すると、うまくいかない場合があります。Silk Meter ライセンス サーバーとの接続に失敗しました というメッセージ ボックスが開きます。この問題を解決するには、licenseserver.mycompany.com など、完全修飾名によるホスト名を再度指定してください。
    • スタンドアロン ライセンスを使用する：Silk Meter をスタンドアロンで実行します。選択 ボタンを使用して、Silk Meter ライセンス ファイルの場所を指定します。
  11. ネットワーク エミュレーション ドライバのインストール ページが開きます（このページは、Microsoft Windows 10 や Microsoft Windows Server 2016 では表示されません）。ネットワーク エミュレーション ドライバは、パケットの転送遅延や損失をシミュレートするために必要です。ネットワーク帯域幅のシミュレーションには必要ありません。次のいずれかのオプションを選択して、次へ をクリックします。
    • ネットワーク エミュレーション ドライバをインストールする
    • ネットワーク エミュレーション ドライバをインストールしない
    注: ネットワーク エミュレーション ドライバのインストールおよびアンインストール時に、ネットワークが一時的に切断されます。
    注: ネットワーク エミュレーション ドライバは、すべてのネットワーク アダプタと互換性があるわけではありません。互換性がない場合、マシンまたはネットワークにアクセスできなくなったり、ネットワーク速度が低下する場合があります。
    注: ネットワーク エミュレーション ドライバは、Microsoft Windows 10 および Microsoft Windows Server 2016 をサポートしません。
  12. インストール完了 ページが表示されます。完了 をクリックしてインストールを完了させます。
    注: インストール時にファイルを更新できなかった場合 (システム ライブラリが Windows によってロックされていた場合など)、コンピュータを再起動するようにプロンプトが表示されます。この場合、コンピュータを再起動しないと、Silk Performer へのアクセスに問題が発生する可能性があります。
    注: インストールに失敗した場合は、インストール フォルダにあるログ ファイル（Install.log）を参照できます。
親トピック: Silk Performer のインストール


エージェントのみのインストール

負荷テスト エージェントとして使用するコンピュータそれぞれに、Silk Performer エージェント ソフトウェアをインストールする必要があります。エージェント ソフトウェアは、リモート コンピュータで Silk Performer スクリプトを実行するために使用されます。

注: 問題が発生する可能性を避けるため、権限に制約のない管理者アカウントでインストールを実行してください。
  1. Silk Performer のインストーラをダウンロードしたら、ダブルクリックしてセットアップ ウィザードを開始します。
  2. 著作権情報 ページが開きます。次へ をクリックして 開始画面 を読み、再度 次へ をクリックします。
  3. 使用許諾契約 ページが開きます。使用許諾契約の条項を注意深くお読みください。使用許諾契約の条項に同意する場合は、使用許諾契約の条項に同意する チェック ボックスをオンにして、次へ をクリックします。
  4. Silk Performer 21.0 エージェント インストール セットをクリックして Silk Performer エージェント ソフトウェアをインストールし、次へ をクリックします。
  5. インストール フォルダの選択 ページが表示されます。インストール フォルダを指定します。
    1. 選択 をクリックします。
    2. インストール フォルダを指定します。
    3. OK をクリックします。
    4. デフォルトのインストール フォルダに戻す場合は、デフォルト フォルダに復元 をクリックします。
    注: 製品（たとえば、Silk Performer や TrueLog Explorer など）のサブフォルダは、自動的に作成されます。
    注: Silk Performer は、ローカル ドライブにインストールしなければなりません。
  6. デスクトップにショートカット アイコンを作成するかどうかを選択し、次へ をクリックします。
  7. インストール前の要約 ページで情報を確認します。
    • 設定を変更するには、前へ をクリックして、適切なページに戻ります。
    • 必要な設定を終えたら、インストール をクリックして、インストール処理を開始します。
    インストール中 ページの進捗バーにより、インストール処理の状況が分かります。
  8. ネットワーク エミュレーション ドライバのインストール ページが開きます（このページは、Microsoft Windows 10 や Microsoft Windows Server 2016 では表示されません）。ネットワーク エミュレーション ドライバは、パケットの転送遅延や損失をシミュレートするために必要です。ネットワーク帯域幅のシミュレーションには必要ありません。次のいずれかのオプションを選択して、次へ をクリックします。
    • ネットワーク エミュレーション ドライバをインストールする
    • ネットワーク エミュレーション ドライバをインストールしない
    注: ネットワーク エミュレーション ドライバのインストールおよびアンインストール時に、ネットワークが一時的に切断されます。
    注: ネットワーク エミュレーション ドライバは、すべてのネットワーク アダプタと互換性があるわけではありません。互換性がない場合、マシンまたはネットワークにアクセスできなくなったり、ネットワーク速度が低下する場合があります。
    注: ネットワーク エミュレーション ドライバは、Microsoft Windows 10 および Microsoft Windows Server 2016 をサポートしません。
  9. インストール完了 ページが表示されます。完了 をクリックしてインストールを完了させます。
    注: インストール時にファイルを更新できなかった場合 (システム ライブラリが Windows によってロックされていた場合など)、コンピュータを再起動するようにプロンプトが表示されます。この場合、コンピュータを再起動しないと、Silk Performer へのアクセスに問題が発生する可能性があります。
    注: インストールに失敗した場合は、インストール フォルダにあるログ ファイル（Install.log）を参照できます。
親トピック: Silk Performer のインストール


SOA Edition のインストール

Silk Performer SOA Edition でインストールされる機能は次のとおりです。

  • SOA Workbench
  • Silk Performer エージェント
  • Performance Explorer
  • TrueLog Explorer
  • Java Explorer
  • .NET Explorer
  • Java のサンプル
  • .NET のサンプル
注: 問題が発生する可能性を避けるため、権限に制約のない管理者アカウントでインストールを実行してください。
  1. Silk Performer のインストーラをダウンロードしたら、ダブルクリックしてセットアップ ウィザードを開始します。
  2. 著作権情報 ページが開きます。次へ をクリックして 開始画面 を読み、再度 次へ をクリックします。
  3. 使用許諾契約 ページが開きます。使用許諾契約の条項を注意深くお読みください。使用許諾契約の条項に同意する場合は、使用許諾契約の条項に同意する チェック ボックスをオンにして、次へ をクリックします。
  4. Silk Performer 21.0 SOA Edition インストール セットを選択して、次へ をクリックします。
  5. インストールのカスタマイズ ページが表示されます。インストールするコンポーネントを選択し、次へ をクリックします。
    • Silk Performer 21.0 SOA Edition：Java アプリケーションおよび .NET アプリケーションの負荷テストを行えるように完全な Silk Performer SOA Edition 環境をインストールする場合は、このオプションを選択します。
    • 高度なインストール：Java アプリケーションの負荷テストを行うツールや .NET アプリケーションをテストするためのツールを個別にインストールする場合は、このオプションを選択します。
  6. インストール フォルダの選択 ページが表示されます。インストール フォルダを指定します。
    1. 選択 をクリックします。
    2. インストール フォルダを指定します。
    3. OK をクリックします。
    4. デフォルトのインストール フォルダに戻す場合は、デフォルト フォルダに復元 をクリックします。
    注: 製品（たとえば、Silk Performer や TrueLog Explorer など）のサブフォルダは、自動的に作成されます。
    注: Silk Performer は、ローカル ドライブにインストールしなければなりません。
  7. デスクトップにショートカット アイコンを作成するかどうかを選択し、次へ をクリックします。
  8. インストール前の要約 ページで情報を確認します。
    • 設定を変更するには、前へ をクリックして、適切なページに戻ります。
    • 必要な設定を終えたら、インストール をクリックして、インストール処理を開始します。
    インストール中 ページの進捗バーにより、インストール処理の状況が分かります。
  9. ライセンス モードの選択 ページが開きます。 次のいずれかのオプションを選択して、次へ をクリックします。
    • 評価版 - Silk Performer の評価版をインストールすると、製品のすべての機能を 45 日間使用できます。使用は 10 仮想ユーザーに制限されています。後から、製品版へのアップグレードをご希望の場合には、営業担当までお問い合わせください。
    • ライセンス版 - Silk Performer ライセンスが必要な Silk Performer の無制限版をインストールします。
  10. インストール中に選択したコンポーネントによっては、ライセンス オプションの選択 ページが開く場合があります。ライセンス管理を必要とするコンポーネントをインストールしておらず、このページが開かない場合は、次のステップに進んでください。次のいずれかのオプションを選択して、次へ をクリックします。
    • ローカルまたはリモート サーバーを使用する：ライセンス サーバー ホスト フィールドに、Silk Meter または AutoPass がインストールされているコンピュータの名前を入力します。ネットワーク管理者が別のポートを定義したのでない限り、デフォルト ポート番号 (Silk Meter の場合は 5461 、AutoPass の場合は 5814) は変更しないでください。接続のテスト をクリックして、指定したホストとポートで ライセンス サーバーがアクセス可能かどうかを確認します。
      注: 場合により、ライセンス サーバー ホスト フィールドに、ライセンス サーバーの名前を licenseserver など単純な名前で指定すると、うまくいかない場合があります。Silk Meter ライセンス サーバーとの接続に失敗しました というメッセージ ボックスが開きます。この問題を解決するには、licenseserver.mycompany.com など、完全修飾名によるホスト名を再度指定してください。
    • スタンドアロン ライセンスを使用する：Silk Meter をスタンドアロンで実行します。選択 ボタンを使用して、Silk Meter ライセンス ファイルの場所を指定します。
  11. ネットワーク エミュレーション ドライバのインストール ページが開きます（このページは、Microsoft Windows 10 や Microsoft Windows Server 2016 では表示されません）。ネットワーク エミュレーション ドライバは、パケットの転送遅延や損失をシミュレートするために必要です。ネットワーク帯域幅のシミュレーションには必要ありません。次のいずれかのオプションを選択して、次へ をクリックします。
    • ネットワーク エミュレーション ドライバをインストールする
    • ネットワーク エミュレーション ドライバをインストールしない
    注: ネットワーク エミュレーション ドライバのインストールおよびアンインストール時に、ネットワークが一時的に切断されます。
    注: ネットワーク エミュレーション ドライバは、すべてのネットワーク アダプタと互換性があるわけではありません。互換性がない場合、マシンまたはネットワークにアクセスできなくなったり、ネットワーク速度が低下する場合があります。
    注: ネットワーク エミュレーション ドライバは、Microsoft Windows 10 および Microsoft Windows Server 2016 をサポートしません。
  12. インストール完了 ページが表示されます。完了 をクリックしてインストールを完了させます。
    注: インストール時にファイルを更新できなかった場合 (システム ライブラリが Windows によってロックされていた場合など)、コンピュータを再起動するようにプロンプトが表示されます。この場合、コンピュータを再起動しないと、Silk Performer へのアクセスに問題が発生する可能性があります。
    注: インストールに失敗した場合は、インストール フォルダにあるログ ファイル（Install.log）を参照できます。
親トピック: Silk Performer のインストール


サイレント モードでの Silk Performer のインストール

セットアップを使って、ユーザーの操作なしで Silk Performer をインストールすることができます。この機能は「サイレント モード インストール」と呼ばれ、特に、LAN やインターネット上で、リモート インストール ツールなどを介してソフトウェアを配布する場合などに便利です。

注: 問題が発生する可能性を避けるため、権限に制約のない管理者アカウントでインストールを実行してください。
  1. ファイル マネージャでインストール ファイルを保存したフォルダを開きます。
  2. このフォルダに新しいテキスト ファイルを作成し、silent.properties という名前に変更してからテキスト エディタで開きます。
  3. 次のテキスト行をコピーしファイルに貼り付けます。
    INSTALLER_UI=silent

#Choose locale
#-------------
INSTALLER_LOCALE=en

#Choose installation set
#-----------------------
CHOSEN_INSTALL_SET=ENTERPRISE

#Choose installation folder
#--------------------------
#USER_INSTALL_DIR=C:\\Silk
CREATE_DESKTOP_ICON=1

#Choose licensing mode
#---------------------
USER_INPUT_RESULT_EVAL=0
USER_INPUT_RESULT_FULL=1

#Licensing settings
#-------------------------
SILKMETER_RUN_AUTOPASS_LICENSING=false
SILKMETER_RUN_STANDALONE=false
SILKMETER_LICENSESERVER_HOST=localhost
SILKMETER_LICENSESERVER_PORT=5461
AUTOPASS_LICENSESERVER_HOST=localhost
AUTOPASS_LICENSESERVER_PORT=5814

#User data collection
#--------------------
ALLOW_USER_DATA_COLLECTION=1

#Network emulation driver installation
#-------------------------------------
#Remove the comment in the following line to allow the driver installation
#INSTALL_NETWORKEMULATION_DRIVER=true
  4. 必要に応じてパラメータを変更します。
    • INSTALLER_LOCALE：言語を指定します。
      • en：英語版をインストールします。これは、デフォルトの設定です。
      • ja：日本語版をインストールします。
      • zh_CN：簡体字中国語版をインストールします。
    • CHOSEN_INSTALL_SET：以下のインストール セットのいずれか 1 つを指定します。
      • ENTERPRISE：Silk Performer 環境を完全インストールします。
      • SOA：Silk Performer SOA Edition をインストールします。
      • エージェント：Silk Performer エージェント ソフトウェアのみをインストールします。
    • USER_INSTALL_DIR：Silk をインストールするフォルダを指定します。フォルダの区切り文字には、2 重のバックスラッシュ (\\) を使用してください。デフォルトの設定は、C:\\Program Files\\Silk（32 ビット OS）、または C:\\Program Files (x86)\\Silk（64 ビット OS）です。
    • CREATE_DESKTOP_ICON：デスクトップ アイコンを作成する場合は 1、作成しない場合は 0 に設定します。デフォルト値は、1 です。
    • USER_INPUT_RESULT_EVAL：1 に設定して Silk Performer の評価版をインストールすると、製品のすべての機能を 45 日間使用できます。
    • USER_INPUT_RESULT_FULL：1 に設定して Silk Performer の無制限版をインストールします (Silk Performer ライセンスが必要です)。
      注: USER_INPUT_RESULT_FULL または USER_INPUT_RESULT_EVAL のいずれかを 1 に設定する必要があります。その他は 0 に設定してください。
    • SILKMETER_RUN_AUTOPASS_LICENSING：AutoPass ライセンス テクノロジを使用する場合は、true に設定します。
    • SILKMETER_RUN_STANDALONE：スタンドアロン ライセンスを使用する場合は、true に設定します。Silk Meter または AutoPass ライセンス サーバーを使用する場合は、false に設定します。
    • SILKMETER_LICENSESERVER_HOST：Silk Meter ライセンス サーバーをホストするコンピュータの名前を指定します。SILKMETER_RUN_STANDALONE を true に設定した場合は、このパラメータは無視されます。
    • SILKMETER_LICENSESERVER_PORT：Silk Meter ライセンス サーバーがリスンするポート番号を指定します。SILKMETER_RUN_STANDALONE を true に設定した場合は、このパラメータは無視されます。
    • AUTOPASS_LICENSESERVER_HOST：AutoPass ライセンス サーバーをホストするコンピュータの名前を指定します。SILKMETER_RUN_STANDALONE を true に設定した場合は、このパラメータは無視されます。
    • AUTOPASS_LICENSESERVER_PORT：AutoPass ライセンス サーバーがリスンするポート番号を指定します。SILKMETER_RUN_STANDALONE を true に設定した場合は、このパラメータは無視されます。
    • ALLOW_USER_DATA_COLLECTION：0 に設定すると、ユーザー データの収集が無効になります。デフォルト値は、1 です。有効にすると、Silk Performer は、ツールの機能の使用状況に関するデータを収集します。ユーザーを特定する情報は一切含まれません。 収集されたデータは、R&D チームに送信され、今後の開発における製品改良の参考として使用させていただきます。
    • INSTALL_NETWORKEMULATION_DRIVER：true に設定すると、ネットワーク エミュレーション機能がインストールされます。ネットワーク エミュレーションで問題が発生し、この機能が必要ない場合は、このインストールの手順は省略できます。デフォルト値は、false です。
      注: ネットワーク エミュレーション ドライバのインストールおよびアンインストール時に、ネットワークが一時的に切断されます。
      注: ネットワーク エミュレーション ドライバは、すべてのネットワーク アダプタと互換性があるわけではありません。互換性がない場合、マシンまたはネットワークにアクセスできなくなったり、ネットワーク速度が低下する場合があります。
      注: ネットワーク エミュレーション ドライバは、Microsoft Windows 10 および Microsoft Windows Server 2016 をサポートしません。
  5. ファイルを保存して閉じます。
  6. コマンド ライン プロンプトを開いて、セットアップ ファイルと properties ファイルのあるフォルダに移動します。
  7. 次のコマンドを入力します。
    silkperformer-<version>.exe -f c:\<your directory>\silent.properties
    注: インストーラ パッケージの実際のバージョン番号で <version> を置き換えてください。

インストールが完了したかどうかを確認するには、Windows タスク マネージャ を開いて、プロセス タブをクリックします。Silk Performer インストール プロセスが表示されなくなったら、インストールは完了です。

Silk Performer をサイレント モードでアンインストールするには、コマンド ライン プロンプトを開き、次のフォルダに移動します：
<Silk installation folder>\Silk Performer 21.0\_Silk Performer 21.0_installation
続いて、次のコマンドを入力します。
"Change Silk Performer 21.0 Installation.exe" -i silent
親トピック: Silk Performer のインストール


オプション コンポーネントのインストール

  • TrueLog Explorer のインストール
  • サイレント モードでの TrueLog Explorer のインストール
    サイレント モードでインストールすると、ユーザーが操作することなく、TrueLog Explorer をインストールできます。
  • ネットワーク エミュレーション ドライバのインストール
    ネットワーク エミュレーション ドライバを手動でインストールおよびアンインストールする方法について説明します。
  • Visual Studio 拡張機能のインストール
    Visual Studio で Silk Performer を使用するには、Visual Studio 拡張機能をインストールします。
  • Eclipse プラグインのインストール
    Eclipse で Silk Performer を使用するために Eclipse プラグインをインストールします。
  • ShopIt V 6.0 のインストール
    ShopIt V 6.0 は、Silk Performer が提供するサンプル Web アプリケーションです。
親トピック: インストール ガイド


TrueLog Explorer のインストール

TrueLog Explorer のインストーラの名前は、silktruelogexplorer-210.exe です。TrueLog Explorer のインストールは、セットアップを開始して、セットアップ ウィザードが表示する手順に従ってください。
親トピック: オプション コンポーネントのインストール


サイレント モードでの TrueLog Explorer のインストール

TrueLog Explorer のセットアップは、サイレント モードでインストールを行うこともできます。

注: 問題が発生する可能性を避けるため、権限に制約のない管理者アカウントでインストールを実行してください。
  1. ファイル マネージャでインストール ファイルを保存したフォルダを開きます。
  2. このフォルダに新しいテキスト ファイルを作成し、silent.properties という名前に変更してからテキスト エディタで開きます。
  3. 次のテキスト行をコピーしファイルに貼り付けます。
    INSTALLER_UI=silent

#USER_INSTALL_DIR=C:\\Silk
#CREATE_DESKTOP_ICON=0
  4. 必要に応じて次のパラメータを変更します。パラメータを削除したり、先頭にハッシュ文字（#）を追加してコメントにすると、そのデフォルト値が使用されます。
    • USER_INSTALL_DIR：Silk をインストールするフォルダを指定します。フォルダの区切り文字には、2 重のバックスラッシュ (\\) を使用してください。デフォルトの設定は、C:\\Program Files\\Silk（32 ビット OS）、または C:\\Program Files (x86)\\Silk（64 ビット OS）です。
    • CREATE_DESKTOP_ICON：デスクトップ アイコンを作成する場合は 1、作成しない場合は 0 に設定します。デフォルト値は、1 です。
  5. ファイルを保存して閉じます。
  6. コマンド ライン プロンプトを開いて、セットアップ ファイルと properties ファイルのあるフォルダに移動します。
  7. 次のコマンドを入力します。
    silktruelogexplorer-210.exe -f silent.properties
インストールが完了したかどうかを確認するには、Windows タスク マネージャ を開いて、プロセス タブをクリックします。TrueLog Explorer インストール プロセスが表示されなくなったら、インストールは完了です。
親トピック: オプション コンポーネントのインストール


ネットワーク エミュレーション ドライバのインストール

ネットワーク エミュレーション ドライバは、パケットの転送遅延や損失をシミュレートするために必要です。ネットワーク帯域幅のシミュレーションには必要ありません。

  1. 管理者特権でコマンド プロンプトを開きます。 メニューでコマンド プロンプトを右クリックし、管理者として実行 をクリックします。
  2. 次のようなコマンドを実行して、Silk Performer のインストール フォルダに移動します： c:\> cd "c:\Program Files (x86)\Silk\Silk Performer 21.0\NetworkDriver"
  3. 次のコマンドを実行します。
    • ネットワーク エミュレーション ドライバを手動でインストールするには： installNetworkDriver.exe -i netipfw.inf
    • ネットワーク エミュレーション ドライバを手動でアンインストールするには： installNetworkDriver.exe -u
注: ネットワーク エミュレーション ドライバのインストールおよびアンインストール時に、ネットワークが一時的に切断されます。
注: ネットワーク エミュレーション ドライバは、すべてのネットワーク アダプタと互換性があるわけではありません。互換性がない場合、マシンまたはネットワークにアクセスできなくなったり、ネットワーク速度が低下する場合があります。
注: ネットワーク エミュレーション ドライバは、Microsoft Windows 10 および Microsoft Windows Server 2016 をサポートしません。
親トピック: オプション コンポーネントのインストール


Visual Studio 拡張機能のインストール

デフォルトでは、Silk Performer インストーラは Silk Performer Visual Studio 拡張機能をインストールしません。Silk Performer .NET Framework プロジェクトを Visual Studio で作成し、実行するには、拡張機能をインストールする必要があります。

  1. Silk Performer のインストール ディレクトリで、Templates\DotNet を開きます。
  2. SpVsExtension.vsix ファイルを実行します。
親トピック: オプション コンポーネントのインストール
親トピック: Silk Performer Visual Studio Extension


Eclipse プラグインのインストール

Eclipse プラグインは、製品更新サイト からダウンロードできます。

あらかじめ、Eclipse SDK と Silk Performer がコンピュータにインストールされている必要があります。インストールを開始する前に、少なくとも一度は Silk Performer を実行してください。

  1. 標準的な Eclipse プラグインのインストール手順を使用して、Eclipse SDK ( ヘルプ > 新規ソフトウェアのインストール ) からプラグインをインストールします。 Eclipse にプラグインをインストールする方法について不明な点がある場合は、Eclipse のドキュメントを参照してください。
  2. 追加するサイトの確認が表示されたら、Silk PerformerExtras フォルダに含まれるサイトを指定します。 Extras フォルダは Silk Performer インストール フォルダにあります。
  3. Silk PerformerExtras ディレクトリ内の Eclipse プラグイン ディレクトリ (.../Extras/eclipseplugin/) を参照して選択します。
  4. カテゴリーで項目を分類 チェック ボックスがオンになっていないことを確認します。
  5. Silk Performer Eclipse プラグインが一覧表示されたら、新しいローカル サイトのプラス記号をクリックして、内容を展開します。
  6. プラグイン フィーチャー (Silk Performer Feature のチェック ボックスをオンにして、次へ をクリックします。 インストール ダイアログが開きます。
  7. 次へ をクリックします。 インストール ダイアログに使用許諾契約の説明が表示されます。
  8. 使用許諾契約の条件に同意する場合は、使用条件の条項に同意します チェック ボックスをオンにして、終了 をクリックします。
  9. はい をクリックして、Eclipse ワークベンチを再起動します。
    Eclipse ワークベンチが再起動すると、Eclipse ワークベンチに Silk Performer のメニュー項目が表示されます。
  • Eclipse Plug-In が Microsoft Windows 8 および Microsoft Windows Server 2012 上で機能しない
親トピック: オプション コンポーネントのインストール
親トピック: Eclipse プラグイン


ShopIt V 6.0 のインストール

Silk Performer には、ShopIt V 6.0 というサンプル Web アプリケーションがあります。ShopIt V 6.0 は、擬似的なオンライン ショッピングのためのキャンピング用品カタログを持つ、簡単な e コマースの Web サイト をシミュレートするものです。このアプリケーションを使用すると、Silk Performer の Web アプリケーション機能を試すことができます。ShopIt V 6.0 は、不明な Web リンク (商品の在庫切れが原因) やセッション エラーなどのエラーを生成するように作られています。

ShopIt V 6.0 をインストールする前に『リリース ノート』を参照し、お使いのシステムで ShopIt V 6.0 がサポートされているか確認してください。

ShopIt V 6.0 のセットアップは、製品更新サイト からダウンロードできます。

  1. ShopItV60.exe ファイルをダブルクリックします。
    注: IIS (Internet Information Server) がコンピュータにインストールされている必要があります。IIS 7 では、Role Services ASP と ISAPI Extensions もインストールします。
  2. Welcome ページが開きます。次へ をクリックします。
  3. Choose Destination Location ページが開きます。デフォルトのインストール ディレクトリを変更する場合は、参照 をクリックしてフォルダを選択し、OK をクリックします。次へ をクリックします。
  4. Web アプリケーションの仮想ディレクトリの名前を入力します。これは Web サーバー上に作成されるディレクトリの名前です。次へ をクリックします。
  5. セットアップによりファイルがインストールされ、IIS で ShopIt V 6.0 Web アプリケーションが実行されるように設定されます。
  6. インストール完了 ダイアログが表示されます。完了 をクリックします。
  7. IIS 7 の場合、仮想ディレクトリを IIS に手動で追加します。
    • エイリアス：ShopItV60
    • 物理パス：ShopIt のインストール ディレクトリ
    注: ASP が IIS で利用可能なことを確認してください。
これで、ShopIt V 6.0 Web アプリケーションが使用できる状態になりました。選択した Web ブラウザで次の URL を入力して、ShopIt V 6.0 にアクセスできます。
http://<computer name>/<virtual directory name>/

コンピュータ名が JohnSmith で、仮想ディレクトリのデフォルト値 ShopItV60 を変更していない場合、URL は次のようになります。

http://JohnSmith/ShopItV60/
親トピック: オプション コンポーネントのインストール
親トピック: 典型的な Web アプリケーションのサンプル


リモート コンピュータ上でエージェント ソフトウェアのインストール

Silk Performer にはコマンドライン ツールが付属しており、ユーザーの Windows ドメインまたはワークグループ内のリモート マシン上で Silk Performer エージェント ソフトウェアをセットアップできます。

リモート インストール処理を問題なく行うため、リモート マシンで次の事項を確認してください。
  • Windows ファイアウォールが無効化されていること
  • ユーザー アカウント制御を無効にするか、リモート インストールで組み込みの管理者アカウントを使用すること
  • リモート インストール
    リモート エージェント コンピュータ上のエージェント ソフトウェアをインストールできるコマンドライン ツールについて説明します。
  • シナリオ
    さまざまなネットワーク環境において、リモート エージェントのセットアップを利用して、Silk Performer エージェント ソフトウェアをリモート コンピュータへインストール、再インストール、およびアンインストールする方法について説明します。
  • トラブルシューティング
    リモート エージェントのセットアップ中に表示される可能性があるエラー メッセージと、その解決 (回避) 方法の一覧を示します。
親トピック: インストール ガイド


リモート インストール

Silk Performer コマンド ライン ツールを使用すると、リモート エージェント コンピュータ上のエージェント ソフトウェアをインストールおよびアンインストールできます。リモート エージェント コンピュータは、インターネット上の任意の場所に配置することができます。

コマンド ライン ツールに利用できるすべてのパラメータを表示するには、コマンド ラインを開き、インストール フォルダに移動して perfRsManager.exe を実行します。

注: コマンドライン ツールは Silk Performer のインストール サブディレクトリから起動する必要があります。

perfRsManager のパラメータ

以下のパラメータを利用できます。

注: -mode および -host は必須です。その他のパラメータはすべてオプションです。
-mode
  • -i：エージェント ソフトウェアをリモート エージェント コンピュータにインストールします。
  • -u：エージェント ソフトウェアをリモート エージェント コンピュータで更新します。
  • -r：エージェント ソフトウェアをリモート エージェント コンピュータからアンインストールします。
-host <hostname> | リモート エージェント コンピュータのホスト名または IP アドレス。
-log | インストール ログ ファイルを \Users\Public\Documents\Silk Performer <version>\Logs ディレクトリに出力します。ログ ファイルは、perfRsManager_<hostname>.log という名前になります。例：エージェント ソフトウェアを lab15 というホストにインストールすると、ログ ファイルの名前は perfRsManager_lab15.log になります。
-user <user> | Windows ドメイン ユーザーの名前。リモート アクセスでは、リモート エージェント コンピュータで管理者権限を持つユーザーを指定する必要があります。
-domain <domain> | 指定されたユーザーが属する Windows ドメインの名前またはホスト名。ユーザーが、インストールを起動したコンピュータと同じドメインに属する場合、このパラメータを省略します。
-userAgent <user> | エージェントを実行する Windows ユーザー アカウント名。
-pwdUserAgent <password> | リモート コンピュータにログインする Windows ユーザー アカウントのパスワード。
-pwdUser <password> | 指定したユーザーのパスワード。パスワードが不要な場合は、このパラメータを省略できます。
-port <port> | リモート エージェント コンピュータが応答するポートの番号。デフォルトにポート番号は、19200 です。
-ssl | リモート エージェント コンピュータとの通信に SSL を使用します。SSL を使用する場合、リモート エージェント コンピュータとは、セキュアな接続のためのデフォルト ポート (ポート 19201) で通信します。エージェント コンピュータがそれとは別のポートに応答する場合は、そのポート番号を -port パラメータで指定する必要があります。
-httpProxy <name> <port> | リモート コンピュータとの通信に介在する HTTP プロキシの名前とポート番号。
-socksProxy <name> <port> | リモート コンピュータとの通信に介在する SOCKS プロキシの名前とポート番号。
-pwdService <password> | リモート コンピュータ上のエージェント ソフトウェアを許可のないアクセスから保護するためのパスワード。
-userAgent <user> | エージェントを実行するユーザー。
-pwdUserAgent <password> | リモート エージェント コンピュータにログインするパスワード。
-package <package file name> | リモート エージェント インストーラ パッケージ ファイルの名前。このパラメータは、リモート エージェントにホットフィックスをインストールする場合に設定する必要があります。また、ホットフィックス ファイルの EXE の名前と一致させる必要があります。ホットフィックス パッケージが perfRsManager と同じフォルダにない場合は、完全修飾パスで名前を指定してください。
-silkInstallPath <path> | リモート エージェント コンピュータのターゲット インストール パス。例：-silkInstallPath "C:\Silk\Silk Performer"
-silkWorkingDir <path> | リモート エージェント コンピュータの作業ディレクトリ。例：-silkWorkingDir "C:\WorkingDir"
-installNetworkEmulationDriver | ネットワーク エミュレーション機能をインストールするには、このパラメータを使用します。
-stopSilkExecutionServer | Silk 実行サーバーが実行中の場合には、停止してから開始します。

使用例

perfRsManager -i -host deepblue
perfRsManager -i -host deepblue -log -domain intra
              -user nobody -pwdUser 1234
perfRsManager -i -host deepblue -user alex -domain test
              -pwdUser 1234
perfRsManager -i -host 192.168.20.11
perfRsManager -i -host deepblue -log -ssl -port 19251
              -socksproxy 192.168.20.111 1080
              -pwdService 1rt34xy
perfRsManager -r -host deepblue -httpproxy proxy1 8080 -log
perfRSManager -u -host deepblue -user alex -pwdUser 1234 -domain test
              -package "c:\temp\silkperformer-21.0-hf1.exe"
親トピック: リモート コンピュータ上でエージェント ソフトウェアのインストール


シナリオ

このセクションでは、さまざまなネットワーク環境において、リモート エージェントのセットアップを利用して、Silk Performer エージェント ソフトウェアをリモート コンピュータへインストール、再インストール、およびアンインストールする方法について説明します。

  • シナリオ 1：コントローラとエージェント コンピュータが同一の Windows ドメインまたはワークグループにある。
  • シナリオ 2：コントローラとエージェント コンピュータが別の Windows ドメインまたはワークグループにある。
  • シナリオ 3：コントローラ コンピュータを管理するユーザーはローカルにログオンし、それゆえ、ドメインにはログオンしない。
  • シナリオ 4：別の LAN にあるコントローラとエージェント コンピュータがインターネットを利用して接続されている。
  • シナリオ 5：別の LAN にあるコントローラとエージェント コンピュータがインターネットを利用して接続されている。少なくとも、一方の LAN はファイアウォールで保護されており、コントローラとエージェント コンピュータは HTTP プロキシ経由で通信する必要がある。
  • シナリオ 6：別の LAN にあるコントローラとエージェント コンピュータがインターネットを利用して接続されている。少なくとも、一方の LAN はファイアウォールで保護されており、コントローラとエージェント コンピュータは SOCKS プロキシ経由で通信する必要がある。
  • シナリオ 1：1 つのドメインまたはワークグループ
    コントローラとエージェント コンピュータが同一の Windows ドメインまたはワークグループにあるシナリオについて説明します。
  • シナリオ 2：2 つのドメインまたはワークグループ
  • シナリオ 3：ユーザーがローカルにログオンする
    コントローラ コンピュータにローカルでログオンし、ドメインにはログオンしないユーザーのシナリオについて説明します。
  • シナリオ 4：インターネットを利用して接続された 2 つの LAN
    インターネットを介して通信する 2 つの LAN のシナリオについて説明します。
  • シナリオ 5：HTTP プロキシを利用して接続された 2 つの LAN
    HTTP プロキシを介して通信する 2 つの LAN のシナリオについて説明します。
  • シナリオ 6：SOCKS プロキシを利用して接続された 2 つの LAN
    SOCKS プロキシを介して通信する 2 つの LAN のシナリオについて説明します。
親トピック: リモート コンピュータ上でエージェント ソフトウェアのインストール


シナリオ 1：1 つのドメインまたはワークグループ

シナリオ 1 では、コントローラとエージェント コンピュータが同一の Windows ドメインまたはワークグループにあります。

コントローラ コンピュータから、リモート エージェント コンピュータ (<agent name>) 上の Silk Performer エージェント ソフトウェアをインストール、再インストール、またはアンインストールできます。

エージェント ソフトウェアをインストールするには、次のコマンドを実行します。
PerfRsManager -i -host <agent name> -log

このコマンドによりリモート コンピュータから設定や再起動ができるようにエージェント コンピュータをセットアップします。

エージェント ソフトウェアを再インストールもしくは削除するには、エージェント ソフトウェアが応答するポート (<port number>) を知っておく必要があります。デフォルトでは、エージェントはポート 19200 を使用します。エージェント ソフトウェアを許可のないアクセスから保護するために、パスワードを使っている場合には、それも知っておかなければなりません (<password>)。

エージェント ソフトウェアをアップグレードするには、次のコマンドを実行します。
PerfRsManager -i -host <agent name> -port <port number>
              -pwdService <password> -log

エージェント ソフトウェアがデフォルト ポートで応答する場合には、-port パラメータを省略できます。

前述のコマンドは、インストールまたはアンインストール プロセスに関する詳細情報を含むログ ファイルを生成します。これらのログ ファイルを生成しない場合は、-log パラメータを省略します。

親トピック: シナリオ


シナリオ 2：2 つのドメインまたはワークグループ

コントローラとエージェント コンピュータが別の Windows ドメインまたはワークグループにあるシナリオについて説明します。

シナリオ 2 では、コントローラとエージェント コンピュータが別の Windows ドメインまたはワークグループにあります。

コントローラ コンピュータから、リモート ドメインまたはワークグループ (<domain name>) にあるエージェント コンピュータ (<agent name>) 上の Silk Performer エージェント ソフトウェアをインストール、再インストール、およびアンインストールできます。エージェント ソフトウェアをインストールするには、エージェント コンピュータがあるドメインまたはワークグループにおいて管理者権限のあるユーザー (とそのパスワード) を指定する必要があります (<user name>、<password>)。

エージェント ソフトウェアをインストールするには、次のコマンドを実行します。
PerfRsManager -i -host <agent name> -user <user name>
              -domain <domain name> -pwdUser <password> -log

このコマンドによりリモート コンピュータから設定や再起動ができるようにエージェント コンピュータをセットアップします。

エージェント ソフトウェアを再インストールもしくは削除するには、エージェント ソフトウェアが応答するポート (<port number>) を知っておく必要があります。デフォルトでは、エージェントはポート 19200 を使用します。エージェント ソフトウェアを許可のないアクセスから保護するために、パスワードを使っている場合には、それも知っておかなければなりません (<password>)。

エージェント ソフトウェアを再インストールするには、次のコマンドを実行します。
PerfRsManager -i -host <agent name> -port <port number>
              -pwdService <password> -log

エージェント ソフトウェアがデフォルト ポートで応答する場合には、-port パラメータを省略できます。

コンピュータからエージェント ソフトウェアをアンインストールするには、次のコマンドを実行します。
PerfRsManager -r -host <agent name> -port <port number>
              -pwdService <password> -log

エージェント ソフトウェアがデフォルト ポートで応答する場合には、-port パラメータを省略できます。

前述のコマンドは、インストールまたはアンインストール プロセスに関する詳細情報を含むログ ファイルを生成します。これらのログ ファイルを生成しない場合は、-log パラメータを省略します。

親トピック: シナリオ


シナリオ 3：ユーザーがローカルにログオンする

シナリオ 3 では、ユーザーは、コントローラ コンピュータにローカルでログオンし、ドメインにはログオンしません。

コントローラ コンピュータから、リモート ドメインまたはワークグループ (<domain name>) にあるエージェント コンピュータ (<agent name>) 上の Silk Performer エージェント ソフトウェアをインストール、再インストール、およびアンインストールできます。 エージェント ソフトウェアをインストールするには、エージェント コンピュータがあるドメインまたはワークグループにおいて管理者権限のあるユーザー (user name) と、そのパスワード (password) を指定する必要があります。

エージェント ソフトウェアをインストールまたは再インストールするには、次のコマンドを実行します。
PerfRsManager -i -host <agent name> -user <user name>
              -domain <domain name> -log

このコマンドによりリモート コンピュータから設定や再起動ができるようにエージェント コンピュータをセットアップします。

エージェント ソフトウェアを再インストールもしくは削除するには、エージェント ソフトウェアが応答するポート (<port number>) を知っておく必要があります。デフォルトでは、エージェントはポート 19200 を使用します。エージェント ソフトウェアを許可のないアクセスから保護するために、パスワードを使っている場合には、それも知っておかなければなりません (<password>)。

エージェント ソフトウェアをアンインストールするには、次のコマンドを実行します。
PerfRsManager -r -host <agent name> -port <port number>
              -pwdService <password> -log

エージェント ソフトウェアがデフォルト ポートで応答する場合には、-port パラメータを省略できます。

前述のコマンドは、インストールまたはアンインストール プロセスに関する詳細情報を含むログ ファイルを生成します。これらのログ ファイルを生成しない場合は、-log パラメータを省略します。

親トピック: シナリオ


シナリオ 4：インターネットを利用して接続された 2 つの LAN

シナリオ 4 では、別の LAN にあるコントローラとエージェント コンピュータがインターネットに接続されています。

コントローラ コンピュータから、リモート エージェント コンピュータ (<agent name>) 上の Silk Performer エージェント ソフトウェアをインストールまたはアンインストールできます。

エージェント ソフトウェアが応答するポート (<port number>) を知っておく必要があります。 デフォルトでは、エージェントは、非セキュア通信にポート 19200、セキュア通信にポート 19201 を使用します。エージェント ソフトウェアを許可のないアクセスから保護するために、パスワードを使っている場合には、それも知っておかなければなりません (<password>)。

エージェント ソフトウェアをインストールまたは再インストールするには、次のコマンドを実行します。
PerfRsManager -i -host <agent name> -port <port number>
              -pwdService <password> -ssl -log
エージェント ソフトウェアをアンインストールするには、次のコマンドを実行します。
PerfRsManager -r -host <agent name> -port <port number>
              -pwdService <password> -ssl -log

エージェント ソフトウェアがデフォルト ポートで応答する場合には、-port パラメータを省略できます。 さらに、セキュア通信チャネルでの通信を必要としない場合には、-ssl パラメータを省略します。

前述のコマンドは、インストールまたはアンインストール プロセスに関する詳細情報を含むログ ファイルを生成します。これらのログ ファイルを生成しない場合は、-log パラメータを省略します。

親トピック: シナリオ


シナリオ 5：HTTP プロキシを利用して接続された 2 つの LAN

シナリオ 5 では、別の LAN にあるコントローラとエージェント コンピュータがインターネットに接続されています。 少なくとも、一方の LAN はファイアウォールで保護されており、コントローラとエージェント コンピュータは HTTP プロキシ経由で通信する必要がある。

コントローラ コンピュータから、リモート エージェント コンピュータ (<agent name>) 上の Silk Performer エージェント ソフトウェアをインストールまたはアンインストールできます。 通信は、HTTP プロキシ経由で行われます (<proxy name>、<proxy port>)。 エージェント ソフトウェアを再インストールもしくは削除するには、エージェント ソフトウェアが応答するポート (<agent port>) を知っておく必要があります。デフォルトでは、エージェントは、非セキュア通信にポート 19200、セキュア通信にポート 19201 を使用します。エージェント ソフトウェアを許可のないアクセスから保護するために、パスワードを使っている場合には、それも知っておかなければなりません (<password>)。

エージェント ソフトウェアをインストールまたは再インストールするには、次のコマンドを実行します。
PerfRsManager -i -host <agent name> -port <agent port>
              -pwdService <password> -ssl -log
              -httpProxy <proxy name> <proxy port>
エージェント ソフトウェアをアンインストールするには、次のコマンドを実行します。
PerfRsManager -r -host <agent name> -port <agent port>
              -pwdService <password> -ssl -log
              -httpProxy <proxy name> <proxy port>

エージェント ソフトウェアがデフォルト ポートで応答する場合には、-port パラメータを省略できます。 さらに、セキュア通信チャネルでの通信を必要としない場合には、-ssl パラメータを省略します。

前述のコマンドは、インストールまたはアンインストール プロセスに関する詳細情報を含むログ ファイルを生成します。これらのログ ファイルを生成しない場合は、-log パラメータを省略します。

親トピック: シナリオ


シナリオ 6：SOCKS プロキシを利用して接続された 2 つの LAN

シナリオ 6 では、別の LAN にあるコントローラとエージェント コンピュータがインターネットに接続されています。 少なくとも、一方の LAN はファイアウォールで保護されており、コントローラとエージェント コンピュータは SOCKS プロキシ経由で通信する必要がある。

コントローラ コンピュータから、リモート エージェント コンピュータ (<agent name>) 上の Silk Performer エージェント ソフトウェアをインストールまたはアンインストールできます。 通信は、SOCKS プロキシ経由で行われます (<proxy name>、<proxy port>)。 エージェント ソフトウェアを再インストールもしくは削除するには、エージェント ソフトウェアが応答するポート (<agent port>) を知っておく必要があります。デフォルトでは、エージェントは、非セキュア通信にポート 19200、セキュア通信にポート 19201 を使用します。エージェント ソフトウェアを許可のないアクセスから保護するために、パスワードを使っている場合には、それも知っておかなければなりません (<password>)。

エージェント ソフトウェアをインストールまたは再インストールするには、次のコマンドを実行します。
PerfRsManager -u -host <agent name> -port <agent port>
              -pwdService <password> -ssl -log
              -socksProxy <proxy name> <proxy port>
エージェント ソフトウェアをアンインストールするには、次のコマンドを実行します。
PerfRsManager -r -host <agent name> -port <agent port>
              -pwdService <password> -ssl -log
              -socksProxy <proxy name> <proxy port>

エージェント ソフトウェアがデフォルト ポートで応答する場合には、-port パラメータを省略できます。 さらに、セキュア通信チャネルでの通信を必要としない場合には、-ssl パラメータを省略します。

前述のコマンドは、インストールまたはアンインストール プロセスに関する詳細情報を含むログ ファイルを生成します。これらのログ ファイルを生成しない場合は、-log パラメータを省略します。

親トピック: シナリオ


トラブルシューティング

このセクションでは、リモート エージェントのセットアップ中に表示される可能性があるエラー メッセージと、その解決 (回避) 方法のリストを示します。

エラー メッセージ | 解説
SYSTEM: 53 - ネットワーク パスが見つかりませんでした | 無効なホスト名が指定されたか、ホストが到達可能ではありません。-host パラメータと、そのマシンが実行中であることを確認してください。
SYSTEM: 1326 - ユーザー名またはパスワードが正しくありません | -user および -pwduser パラメーターを確認してください。リモート マシンの組み込みの管理者の資格情報を使用している場合は、アカウントが有効であることを確認してください。
情報：リモート マシンに接続しました。 警告：Remote Registry サービスを開始できませんでした。 エラー：一時サービスのインストールと起動を行えませんでした。 リモート セットアップに失敗しました。 SYSTEM:5 - アクセスが拒否されました。 | 指定した資格情報でリモート マシンに到達しましたが、指定したユーザーのアクセス許可がインストーラ プロセスの起動を認めませんでした。リモートマシンでユーザー アカウント制御 (UAC) をオフにするか、組み込みの管理者アカウントを使用してください。 Remote Registry が実行中であることを確認してください。
システム:1219 - 入力した認証情報が、既存の認証情報セットと競合しています。対象コンピュータへのネットワーク接続が既に存在しています。 | 対象コンピュータへのネットワーク接続が既に存在しています。この接続は異なるユーザーとパスワードの組み合わせで確立されました。 次の DOS コマンドを実行して接続を切断します。 net use \\<machine name> /delete 接続が実際に切断されたかどうかを確認するには、次の DOS コマンドを実行します： net use
PerfORB：23 - 接続を確立することができませんでした。 | リモート マシンとの接続に失敗しました。Windows ファイアウォールが無効であること、およびユーザー アカウント制御 (UAC) がオフになっていることを確認してください。
エラー：リモート マシンでリモート エージェント セットアップをインストールできませんでした。 リモート セットアップに失敗しました。 PerfORB：20 - ORB が接続されていません。 | マシンとの接続がインストール中に失われました。リモート インストーラを再度実行してください。
親トピック: リモート コンピュータ上でエージェント ソフトウェアのインストール


Silk Performer Workbench 21.0

Silk Performer Workbench 21.0 へようこそ。

Silk Performer は、ソフトウェア アプリケーションのパフォーマンス テスト、負荷テスト、およびストレス テストを行うための、エンタープライズ クラスのソリューションです。Silk Performer を使って、インターネット サーバーや、データベース サーバー、分散アプリケーション、およびミドルウェアのパフォーマンスを、開発が完了する前か後かを問わず、評価することができます。Silk Performerを使うことで、信頼性と品質の高いアプリケーション ソリューションを、素早くかつ費用効率の高い方法で作成できます。

  • Silk Performer21.0 の新機能
    Silk Performer 21.0 で導入された重要な機能強化と変更について詳しく説明します。
  • 入門
    新機能についての情報、負荷テスト実行 の概要 およびワークロード設定用パフォーマンス/スケーラビリティ マトリクスの概要を提供します。
  • Silk Performer の構成
    Silk Performer ワークベンチ、Silk Performer Recorder、リモート エージェント、および Java の構成の概要について説明します。
  • 負荷テストの管理
    負荷テストの準備、実行、およびその結果の分析を行うために実行する必要があるタスクを列挙します。
  • 特定のアプリケーションの種類に対する負荷テスト
    Silk Performer は、多様なコンピュータ環境 (AJAX、SAP eCATT、ターミナル エミュレーション、GUI レベルのテストなど) でアプリケーションをテストできます。
  • 特定の環境での負荷テスト
    特定の環境で負荷テストがどのように機能するかについて説明します。
  • Silk Performer プラグイン
    使用可能なプラグインの種類およびプラグインで使用できるコントロールの概要について説明します。
  • Silk Central インテグレーション
    Silk Performer を Silk Central と統合する方法 (Silk Performer プロジェクトのインポート、構成設定、およびテスト結果管理を含む) について説明します。
  • Silk Performance Manager との統合
    Silk Performer を Silk Performance Manager と統合する方法について説明します。
  • ソース管理インテグレーション
    Silk Performer と連動するソース管理インテグレーションの概要について説明します。
  • プロジェクトのインポート、アップロード、および電子メール送信
    テスト プロジェクト全体を別のディレクトリまたはアーカイブ ファイルにエクスポートする方法を説明します。 この方法でエクスポートされたプロジェクト ファイルは、後ほど Silk Performer にインポートできます。
  • トラブルシューティング
    Silk Performer の既知の問題とトラブルシューティングのヒントについて説明します。
  • Silk Performer の既知の問題


Silk Performer21.0 の新機能

Silk Performer21.0 では、大幅な機能強化と変更が行われました。

  • Web プロトコル レベル機能の強化
    Silk Performer では、Brotli 圧縮と、HTTP/2 における認証フォールバックをサポートするようになりました。
  • ブラウザ駆動型負荷テストの強化
    Silk Performer のブラウザ駆動型負荷テスト機能では、ブラウザ駆動型スクリプトの記録を Chrome、Firefox、Edge、Opera ブラウザを使って行えるようになったほか、様々な強化が行われました。
  • BDL に追加された関数
    Silk Performer 21.0 では、いくつかの便利な関数が BDL API に追加されました。
  • 統合の強化
    Silk Performer 21.0 では、統合が強化され、プロジェクトのアップロード ウィザード、コマンドライン ツール、サードパーティ プラグインの GUI レス環境のサポートなどが新たに提供されるようになりました。
  • その他の機能強化
    Silk Performer では、AutoPass ライセンス管理、Java 11 のサポートなど、様々な新しい機能が追加されました。
  • 使用技術の更新
    このリリースでは、次の使用技術が更新されています。
親トピック: Silk Performer Workbench 21.0


Web プロトコル レベル機能の強化

プロトコル レベルの Web 負荷テストに対して次の強化が行われました。

Brotli 圧縮

Silk Performer のプロトコル レベルの HTTP/HTML スクリプトで、Brotli 圧縮をサポートするようになりました。Brotli 圧縮は、GZIP などの他の圧縮アルゴリズムに追加されています。

HTTP/2 における認証フォールバック

最近の Web アプリケーションの多くが HTTP/2 を使用していますが、NTLM と Kerberos のネゴシエート認証は、HTTP/2 プロトコルでは定義されていません。そこで、ブラウザは、ユーザーの認証に様々な手法を用いて HTTP/1.x にフォールバックして対処しています。Silk Performer 21.0 では、Google Chrome と同様のフォールバック動作を実装しています。

親トピック: Silk Performer21.0 の新機能


ブラウザ駆動型負荷テストの強化

ブラウザ駆動型負荷テストに対して次の強化が行われました。

Chrome、Firefox、Edge、Opera ブラウザを使用したブラウザ駆動型スクリプトの記録

Silk Performer では、Firefox、Chrome、Edge、Opera を使って、ブラウザ駆動型スクリプトを記録できるようになりました。この機能では、Silk Test スクリプトまたは Selenium スクリプトを記録するための機能テスト ツールである Silk WebDriver を使用します。Silk Performer 21.0 以降では、このツールを使ってブラウザ駆動型 BDL スクリプトを生成できます。

Chrome、Firefox、Edge、Opera ブラウザで利用可能な Locator Spy

ツール メニューから起動する Locator Spy を使って、Internet Explorer 以外のサポート対象のブラウザに対するロケーターを生成、変更できます。

エージェント上での Silk WebDriver の更新

システム 設定の エージェント プール タブでエージェントを選択してコンテキスト メニューを開き、WebDriver の更新 を選択すると、エージェント上の Silk WebDriver を更新できます。また、要約 ページから Silk WebDriver を更新することも可能です。

BrowserTypeKeys での遅延パラメータの指定

BDL 関数 BrowserTypeKeys に、遅延パラメータが追加され、キーストローク間の遅延時間を指定できるようになりました。

TTI 決定要素の表示

TrueLog Explorer の 情報 タブに、操作開始時間（TTI）を決定する要素が表示されるようになりました。

DOM 属性値の最大長

ブラウザ駆動型スクリプトに対して、無視または優先する DOM 属性名などの設定を Silk Performer で行えるようになりました。また、DOM 属性値の最大長も設定できるようになりました。指定した値より長い属性値は、切り捨てられます。

コマンドライン引数を指定したブラウザの起動

Internet Explorer 以外のサポート対象に対して、プロファイルの設定でコマンドライン引数をカスタマイズできるようになりました。

親トピック: Silk Performer21.0 の新機能


BDL に追加された関数

Silk Performer 21.0 では、いくつかの便利な関数が BDL API に追加されました。

ToUnicode() および FromUnicode() BDL 関数

ToUnicode() BDL 関数を使用すると、ANSI 文字列を Unicode エスケープ文字列（\uxxxx 形式）に変換できます。FromUnicode() BDL 関数を使用すると、\uxxxx 形式の Unicode エスケープ文字列を ANSI 文字列に変換できます。

HashSHA2() 関数

HashSHA2() BDL 関数を使用すると、入力文字列に対する SHA2 ハッシュ値を計算できます。SHA2 ハッシュの長さは、関数の引数として渡します。

WebFtpGetFileSize() および WebFtpGetFileTime() 関数

WebFtpGetFileSize() 関数を使用すると、FTP を使ったリモート ファイルのファイル サイズを取得できます。WebFtpGetFileTime() 関数を使用すると、リモート ファイルの日付と時刻プロパティを取得できます。

Print Function() 関数を使用すると、出力ペインに出力されます。

Print Function() API 関数は、出力 ペインの 仮想ユーザー タブに表示される情報を出力します。さらに、Print* 関数に渡されるデータは、ログ ファイルに出力されるようになりました。

親トピック: Silk Performer21.0 の新機能


統合の強化

Silk Performer 21.0 では、統合が強化され、プロジェクトのアップロード ウィザード、コマンドライン ツール、サードパーティ プラグインの GUI レス環境のサポートなどが新たに提供されるようになりました。

LoadRunner Enterprise および LoadRunner Cloud へのプロジェクトのアップロード

Silk Performer のウィザードを使って、Silk Performer プロジェクトを LoadRunner Enterprise および LoadRunner Cloud にアップロードできるようになりました。LoadRunner Enterprise および LoadRunner Cloud が提供する統合機能により、LoadRunner 環境で Silk Performer ワークロードを定義し、実行できるようになります。

新しいコマンドライン ツール - PerfProj および PerfExec

Silk Performer に 2 つの新しいコマンドライン ツール PerfProj.exe と PerfExec.exe が追加されました。 これにより、CI 環境上での Silk Performer プロジェクトの実行や、設定の変更を容易に行えるようになりました。標準ホスト、ポート、エージェント、結果フォルダなど、コマンドライン引数で指定して設定できます。コマンドラインの詳細は、コマンドの引数として /? を指定して実行すると表示されます。

サードパーティ プラグインの GUI レス環境のサポート

Silk Central、LoadRunner Enterprise、LoadRunner Cloud、Jenkins、コマンドラインなどの GUI レス環境でプロジェクトを実行するときに、サードパーティ プラグイン（Dynatrace や InfluxDB など）を利用できるようになりました。

JUnit 形式の結果ファイル

Silk Performer で JUnit 形式の結果ファイルを生成できるようになりました。 これにより、多くの CI ツールで自動的に結果が整形表示されます。結果ファイルには、発生したエラーや、パフォーマンス レベルを満たしていない場合の警告が含まれます。

Jenkins プラグインの 64 ビット Java のサポート

Silk Performer Jenkins プラグインが 64 ビット Java 上で動作するようになりました。

BMC Helix Monitor へのプロジェクトのアップロード

Silk Performer のウィザードを使って、プロジェクトを BMC Helix Monitor にアップロードできるようになりました。

親トピック: Silk Performer21.0 の新機能


その他の機能強化

Silk Performer では、AutoPass ライセンス管理、Java 11 のサポートなど、様々な新しい機能が追加されました。

AutoPass ライセンス管理

Silk Performer では、Silk Meter の他に、フローティング ライセンスのライセンス管理テクノロジとして Micro Focus AutoPass を利用できるようになりました。AutoPass では、ユーザー管理、使用状況の追跡やレポートなどの機能も利用できます。詳細については、『インストール ガイド』を参照してください。

Java 11

Silk Performer の Java フレームワークや Java Explorer で、Java 11 がサポート対象になりました。

エージェントの別名

Silk Performer のエージェント プールで、Silk Performer エージェント マシンに別名を指定できるようになりました。指定した別名は、ユーザー インターフェイスの様々な場所で表示されます。

エディターのショートカット

Silk Performer のスクリプト エディターで、様々なショートカットが利用できるようになりました。Ctrl+Shift+Q でコメントの切り替えを、Ctrl+D で選択項目または行の複製を行うことができます。現在の行の上に新しい行を追加する場合は、Ctrl+Enter を押下します。

Silk Performer の Workbench、Recorder、Browser Application、TrueLog Explorer などで利用できるショートカットを一覧した PDF が新たに提供されました。この PDF では、新しいスクリプト エディターの機能が画像付きで説明されています。PDF を開くには、開始画面 の 入門ガイド タブを選択し、キーボード ショートカット リファレンス シート (pdf) をクリックしてください。

親トピック: Silk Performer21.0 の新機能


使用技術の更新

OpenSSL

OpenSSL がバージョン 1.1.1g にアップグレードされました。

その他のコンポーネント

いくつかのサードパーティ コンポーネントは、既知の脆弱性や不具合が修正された最新のバージョンにアップグレードされました。

親トピック: Silk Performer21.0 の新機能


入門

新機能についての情報、負荷テスト実行 の概要 およびワークロード設定用パフォーマンス/スケーラビリティ マトリクスの概要を提供します。

  • はじめての Silk Performer
    Silk Performer を使って、インターネット サーバーや、データベース サーバー、分散アプリケーション、ミドルウェアのパフォーマンスを評価する方法を説明します。
  • Silk Performer を使用する利点
    Silk Performer が、本業界で最も強力で、しかも使いやすい、エンタープライズ クラスの負荷/耐久テスト ツールであることを説明します。
  • UI のツアー
    Silk Performer の UI の主要要素について説明します。
  • 負荷テストの管理：全体の概要
    負荷テストの準備、実行、結果解析に関係するステップの高レベルの概要について説明します。
  • Silk Performer 21.0 へアップグレードする
    Silk Performer 21.0 の完全版または評価版へのアップグレードについて説明します。
  • パフォーマンスとスケーラビリティ マトリクス
    エージェントあたりの最大仮想ユーザー数の推奨値を計算する際のガイダンスを示します。
  • アプリケーションの種類ごとのメモリ占有量
    Silk Performer がサポートするアプリケーションの種類ごとに、必要なメモリ占有量の概要を示します。
  • サンプル Web 2.0 アプリケーション
    Silk Performer には、Web 2.0 アプリケーションのテストを習得するために使用できる最新のサンプル Web アプリケーションが備えられていることについて説明します。
  • Silk Performer のキーボード ショートカット
    Silk Performer では、さまざまなキーボード ショートカットを利用して作業効率を高めることができます。
親トピック: Silk Performer Workbench 21.0


はじめての Silk Performer

Silk Performer は、ソフトウェア アプリケーションのパフォーマンス テスト、負荷テスト、およびストレス テストを行うための、エンタープライズ クラスのソリューションです。Silk Performer を使って、インターネット サーバーや、データベース サーバー、分散アプリケーション、およびミドルウェアのパフォーマンスを、開発が完了する前か後かを問わず、評価することができます。Silk Performerを使うことで、信頼性と品質の高いアプリケーション ソリューションを、素早くかつ費用効率の高い方法で作成できます。

Silk Performer では、非常に現実的で完全にカスタマイズ可能な負荷テストを作成します。その作業を行うに当たっては、現実のユーザーと同じようにテスト対象システムに対してトランザクションを自動的に送信する仮想ユーザーが使用されます。

最小限のハードウェア リソースを使って、数百または数千もの同時ユーザーをシミュレートするテストを生成できます。また、負荷テスト中およびテスト後に Silk Performer の強力なレポート作成ツールを使用して、サーバーのパフォーマンスを分析したりボトルネックを特定することもでき、それによってシステムの潜在的可能性を最大限に高めることができます。

Silk Performer を使って答えが得られる質問

  • 自分のサーバーは何人の同時ユーザーをサポートできるか
  • ユーザーにとってのピーク時のレスポンス時間はどのくらいか
  • サーバーのパフォーマンスを最適化するにはどのようなハードウェア/ソフトウェア製品が必要か
  • 自分のシステムでボトルネックになっているコンポーネントはどれか
  • セキュリティ技術を導入するとシステムのパフォーマンスにどのような影響が出るか
  • アプリケーションのうち、満足なパフォーマンスが出ている部分と、評価可能なビジネス トランザクションやオブジェクトやオペレーションの形でボトルネックが含まれている部分はどこか
  • パフォーマンスに影響を及ぼす要因は何か。その要因はどのような影響を持つか。その要因がサービス レベルに影響を及ぼすのはどの時点か
親トピック: 入門


Silk Performer を使用する利点

Silk Performer は、本業界で最も強力で、しかも使いやすい、エンタープライズ クラスの負荷/耐久テスト ツールです。 視覚的なスクリプト生成技術、および、数千人の仮想ユーザーが同時利用する複数のアプリケーション環境をテストできるその能力により、規模や複雑さにかかわらず、デプロイする前に、開発中のエンタープライズ アプリケーションの信頼性、パフォーマンス、拡張性などを、徹底的にテストすることが可能になります。 根本原因解析用の最強なツールや管理レポートを利用して、問題を切り分けし、迅速に決断することで、テスト サイクルを最小化し、市場へリリースするまでの時間を短縮することができます。

次に、Silk Performer の主な利点のいくつかを示します。

  • エンタープライズ アプリケーションのスケーラビリティ、パフォーマンス、および信頼性を確かなものとする。 Silk Performer は、エンタープライズ アプリケーションのパフォーマンスを、さまざまなワークロード シナリオや動的な負荷条件において、内部の視点だけでなくエンドユーザーの視点からも測定することにより、そのアプリケーションの品質を確かなものとします。
  • 開発サイクルの早い段階でリモート コンポーネントをテストする。 開発サイクルの早い段階で (クライアント アプリケーションが構築される前でも)、リモート コンポーネントの機能性、相互運用性やパフォーマンスをテストすることにより、多層エンタープライズ アプリケーションにおける不具合のコストを、激減させることができます。 ポイント＆クリック インターフェイスを使って調査することにより、Web サービスや .NET リモート オブジェクト、EJB、Java RMI オブジェクト用のテスト ドライバを、迅速に生成することができます。 また代わりに、開発者が記述した、同時実行テストのためのユニット テスト ドライバを再利用したり、Silk Performer の Visual Studio .NET アドオンを利用して、Java や .NET 言語 (C# や VB .NET など) で、新しいテストケースを直接作成することもできます。
  • 迅速な解決に向けて容易に問題を突き止める。 HTML、XML、SQL、Oracle Forms、Citrix、TCP/IP、および UDP をベースとしたプロトコル データに対する独自技術である TrueLogTM テクノロジにより、エンドユーザーの視点からの完全視覚化された根本原因解析機能を提供します。 TrueLog は、負荷テスト時にユーザーが送受信するデータを視覚的に再現します。 HTML ページの場合は、すべての埋め込みオブジェクトも含まれます。 これにより、ユーザーは、テストでのエラー発生時にアプリケーションの動作を視覚的に分析することができます。 さらに、詳細なレスポンス タイマー統計は、アプリケーションが運用に入る前に、サービス内容合意書で見逃された根本原因を明らかにする助けとなります。
親トピック: 入門


UI のツアー

Silk Performer の UI には 4 つの主要な機能があります。

ワークフロー バー

ワークフロー バーは、典型的な負荷テストの作成に要する手順を段階的に実行するためのものです。ワークフロー バーの各ボタンは、負荷テストの作成、設定、実行を正常に行い、負荷テストの結果の分析を行うために遂行しなければならないタスクを表しており、先に実行するものから順に左から右へと配置されています。ワークフロー バーには次の 3 つの種類があります。

簡易ワークフロー バー：

完全ワークフロー バー：

監視ワークフロー バー：

注: デフォルトで、Silk Performer には簡易ワークフロー バーが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
ワークフロー バー ボタン
プロジェクトの概要設定
プロジェクトの名前、説明、アプリケーションの種類を設定します。
スクリプトの作成
テスト スクリプトを作成します。テスト スクリプトを手動で作成することも、自動的に記録させることもできます。
スクリプトの試行
テスト スクリプトを試験的に実行して、意図したとおりに動作するかどうかを確認します。試験実行が正常に終了すると、検証関数またはパラメータ化した入力データをテスト スクリプトに挿入することができます。代わりに、再生時にセッション情報を処理するようにスクリプトを編集できます。
ユーザー タイプの定義
ユーザー タイプは、スクリプト、ユーザー グループ、およびプロファイルの一意の組み合わせで定義されます。したがって、ユーザー タイプを選択すると、どのスクリプトをどのユーザー グループとプロファイルに対して実行すべきかが定義されます。ユーザー タイプは特定のワークロード用に選択されます。負荷テスト プロジェクトで複数のワークロードを使用し、今後の使用のために保存することができます。
ベースラインの検索 (完全ワークフロー バーのみで使用)
ベースラインは、後続の負荷テストに対する基準レベルとして機能します。Silk Performer は、ベースライン テストの結果を使用して、ユーザー タイプ単位の同時ユーザーの数を計算します。
ベースラインの表示 (完全ワークフロー バーのみで使用)
ベースライン テストの結果が満足できるものであった場合は、そのベースライン テストをベースラインとして設定できます。そして、その後の負荷テスト用にレスポンス時間のしきい値を設定することができます。
ワークロードの調整
テスト スクリプトでシミュレートするワークロード モデルを定義し、テスト時に仮想ユーザーでシミュレートするネットワーク帯域幅タイプを定義します。
エージェントの割り当て
負荷テスト環境の仮想ユーザーの割り当てを構成します。推奨される値を計算するウィザードを使用して、仮想ユーザーを特定のエージェント、エージェント クラスタ、またはクラウド エージェントに割り当てます。
エージェントの試行
スクリプトを試験的に実行して、負荷テスト用に設定したエージェント上で実行できることを確認します。
監視の設定
Performance Explorer ( Silk Performer サーバー監視ツール) がそのテストで使用するローカルおよびリモート サーバーをどのように監視するかを定義する必要があります。
テストの実行
テストをテスト環境のエージェント コンピュータに配置します。テストの進行状況をリアルタイムに監視できます。
結果の検討

テストの結果を分析して、テストしているアプリケーションとサーバーのパフォーマンスを評価します。

プロジェクトのアップロード (完全ワークフロー バーのみ)
Silk Central や Performance Manager にプロジェクトをアップロードすることで再利用できます。これでプロジェクトが Silk Central や Performance Manager から直接実行できるようになります。

プロジェクト メニュー ツリー

すべてのプロジェクト資産が表示されます。この中には、1 つ以上のプロファイルとテスト スクリプト、ワークロード、エージェント コンピュータ、データ ファイルが含まれます。

監視/スクリプト ウィンドウ

監視 ページには、負荷テストの進行状況に関するリアルタイム情報が表示されます。表示される列は、プロジェクトのアプリケーションの種類に依存し、監視 ページの 要約 または ユーザー リスト ボックスをクリックし、列の選択 を選択します。選択された列は、プロジェクトごとに保存されます。

<スクリプト名> ページでは、テスト スクリプトを表示および編集します。このページを使用して、テスト スクリプトを表示および編集します。

出力ウィンドウ

以下のアクションを実行したとき、ステータス メッセージ (エラー、警告などの情報) が表示されます。
  • スクリプトのコンパイル - エラーや警告などのコンパイラ メッセージが コンパイラ ページに表示されます。
  • テストの実行 - トランザクション情報や時間測定値など、テストに含まれている仮想ユーザーのアクションに関連するメッセージが 仮想ユーザー ページに表示されます。また、Silk Performer コントローラに関する情報が シミュレーション コントローラ ページに表示されます。
親トピック: 入門


負荷テストの管理：全体の概要

このセクションでは、負荷テストの準備、実行、結果解析に要する手順について、高レベルな概要を説明します。

以下で概要説明する各タスクは、Silk Performer ワークフロー バーのボタンと直接関連しています。 ワークフロー バーは、典型的な負荷テストの作成と管理に要する手順を段階的に実行するためのものです。

  • プロジェクトの概要設定
    プロジェクトの名前、説明、テストするアプリケーションの種類といったパラメータの定義方法を説明します。
  • スクリプトを作成する
    テスト スクリプトの作成方法 (手動、記録、またはサンプル スクリプトに基づく方法) について説明します。 テスト スクリプトは、負荷テストにおける仮想ユーザーのアクションを定義したものです。
  • スクリプトの試行
    テスト スクリプトにエラーがないことと、クライアント アプリケーションとサーバー間で必要なやり取りを正確に再現できることを保証します。
  • スクリプトをカスタマイズする
    負荷テストを実行する前にスクリプトをカスタマイズすることを推奨する理由、およびスクリプトをカスタマイズしない場合に発生する問題について説明します。
  • ユーザー タイプの定義
    アクティブ ワークロード用にユーザー タイプを定義する方法について説明します。ユーザー タイプの定義では、テストで使用すれるスクリプト、ユーザー グループ、およびプロファイルを指定します。
  • ベースラインを検索する
    ベースライン テストを実行して、アプリケーションの理想的なパフォーマンスのベースラインを決定する方法について説明します。
  • ベースラインの表示
    テスト対象のアプリケーションが目標とするパフォーマンスに、ベースライン テストが反映されることを確認する方法と、ベースライン テストをベースラインとして設定する方法の概要について説明します。
  • ワークロードの調整
    負荷テストのワークロードを定義する方法について説明します。
  • エージェントを割り当てる
    負荷 テスト環境で仮想ユーザーの分散を設定し、仮想ユーザーを特定のエージェント、エージェント クラスタ、またはクラウド エージェントに割り当てます。
  • エージェントの試行
    テスト スクリプトの試行を行って、スクリプトがさまざまなエージェントで機能することを確認する方法について説明します。
  • 監視を構成する
    テスト中に Performance Explorer を使用してローカルおよびリモート コンピュータを監視するためのオプションを説明します。
  • テストの実行
    負荷テストのために、実行する必要がある手順と、設定する必要があるオプションについて説明します。
  • 結果を検討する
    テスト結果の表示、レポート、および分析に利用できるアプローチについて説明します。
親トピック: 入門


プロジェクトの概要設定

Silk Performer の負荷テストを作成する場合、負荷テストプロジェクトの基本設定を定義する必要があります。 プロジェクトには名前を付け、必要に応じて簡単な説明を付けることができます。 テスト対象のアプリケーションの種類は、最も重要なデータベースや分散アプリケーションなど、今日インターネットや Web 上で利用できる主要なトラフィックから幅広く指定できます。

指定された設定は、特定の負荷テストプロジェクトに関連付けられます。 プロジェクトの切り替え、プロジェクトの編集、およびプロジェクトの保存が簡単にできるので、後で変更したり、再利用したりできます。

プロジェクトには、負荷テストの完了に必要なすべてのリソースが含まれています。 この中には、ワークロード、1 つ以上のプロファイルと負荷テストスクリプト、エージェント コンピュータの特定の数とサーバー側監視のための情報、およびスクリプトからアクセスされるすべてのデータ ファイルが含まれます。 こうしたリソースすべてのオプションは、プロジェクト メニュー ツリーのプロジェクト ノードから直接入手できます。

  • プロジェクトの概要を設定する
    テスト中のプロジェクト名、アプリケーションの種類などの基本設定を構成します。
親トピック: 負荷テストの管理：全体の概要


プロジェクトの概要を設定する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーから、テストで使用するアプリケーションの種類を選択します。
    注: Web アプリケーションをテストしている場合は、Web ビジネス トランザクション (HTML/HTTP) オプションを選択すると、高度な機能が組み込まれているにもかかわらず、比較的簡単なスクリプトが作成されます。 アプリケーションに可能な限り高い負荷をかけたい場合は、Web 低レベル (HTTP) を選択します。 低レベルのスクリプトは、Web ビジネス トランザクションのスクリプトより複雑なので、カスタマイズには手間がかかります。 ブラウザ ベースのアプリケーションには、Web 低レベル (HTTP) ではなく Web ビジネス トランザクション (HTML/HTTP) のスクリプトを使用することをお勧めします。
  5. 次へ をクリックします。
    注: プロジェクトにさらにリソースを追加する必要がある場合は、プロジェクト メニュー ツリー ビューでプロジェクト アイコンを右クリックします。 Silk Performer に必要なユーザー データ ファイル (.csv)、ランダム データ ファイル (.rnd)、.idl ファイルをすべてプロジェクトにセットアップすることが特に重要です。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: プロジェクトの概要設定
親トピック: プロジェクトの概要設定
関連タスク
テスト スクリプトを記録する
関連資料
利用可能なアプリケーションの種類


スクリプトを作成する

Silk Performer の負荷テストを実行する前に、テスト中にシミュレートするユーザー実行のアクションを定義したテスト スクリプトを作成する必要があります。 テスト スクリプトは、Silk Performer 専用のスクリプト言語である Benchmark Description Language (BDL) で記述します。

スクリプトは、アプリケーションの種類に応じて、さまざまな方法で作成できます。 テスト スクリプトを作成するための標準的な (最も簡単な) 方法は、Silk Performer Recorder を使用して、テストでシミュレートする必要がある典型的なトラフィックを測定して記録することです。 Silk Performer Recorder は、記録されたトラフィックに基づいて自動的に BDL テスト スクリプトを生成します。

テスト スクリプトを作成するもう 1 つの方法は、手動で BDL スクリプトを新規作成することです。 手動によるアプローチの変形として、Silk Performer で提供されているサンプルの BDL スクリプトを基にしてテスト スクリプトを作成する方法もあります。

  • テスト スクリプトを記録する
    Silk Performer Recorder を使用して、テスト スクリプトを作成します。Recorder は、トラフィックを記録し、テスト スクリプトを生成するための Silk Performer のエンジンです。
親トピック: 負荷テストの管理：全体の概要


テスト スクリプトを記録する

熟練したユーザーであれば、自分でスクリプトを作成し、手動でコードを書きたい場合もあるでしょう。空のスクリプトを作成して始めたり、インストール済みのサンプル スクリプトをカスタマイズすることができます。

しかし、Silk Performer Recorder を使用して、作業を記録してスクリプトを作成することもできます。Silk Performer Recorder を使用したときに実行する必要のある基本的な手順を以下に示します。

  1. 作業対象のプロジェクトを開くか、新しいプロジェクトを作成します。
  2. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  3. 記録プロファイル リストから、テスト予定のクライアント アプリケーションのプロファイルを選択します。使用するアプリケーションのプロファイルがまだセットアップされていない場合は、リストの右側にある 設定 をクリックして、セットアップします。
  4. プロジェクトの種類に応じて、URL フィールドにアプリケーションの URL を、または コマンド ラインフィールド にアプリケーションの場所を入力します。
  5. 記録の開始 をクリックします。 [Silk Performer Recorder - [<プロファイル名>]] ダイアログが最小化されて表示され、クライアント アプリケーションが起動されます。
  6. 記録中に発生したアクションのレポートを表示するには、GUI サイズの変更 をクリックして [SilkPerformer Recorder - [<プロファイル名>]] ダイアログを最大化します。 [SilkPerformer Recorder - [<プロファイル名>]] ダイアログが最大化され、アクション ページに表示されます。
  7. クライアント アプリケーションを使用して、テストでシミュレートするターゲット サーバーでの操作などを実行します。この操作を、Recorder が取得して、記録します。 これらのアクションとダウンロードされたデータのレポートが、アクション ページに表示されます。
  8. 記録フェーズ中に、トランザクションとタイマをテスト スクリプトに挿入します。トランザクションとタイマは必要なだけ作成できます。トランザクションを挿入するには、トランザクションの新規作成 をクリックします。トランザクションとは、仮想ユーザーに割り当てることができる作業のことです。
  9. [トランザクションの新規作成] ダイアログで、トランザクション名を入力して、OK をクリックします。 新しいトランザクションが アクション ログに表示されます。
  10. タイマを挿入するには、タイマ セッションの新規作成 をクリックします。タイマは、テスト内でユーザーが定義する測定期間です。パフォーマンスを分析するトランザクションのコンポーネントごとに、タイマを作成してください。確認ダイアログで、タイマ名を入力して、OK をクリックします。
  11. 記録を終了するには、記録停止 をクリックします。
  12. .bdf ファイルの名前を入力し、保存します。キャプチャ ファイル ページが表示されます。スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。
  13. クライアント アプリケーションを閉じて、Silk Performer Recorder を閉じます。
親トピック: スクリプトを作成する
親トピック: 記録によるテスト スクリプト
関連タスク
記録プロファイルを追加する


スクリプトの試行

Silk Performer の負荷テスト実行処理のこの部分では、スクリプトの作成中に作成したテスト スクリプトの試行を行います。

通常、これは、スクリプトの作成中に Silk Performer Recorder によって記録されたトラフィックです。テスト スクリプトの試行では、実際にダウンロードされたデータがリアルタイムに表示されるように、オプションが自動的に選択されます。スクリプトが正しく動作しているかどうかを後から確認できるように、ログ ファイル、TrueLog ファイル、レポート ファイル、出力ファイル、およびエラー ファイルが作成されます。実行されるユーザーは 1 つだけです。また、ストレス テストのオプションは、思考時間なし、トランザクション間の遅延なしに設定されます。ただし、この段階では、実際の負荷テストによる標準的な測定は行われません。

[スクリプトの試行] の設定

[スクリプトの試行] を実行する際には、以下のオプションが自動的に設定されます (「再生の設定」も参照)。

  • ストレス テスト チェック ボックスはオン (思考時間が無効化されている場合)。
  • シミュレーション時間の後で仮想ユーザーを停止する (キューイングのワークロード) チェック ボックスはオフ。
  • 仮想ユーザー ログ ファイル (.log) チェック ボックスはオン。
  • 仮想ユーザー出力ファイル (.wrt) チェック ボックスはオン。
  • 仮想ユーザー レポート ファイル (.rpt) チェック ボックスはオン。
  • 仮想ユーザー エラー レポート ファイル (.rpt) チェック ボックスはオン。
  • TrueLog ファイル (.xlg) チェック ボックスはオン。
  • TrueLog On Error ファイル (.xlg) チェック ボックスはオフ。
  • 時系列データ (.tsd) チェック ボックスはオフ。
  • ログの詳細チェック ボックス (結果 > ログ および 結果 > インターネット ログ ページ) はすべてオン。
  • すべての測定値グループを有効にする チェック ボックスはオフ。
  • 帯域幅 オプションは High Speed (unlimited) に設定されます。
  • ダウンストリーム オプションは [無制限] に設定されます。
  • アップストリーム オプションは [無制限] に設定されます。
  • 二重 チェック ボックスはオフ。
  • テスト スクリプトの試行
    スクリプトの動作を確認するために、テスト スクリプトの試行結果を検証します。
親トピック: 負荷テストの管理：全体の概要


テスト スクリプトの試行

スクリプトの試行を実行する前に、テスト スクリプトを記録するか、手動で作成してください。

  1. Silk Performer のワークフロー バーの スクリプトの試行 をクリックします。 ワークフロー – スクリプトの試行 ダイアログが表示されます。
  2. スクリプト リスト ボックスでスクリプトを選択します。
  3. プロファイル ボックスの一覧には、現在アクティブなプロファイルが選択されています (別のプロファイルを構成したのでなければ、これがデフォルトのプロファイル)。
    1. 選択したプロファイルのシミュレーション設定を構成するには、このリスト ボックスの右側にある 設定 をクリックします。
    2. プロジェクト属性を構成するには、プロジェクト属性 リンクを選択します。
  4. ユーザー グループと仮想ユーザーの ユーザーグループ 一覧から、実行する仮想ユーザーのユーザー グループを選択します。 スクリプトの試行なので、実行される仮想ユーザーは 1 ユーザーのみです。
  5. スクリプトの試行中に Web サーバーからダウンロードされた実際のデータをリアルタイムに表示するには、TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします。 Web アプリケーション以外のテストを実行している場合は、このオプションを無効にしてください。
  6. 実行 をクリックします。 スクリプトの試行が開始されます。
スクリプトの試行の実行中、記録された思考時間はすべて無視されます。 監視 ウィンドウが開き、スクリプトの試行の実行の進行状況について詳細な情報が表示されます。 アニメーション オプションをオンにしている場合は、TrueLog Explorer が開きます。 ここには、スクリプトの試行の実行中にダウンロードされた実際のデータが表示されます。 スクリプトの試行の実行中にエラーが発生した場合は、TrueLog Explorer を利用して、すばやくエラーを検索して、セッション情報をカスタマイズできます。 TrueLog Explorer でスクリプトの評価とカスタマイズを完了すれば、このスクリプトはエラーなしで実行できます。
親トピック: スクリプトの試行
親トピック: スクリプトの試行
関連概念
再生の設定
Project Attributes


スクリプトをカスタマイズする

スクリプトを記録して、最初に試行した後、次の 2 つの理由でカスタマイズが必要な場合があります。

  • スクリプトの再生時にエラーが発生する。

    記録時にキャプチャされたセッション固有のデータは、通常、再生時に有効ではない。これは、テスト対象アプリケーションとの新しい通信セッションが開始されるたびに、セッション ID のようなデータは変わるためです。セッション固有のデータは、変数として表すことができ、結果として、各実行時に動的に調整されます。この結果、スクリプトはクリーンな状態が保たれ、実行されるたびに完全に機能します。

  • 仮想ユーザーの動作を、さまざまに変化させたい場合があります。

    仮想ユーザーは、負荷テスト時に完全に同じように振舞いますが、データを導入したり、さまざまなブラウザ、帯域幅、アプリケーションへの到達経路などをシミュレートして、環境的な多様性をもつことにより、変化させることができます。

このような理由で、負荷テストを実行する前にスクリプトをカスタマイズすることを推奨します。スクリプトをカスタマイズすると、次のようなメリットがあります。

  • 仮想ユーザーが多様化する。

    たとえば、さまざまな場所から、さまざまなブラウザと帯域幅を使ってテスト対象アプリケーションにアクセスするように設定できます。

  • 仮想ユーザーの振る舞いがより現実的かつ自然になります。

    これは、ランダム化したデータを使って実現できます。たとえば、名前、住所、クレジット カード番号などをさまざまに変化させたフォームの入力データを仮想ユーザーが使用します。検索する製品名、注文する製品、などの動作を変更できます。これにより、結果データは正確になり、有意義なものになります。

スクリプトのカスタマイズは通常、ワークフロー バーの次のステップに移行する前に行われます。

  • 関数とトランザクションの宣言
    関数とトランザクションの宣言をテスト スクリプトに挿入する方法について説明します。
  • ユーザー グループ
    仮想ユーザーのアクティビティをカスタマイズする方法を、ユーザー グループの概念を用いて説明します。
  • [パラメータ ウィザード] でのパラメータの作成
    [パラメータ ウィザード] により、テスト中に仮想ユーザーに対して、記録されたまたはスクリプトの値を定数値、ランダム値、複数列のデータ ファイルから取得した値で置き換えることによって、現実的なパラメータを作成できます。
  • シリアル化と同期
    テスト スクリプトのトランザクションをシリアル化または同期することによって、シミュレーションでの負荷のタイミングをさらに制御できる Silk Performer 関数があります。
  • ロバストなスクリプトを構築するためのチェック リスト
    このトピックでは、スクリプトをよりロバストに、エラーを起こしにくくなるようにカスタマイズするためのヒントと提案を行います。
  • カスタム DLL
    Silk Performer スクリプト内から DLL (ダイナミック リンク ライブラリ) で提供される関数を呼び出します。
  • クライアント IP アドレスのシミュレーション
    複数の IP アドレスにたいしてネットワーク インターフェイス カードを構成する方法と、ローカル IP アドレス群のセットアップに使用するスクリプト関数について説明します。
親トピック: 負荷テストの管理：全体の概要
親トピック: 負荷テストの管理


ユーザー タイプの定義

Silk Performer 負荷テストを行うプロセスの次のステップでは、アクティブ ワークロード用に 1 つ以上のユーザー タイプを定義します。ユーザー タイプは、スクリプト、ユーザー グループ、およびプロファイルの一意の組み合わせで定義されます。ユーザー タイプを選択することにより、どのスクリプトがどのユーザー グループおよびプロファイルで実行されるかを指定します。

どのアクティブ ワークロードか確認するには、 プロジェクト ツリーの ワークロード ノードを展開します。アクティブ ワークロードが太字で表示されます。

ワークフロー バーの ユーザー タイプの定義 をクリックすると、必要なすべての設定にアクセスできます。

注: ワークフロー バーの ユーザー タイプの定義 ボタンは、簡易ワークフロー バーが有効の場合のみ表示されます。ワークフロー バーには、デフォルトで簡易ワークフローが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
  • ユーザー タイプの定義
    アクティブ ワークロードのユーザー タイプを定義する方法について説明します。
  • ユーザー タイプ
    ユーザー タイプの概要と、ユーザー タイプを設定する場所について説明します。
親トピック: 負荷テストの管理：全体の概要
親トピック: 負荷テストの管理


ユーザー タイプの定義

アクティブ ワークロードのユーザー タイプを定義するには、次の手順を実行します。
  1. ワークフロー バーの ユーザー タイプの定義 をクリックします。 ワークフロー - ユーザー タイプの定義 ダイアログ ボックスが表示されます。
  2. 省略可能: スクリプト リストおよび プロファイル リストからエントリを選択することによって 利用可能なユーザー タイプ のリストを絞り込みます。
  3. 省略可能: 新規追加 をクリックし、新しいプロファイルを作成します。 リストからプロファイルを選択する場合は、 プロファイルの編集 をクリックしてプロファイルの設定を調整できます。 たとえば、このプロファイルに対して特定のブラウザおよび帯域幅を定義できます。 アクティブ プロファイルとして設定 をクリックし、選択したプロファイルをアクティブにします。
  4. 利用可能なユーザー タイプ リストで 1 つ以上のユーザー タイプを選択し、矢印ボタンをクリックしてユーザー タイプをワークロードに割り当てます。 また、ユーザー タイプをダブルクリックし、利用可能なユーザー タイプ リストと ワークロードのユーザー タイプ リスト間で移動することもできます。
  5. ワークロードに割り当てられるユーザー タイプは、実行のために自動的に選択されます。 ベースラインの実行中に特定のユーザー タイプが実行されないようにするには、選択を解除します。
  6. 次へ をクリックしてワークフローの次のステップに進みます。
注: ユーザー タイプの定義 ボタンは、簡易ワークフロー バーが有効の場合のみ表示されます。
注: デフォルトで、Silk Performer には簡易ワークフロー バーが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
親トピック: ユーザー タイプの定義


ベースラインを検索する

ベースラインは、後続の負荷テストの基準レベルとして機能します。 Silk Performer は、ベースライン テストの結果を使用して、ユーザー タイプ単位の同時ユーザーの数を計算します。 また、ベースラインの結果に基づいてレスポンス時間のしきい値を設定できます。

まず、ベースライン テストを実行する必要があります。 ベースライン テストの実行を完了した後、 ベースライン テストの要約 ページおよびベースライン レポートのすべての測定値および実行の詳細を表示できます。 結果が満足できるものであった場合は、そのベースライン テストを新しいベースラインとして設定できます。 ワークフロー バーの ベースラインを表示 をクリックして、任意の時点でベースラインの結果および値を表示できます。 クリックすると、 ベースラインの要約 ページが開きます。

注: ベースラインを操作するには、完全ワークフロー バーを有効にする必要があります。
注: デフォルトで、Silk Performer には簡易ワークフロー バーが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
  • ベースラインを検索する
    負荷テストの前に、同時使用ユーザーとタイマしきい値の設定値を計算するために、ベースライン テストを実行します。
  • ベースライン テスト
    アプリケーションの理想的なパフォーマンス ベースラインを決定する方法を説明します。
  • ベースライン テストの要約
    ベースライン テストの要約 ページで、ベースラインのテスト実行中にキャプチャされた測定値を分析し、ベースラインとしてベースラインのテスト実行を設定できます。
  • ユーザー タイプ
    ユーザー タイプの概要と、ユーザー タイプを設定する場所について説明します。
  • ベースライン テスト レポート
    ベースライン レポートの内容について説明します。
  • 詳細なテスト レポートの内容
    ベースライン レポートのセクション、テキスト ボックスおよび UI 要素について説明します。
  • ベースライン テストをベースラインとして設定する
    ベースライン テストの結果が、テスト対象のアプリケーションの望ましいパフォーマンスを反映していることを確認します。
親トピック: 負荷テストの管理：全体の概要
親トピック: 負荷テストの管理


ベースラインを検索する

ベースライン テストを実行する前に、ユーザー プロファイルを割り当ててテスト スクリプトをカスタマイズします。

  1. ワークフロー バーの ベースラインの検索 をクリックします。 ワークフロー - ベースラインの検索 ダイアログ ボックスが表示されます。
  2. 省略可能: スクリプト リストおよび プロファイル リストからエントリを選択することによって 利用可能なユーザー タイプ のリストを絞り込みます。
  3. 省略可能: 新規追加 をクリックし、新しいプロファイルを作成します。 リストからプロファイルを選択する場合は、 プロファイルの編集 をクリックしてプロファイルの設定を調整できます。 たとえば、このプロファイルに対して特定のブラウザおよび帯域幅を定義できます。 アクティブ プロファイルとして設定 をクリックし、選択したプロファイルをアクティブにします。
  4. 利用可能なユーザー タイプ リストで 1 つ以上のユーザー タイプを選択し、矢印ボタンをクリックしてユーザー タイプをワークロードに割り当てます。 また、ユーザー タイプをダブルクリックし、利用可能なユーザー タイプ リストと ワークロードのユーザー タイプ リスト間で移動することもできます。
  5. ワークロードに割り当てられるユーザー タイプは、実行のために自動的に選択されます。 ベースラインの実行中に特定のユーザー タイプが実行されないようにするには、選択を解除します。
  6. 実行 をクリックして、ベースライン テストを実行します。
Silk Performer はベースライン テストを実行して、今後のテストの実行で測定される値に対する平均測定値を計算します。
注: ベースラインの検索 ボタンは、完全ワークフロー バーが有効の場合のみ表示されます。
注: デフォルトで、Silk Performer には簡易ワークフロー バーが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
親トピック: ベースラインを検索する


ベースラインの表示

Silk Performer 負荷テストを実行するプロセスの次のステップは、ベースライン テスト (前のステップ「ベースラインの検索」を参照) をベースラインとして設定することです。 ベースラインは、その後の負荷テストに対する基準レベルとして機能し、テスト対象のアプリケーションが目標とするパフォーマンスに反映される必要があります。 ベースライン テストをベースラインとして設定すると、レスポンス時間のしきい値を設定することができます。

注: ベースラインを操作するには、完全ワークフロー バーを有効にする必要があります。
注: デフォルトで、Silk Performer には簡易ワークフロー バーが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
  • レスポンス時間のしきい値を設定する
    Web にしきい値を設定し、負荷テストのレスポンス時間を良好、許容可能、および許容不可に分類するしきい値を設定します。
  • ベースラインの要約
    ベースラインの要約 ページでは、ベースラインの測定値を表示し、すべての詳細な指標があるベースライン レポートにアクセスし、レスポンス時間のしきい値を設定できます。
  • レスポンス時間のしきい値
    負荷テストでレスポンス時間しきい値を使用する方法を説明します。
  • パフォーマンス レベル
    パフォーマンス レベルとは何か、パフォーマンス レベルを使用する際の 2 種類のアプローチ、そして、なぜ有用かについて説明します。
親トピック: 負荷テストの管理：全体の概要
親トピック: 負荷テストの管理


レスポンス時間のしきい値を設定する

  1. ワークフロー バーの ベースラインを表示 をクリックします。 ベースラインの要約 ページが表示されます。
  2. 右側にある 次のステップ 領域の レスポンス時間のしきい値の設定 をクリックします。 しきい値の自動生成 ダイアログ ボックスが開きます。
  3. しきい値を設定する対象の測定時間を選択します。
  4. 適切な係数の 下限 と 上限 を負荷テストに対して指定します。
  5. ベースライン テストの対応する値が 0 である場合は、最小値を指定します。
  6. しきい値を超えた場合にエラー メッセージまたは警告メッセージを発生させる場合は、発生させるメッセージの重大度を指定することができます。
  7. OK をクリックします。
注: ベースラインの検索 および ベースラインを表示 ボタンは、完全ワークフロー バーが有効な場合にのみ表示されます。
注: デフォルトで、Silk Performer には簡易ワークフロー バーが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
親トピック: ベースラインの表示


ワークロードの調整

ワークロードの設定は、負荷テストを実行するプロセスの一部です。 Silk Performer には、負荷テストの基本として使用するさまざまなワークロード モデルが用意されています。 ワークロードを構成する前に、ニーズに最も適したモデルを選択する必要があります。

複数のワークロード モデルを負荷テスト プロジェクトで定義して、あとで利用するために保存できますが、一度にアクティブにできるワークロード モデルは 1 つだけです。 承認済みのベースラインの結果はワークロード モデルに関連付けられています。 ワークロード モデルをコピーまたは名前変更すると、対応して承認済みのベースラインの結果もコピーまたは名前変更されます。

  • ワークロード モデル
    ワークロード モデルのタイプについて説明します。
親トピック: 負荷テストの管理：全体の概要


ワークロード モデル

Silk Performer には、次のワークロード モデルが用意されています。
  • 増加 – 負荷テストの開始時は、Silk Performer は定義されているユーザー総数ではなく、その指定された一部のみをシミュレートします。ワークロードは、ユーザー リストで指定されたすべてのユーザーが実行されるまで段階的に増加します。

    このワークロード モデルは、システムがクラッシュしたりレスポンス時間やエラーしきい値の許容範囲内で応答しなくなる負荷レベルを調べる場合に特に有効です。

  • 定常状態 – このモデルでは、テスト全体を通して同じ数の仮想ユーザーが使用されます。負荷テスト スクリプトで定義されているトランザクションを各仮想ユーザーで実行します。仮想ユーザーは、作業が終了すると再度トランザクションを実行します。トランザクション間の遅延はありません。指定されたシミュレーション時間に達すると、テストは終了します。

    このワークロード モデルは、特定の負荷レベルでのテスト対象システムの動作を調べる場合に特に有効です。

  • 動的 – 仮想ユーザー数をテストの実行中に手動で変更できます。仮想ユーザーの最大数を設定した後は、テスト中いつでもその範囲内で仮想ユーザー数を増減できます。シミュレーション時間は指定されません。テストを手動で終了させる必要があります。

    このワークロード モデルは、さまざまな負荷レベルで実験したり、負荷テスト時に負荷レベルを調節できるようにする場合に特に有効です。

  • 終日 – このワークロード モデルでは、柔軟な方法で負荷の分散を定義できます。負荷テストの任意の期間に、異なる数の仮想ユーザーを割り当てることができます。ユーザー タイプごとに異なる負荷分散を用いることができます。そのため、就業日ワークロードや週単位ワークロードなどの複雑なワークロード シナリオを設計できます。実行が開始されていない期間について、負荷テスト時に負荷レベルを調整することもできます。

    このワークロード モデルは、複雑で持続的なワークロード シナリオをできるだけ現実的な方法でモデル化する場合に特に有効です。

  • キュー – このモデルでは、トランザクションは定められた出現率に従ってスケジューリングされます。この比率は、シミュレーション時間とスクリプトの dcluser セクションで指定したトランザクション数から計算される平均間隔に基づいたランダム値です。すべての仮想ユーザーが定められたタスクを完了すると、負荷テストは終了します。
    注: このモデルでは、出現率はランダムに設定されるため、テストは指定されたシミュレーション時間より長くなる場合があります。たとえば、シミュレーション時間を 3,000 秒に指定して、100 個のトランザクションを実行する場合は、平均のトランザクション出現率は 30 秒になります。

    このワークロード モデルは、キュー メカニズムを用いて複数の同時リクエストを処理するワークロードをシミュレートする場合に特に有効です。エンド ユーザーではなく Web サーバーからリクエストを受け取るアプリケーション サーバー (たとえば、サーブレット エンジンやトランザクション サーバーなど) は通常、このようなキュー モデルを用いて正確にテストすることができます。

  • 検証 – 検証テストの実行は、拡張検証機能と組み合わせた場合に特に役立ちます。この組み合わせは、Web ベース アプリケーションの回帰テストにも用いることができます。検証テストは、個々のユーザー タイプに対して指定した数の実行を行います。

    このワークロードは、Web アプリケーションの検証を自動化する場合や、検証テストをコマンド ライン インターフェイスから開始する場合に特に有効です。

  • 増加ワークロードを構成する
    このワークロード モデルは、システムがクラッシュしたりレスポンス時間やエラーしきい値の許容範囲内で応答しなくなる負荷レベルを調べる場合に特に有効です。
  • 定常状態ワークロードを構成する
    このワークロード モデルは、特定の負荷レベルでのテスト対象システムの動作を調べる場合に特に有効です。
  • 動的ワークロードを構成する
    このワークロード モデルは、さまざまな負荷レベルで実験したり、負荷テスト時に負荷レベルを調節できるようにする場合に特に有効です。
  • 終日ワークロードを構成する
    このワークロード モデルは、複雑で持続的なワークロード シナリオをできるだけ現実的な方法でモデル化する場合に特に有効です。
  • キュー ワークロードを構成する
    このワークロード モデルは、キュー メカニズムを用いて複数の同時リクエストを処理するワークロードをシミュレートする場合に特に有効です。エンド ユーザーではなく Web サーバーからリクエストを受け取るアプリケーション サーバー (たとえば、サーブレット エンジンやトランザクション サーバーなど) は通常、このようなキュー モデルを用いて正確にテストすることができます。
  • 検証ワークロードを構成する
    このワークロードは、Web アプリケーションの検証を自動化する場合や、検証テストをコマンド ライン インターフェイスから開始する場合に特に有効です。
親トピック: ワークロードの調整
親トピック: ワークロードの調整


エージェントを割り当てる

大規模負荷テストをサポートする Silk Performer は、エージェントからワークロードへの割り当て機能すべてを 1 つのワークフロー ステップ内に統合し、エージェントの割り当て ワークフロー バー ボタンで使用できます。 ここでは、負荷テスト環境で仮想ユーザーの分散を設定し、仮想ユーザーを特定のエージェント、エージェント クラスタ、またはクラウド エージェント割り当てることができます。 ウィザードを使用して、特定のエージェントの推奨される値を計算できます。

エージェントの割り当て ワークフロー バー ボタンで、次の作業を開始できます。

  • 個々のエージェントを設定し、エージェントをワークベンチ エージェント プールへ追加する。
  • 個々のエージェントをプロジェクトに割り当てる。
  • 定義済みの機能を備えたエージェントのクラスタをプロジェクトに割り当てる。
  • クラウドで仮想マシンとして動作するエージェントを使用するようプロジェクトを設定する。
  • エージェントをワークロードに割り当てる
    ワークロードとエージェントの再生機能を定義したら、そのワークロードを実行するために、特定のエージェントまたはエージェント クラスタを割り当てます。
親トピック: 負荷テストの管理：全体の概要
親トピック: エージェントを割り当てる
関連概念
Silk Central インテグレーション
関連タスク
プロジェクト エージェントを構成する
コンピュータをエージェント プールに追加する
Cloud Agent Manager を起動する


エージェントをワークロードに割り当てる

この操作は、プロジェクト用にワークロードを構成した後にのみ実行できます。

  1. ワークフロー バー の テストの実行 をクリックします。 ワークフロー - ワークロードの設定 ダイアログ ボックスが表示されます。
  2. エージェントの割り当て タブをクリックします。
  3. 割り当ての種類 を選択します。
    • プロジェクト エージェントに静的に割り当てる ：この方法では、静的に特定のエージェント コンピュータ (エージェントのクラスタではなく) をユーザー プロジェクトに割り当てます。 この方法では、エージェントの有効性の検査は実行されず、エージェントのロックは無効です。 クラウドに配置されているエージェントを使用する場合は、この方法を選択します。
    • プロジェクト エージェントに動的に割り当てる ：この方法では、実行時にプロジェクト エージェントに対して、動的エージェント割り当てでワークロードが配信されます。 ワークロード配信では、各エージェントの機能に基づいた最適なワークロードのエージェントへの割り当てを作成するように、エージェント機能の仕様が強化されています。 この方法では、実行時のエージェントのロックは有効です。 別のコントローラでその時点で使用されていない応答するエージェントのみが、この方法で使用されます。
    • Silk Central エージェント クラスタに動的に割り当てる ： Silk Performer 経由の Silk Central のワークロード配信でも、動的ワークロードのエージェントへの割り当てが使用されます。 Silk Performer 内で、テストのワークロードを配信するエージェント クラスタ名 (ドロップ リストから) を選択します。 Silk Central では、クラスタに割り当てられたエージェント コンピュータのリストが用意されます。 この方法では、実行時に個々のエージェントの機能に基づいて、ワークロードが特定のエージェントに割り当てられます。 Silk Central に接続すると、使用可能なエージェント クラスタの一覧が表示されます。 右端のウィンドウに、選択したエージェント クラスタに現在関連付けられているエージェントが表示されます。
  4. テストのワークロードを実行するエージェントを定義します。
    • プロジェクト エージェントに静的に割り当てる を選択した場合は、 ユーザーを均等に分散する チェック ボックスをオンにして、各エージェントの一般的な再生機能に応じて、既存のすべてのユーザー タイプをすべてのエージェントに均等に分散できます。 クラウド内で仮想マシンとして動作するエージェントを使用するには、 クラウド エージェントを使用する チェック ボックスをオンにします。 クラウド内のエージェントを管理するには、 Cloud Agent Manager をクリックします。
    • プロジェクト エージェントに動的に割り当てる を選択した場合、実行時にプロジェクト エージェントに対して、動的エージェント割り当てで自動的にワークロードが配信されます。
    • Silk Central エージェント クラスタに動的に割り当てる を選択した場合、Silk Central へのログインを求められます。 ログインが完了したら、使用可能なエージェント クラスタを選択できます。
    エージェント リスト ボックスに、使用可能なエージェントが表示されます。
  5. 各エージェントの再生機能に基づいて、そのエージェントで実行できる仮想ユーザー全体のうち最大何パーセントまで割り当てるか指定するには、エージェント リソース使用率 チェック ボックスをオンにします。
  6. 複数のエージェントにワークロードを分散させるには、エージェント間で負荷を分散する チェック ボックスをオンにします。
  7. プロジェクト エージェントに静的に割り当てる を選択した場合、エージェントの割り当て ページの下の表を使用して、ユーザー グループのワークロード割り当てを定義します。
    注: 使用可能なオプションは、選択したワークロード モデルによって異なります。
  8. 現在使用可能なエージェント コンピュータに対する仮想ユーザーの割り当てを表示するには、ユーザー分散の概要 をクリックします。確認したら 閉じる をクリックします。
  9. 設定を保存するには、OK をクリックします。

構成したエージェントの割り当て設定に基づいて、ワークロードがエージェントに割り当てられます。 必要なワークロードを実行するのに、必要な機能を持つエージェントが十分にない場合は、エージェントの割り当てを受けなかったユーザー タイプに関するエラー メッセージと詳細が表示されます。

  • [エージェントの割り当て] タブ
    必要な負荷を配信するためにワークロード プロファイルにエージェントを割り当てる方法を構成できます。特定のプロジェクト エージェントへの静的または動的割り当てや、Silk Central エージェント クラスタへの動的割り当てが含まれます。
親トピック: エージェントを割り当てる
親トピック: エージェントを割り当てる


エージェントの試行

負荷テストを開始する前に、作成したテストスクリプトが負荷テストに使用する予定のすべてのエージェントで機能することを確認することは有用です。

[エージェントの試行] の設定

[エージェントの試行] を実行する際には、以下のオプションが自動的に設定されます (「再生の設定」も参照)。

  • ストレス テスト チェック ボックスはオン (思考時間が無効化されている場合)。
  • シミュレーション時間の後で仮想ユーザーを停止する (キューイングのワークロード) チェック ボックスはオフ。
  • 仮想ユーザー ログ ファイル (.log) チェック ボックスはオン。
  • 仮想ユーザー出力ファイル (.wrt) チェック ボックスはオン。
  • 仮想ユーザー レポート ファイル (.rpt) チェック ボックスはオン。
  • 仮想ユーザー エラー レポート ファイル (.rpt) チェック ボックスはオン。
  • TrueLog ファイル (.xlg) チェック ボックスはオフ。
  • TrueLog On Error ファイル (.xlg) チェック ボックスはオン。
  • 時系列データ (.tsd) チェック ボックスはオフ。
  • ログの詳細チェック ボックス (結果 > ログ および 結果 > インターネット ログ ページ) はすべてオン。
  • すべての測定値グループを有効にする チェック ボックスはオフ。
  • 帯域幅 オプションは High Speed (unlimited) に設定されます。
  • ダウンストリーム オプションは [無制限] に設定されます。
  • アップストリーム オプションは [無制限] に設定されます。
  • 二重 チェック ボックスはオフ。
  • エージェントでのテスト スクリプトの試行
    単一の仮想ユーザーでテスト スクリプトを試行を行って、実際の負荷テストを開始する前に、さまざまなエージェントでスクリプトが機能することを確認できます。
  • エージェントの試行の要約
    エージェントの試行の要約 ページで、最新のエージェントの試行結果を解析することができます。
親トピック: 負荷テストの管理：全体の概要
親トピック: 負荷テストの管理


エージェントでのテスト スクリプトの試行

さまざまなエージェントでスクリプトの試行を実行する前に、テスト スクリプトを記録するか、手動で作成してください。
  1. Silk Performer のワークフロー バーの エージェントの試行 をクリックします。 ワークフロー - エージェントの試行 ダイアログ ボックスが表示されます。
  2. 実行するユーザー タイプ リストから 1 つ以上のユーザー タイプを選択します。 各ユーザー タイプは、それぞれの選択したエージェント上で実行されます。例：2 つのユーザー タイプと 3 つのエージェントを選択した場合、Silk Performer は合計 6 つのテストを実行します。
  3. エージェント リストから 1 つ以上のエージェントを選択します。
    注: ローカル エージェントとクラウド エージェント、またはより明示的にクラウドの地域を選択できます。クラウドの地域を選択した場合、それぞれの地域のすべてのクラウド エージェントがテストされます。個々のクラウド エージェントをテストすることはできません。Cloud Agent Manager でクラウド エージェントを開始できます。クラウド エージェントでテストを実行できる状態になるまで、時間がかかる場合があります。クラウドの地域の横には到達可能でテスト実行の準備ができているクラウド エージェントの数が記されています。例：2/4 エージェント 準備完了 は、4 個のエージェントが Cloud Agent Manager で開始され、そのうちの 2 個が実行する準備ができていることを意味します。
  4. 省略可能： 実行中にスクリプトの思考時間を考慮したい場合は、思考時間の有効化 をクリックします。このオプションは、デフォルトでは無効化されています。
    注: 通常、エージェントの試行は、テスト スクリプトがさまざまなエージェントで正しく機能することを確認するために使用されます。思考時間はより現実的なユーザーの挙動、つまり、より現実的な負荷を作成するためのものなので、このような機能テスト時には無視することができます。負荷の問題は機能テストでは無視できます。
  5. 実行 をクリックして、指定したエージェントでスクリプトを試行します。
  6. クラウドの地域を選択してテストした場合、見積もられた Micro Focus Credits の消費量の確認 ダイアログ ボックスが表示されます。実行時に消費されるであろう Micro Focus Credits の見積もり額が提示されます。承認して実行 をクリックします。
監視 ウィンドウが開き、エージェントの試行の実行の進行状況について詳細な情報が表示されます。すべての実行が終了すると、エージェントの試行の要約 が表示されます。
親トピック: エージェントの試行


監視を構成する

テストを実行する前に、Performance Explorer (Silk Performer サーバー監視ツール) がそのテストで使用するローカルおよびリモート サーバーをどのように監視するかを定義する必要があります。 サーバーを監視すると、サーバーのボトルネックが明らかになり、その場所を特定して解決できるため、オペレーティング システムとアプリケーション サーバーのパフォーマンスを調べることができます。

次の 3 つの監視オプションが使用できます。

  • デフォルトの監視 - このオプションは、テスト対象のアプリケーション タイプに基づいて、推奨されるデータ ソースのセットを監視するよう Performance Explorer に指示します。 これは、Performance Explorer ワークスペースの 自動的に監視を開始する と デフォルト監視テンプレートを使用する を有効にするのと同じです (設定 > アクティブ プロファイル > 再生 > 監視 > デフォルト監視テンプレートを使用する)。

  • カスタム監視 - このオプションでは Performance Explorer が監視モードで開き、データ ソース ウィザード - システムの選択 ダイアログ ボックスが表示され、手動でデータ ソースを設定できます。 Performance Explorer 監視プロジェクト設定は、Silk Performer プロジェクト設定とともに保存されます。

  • 監視なし - このオプションを使用すると、ローカルまたはリモート サーバーを監視せずにテストを実行できます。 このオプションでは、自動的に監視を開始する 設定が無効になります (設定 > アクティブ プロファイル > 再生 > 監視 > デフォルト監視テンプレートを使用する)。

  • 監視オプションを定義する
    監視オプションの選択方法およびテストの処理方法について説明します。
  • サーバーの監視
    サーバーの監視の重要性について説明します。
  • サーバー監視のテンプレートをセットアップする
    負荷テストの実行中にライブで監視を実行するテンプレートをセットアップし、テストの後で調査および相関用にサーバー側の結果情報を生成できるようにします。
親トピック: 負荷テストの管理：全体の概要
親トピック: 負荷テストの管理
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
関連概念
カスタム データ ソース
関連資料
定義済みのデータ ソース


監視オプションを定義する

  1. ワークフロー バーの 監視の設定 をクリックします。 ワークフロー - 監視の設定 ダイアログ ボックスが表示されます。
  2. 次のいずれかのオプションを選択して、次へ をクリックします。

    • デフォルトの監視 - このオプションは、テスト対象のアプリケーション タイプに基づいて、推奨されるデータ ソースのセットを監視するよう Performance Explorer に指示します。 これは、Performance Explorer ワークスペースの 自動的に監視を開始する と デフォルト監視テンプレートを使用する を有効にするのと同じです (設定 > アクティブ プロファイル > 再生 > 監視 > デフォルト監視テンプレートを使用する)。

    • カスタム監視 - このオプションでは Performance Explorer が監視モードで開き、データ ソース ウィザード - システムの選択 ダイアログ ボックスが表示され、手動でデータ ソースを設定できます。 Performance Explorer 監視プロジェクト設定は、Silk Performer プロジェクト設定とともに保存されます。

    • 監視なし - このオプションを使用すると、ローカルまたはリモート サーバーを監視せずにテストを実行できます。 このオプションでは、自動的に監視を開始する 設定が無効になります (設定 > アクティブ プロファイル > 再生 > 監視 > デフォルト監視テンプレートを使用する)。

    (デフォルト監視およびカスタム監視のみ) ログを有効にしていると、確認ダイアログ ボックスにより通知されます。 ログがテスト結果に悪影響を及ぼすことがあります。
  3. OK をクリックしてログ設定を承認するか、キャンセル をクリックしてログ オプションを調整します (設定 > アクティブ プロファイル > 結果 > ログ)。
  4. (カスタム監視のみ) Performance Explorer が開始され、データ ソース ウィザード が開きます。 ウィザードに従って手順を実行します。
  5. ワークフロー - ワークロードの設定 ダイアログ ボックスが表示されます。 OK をクリックして監視設定を承認します。
親トピック: 監視を構成する
関連概念
カスタム データ ソース
関連資料
定義済みのデータ ソース


テストの実行

エージェント コンピュータ、仮想ユーザー、トランザクションに関するリアルタイム情報は、負荷テストの実行中に表示されます。 ターゲット サーバーのリアルタイムのパフォーマンス監視は、グラフィック形式で表示されます。

検証実行としてテストが構成されている場合は、以下のオプションが、指定された値に自動的に設定されます。
  • ベースライン レポート ファイルが自動的に作成されます。
  • シミュレーション時間の後で仮想ユーザーを停止する (キューイングのワークロード) チェック ボックスはオフ。
  • 仮想ユーザー ログ ファイル (.log) チェック ボックスはオフ。
  • 仮想ユーザー レポート ファイル (.rpt) チェック ボックスはオン。
  • 仮想ユーザー エラー レポート ファイル (.rpt) チェック ボックスはオン。
  • 時系列データ (.tsd) チェック ボックスはオフ。
  • 負荷テストを実行する
    ターゲット サーバーに対してテスト スクリプトを実行して、複数の仮想ユーザーとワークロードがサーバーのパフォーマンスに与える影響を確認します。
親トピック: 負荷テストの管理：全体の概要


負荷テストを実行する

テスト環境をセットアップして、すべてのテスト設定を構成したら、負荷テストを実行します。

  1. ワークフロー バー の テストの実行 をクリックします。 ワークフロー - ワークロードの設定 ダイアログ ボックスが表示されます。
  2. 負荷テストで使用する予定のワークロードを構成します。
  3. (省略可能) テストを開始せずにエージェント接続を初期化するには、ワークロードの設定 ダイアログ ボックスの 接続 をクリックします。
    1. 結果ファイル サブディレクトリの新規作成 ダイアログ ボックスで OK をクリックします。
    2. 監視ビューから手動でテストを開始するには、Silk Performer ツールバーの すべて開始 をクリックします。
  4. 負荷テストを開始するには、実行 をクリックします。
  5. 結果ファイル サブディレクトリの新規作成 ダイアログ ボックスで OK をクリックします。 (省略可能) 結果サブディレクトリの名前を指定するには、一意なサブディレクトリを自動的に生成する チェック ボックスをオフにし、結果ファイルのサブディレクトリを指定する テキスト ボックスに新しいサブディレクトリの名前を入力します。
Silk Performer の表形式の監視ビューと Performance Explorer のグラフィカルな監視ビューを表示することによって、テストの進行状況とサーバーの活動状況を監視します。
親トピック: テストの実行
親トピック: 負荷テストの実行
関連概念
ワークロードの調整
入門


結果を検討する

Silk Performer にはテスト結果の表示、レポート、および分析に利用できるアプローチがいくつか用意されています。 定義しておいた測定をテスト中に行い、さまざまなグラフィック形式および表形式で表示することができます。 オプションは、以下のとおりです。
  • Performance Explorer：テスト結果を表示するための主要なツールです。 グラフィック機能を幅広く備えており、いくつでも必要な数の要素を持つ結果を、ユーザー定義によるグラフで表示します。 異なるテストの結果を比較することができます。 サーバー監視のための幅広い機能があります。 ユーザー タイプ統計値を時系列テスト結果情報と組み合わせた包括的な HTML ベースの概要レポートも利用できます。
  • TrueLog On Error：Silk Performer は、さまざまなアプリケーションの種類について、負荷時の視覚的検証機能を提供します。 負荷テスト中に、詳細なコンテンツ検証チェックと完全なエラーの詳細分析と組み合わせることができます。
  • 仮想ユーザー レポート ファイル：有効になっていると、これらのファイルにはユーザーごとのシミュレーション結果が格納されます。 各ユーザーの詳細な測定値が、表形式で表示されます。
  • 仮想ユーザー出力ファイル：有効になっていると、これらのファイルにはテスト スクリプトに使用される write 文の出力が格納されます。
  • ベースライン レポート：XML/XSL ベースの詳細なレポートであり、要約テーブル、トランザクション レスポンス時間の詳細、アクセスされたすべての HTML ページのタイマ、Web フォーム、発生したエラーなどが提供されます。 この情報はベースライン テストに関係のあるすべてのユーザー タイプで利用できます。
  • Silk Central レポート：Silk Performer プロジェクトは、Silk Central (Silk Central) テスト計画に統合され、Silk Central から直接実行されます。 これにより、強力なテスト結果分析とレポート作成が可能になります。 Silk Central レポート作成の詳細については、『 Silk Central ヘルプ』を参照してください。
  • 負荷テストの要約
    負荷テストの要約 ページで、前の負荷テストの結果を解析することができます。
親トピック: 負荷テストの管理：全体の概要


負荷テストの要約

負荷テストの実行が完了すると、 負荷テストの要約 ページが表示されます。 このページは、結果ツリーから、またはワークフロー バーで 結果の検討 をクリックして開くこともできます。 負荷テストの要約 ページには次の項目が含まれます。

  • 簡易要約: テスト期間、ユーザー、エージェント、エラーに関する概要を示します。
  • 利用可能なユーザー タイプ 領域: ユーザー タイプごとの結果を詳しく調べるために使用することができます。 リストから、ユーザー タイプを選択します。

右側にある 次のステップ および 結果ファイルの分析 領域で、次のアクションを実行できます。

  • Performance Explorer の詳細な指標をすべて表示するには 負荷テストの分析 をクリックします。
  • Performance Explorer のエラー (発生した場合) を表示するには エラーの分析 をクリックします。 Performance Explorer の エラーの詳細 タブで、エラーをさらに詳しく調べることができます。 エラーをダブルクリックして TrueLog Explorer を開きます。 これは、負荷テストを開始する前に、 ワークフロー - ワークロードの設定 ダイアログ ボックスの TrueLog On Error を有効にしている場合のみ可能です。
  • ベースラインと比較 をクリックすると、ベースラインの結果とこのテストの結果を比較することができます。 このボタンはすでにベースラインを設定している場合にのみ表示されます。
  • ベースラインとして設定 をクリックすると、次の負荷テスト用にベースライン (参照レベル) を実行したテストが作成されます。
  • 詳細なレポートの検討 をクリックすると、詳細な負荷テスト レポートが開きます。
  • 結果フォルダを開く をクリックすると、各仮想ユーザーについて、仮想ユーザー レポート ファイルや仮想ユーザー出力ファイルのような他の結果ファイルが表示されます。
注: テストが完了するたびに、要約ページが表示されないようにするには、 監視 ページのツールバーで 要約ページの表示 ボタンを無効にします。
親トピック: 結果を検討する
親トピック: 結果を検討する


Silk Performer 21.0 へアップグレードする

ライセンス:Silk Performer 21.0 には Silk Performer 21.0 のライセンスが必要です。

プロジェクト ファイル: プロジェクト ファイルは、現行バージョンで開くことで、Silk Performer の以前のバージョンからアップグレードすることができます。 Silk Performer の現行バージョンから旧バージョンへのダウングレードは、まだ検証されていないためサポートされていません。

インストールに関する情報

並行インストール:Silk Performer 21.0 (コントローラおよびエージェント) は、Silk Performer の任意の旧バージョンと一緒に同じマシン上にインストールすることができ、その場合もそれらは互いに干渉しません。

インストール手順については、『Silk Performer インストール ガイド』を参照してください。

評価:インストール時には、次のバージョンのいずれかをインストールします。

  • 評価版 - Silk Performer の評価版をインストールすると、製品のすべての機能を 45 日間使用できます。使用は 10 仮想ユーザーに制限されています。後から、製品版へのアップグレードをご希望の場合には、営業担当までお問い合わせください。
  • ライセンス版 - Silk Performer ライセンスが必要な Silk Performer の無制限版をインストールします。

評価版

Silk Performer 21.0 の評価版をインストールした場合、30 日間にわたって製品の全機能を利用できますが、仮想ユーザー数は 10 に限られます。 評価期間が終了すると、ソフトウェアは動作しなくなります。

Silk Performer 21.0 の操作に徐々に慣れるため、『Web 負荷テスト チュートリアル』(英語) に目を通すことをお勧めします。 この PDF 形式のチュートリアルは、Silk Performer のドキュメント セットに含まれています。

Silk Performer 21.0 の完全版にアップグレードする場合は、販売代理店に問い合わせてください。

親トピック: 入門


アプリケーションの種類ごとのメモリ占有量

Web ビジネス トランザクション (HTML/HTTP)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,935 | 1,935 | 1.89
25 | 10,323 | 413 | 0.40
50 | 20,400 | 408 | 0.40

Web 低レベル (HTTP)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,044 | 2,044 | 2.00
25 | 12,136 | 485 | 0.47
50 | 22,732 | 455 | 0.44

Web ブラウザ駆動 (AJAX)

ブラウザ駆動の Web 負荷テストのメモリ占有量は、複数の要因によって決まります。ブラウザ駆動の負荷テストは再生に Internet Explorer を使用するため、以下の点を認識しておく必要があります。
  • ブラウザ (Internet Explorer) はメモリを使用します。使用する Internet Explorer のバーションによって、このメモリ占有量は異なります。
  • メモリの使用量は、Internet Explorer でどのようにキャッシング設定を構成したかによって異なります。
  • テスト対象アプリケーションはメモリを使用しますが、多くの場合、仮想ユーザーがアプリケーションとやり取りすると使用量が増加します。

ブラウザ駆動の Web 負荷テストを実施する際に、仮想ユーザーが必要とするメモリ量を把握するには、スクリプトの試行を実行してメモリ使用量を監視します (正確な結果を表示するには、クライアントの表示 チェック ボックスをオフにします)。テスト対象アプリケーションを使用していると、メモリ使用量が増加する可能性があることに注意してください。スクリプト内の特定の位置に BrowserStart 関数をスクリプト記述して、ブラウザの状態 (クッキー、キャッシュ、および履歴) をリセットすることをお勧めします。

Silverlight

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 11,040 | 11,040 | 10.78
25 | 13,640 | 546 | 0.53
50 | 16,152 | 323 | 0.32

Flash Remoting

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,912 | 1,912 | 1.87
25 | 12,776 | 511 | 0.50
50 | 20,896 | 418 | 0.41

WebDAV (MS Outlook Web Access)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 3,588 | 3,588 | 3.50
25 | 17,724 | 709 | 0.69
50 | 33,364 | 667 | 0.65

Remedy Ars Web

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,288 | 2,288 | 2.23
25 | 9,688 | 388 | 0.38
50 | 17,340 | 347 | 0.34

電子メール (SMTP/POP)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,904 | 1,904 | 1.86
25 | 5,268 | 211 | 0.21
50 | 8,912 | 178 | 0.17

ディレクトリ サーバー (LDAP)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,920 | 2,920 | 2.85
25 | 未テスト | N/A | N/A
50 | 未テスト | N/A | N/A

FTP

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,420 | 2,420 | 2.36
25 | 5,352 | 214 | 0.21
50 | 8,348 | 167 | 0.16

TCP/IP ベースのアプリケーション

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,912 | 1,912 | 1.87
25 | 5,624 | 225 | 0.22
50 | 9,500 | 190 | 0.19

混合プロトコル

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | N/A | N/A | N/A
25 | N/A | N/A | N/A
50 | N/A | N/A | N/A

TN3270

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,224 | 2,224 | 2.17
25 | 7,424 | 297 | 0.29
50 | 13,652 | 273 | 0.27

TN5250

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,495 | 1,495 | 1.46
25 | 未テスト | N/A | N/A
50 | 未テスト | N/A | N/A

VT100/VT200

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,069 | 2,069 | 2.02
25 | 7,168 | 287 | 0.28
50 | 10,664 | 213 | 0.21

SAPGUI

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 30,656 | 30,656 | 29.94
25 | 110,180 | 4,407 | 4.30
50 | 194,532 | 3,891 | 3.80

SAP NetWeaver (Web)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,072 | 2,072 | 2.02
25 | 10,084 | 403 | 0.39
50 | 17,936 | 359 | 0.35

PeopleSoft

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,936 | 1,936 | 1.89
25 | 9,812 | 392 | 0.38
50 | 16,408 | 328 | 0.32

Oracle 11i

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 22,636 | 22,636 | 22.11
25 | 34,748 | 1,390 | 1.36
50 | 51,104 | 1,022 | 1.00

Siebel 7 Web Client (IE Option Pack を含む)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,256 | 2,256 | 2.20
25 | 11,532 | 461 | 0.45
50 | 20,576 | 412 | 0.40

Radius

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 16,104 | 16,104 | 15.73
25 | 21,284 | 851 | 0.83
50 | 26,268 | 525 | 0.51

XML/SOAP (Web サービス クライアントの記録)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,676 | 2,676 | 2.61
25 | 8,460 | 338 | 0.33
50 | 16,436 | 329 | 0.32

Visual Studio .NET アドオンを使用した .NET Framework

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 19,964 | 19,964 | 19.50
25 | N/A | N/A | N/A
50 | N/A | N/A | N/A

Java フレームワーク

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 13,044 | 13,044 | 12.74
25 | 22,356 | 894 | 0.87
50 | 27,920 | 558 | 0.55

IIOP – Corba / EJB (RMI over IIOP)

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,736 | 2,736 | 2.67
25 | 31,696 | 1,268 | 1.24
50 | 61,960 | 1,239 | 1.21

Jacada

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 15,556 | 15,556 | 15.19
25 | 24,020 | 961 | 0.94
50 | 31,552 | 631 | 0.62

Citrix サーバー

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 3,900 | 3,900 | 3.81
25 | 9,000 | 360 | 0.35
50 | 11,500 | 230 | 0.22

Visual Basic

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,100 | 2,100 | 2.05
25 | 4,128 | 165 | 0.16
50 | 6,276 | 126 | 0.12

Oracle

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,732 | 1,732 | 1.69
25 | 3,696 | 148 | 0.14
50 | 5,792 | 116 | 0.11

ODBC

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 5,468 | 5,468 | 5.34
25 | 16,918 | 677 | 0.66
50 | 29,016 | 580 | 0.57

DB2 CLI

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 5,168 | 5,168 | 5.05
25 | 21,952 | 878 | 0.86
50 | 37,468 | 749 | 0.73

Tuxedo (全機能)+ Clarify

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 2,400 | 2,400 | 2.34
25 | 未テスト | N/A | N/A
50 | 未テスト | N/A | N/A

Silk Test

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 13,000 | 13,000 | 12.7
25 | N/A | N/A | N/A
50 | N/A | N/A | N/A

Siebel 6/DB2

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 未テスト | N/A | N/A
25 | 未テスト | N/A | N/A
50 | 未テスト | N/A | N/A

Siebel 6/Oracle

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 9,428 | 9,428 | 9.21
25 | 66,540 | 2,662 | 2.60
50 | 125,720 | 2,514 | 2.46

Siebel 6/SQL Server

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 未テスト | N/A | N/A
25 | 未テスト | N/A | N/A
50 | 未テスト | N/A | N/A

GUI レベルのテスト

ユーザー | 実行全体 (KB) | 1 ユーザーあたり (KB) | 1 ユーザーあたり (MB)
1 | 1,788 | 1,788 | 1.75
25 | 5,080 | 203 | 0.2
50 | 未テスト | 未テスト | 未テスト

GUI レベルのテストには、ターミナル サービス セッションおよび Silk Test の使用に伴って、次のように追加のメモリ リソースが必要になります。

  • Windows ターミナル サービスでは、1 仮想ユーザーにつき 6,300 KB
  • SilkTest では、1 仮想ユーザーにつき 13,000 KB
  • Silk Performer の Session Manager では、1 仮想ユーザーにつき 1,092 KB
親トピック: 入門


サンプル Web 2.0 アプリケーション

Silk Performer には、Web 2.0 アプリケーションのテストを習得するために使用できる最新のサンプル Web アプリケーションが備えられています。 InsuranceWeb サンプル Web アプリケーションは、ExtJS および JSF フレームワークに基づいて作成され、AJAX 技術を採用し、JSON と XML を介して通信します。

サンプル アプリケーションは、http://demo.borland.com/InsuranceWebExtJS/ でホストされます。

親トピック: 入門
親トピック: Web 負荷テストの概要
親トピック: ブラウザ駆動型負荷テストの概要
前のトピック: ポップアップ ウィンドウのサポート
次のトピック: サンプル アプリケーションのポップアップ ウィンドウ
親トピック: サンプル アプリケーション


Silk Performer のキーボード ショートカット

Silk Performer では、さまざまなキーボード ショートカットを利用して作業効率を高めることができます。

全般

ヘルプを開く | F1
開始画面を開く | F11
プロジェクト属性を開く | Ctrl + Alt + A
Workbench を閉じる | Alt + F4

ファイル管理

ファイルの新規作成 | Ctrl + N
ファイルを開く | Ctrl + O
ファイルの保存 | Ctrl + S
ファイルの印刷 | Ctrl + P

スクリプト編集

選択項目/行のコピー | Ctrl + C
選択項目/行の貼り付け | Ctrl + V
選択項目/行の切り取り | Ctrl + X
選択項目/行の複製 | Ctrl + D
すべて選択 | Ctrl + A
元に戻す | Ctrl + Z
やり直し | Ctrl + Y
行を上に移動 | Alt + ↑
行を下に移動 | Alt + ↓
コード スニペットの挿入 | Tab または Return
スニペット プレースホルダの移動 (循環) | Tab
コードブロックに移動 (スニペット) | Return
複数行の選択 | Ctrl + Alt + マウスの左ボタン
コメント | Ctrl + Q
コメント解除 | Ctrl + W
コメントの切り替え | Ctrl + Shift + Q
行の上を改行 | Ctrl + Enter
小文字に変換 | Ctrl + U
大文字に変換 | Ctrl + Shift + U

エディタ ヘルパー

API ヘルプを開く | F1 (関数にカーソルを合わせて)
コード補完の表示 | Ctrl + Space
コード補完の非表示 | Esc
パラメータ情報の表示 (ツールチップ) | Ctrl + I
String Converter を開く | Ctrl + J

ブックマーク

ブックマークの追加/削除 | Ctrl + F2
次のブックマークへ移動 | F2
前のブックマークへ移動 | Shift + F2
すべてのブックマークをクリア | Ctrl + Shift + F2

スクリプト ナビゲーション

行番号へ移動 | Ctrl + G
定義へ移動 | F12
前の場所へ移動 | Ctrl + - (マイナス)
拡大/縮小 | Ctrl + マウス ホイール

検索/置換

検索ダイアログを開く | Ctrl + F
置換ダイアログを開く | Ctrl + R
次を検索 | F3
前を検索 | Shift + F3

スクリプト実行

スクリプトのコンパイル | F7
スクリプトの試行 | F8
ベースラインの実行 | F9
テストの実行 | F10
すべて停止 | Ctrl + Pause
負荷テストの中止 | Ctrl + T
強制終了 | Ctrl + K

Recorder

アプリケーションの開始 | Ctrl + W
記録の一時停止 | Ctrl + B
記録の停止 | Ctrl + S
記録設定の編集 | Ctrl + E
トランザクションの新規作成 | Ctrl + N
タイマ セッションの新規作成 | Ctrl + U
タイマの開始 | Ctrl + I
タイマの停止 | Ctrl + P
コメントの挿入 | Ctrl + A
TrueLog セクションの挿入 | Ctrl + ,
スクリプトの生成 | Ctrl + G
クリア | Ctrl + D
スクリプト設定の編集 | Ctrl + H
GUI サイズの変更 | Ctrl + Z
常に手前に表示 | Ctrl + T

TrueLog Explorer

TrueLog の追加 | Ctrl + O
TrueLog on Error ファイルの追加 | Ctrl + U
クイック検索 | Ctrl + D
検索 | Ctrl + F
次を検索 | F3
前を検索 | Shift + F3
エラーの検索 | Ctrl + E
次のエラーを検索 | F5
前のエラーを検索 | Shift + F5
TrueLog のステップ スルー | Strg + S
スクリプトの試行 | F8
アニメーションの一時停止 | Ctrl + P
すべての TrueLog を展開 | Ctrl + T

Browser Application

Locator Spy 内の検索 | Ctrl + F
タブの新規作成 | Ctrl + N
DOM 階層ツリーの表示 | F12 または Pause/Break
ステップ再生 (再生モード時) | F11
親トピック: 入門


Silk Performer の構成

Silk Performer の構成オプションを使用すると、特定のプロジェクトと関連付けられた Silk Performer のグローバル設定を設定できます。

Silk Performer ワークベンチ: Silk Performer 負荷テストの構成の基本的な特性は、ここで設定します。たとえば、テストで使用するエージェント コンピュータ、テストで使用および生成するファイルが存在するディレクトリ、テスト スクリプトのテキストのレイアウト、結果情報の生成方法などに関連する設定です。

Silk Performer Recorder: Silk Performer の記録およびスクリプト生成プログラムである Silk Performer Recorder で使用される基本的な設定は、ここで定義します。 テスト スクリプトでモデル化するネットワーク トラフィックの取得と記録の設定などです。 ここでは、データの取得と記録の間に使用するクライアント アプリケーションのプロファイルを設定して管理します。 プロキシの追加または削除、およびプロキシの設定の編集を行うこともできます。 また、Silk Performer Recorder が使用する統合された Web サーバーのポートを設定し、クライアント アプリケーションの開始と同時に記録の開始を有効にできます。

リモート エージェント:Silk Performer では、リモート エージェント コンピュータを LAN 内、インターネット上、さらにはファイアウォールの背後のどこにでも配置でき、HTTP および SOCKS プロキシを通して接続できます。 リモート エージェントとコントローラの間の通信を構成し、セキュアな分散環境内での暗号化されたセキュアな接続を組み込むことができます。

Java の構成:Java フレームワーク プロジェクトおよび Java ベースの API では、Java SDK 環境が必要です。 Java SDK のバージョン、その場所、およびクラスパスやオプションの Java 仮想マシン設定などのパラメータを、ここで構成できます。

  • システム設定
    Silk Performer の構成オプションが一覧表示されます。
  • リモート エージェント
    リモート エージェントを配置できる場所、および使用できる通信プロトコルの種類について説明します。
  • クライアント証明書
    Web ブラウザでのクライアント証明書の処理や、クライアント証明書のエクスポートなど、クライアント証明書の概要について説明します。
  • カスタム画面レイアウト
    プレゼンテーションでは低解像度で、その結果、表示ペイン数が少なくても十分ですが、高解像度画面を使用すると、より多くの表示ペインを快適に使用することができます。
  • 複数のバージョンの Silk Performer を管理する
    Silk Performer の各ファイル タイプに対して開かれる Silk Performer のデフォルト バージョンを指定する方法を説明します。
親トピック: Silk Performer Workbench 21.0


システム設定

Silk Performer のテスト構成の基本的な特性は、システム設定を使用して定義します。システム設定にアクセスするには、設定 > システム をクリックします。
  • ワークベンチの設定
    ワークベンチの基本的な特性を設定します。
  • 記録の設定
    テスト スクリプトでモデル化するネットワーク トラフィックの取得と記録に使用される基本的な設定を定義します。
  • エージェントの設定
    エージェント プールを管理したり、エージェントの詳細設定を行うことができます。
  • Java の設定
    Silk Performer に対する Java の設定を行う方法を説明します。
親トピック: Silk Performer の構成
関連タスク
Eclipse で Silk Performer システム設定を構成する


ワークベンチの設定

ワークベンチの設定にアクセスするには、設定 > システム > ワークベンチ をクリックします。以下のタブを利用できます。
タブ | 説明
ディレクトリ | ここでは、Silk Performer が使用するさまざまな種類のファイルを格納するディレクトリを指定できます。プロジェクト、カスタム ユーザー データ ファイル、カスタム インクルード ファイルに対するデフォルトのディレクトリはインストール中にセットアップされますが、ここで別のディレクトリを指定できます。
レイアウト | ここでは、スクリプト ファイルにテキストを手動で入力するときのエディタの動作をカスタマイズできます。書式、印刷、および Silk Performer メニュー ツリー エディタでキーワードが強調表示される方法を設定できます。
コントロール

ここでは、コントローラのオプションを設定できます。コントローラ コンピュータがエージェント コンピュータまたは仮想ユーザーと通信すべき時間間隔を指定できます。この時間内に通信できないと、タイムアウト エラーが通知されます。ここでは、コントローラ コンピュータがレスポンスを受信するまでエージェント コンピュータに ping を行う間隔、プロセス当たりの仮想ユーザー数、および仮想ユーザーの停止までに許容されるトランザクション失敗回数を設定します。

注: 仮想ユーザーの設定内容は、プロジェクトごとに格納されます。 この設定内容を有効にするには、プロジェクトを開く必要があります。 プロジェクトのロード後、オプションは、その設定内容で構成された特定のプロジェクトにのみ適用されます。
結果

時系列データ (.tsd) チェック ボックスは、時系列データ ファイル (.tsd) が作成されたエージェント コンピュータ上の時系列データ ファイルをマージし、マージされたファイルのみをコントローラ コンピュータに送信させるのに、使用します。これにより、処理が早くなり（いくつかのコンピュータによってデータが処理されるため）、ネットワーク トラフィックが軽減されます。大規模で長期間続く負荷テストでは、この機能は特に有用です。ただし、欠点は、個々の仮想ユーザーの時系列データ ファイルをコントローラ コンピュータで利用できないことです。

注: このオプションを無効にした場合、負荷テストの全体的な結果を取得するために、Performance Explorer の時系列データ ファイルを手動でマージする必要があります。
ワークスペース | この領域では、一般的なワークベンチの設定を行います。 オプションには、開始の設定、ワークフローの設定、ファイルの処理、ダイアログ ボックスの表示などがあります。
ライセンス管理 | この領域では、ライセンス サーバー、および Silk Performer オンライン ライセンス モデルの設定を行います。
Silk Central | この領域では、Silk Central との接続の設定を行います。
ソース管理 | この領域では、一般的な SCC 接続パラメータの設定を行います。
  • ディレクトリ設定を構成する
    各種の Silk Performer ファイル タイプが格納されるディレクトリを指定します。
  • レイアウト設定を構成する
    タブ サイズ、自動インデント、テキストの種類、フォント、および色を設定します。
  • 印刷レイアウト設定を構成する
    印刷されるスクリプト ファイルの行番号、折り返しマーカー、およびフォントのタイプ、サイズ、スタイルなどを構成します。
  • コード補完
    BDL コード補完機能は、関数、変数および定数を自動的に補完することにより、スクリプト エラーを削減し、BDL ファイルへのテキスト入力の手間を省くことができます。
  • ユーザー定義の関数、変数、および定数
    ユーザー定義の関数、変数および定数についてコード補完機能を利用できるようにするには、利用する関数、変数または定数を定義する .bdf または .bdh ファイルと同じディレクトリに同じ名前の新しいファイルを作成する必要があります。
  • コントロール設定を構成する
    仮想ユーザー、リモート エージェントの通信、および、データ ファイルの圧縮の設定を構成します。
  • 結果設定を構成する
    エージェントの時系列データをマージするように Silk Performer を構成します。これにより、Silk Performer は長時間の負荷テストの結果をすばやく処理できるようになります。
  • ワークスペース設定を構成する
    開始時に開くファイル、ワークフロー バーに表示されるワークフロー ボタン、ドキュメント ファイルのロック、および抑制済みダイアログ ボックスを表示するかどうかを構成します。
  • ライセンス管理設定を構成する
    ライセンス サーバーの設定、スタンドアロン ライセンスのインストール、およびオンライン ライセンスの有効化などを構成します。
親トピック: システム設定


ディレクトリ設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. ディレクトリ タブをクリックします。
  3. ファイルの場所 領域を使用して、各種の Silk Performer ファイル タイプが格納されるディレクトリを指定します。デフォルトのディレクトリは、インストール時に設定されます。
  4. プロジェクト フィールドに、プロジェクト ファイルを格納するディレクトリを指定します。
  5. カスタム ユーザー データ ファイル (.pem、.rnd、.csv、.txt、.idl) フィールドに、独自に作成したユーザー データ ファイル (.csv)、証明書ファイル (.pem)、ランダム データ ファイル (.rnd)、テキスト ファイル (.txt)、およびインターフェイス定義言語ファイル (.idl) を格納するディレクトリを指定します。 ユーザー データ ファイル に指定された場所と異なり、この場所は独自のユーザー データ ファイルのために使用されます。Silk Performer の定義済みユーザー データ ファイルと同様に、このディレクトリのカスタム ユーザー データ ファイルは複数のプロジェクトで共有できます。
  6. カスタム インクルード ファイル (.bdh) フィールドに、独自に作成したインクルード ファイル (.bdh) を格納するディレクトリを指定します。 インクルード ファイル に指定された場所と異なり、この場所は独自のインクルード ファイルのために使用されます。Silk Performer の定義済みインクルード ファイルと同様に、このディレクトリのカスタム インクルード ファイルは複数のプロジェクトで共有できます。
親トピック: ワークベンチの設定


レイアウト設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. レイアウト タブをクリックします。 スクリプト ファイルにテキストを手動で挿入するときのエディタの動作をカスタマイズするには、エディタ 領域を使用します。
  3. タブ サイズ フィールドに、タブ文字 1 つに相当させるスペース文字の数を入力します。
  4. テスト スクリプトに自動的にインデントを挿入するには、自動インデント オプションをクリックします。 スクリプト ファイルに新しい行を作成すると、常に直前の行と同じスペース数で自動的にインデントされます。
  5. テスト スクリプトでタブが使用されるたびに自動的にスペースを 4 つ挿入するには、タブをスペースに置き換える オプションをオンにします。このオプションを使用すると、テキスト エディタでスクリプト ファイルが見やすくなります。
  6. BDL ファイルにテキストを入力するとき、関数、変数、および定数が自動的に入力されるようにするには、入力支援を有効にする をオンにします。
  7. Silk Performer スクリプト エディタのフォントとスタイルを選択するには、フォントと色 をクリックします。 テスト スクリプトのコンテンツの種類ごとに、異なる色を使用するように選択できます。 エディタのフォントおよび色の設定 ダイアログが開きます。
  8. テキストの種類 ボックスの一覧から、フォント、フォント サイズ、スタイル、および色を調整するテキストの種類を選択します。 次のいずれか 1 つを選んでください：
    • [標準テキスト] - 識別子とシンボル
    • [キーワード] - あらかじめ定義されている文
    • [カスタム キーワード] - ユーザーがキーワード リストに追加したキーワード
    • [番号] - すべての数値と浮動小数点値
    • [コメント] - スクリプトに含まれる説明の記述
    • [文字列] - " 記号 (二重引用符) で区切られた一連の文字
  9. フォント名、フォント サイズ、スタイル、および 色 ボックスの一覧から、現在選択されているテキストの種類に使用する書式オプションを選択します。
  10. OK をクリックします。
  11. カスタム キーワード リストにキーワードを追加できます。これらのキーワードは、エディタのフォントおよび色の設定 で定義したスタイルを使用してスクリプト上で表示されます。
親トピック: ワークベンチの設定


印刷レイアウト設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. レイアウト タブをクリックします。 印刷 領域を使用して、印刷時にスクリプト ファイルを書式設定する方法のオプションを指定します。
  3. 行番号 オプションを選択すると、印刷されるスクリプト ファイルの行に自動的に番号が付けられます。
  4. 折り返しマーカー オプションを選択すると、次の行に折り返す各行の終わりに自動的にマーカーを印刷します。
  5. 印刷されるテスト スクリプトのフォントとスタイルを選択するには、フォント ボタンをクリックします。 プリンタのフォントおよび色の設定 ダイアログが開きます。
  6. テキストの種類 リストから、フォント、サイズ、およびスタイルを調整するテキストの種類を選択します。 以下のうちいずれかを選択します。
    • [標準テキスト] - 識別子とシンボル
    • [キーワード] - あらかじめ定義されている文
    • [カスタム キーワード] - ユーザーがキーワード リストに追加したキーワード
    • [番号] - すべての数値と浮動小数点値
    • [コメント] - スクリプトに含まれる説明の記述
    • [文字列] - " 記号 (二重引用符) で区切られた一連の文字
  7. フォント名、フォント サイズ、および スタイル リスト ボックスから、現在選択されているテキストの種類に使用する書式オプションを選択します。
  8. OK をクリックします。
親トピック: ワークベンチの設定


コード補完

コード補完により、BDL を使った作業が簡単になります。関数、変数および定数を自動的に補完することにより、スクリプト エラーを大幅に削減し、BDL ファイルへのテキスト入力の手間を省くことができます。コード補完には、次の 5 つのオプションがあります。

  • コード リスト： その時点での入力と一致するすべての関数名をリスト ボックスに表示します。
  • コード補完： 現在の関数、変数または定数名を補完します。
  • パラメータ情報： 関数パラメータの型や追加の情報をツール チップに表示します。
  • クイック情報： 関数の情報をツール チップに表示します。
  • 自動インデント： 現在の論理的コンテキストに基づいてカーソルを位置付けます。

コード補完は、Silk Performer 定義とユーザー定義両方の BDL ファイルを使って機能します。

コード補完を有効化するには、新しい BDL ファイルに .bdf か .bdh のいずれかの名前を付けて保存する必要があります。BDL ファイルが保存されると、コード補完機能は、BDL エディタを使用してそのファイルに対して行われる変更を認識し、BDL use 文を使って参照するすべてのファイルを取り込みます。

注: 常時、コード補完のすべての機能を利用して、ユーザーはローカルな .bdf ファイル、または、そこにインクルードされている .bdh ファイルで定義されている関数、変数および定数に関する情報を受け取ることができます。

コード リスト

コード補完の主要機能の 1 つが、関数、変数および定数の一覧を示すコード リスト方式です。コード リストには、次のいずれかが含まれています。

  • 関数、変数および定数すべての一覧
  • スクリプト内で現在選択されている語の文字と一致する関数、変数、および定数の一覧

コード リストは、Ctrl+Space を押して手動で呼び出すことができます。コード リストは、次の API 接頭辞のいずれかを入力すると、自動的に呼び出されます。

Attribute | Iiop | DB_ | Dotnet | Ora | Pdce
Java | Jolt | Measure | Odbc | Web | Xml
Set | Str | Tux | Get |  |

コード リストが呼び出されると、次の動作とともにリスト コントロールが表示されます。

  • カーソルが語の範囲内または語の境界にない場合は、リスト コントロールが一番上までスクロールして最初のアイテムがポイントされますが、選択はされません。
  • カーソルが語の範囲内または語の境界内にある場合は、リスト コントロールはその語に一致する最初の (選択された) アイテムにスクロールして、そのアイテムが選択されます。
  • Tab キー、Space キー、または Enter キーを押すと、その時選択されている文字列がビューに挿入されます。文字列が選択されていない場合は、フォーカスのある文字列が選択されます。
  • リスト内のアイテムをダブルクリックすると、その名前がビューに挿入されます。

コード補完

コード リスト機能で使用される語が一意であれば、Ctrl+Space で呼び出してもコード リストは開きませんが、語全体が挿入されます。

この場合、「一意」とは、対象となる語の一部と一致する語がリスト コントロール内に 1 つしかない、ということです。

パラメータ情報

スクリプト内で関数名の後に左括弧を置くと、パラメータ情報が表示されます。パラメータ情報は、関数呼び出しの左右の括弧の内側にカーソルがあるときに、Ctrl+I を押して手動で呼び出すこともできます。パラメータ情報はツール チップとして表示され、(1) Esc キーを押す、(2) 右閉じ括弧を挿入する、(3) 矢印キーを使用してカーソルが括弧の外に出る、または (4) 入力フォーカスが他のコントロールに設定されるまで、表示されたままになります。

パラメータ情報は、次のとおりです。

  • 関数名
  • 関数パラメータの名前、型、修飾子 (in、out、allownull など)
  • 現在のパラメータ (太字) と、追加の説明 (説明がある場合)
  • 戻り値の型と説明 (説明がある場合)

クイック情報

クイック情報は、パラメータ情報に似ていますが、関数についての情報だけでなく、変数や定数に関する情報も示す点が異なります。

クイック情報は、関数、変数または定数の名前の上にカーソルを置くと、ツール チップと同様の形式で表示されます。クイック情報ツール チップは、カーソルがその場から離れると表示されなくなります。

関数の場合、利用できる情報はパラメータ情報と同じですが、その時のパラメータだけでなく、すべてのパラメータとその説明が表示される点が異なります。

変数と定数の場合、名前、型、任意の説明のみが表示されます。

自動インデント

自動インデントは、BDL 関連ビュー内で Enter キーを押すと有効になり、改行が挿入されます。呼び出されると、現在のコンテキストから算定した位置にカーソルを置きます (たとえば、最初のキーワード挿入後にインデントする)。

親トピック: ワークベンチの設定


ユーザー定義の関数、変数、および定数

ユーザー定義の関数、変数および定数についてコード補完機能を利用できるようにするには、利用する関数、変数または定数を定義する .bdf または .bdh ファイルと同じディレクトリに同じ名前で拡張子 .bdd を付けた新しいファイルを作成する必要があります。

.bdd ファイルの構造は次のとおりです。

<CodeCompletionInfo>
  <Function id="FuncId">
    <Description>FuncDesc</Description>
    <ParamList>
      <Param no="1">
        <Name>ParamName</Name>
        <Description>ParamDesc</Description>
      </Param>
    </ParamList>
    <Returns>
      <Type>RetValTyp</Type>
      <Description>RetValDesc</Description>
    </Returns>
  </Function>
  <Global id="GlobalId">
    <Description>GlobalDesc</Description>
  </Global>
</CodeCompletionInfo>

これは、コード補完情報に加える各関数について、関数コードを付け加える必要がある、ということです。 それ以外 (変数および定数) については、グローバル ノードを付け加える必要があります。

コード補完ノード
FuncID | .bdf または .bdh ファイルにある関数の名前。この関数について、コード補完情報を提供します。
FuncDesc | 関数の説明。
ParamName | パラメータ名。
ParamDesc | パラメータの説明。
RetValTyp | 戻り値のデータ型。
RetValDesc | 戻り値の説明。
GlobalId | グローバル変数またはグローバル定数の名前。
GlobalDesc | 変数または定数の説明。
親トピック: ワークベンチの設定


コントロール設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. コントロール タブをクリックします。
  3. 仮想ユーザー 領域では、次のオプションが提供されます。

    • 自動計算 を有効にすると、プロセス当たりの仮想ユーザー数を Silk Performer が計算します。

    • 自動計算 を無効にすると、プロセス当たりの仮想ユーザー数 フィールドに手動で値を入力します。

    • 仮想ユーザーを停止するトランザクション失敗の数 フィールドに、トランザクションが何回失敗したら仮想ユーザーを停止するかを入力します。

    注: 仮想ユーザーの設定内容は、プロジェクトごとに格納されます。 この設定内容を有効にするには、プロジェクトを開く必要があります。 プロジェクトのロード後、オプションは、その設定内容で構成された特定のプロジェクトにのみ適用されます。
  4. リモート エージェント通信 領域では、次のオプションが提供されます。

    • ローカル エリア ネットワークでのコントローラとエージェント間の通信を最適化するには、LAN を選択します。

      これは、負荷テストで使用するすべてのエージェント コンピュータが同じローカル エリア ネットワークに配置されていて、すべて高速接続を使用している場合に特に役に立ちます。

    • ワイド エリア ネットワークでのコントローラとエージェント間の通信を最適化するには、WAN を選択します。

      これは、インターネット上にある多数のエージェント コンピュータを使用する場合に特に役に立ちます。

    • 独自のパラメータを指定するには、カスタム を選択します。
      注: カスタム オプションは、LAN または WAN 設定で問題が発生した場合のみ使用します。
  5. 接続 フィールドに、コントローラ コンピュータが各リモート エージェント コンピュータとの接続の確立を試行する時間を入力します。 接続がこの時間内に行われないと、Silk Performer によりエラーと通知されます。
    注: この設定は変更しないことをお勧めします。
  6. Ping 間隔 フィールドに、コントローラ コンピュータがエージェント コンピュータから負荷テストのステータス データの取得を試行する時間を入力します。コントローラ コンピュータは、監視 ウィンドウの内容を更新する必要がある場合に、このエージェント コンピュータからの情報をリクエストします。この時間内においてデータを取得するときに、エージェント コンピュータでエラーが発生した場合、Silk Performer は警告を報告します。
    注: この設定は変更しないことをお勧めします。
  7. コマンド フィールドで、コントローラ コンピュータがリモート エージェント コンピュータに対してコマンドの送信を試行する時間を入力します。コマンドの送信がこの時間内に行われないと、Silk Performer によりエラーと通知されます。
    注: この設定は変更しないことをお勧めします。
  8. 必要に応じて、次の圧縮とキャッシュ オプションを有効にします。詳細については、「データ ファイルを圧縮する」および「データ ファイルをキャッシュする」を参照してください。
    • LAN/WAN へのデータ ファイルを圧縮する
    • クラウド エージェントへのデータ ファイルを圧縮する
    • エージェント上でデータ ファイルをキャッシュする
親トピック: ワークベンチの設定


結果設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. 結果 タブをクリックします。
  3. 時系列データ 領域で エージェントでの時系列データをマージする オプションを選択します。これにより、時系列データ ファイル (.tsd) が作成されたエージェント コンピュータでマージされるようになり、マージされたファイルのみがコントローラ コンピュータに送信されます。 これは、計算が多数のプロセッサに分散され、ネットワークに送信されるトラフィックが減少するので、長時間の負荷テストの結果をすばやく処理するために特に役に立ちます。ただし、欠点は、個々の仮想ユーザーの時系列データ ファイルをコントローラ コンピュータで利用できないことです。
    注: このオプションを選択しない場合、負荷テストの全体的な結果を取得するために、Performance Explorer の時系列データ ファイルを手動でマージする必要があります。
  4. Junit 結果を書き込む をオンにすると、Silk Performer は、JUnit 結果の標準フォーマットで、簡易的な負荷テスト結果の要約を生成します。
  5. エージェントごとのメッセージ数を制限する を有効にして、値を入力します。エージェントがこの制限を超える場合、Silk Performer はカスタマイズした深刻度でメッセージをレポートします。
親トピック: ワークベンチの設定


ワークスペース設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. ワークスペース タブをクリックします。
  3. 最後に開いたプロジェクト ファイルを開始時に開く を有効にした場合、Silk Performer を起動すると最後に作業していたプロジェクトが自動的に開きます。
  4. 常にすべてのワークフロー ボタンを有効にする をオンにすると、ワークフロー バーのすべてのボタンが有効になります。 デフォルトでは、ワークフロー ボタンは Silk Performer ワークフローの進行状況に基づいて順番に有効になります。
  5. ワークフロー バー の種類を選択します。
    • 完全：すべてのワークフロー ステップを含む完全ワークフロー バーを表示します。
    • 簡易：簡易ワークフロー バーを表示します。簡易ワークフローを使用すると、ベースラインの概念が無視され、負荷テストの処理が迅速かつ簡単になります。
    • 監視：監視に必要なワークフロー ステップのみを含む監視ワークフロー バーを表示します。
  6. ドキュメント ファイルのロックを有効にする をオンにします。 ドキュメント ファイルのロック メカニズムによって、複数のユーザー (Silk Performer コントローラ マシン上の) が、同じドキュメント ファイル (.bdf スクリプト ファイル、.bdh インクルード ファイル、およびデータ ファイル) に対してそれぞれのファイルを上書きすることなく同時に作業できます。別のユーザーのロックされたドキュメント ファイルは、読み取り専用で使用できます。ただし、編集はできません。このオプションは、デフォルトで有効になっています。
  7. すべてのダイアログ ボックスを表示する をクリックして、抑制済みダイアログ ボックスをデフォルトのアクティブ状態にリセットします。 一部のダイアログ ボックスには、今後このダイアログを表示しない チェック ボックスが含まれています。このチェック ボックスをオンにした場合は、すべてのダイアログ ボックスを表示する ボタンがクリックされるまで、ダイアログ ボックスは表示されません。
親トピック: ワークベンチの設定
関連タスク
Silk Performer にソース コード管理インテグレーションを構成する
Silk Central インテグレーションを構成する


ライセンス管理設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. ライセンス管理 タブをクリックします。
  3. Silk Meter ライセンス サーバーの設定を行う場合は、ライセンス サーバー設定の変更 をクリックします。
  4. ライセンス ファイルの場所を指定してインポートする場合は、スタンドアロン ライセンスのインストール をクリックします。
  5. ライセンス オプション のいずれかを選択します。これらのオプションを指定して、Silk Performer のオンライン ライセンス モデルを使用できます。詳細については、「オンライン ライセンス」を参照してください。
    • オンプレミス ライセンスのみを使用する
    • オンライン ライセンスのみを使用する
    • 必要に応じてオンライン ライセンスを使用する
親トピック: ワークベンチの設定


記録の設定

このトピックでは、Silk Performer の記録およびスクリプト生成プログラムである Silk Performer Recorder が使用する設定について説明します。これらの設定は、テスト スクリプトでモデル化するネットワーク トラフィックを取得および記録するために使用されます。これらの設定で構成されるプロファイルは、データの取得と記録の間にクライアント アプリケーションに適用されます。プロキシの追加または削除、およびプロキシの設定の編集を行うこともできます。Silk Performer Recorder が使用する統合された Web サーバーのポートを設定し、クライアント アプリケーションの開始と同時に記録の開始を有効にできます。Recorder がネットワーク トラフィックを取得する方法を定義する記録ルールを構成することもできます。

記録プロファイル

Silk Performer Recorder は、記録プロファイルを使って記録するアプリケーションやその記録方法を決定します。新しい記録プロファイルを作成したり、既存の記録プロファイルを編集、削除、コピーすることができます。記録プロファイルを使うと、記録するアプリケーション、作業ディレクトリ、アプリケーションの引数、追加で記録する実行可能ファイル、プロトコル設定などを指定できます。

プロキシ

コンピュータに新しいプロキシを設定したり、既存のプロキシを編集または削除したりできます。プロトコルの種類、リスン ポート、Silk Performer Recorder がインターセプトしたトラフィックを転送する先のサーバーの詳細、Silk Performer Recorder が Web サーバーに提示するクライアント証明書に関する詳細などのさまざまなオプションを、プロキシごとに指定できます。SOCKS プロキシを設定するときは、指定するポートでのプロトコルの自動検出を無効にできます。指定したポートのいずれかにクライアント アプリケーションが SOCKS トラフィックを送信するたびに、Silk Performer Recorder は、先に既知のプロトコルの検出を試みることなく、TCP/IP レベルでトラフィックを記録します。Silk Performer Recorder によるデータの記録を行わないようにするポートの範囲を指定できます。

サービス

Silk Performer に統合されている Web サーバーのオプション、および Silk Performer Recorder での記録に関するオプションを設定できます。統合された Web サーバーがリスンするポートを指定し、このサーバーを使用して、Silk Performer Recorder のサーバー証明書に署名したルート CA の証明書を取得できます。ルート CA 証明書は、ブラウザによるセキュリティ警告を避けるために、この Web サイトからダウンロードして Web ブラウザにインストールできます。

Silk Performer Recorder 内からアプリケーションを開始したら、関数呼び出しの記録を自動的に開始するように、Silk Performer Recorder を設定できます。

記録ルール

Silk Performer Recorder は、記録ルール ファイルを使用することによって構成できます。記録ルール ファイルは、Silk Performer Recorder が動作するルールを含んでいる XML ベースのファイルです。

記録ルールを使用すると、さまざまな方法で Recorder を構成できます。ユース ケースの例には、セッションのカスタマイズ、Web ページを記録する際に JPG 画像のダウンロードを除外する設定、および特定の URL からの Web ポップアップや広告を排除する設定が含まれています。

  • TCP/IP：専用の TCP/IP ベースのプロトコルのプロトコル記述を指定することによって構成します。
  • HTTP: Recorder が、動的に変更される値のための解析関数をスクリプト記述して、それらの値を置換する値を生成する必要があるシナリオを指定することによって構成します。

Silk Performer の 記録ルール タブ (システム設定 > Recorder > 記録ルール) では、記録ルールの作成、編集、コピー、および削除を行うことができます。

注: 記録ルールを構成する最も簡単な方法は、既存のテンプレートに基づいて記録ルールを作成し、必要に応じて個々のルールのプロパティを編集する方法です。上級ユーザーの場合は、記録ルールを手動で記述できます。記録ルールを手動で記述するには、Silk Performer の幅広い経験があり、関係するプロトコル (TCP/IP、HTTP、および HTML) を十分に理解している必要があります。記録ルールの構成と構文、およびルール ファイルの設計例については、「ルール ベースの記録」を参照してください。

解析関数に指定した値を使用して、TrueLog Explorer で新しい記録ルールを作成できます。たとえば、セッション カスタマイズ解析関数から記録ルールを作成すると、そのアプリケーションの記録が可能になり、セッションのカスタマイズの問題を完全に避けることができます。

注: 記録中は、すべてのアクティブな記録ルールが Recorder によって考慮されます。不要な BDL スクリプトの記述を回避するには、記録中に必要なルールのみをアクティブにするようにします。記録ルールは、記録ルール タブ (システム設定 > Recorder > 記録ルール) にあるチェック ボックスでアクティブ/非アクティブにします。

記録ルールを格納する

記録ルール ウィザードは、記録ルールを XRL 形式で 、<パブリック ユーザー ドキュメント>\Silk Performer21.0\RecordingRules に保存します。これらのルールは、チーム メンバー間で共有したり、XRL ファイルを他の \RecordingRules フォルダにコピーすることで、任意の Silk Performer インストールに追加したりすることができます。フォルダに保存後は、スコープはグローバルとなり、それ以降のすべてのプロジェクトに適用されます。

それ以降の記録にどの記録ルールを適用するかを、 設定 > システム > Recorder > 記録ルール を介して制御できます。ルールを適用するには、対応するチェックボックスがオンになっていることを確認します。記録中にルールが無視されるようにするには、ルールのチェックボックスをオフにします。

  • 記録プロファイルを追加する
    Silk Performer Recorder がトラフィックを記録するために使用する方法や、各アプリケーションのアプリケーション パス、作業ディレクトリ、アプリケーション引数を指定する記録プロファイルを作成します。
  • 記録プロファイルを削除する
    記録プロファイルを削除します。
  • 記録プロファイルを編集またはコピーする
    既存の記録プロファイルを編集またはコピーします。
  • 記録プロファイルの記録方式
    記録プロファイルごとに設定できる記録方式について説明します。
  • Web ベースおよび TCP/IP ベースのトラフィックを Recorder がキャプチャする方法を指定する
    Web ベースおよび TCP/IP ベースのトラフィックをキャプチャするために Recorder が使用する方法を選択します。使用可能な任意の Java API を有効にすることもできます。
  • プロキシ設定を構成する
    プロキシを追加、編集、削除します。
  • サービスを構成する
    Web サーバーとそのサーバーが使用するポート番号を構成します。また、Silk Performer Recorder を自動的に開始するか、手動で開始することを要求するかを構成します。
  • 記録ルールを追加する
    提供されているルール テンプレートに基づいて新しい記録ルールを作成できます。
  • 記録ルールを編集する
    既存の記録ルールの名前、説明、状態、およびプロパティを編集できます。
親トピック: システム設定


記録プロファイルを追加する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. 追加 をクリックして、新しい記録プロファイルをリストに追加します。 記録プロファイル ダイアログが開きます。
  4. プロファイル名 フィールドに、記録プロファイルの一意な名前を入力します。 記録プロファイルの名前は、Silk Performer Recorder ウィンドウでアプリケーションを識別するために必要です。
  5. アプリケーション パス フィールドに、アプリケーションの実行ファイルの名前とそのファイルが存在するディレクトリを入力します。 実行可能ファイルを探す場合、参照アイコンをクリックします。
  6. 作業ディレクトリ フィールドに、アプリケーションの作業ディレクトリを入力します。 作業ディレクトリは、アプリケーションや関連の各ファイルがあるフォルダです。別のディレクトリにあるファイルを必要とするアプリケーションもあるので、その場合、それらのファイルがあるフォルダを指定する必要があります。
  7. アプリケーション引数 フィールドに、任意の数のアプリケーション パラメータを入力します。 アプリケーションにパラメータを渡す (GUI のないコマンドライン ツールが実行する関数呼び出しを記録する場合など) ときに役に立ちます。
  8. 記録する実行可能ファイル フィールドで、記録する実行可能ファイルを指定します。これにより、指定したアプリケーションの実行可能ファイルと異なるプロセスを記録することができます。 アプリケーションが通信処理を行うほかのプロセスによってホストされている場合に必要になる場合があります。
  9. 新しいインスタンスと実行中のインスタンスを記録する (セキュア ブート モード) を有効にすると、Recorder と共に開始されたすべてのインスタンス（後に開始されたものも含む）だけでなく、Recorder の起動時に実行中のアプリケーションのすべてのインスタンスを記録します。アプリケーションに対して従来の記録機構が期待通り動作しない場合に、このオプションを有効にします。このオプションは、UEFI の secure boot が有効になっているマシン上では、自動的にオンになります。
  10. プロトコルの選択 領域で、Silk Performer Recorder でフックする関数ライブラリを示すチェック ボックスをオンにします。 利用可能なオプションは、次のとおり、選択したアプリケーションにより変わります。

    • Web： Silk Performer Recorder は Web アプリケーションをフックし、すべての関数呼び出しをインターセプトして結果を表示します。

      Web がオンである場合、Web の設定 をクリックして Web 設定 ダイアログを開くことができます。ここでは、Recorder が Web および TCP/IP ベースのトラフィックを取得する方法を選択できます。

    • TCP/IP： Silk Performer Recorder は TCP/IP アプリケーションをフックし、すべての関数呼び出しをインターセプトして結果を表示します。
    • IIOP： Silk Performer Recorder はクライアント アプリケーションの IIOP 関数ライブラリをフックし、すべての関数呼び出しをインターセプトして結果を表示します。
    • Citrix XenApp： Silk Performer Recorder は Citrix XenApp アプリケーションをフックし、すべての関数呼び出しをインターセプトして結果を表示します。
    • ODBC： Silk Performer Recorder はクライアント アプリケーションの ODBC 関数ライブラリをフックし、すべての関数呼び出しをインターセプトして結果を表示します。
    • DB2 CLI： Silk Performer Recorder はクライアント アプリケーションの DB2 CLI 関数ライブラリをフックし、すべての関数呼び出しをインターセプトして結果を表示します。

    • Oracle OCI： Silk Performer Recorder はクライアント アプリケーションの Oracle 関数ライブラリをフックし、すべての関数呼び出しをインターセプトして結果を表示します。

      OCI の設定 ボタンをクリックしてダイアログを開きます。ここでは、関数呼び出しをインターセプトするために使用する OCI クライアント ライブラリを選択できます。リスト ボックスから適切なライブラリを選択して OK をクリックします。

    • Tuxedo： Silk Performer Recorder はクライアント アプリケーションの Tuxedo 関数ライブラリをフックし、すべての関数呼び出しをインターセプトして結果を表示します。
    • SAPGUI： Silk Performer Recorder は SAP GUI インターフェイスの各関数をフックし、すべての関数呼び出しをインターセプトして結果を表示します。
  11. OK をクリックして、新しいプロファイルをリストに追加します。
親トピック: 記録の設定


記録プロファイルを削除する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. 削除する記録プロファイルを選択し、削除 をクリックします。
  4. 確認ダイアログで はい をクリックします。
  5. OK をクリックして、設定を保存します。
親トピック: 記録の設定


記録プロファイルを編集またはコピーする

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. 記録プロファイルを選択します。
  4. 次のいずれか 1 つを選んでください：
    • 編集 をクリックし、選択した記録プロファイルの設定を編集します。
    • 選択した記録プロファイルをコピーするには、コピー をクリックします。
    記録プロファイル ダイアログが開きます。使用できる設定の詳細については、「記録プロファイルを追加する」を参照してください。
  5. OK をクリックして、設定を保存します。
親トピック: 記録の設定


記録プロファイルの記録方式

以下の記録方式のいずれか 1 つを、記録プロファイルごとに設定できます。記録プロファイルを表示するには、設定 > システム > 記録 をクリックします。

新しいインスタンスの記録 | Recorder と共に開始されたすべてのインスタンス（後に開始されたものも含む）を記録します。Recorder の起動時に既に実行中のインスタンスは記録されません。 この方式を設定するには、記録プロファイルを選択して 編集 をクリックします。 そして、新しいインスタンスと実行中のインスタンスを記録する (セキュア ブート モード) をオフにします。このオプションは、UEFI の secure boot が有効になっているマシン上では、自動的にオンになります。
新しいインスタンスと実行中のインスタンスの記録 | Recorder と共に開始されたすべてのインスタンス（後に開始されたものも含む）だけでなく、Recorder の起動時に実行中のアプリケーションのすべてのインスタンスを記録します。 この方式を設定するには、記録プロファイルを選択して 編集 をクリックします。 そして、新しいインスタンスと実行中のインスタンスを記録する (セキュア ブート モード) をオンにします。
システム プロキシを介した記録 | Windows システム プロキシを介して記録します。 注: この場合、Recorder は、システム プロキシを使用するすべてのアプリケーションのトラフィックをキャプチャします。キャプチャ ファイル ページでフィルターの設定やスクリプト生成の設定を行って、スクリプトから不要なトラフィックを除外できます。 この方式を設定するには、記録プロファイルを選択して 編集 をクリックします。 そして、Web の設定 をクリックして, プロキシ と 自動ブラウザ設定 を選択します。
アプリケーション プロキシを介した記録 | Firefox などの一部のアプリケーションでは、アプリケーション固有のプロキシを使って、システム プロキシの設定を無視できます。 この方式では、Recorder はアプリケーションのカスタム プロキシを介して記録します。 この方式を設定するには、記録プロファイルを選択して 編集 をクリックします。 そして、Web の設定 をクリックして, プロキシ と 手動ブラウザ設定 を選択します。記録するアプリケーションで、localhost と Recorder で設定した HTTP プロキシ ポート（デフォルトは、8080）をプロキシに設定します。

記録プロファイル ページには、デフォルトの記録プロファイルに加えて、手動で作成したすべての記録プロファイルが表示されます。リストで記録プロファイルをオンにすると、アクティブ な状態になります。アクティブな記録プロファイルだけが、スクリプトの作成 ダイアログの 記録プロファイル リストから選択可能になります。

Recorder がどの記録プロファイルを使って記録するかを選択できます。
  • [スクリプトの作成] ダイアログと Recorder から開始したプロファイル：このオプションを選択すると、スクリプトの作成 ダイアログで選択した記録プロファイルだけが使用されます。ただし、Recorder で記録プロファイルを選択して、アプリケーションの起動 アイコンをクリックした場合は、この記録プロファイルも使用されます。
  • すべてのアクティブ プロファイル：このオプションを選択すると、Recorder は アクティブ（チェックボックスがオン）なすべての記録プロファイルを使用します。
    注: このオプションを選択しても、スクリプトの作成 ダイアログから記録を開始するときに、記録プロファイル を 1 つ選択する必要があります。しかし、Recorder はすべてのアクティブな記録プロファイルを使って記録します。
ヒント: Recorder でどのアプリケーションを使用中かを示すため、記録に使用したアプリケーションのアイコンが右下に表示されます。
親トピック: 記録の設定


Web ベースおよび TCP/IP ベースのトラフィックを Recorder がキャプチャする方法を指定する

このタスクを実行する前に、記録プロファイルを追加する必要があります。

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. 記録プロファイルを選択します。
  4. 編集 ボタンをクリックします。 記録プロファイル ダイアログが開きます。
  5. プロトコルの選択 領域で Web オプションを選択すると、Silk Performer Recorder は Web アプリケーションにフックされ、すべての関数呼び出しをインターセプトして結果を表示します。 ここで利用できるオプションは、選択したアプリケーションの種類によって異なります。
  6. Web の設定 ボタンをクリックすると Web 設定 ダイアログが開き、Recorder が Web および TCP/IP ベースのトラフィックのキャプチャに使用する方法を選択できます。
    • WinSock オプションを選択すると、Silk Performer Recorder はクライアント アプリケーションの WinSock 関数ライブラリにフックされ、アプリケーションが SOCKS プロトコルで生成するすべてのトラフィックをラップし、そのトラフィックを Recorder の SOCKS プロキシにリダイレクトするようになります。
    • プロキシ オプションを選択すると、Silk Performer Recorder は選択されたブラウザからのすべてのトラフィックを Recorder プロキシにリダイレクトします。
  7. OK をクリックします。
  8. また、ダイアログの右側のフィールドで対応するチェック ボックスをオンにすることで、使用可能な Java API を有効にすることもできます。以下の Java API を選択できます。
    • Oracle Forms 6i on HTTP/HTTPS
    • Oracle Forms 6i on Socket
    • Oracle Forms 9i
    • Product Manager Sample Extensions
    • Borland Enterprise Server App.Client
    • Jacada
    • Java EJB (JBoss)
    • Java EJB (Other)
    • Java EJB (WebLogic)
    • Java EJB (WebSphere)
    • Java JNDI (Naming & Directory Interf.)
    • Java RMI (Custom Client-Server)
    • Jolt
    • Oracle Applications 11i
    • Oracle Applications 12i on Socket
    • Oracle Forms 10g
    • Oracle Forms 11g
    • Oracle Forms 12c
  9. Java API を有効にしたら、Java の設定 ボタンをクリックするとダイアログが開き、フックされる Java 仮想マシン ライブラリやその他の設定など、Java の記録の設定を指定できます。
    • Java 仮想マシンのフック オプションを選択すると、Java VM に自動的にフックします。このオプションを有効にした場合は、Silk Performer Recorder がトラフィックの記録用にフックするダイナミック リンク ライブラリを、JVM DLL リスト ボックスから選択します。
    • HTTP を使用してダウンロードしたクラス ファイルおよび jar ファイルのみをフックする場合は、ネットワークのみ オプションを選択します。
    • Java アプリケーションの記録用の起動スクリプトを手動で準備した場合は、手動 オプションを選択します。
  10. OK ボタンをクリックして設定を保存し、開いているすべてのダイアログを閉じます。
親トピック: 記録の設定


プロキシ設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. プロキシ タブをクリックします。
  4. 以下のオプションのいずれかを選択します。
    • コントローラ コンピュータに新しいプロキシをセットアップするには、追加 をクリックします。プロキシが複数のトラフィック タイプを記録するようにセットアップしたり、同時に複数のプロキシをアクティブにしたりできます。
    • 選択したプロキシを編集するには、編集 をクリックします。
    • 選択したプロキシを削除するには、削除 をクリックします。
    プロキシの設定 ダイアログが表示されます。
  5. プロトコル リスト ボックスから、トラフィックを転送および記録するためのプロトコル タイプを選択します。 記録する各トラフィック タイプのプロキシをセットアップする必要があります。以下のプロトコルを使用したトラフィックの転送および記録がサポートされます。
    • FTP - ファイル転送プロトコル
    • HTTP - ハイパーテキスト転送プロトコル
    • LDAP - Lightweight Directory Access Protocol
    • POP3 - ポスト オフィス プロトコル
    • SMTP - 簡易メール転送プロトコル
    • SOCKS - SOCKS トラフィックを取得する場合、Silk Performer Recorder は自動的にその他のプロトコル (IIOP、FTP、POP3、SMTP など) を記録するために検知します。
    • TCP/IP - TCP/IP を基にしたカスタム プロトコル
  6. リスン ポート フィールドに、トラフィックを生成するクライアント コンピュータがトラフィックを送信する先のポート番号を入力します。 使用されていないポートであればどれでも選択できますが、標準のポート番号 (通常、1500 よりも小さいポート番号) は避けてください。
  7. リモート ホスト 領域で、Silk Performer Recorder がインターセプトされたトラフィックを転送するホストの 種類 を選択します。 次のいずれか 1 つを選んでください：
    • トラフィックが生成されるクライアント コンピュータで指定されているホストに、インターセプトされたトラフィックを転送するには、任意 オプションを選択します。
    • インターセプトされたトラフィックを指定されたプロキシまたはファイアウォールに転送するには、プロキシ/ファイアウォール オプションを選択します。

      この場合、トラフィックが生成されるクライアント コンピュータで指定されているホスト名および IP アドレスは無視されます。

    • インターセプトされたトラフィックを指定されたリモート ホストに転送するには、指定 オプションを選択します。

      この場合、トラフィックが生成されるクライアント コンピュータで指定されているホスト名および IP アドレスは無視されます。

  8. リモート ホストに 指定 オプションを選択した場合、Secure Socket Layer プロトコルのトラフィックを記録および転送するために セキュア チェック ボックスをオンにします。 たとえば、このオプションが選択された場合、HTTP トラフィックではなく HTTPS トラフィックが記録されます。
  9. ホスト名または IP アドレス フィールドに、Silk Performer Recorder がインターセプトされたトラフィックを転送するサーバーのホスト名または IP アドレスを入力します。
  10. ポート フィールドに、Silk Performer Recorder がインターセプトされたトラフィックを転送するサーバーがリスンするポート番号を入力します。
  11. 証明書 リスト ボックスから、Silk Performer Recorder が実際のクライアントが持っている証明書の代わりに Web サーバーに提示するクライアント証明書を選択します。
  12. SOCKS プロキシをセットアップする場合、常に TCP/IP プロトコル レベルで記録する 領域を使用して、自動的なプロトコルの検知を無効にするポートを指定します。 複数のポート番号と範囲を、コンマ (,) で区切って入力できます。範囲指定は、上限と下限をハイフン (-) で区切って指定します。 クライアント アプリケーションが SOCKS トラフィックを指定されたポートのいずれかに送信すると、Silk Performer Recorder は、最初に通常のプロトコルを検知することを試みずに、TCP/IP レベルでトラフィックを記録します。
  13. 記録しない (データの転送のみ) 領域で、Silk Performer Recorder がデータを記録しないポート範囲を指定します。 複数のポート番号と範囲を、コンマ (,) で区切って入力できます。範囲指定は、上限と下限をハイフン (-) で区切って指定します。 データは、引き続き転送されますが記録されなくなります。
  14. OK をクリックします。
  15. プロキシをアクティブにするには、記録 列でプロキシ名の左側にあるチェック ボックスをオンにします。
  16. OK をクリックして、設定を保存します。
親トピック: 記録の設定


サービスを構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. サービス タブをクリックします。
  4. 統合 Web サーバー 領域を使用して、Silk Performer Recorder に統合される Web サーバーのポート番号を変更します。 サーバーのデフォルト アドレスは、http://localhost:19100 (19100 はデフォルトのポート番号) です。 この Web サーバーを使用するには、Silk Performer Recorder を実行している必要があります。
  5. ポート フィールドに、統合された Web サーバーがリスンするポートを入力します。 デフォルトは 19100 です。 統合された Web サーバーを使用すると、Silk Performer Recorder のサーバー証明書に署名したルート CA 証明書を取得できます。 ルート CA 証明書は、ブラウザによるセキュリティ警告を避けるために、この Web サーバーからダウンロードして Web ブラウザにインストールできます。
  6. 記録 領域の 記録を自動的に開始する オプションを選択すると、Silk Performer Recorder が開始されたときに自動的にトラフィックと関数呼び出しの記録が開始されます。 このオプションを無効にした場合、記録を開始するには Silk Performer Recorder ツールバーの 記録開始 ボタンを使用する必要があります。
  7. OK をクリックして、設定を保存します。
親トピック: 記録の設定


記録ルールを追加する

デフォルトでは、定義済みの記録ルールはありません。新しい記録ルールは、手動で記述するか、以下で説明するように UI を使用して作成する必要があります。

  1. システム設定 > Recorder > 記録ルール に移動します。
  2. 追加 をクリックします。 記録ルールのプロパティ ダイアログが開きます。
  3. テンプレート リスト ボックスから、ルール テンプレートを選択します。説明 テキスト ボックスには、選択したテンプレートの動作についての説明が表示されます。
  4. 必要に応じてデフォルトの ルール名 と 説明 を編集します。
  5. アクティブ チェック ボックスをオンにして、ルールをアクティブにします。
  6. 必要に応じてプロパティ値を編集します。
  7. OK をクリックします。 新しいルールが、記録ルール タブに表示されます。
親トピック: 記録の設定
関連タスク
記録ルールを編集する


記録ルールを編集する

  1. システム設定 > Recorder > 記録ルール に移動します。
  2. ルール名 テキスト ボックスで既存のルールを選択します。
  3. 編集 をクリックします。 記録ルールのプロパティ ダイアログが開きます。
  4. 必要に応じて ルール名 と 説明 を編集します。
  5. アクティブ チェック ボックスをオン/オフにして、ルールをアクティブ/非アクティブにします。
  6. 必要に応じてプロパティ値を編集します。 プロパティ行を選択すると、ダイアログの下部にある [説明] テキスト ボックスにプロパティの説明が表示されます。
    注: 薄いグレー表示になっているプロパティは読み取り専用です。
  7. OK をクリックして、変更を保存します。
親トピック: 記録の設定
関連タスク
記録ルールを追加する


エージェントの設定

エージェントの設定にアクセスするには、設定 > システム > エージェント をクリックします。以下のタブを利用できます。

  • エージェント プール：ここでは、エージェント プールを管理できます。LAN エージェントおよび WAN エージェントの追加と削除、エージェント プロパティの設定、エージェント プールのエクスポートなどを行うことができます。
  • 詳細：ここでは、エージェントに対して特定のユーザー アカウントを使用したり、エージェント コンピュータ上で複数のセッションを作成するように Silk Performer を設定することができます。
  • エージェント プール
  • エージェントの詳細設定
    エージェントの詳細設定について説明します。
親トピック: システム設定


エージェント プール

  • エージェント プール設定を構成する
    Silk Performer エージェント プール設定を構成し、エージェント コンピュータのオプション (複数の IP アドレスの構成を含む) を設定します。
  • コンピュータをエージェント プールに追加する
    コントローラ コンピュータに関連付けられているデフォルトのエージェント プールに、コンピュータを追加します。
  • エージェント接続プロパティ
    エージェントをエージェント プールに追加、削除、およびエージェントの接続設定の変更を行います。
  • コンピュータをエージェント プールから削除する
    コントローラ コンピュータに関連付けられているデフォルトのエージェント プールから、コンピュータを削除します。
  • エージェント上で WebDriver を更新する
    エージェント上で WebDriver を更新する方法について説明します。
親トピック: エージェントの設定


エージェント プール設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. エージェント ボタンをクリックします。
  3. 有効性の検査 をクリックして、リモート呼び出しを選択エージェントに送信し、利用可能で、アクティブであることを検証します。
  4. エージェント コンピュータを選択し、管理 をクリックし、エージェントの構成オプション (複数 IP アドレスの構成を含む) を設定します。 System Configuration Manager が開きます。
  5. 設定を保存するには、OK をクリックします。 構成対象の各エージェント コンピュータで前に示した手順を繰り返します。
  6. システム設定 ダイアログ ボックスに戻り、OK を再びクリックしてエージェント プールの設定を保存します。
親トピック: エージェント プール
関連タスク
プロジェクト エージェントを構成する


コンピュータをエージェント プールに追加する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. エージェント ボタンをクリックします。
    ヒント: または、Silk Performer ワークフロー バーの エージェントの割り当て をクリックします。その後、エージェントの設定 ダイアログ ボックスの エージェント プール設定 リンクをクリックします。
  3. LAN ネットワークの場合、以下の操作を行います。
    1. LAN エージェントを追加 ボタンをクリックします。 LAN エージェントの追加 ダイアログが表示されます。サブネットで使用できて互換性があるすべてのエージェント コンピュータが一覧表示されます。
    2. ローカル ネットワーク上のコンピュータの 実行中のエージェント リストから、エージェント プールに追加するコンピュータを選択します。
    3. 追加 ボタンをクリックします。
  4. WAN ネットワークの場合、以下の操作を行います。
    1. WAN エージェントを追加 ボタンをクリックします。 WAN エージェントの追加 ダイアログが表示されます。
    2. WAN エージェントの接続パラメータを入力します。
    3. ホスト名または IP アドレス フィールドに、コンピュータのホスト名または IP アドレスを入力します。
      ヒント: ローカル ネットワークの外側にある Windows ドメインからコンピュータを追加する場合、参照 [...] ボタンをクリックします。
      コンピュータの参照 ダイアログが表示されます。
    4. エージェント プールに追加するコンピュータを選択して、OK をクリックします。
    5. WAN エージェントの追加 ダイアログで、再度 OK をクリックします。
親トピック: エージェント プール


エージェント接続プロパティ

Silk Performer エージェントを手動で負荷テストに追加する前に、エージェント プールに追加する必要があります。エージェント プールを開くには、Silk Performer メニューから 設定 > システム をクリックし、エージェント アイコンをクリックします。

エージェント プールにエージェントを追加したり、削除することができます。接続設定を変更するには、エージェントを選択して プロパティ をクリックします。
  • 暗号化 (SSL) を有効にすると、コントローラとリモート エージェントとの接続がセキュアな接続になります。
  • 認証 を有効にして パスワード を指定すると、そのパスワードを使用してリモート エージェントに接続します。[System Configuration Manager] で指定したものと同じパスワードを指定する必要があります。
  • 暗号化 (SSL) を有効にした場合は、接続先のセキュア ポート フィールドで、コントローラがエージェントへの接続に使用するポートを指定します。[System Configuration Manager] で指定したエージェント接続のセキュア ポートと同じポートを指定する必要があります。
  • 暗号化 (SSL) を無効にした場合は、接続先のポート フィールドで、コントローラがエージェントへの接続に使用するポートを指定します。[System Configuration Manager] で指定したエージェント接続のセキュア ポートと同じポートを指定する必要があります。
  • HTTP プロキシ サーバーを使用する を有効にすると、HTTP ファイアウォールを使用してエージェントに接続します。トンネリングする アドレス と ポート を指定します。これらの情報は、システム管理者に確認してください。「HTTP ファイアウォール経由で接続する」を参照してください。
  • SOCKS プロキシ サーバーを使用する を有効にすると、SOCKS プロトコルを使用してエージェントに接続します。アドレス と ポート を指定します。「SOCKS ファイアウォール経由で接続する」を参照してください。HTTP ファイアウォールと SOCKS プロトコルの両方を使用する場合は、エージェントは最初に SOCKS プロキシに接続し、その後で HTTP プロキシに接続します。「複数のファイアウォール経由で接続する」を参照してください。
  • 接続をテスト ボタンをクリックして、コントローラがエージェントに接続可能であることを確認します。プロキシ サーバー経由で接続するように指定しており、プロキシ サーバーで認証が必要な場合は、ユーザー資格情報が求められます。
  • OK をクリックして、設定を保存します。
親トピック: エージェント プール


コンピュータをエージェント プールから削除する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. エージェント ボタンをクリックします。
  3. エージェント プール タブの エージェント プール リストで削除するエージェントを選択し、削除 ボタンをクリックします。
  4. ダイアログ ボックスで OK をクリックして、エージェントの削除を確認します。
親トピック: エージェント プール


エージェント上で WebDriver を更新する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. エージェント アイコンをクリックします。
  3. エージェント プール タブで、エージェントを右クリックし、WebDriver の更新 をクリックします。
    ヒント: Ctrl キーと Shift キーを使って複数のエージェントを選択することで、複数のエージェント上で WebDriver を一度に更新することもできます。
更新処理が開始されます。問題が発生した場合は、ログを表示 ボタンを持ったダイアログが表示されます。このボタンをクリックすると、デフォルト テキスト エディタでエラー ログが開きます。
親トピック: エージェント プール


エージェントの詳細設定

デフォルトでは、リモート エージェントはローカル システム アカウントで実行されます。これは、Silk Launcher Service がシステム アカウントで実行されており、その特権をSilk Performer エージェントや仮想ユーザー プロセスが引き継ぐことが原因です。このコンセプトは、Web プロトコルやその関連したテクノロジに対してはうまく機能します。しかし、ブラウザ駆動型 Web やその他のテクノロジでは、ユーザー レジストリ ハイブへのアクセスを必要とするため、特定のユーザー アカウントで仮想ユーザーを実行する方法が用意されています。

  • 単一のエージェントに特定のユーザー アカウントを使用する
    このオプションを使用すると、特定のユーザー アカウントの元で仮想ユーザーを実行するように特定のエージェントを構成できます。
  • すべてのエージェントに特定のユーザー アカウントを使用する
    特定のユーザー アカウントで仮想ユーザーを実行するようにすべてのエージェントを構成します。
  • 複数の Windows セッションへの仮想ユーザーの分散
    実行時に複数のセッションを作成するようにエージェントを設定します。
親トピック: エージェントの設定


単一のエージェントに特定のユーザー アカウントを使用する

このオプションを使用すると、特定のユーザー アカウントの元で仮想ユーザーを実行するように特定のエージェントを構成できます。すべてのエージェントのすべての仮想ユーザーを特定のユーザー アカウントで実行する場合は、他のオプションを使用します（「すべてのエージェントに特定のユーザー アカウントを使用する」を参照）。

  1. Silk Performer メニュー バーの ツール > System Configuration Manager を選択します。 System Configuration Manager ダイアログが表示されます。
  2. アプリケーション タブをクリックします。
  3. ダイアログ ボックスの左側にあるグループ ボックスの Silk Performer を選択します。
  4. アカウント テキスト ボックスの横にある 変更 をクリックし、リモート テストの実行権限を持つ、エージェント ワークステーション上のユーザーのアカウント名を入力します。
  5. パスポート テキスト ボックスの横にある 変更 をクリックし、対応するパスワードを入力します。
  6. OK をクリックします。
親トピック: エージェントの詳細設定
関連概念
リモート エージェント上のブラウザ駆動の仮想ユーザー


すべてのエージェントに特定のユーザー アカウントを使用する

常に専用のユーザーを使用するクラウド エージェントの場合を除き、すべてのエージェントに対して使用する特定のユーザー アカウント資格情報を 1 か所で指定できます。この機能により、デフォルトのシステム アカウントではなく、特定のユーザー アカウントでエージェントを起動できます。ブラウザ駆動型 Web などのテクノロジでは、Windows 組み込みのシステム アカウントではなくユーザー アカウントのコンテキストで仮想ユーザーを実行することは有益で、推奨される構成です。この設定を有効にする場合は、指定したユーザー アカウントが、負荷テストで使用するすべてのエージェント マシン上で利用可能であることを確認してください。

デフォルトでは、エージェントはシステム アカウントに割り当てられますが、System Configuration Manager を使用して専用のユーザー アカウントを各エージェントに指定できます（「単一のエージェントに特定のユーザー アカウントを使用する」を参照）。各エージェントに対して個別にユーザー アカウント資格情報を指定する必要があるので、エージェント数が多い場合にこの方法で特定のユーザー アカウントを割り当てると、手間がかかる可能性があります。

注: 指定されたユーザー アカウントが、リモート エージェントで Remote Desktop Users Windows グループのメンバになっていることを確認します。
  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. エージェント アイコンを選択して、詳細 タブをクリックします。
  3. 特定のユーザー アカウントを使用する を有効にします。
  4. ユーザー名 および パスワード フィールドに、テストするエージェントを起動する権限を持つユーザーの資格情報を指定します。
  5. OK をクリックして、設定を保存します。
注: 詳細 タブのこの設定は、System Configuration Manager でエージェントに対して定義するすべての設定よりも優先されます。
注: リモート デスクトップ サーバーがエージェント上にインストールされている場合、デフォルトのシステム アカウントを使用することをお勧めします。代わりに特定のユーザー アカウントを使用した場合で、セッションが予期せずに切断された場合は、エージェントを含むエージェントのセッションが終了されます。これは、リモート デスクトップ サーバーの設定で [切断されたセッションを終了する] がアクティブ化されている場合に発生します。
親トピック: エージェントの詳細設定


複数の Windows セッションへの仮想ユーザーの分散

Windows オペレーティング システムは、すべての利用可能なリソースを 1 つの Windows セッションに占有させません。Silk Performer では、ブラウザ駆動型 Web や SAPGUI などの UI ベースの技術を使用した負荷テストに対して、いくつかの Windows セッションにまたがって仮想ユーザーを分散させることができます。これにより、高性能なハードウェアのリソースを効率よく使用できるようになります。複数のインスタンスで実行するように設計されていない Java や .NET Framework コードを実行する仮想ユーザーを、いくつかの Windows セッションに対して分散できます。

GUI レベル テストでは各仮想ユーザーが専用の Windows セッションを作成しますが、この設定では 1 つのセッションで複数の仮想ユーザーを実行できます。エージェントマシンが処理できるセッションの数は、そのハードウェア リソース（特に CPU とメモリ）に依存します。この設定は、次のテクノロジに対して利用できます： ブラウザ駆動型 Web、Citrix、SAPGUI、Java Framework。

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. エージェント アイコンを選択して、詳細 タブをクリックします。
  3. 複数のセッションを作成する を有効にします。
  4. Silk Performer が作成できる 最大セッション数 を指定します。
  5. ユーザー名 フィールドと パスワード フィールドに、作成する Windows セッションの資格情報を指定します。
  6. OK をクリックして、設定を保存します。
負荷テストを開始すると、Silk Performer は複数の Windows セッションを作成し、資格情報を使用してセッションにログインし、各セッションで仮想ユーザーを開始します。
注: この設定を有効にする場合は、すべてのエージェント マシンが一様にセットアップされていることを確認してください。また、すべてのエージェント マシンでリモート デスクトップ サービス（RDS）が稼動し、適切なライセンス オプションが設定されていなければなりません。Windows セッションは、リモート デスクトップ サービス ホスト内からローカルに開かれます。よって、接続ユーザー数 ライセンスでも機能しますが、接続デバイス数 ライセンスのほうがより適しています。
ヒント: エージェント マシン上で実行される仮想ユーザー数は、 エージェントの機能から読み込まれます。これらのデフォルトの機能は、CPU とメモリに基づいて計算されます。しかし、特定の環境や条件に応じた現実的な数は、ユーザー タイプ（スクリプトと設定）を考慮しないと決定できません。エージェント仮想ユーザー容量の評価 ダイアログは、特定のエージェントとユーザー タイプに対する仮想ユーザーの適切な最大数を決定するのに役立ちます。詳細については、「エージェント仮想ユーザー容量の評価」を参照してください。
親トピック: エージェントの詳細設定


Java の設定

Java の設定は、システム設定またはプロファイル設定から行うことができます。システム設定は、新しいプロジェクトおよび既存プロジェクト内の新しいプロファイルに対するデフォルトの設定として使用されます。テスト実行中の仮想ユーザーは、割り当てられているプロファイルの Java の設定を使用します。

Java の全般設定で、JDK のバージョン、ハード ディスク上の場所、クラスパスを指定します。クラスパスにプロジェクト ディレクトリやデータ ディレクトリなどの既知の場所が含まれる場合、これらのパスの部分は自動的にプレースホルダに置き換えられます。プレースホルダは、ディレクトリの名前がコントローラ マシンとは異なる状況で、プロジェクトを移行するときまたはエージェント マシンで仮想ユーザーを実行するときに便利です。

注: データ ファイルの拡張子が、標準的な Java アーカイブ ファイルの拡張子 (.jar や.zip など) の場合は、現在のアクティブ プロファイルのクラスパスにこれらのファイルを追加するよう、Silk Performer はメッセージを表示します。
  1. Java バージョンとクラスパス設定を構成する
    クラスパスの設定など、Java オプションの全般的な設定を構成します。
  2. Java システムの詳細設定を構成する
    コマンド ライン オプション、JIT コンパイラ オプションなど、Java 仮想マシンの詳細設定を構成します。
  3. リモート エージェント Java 設定
    ワークベンチの Java 設定から独立して、リモート エージェントの Java 設定を構成する方法を説明します。
親トピック: システム設定
関連概念
Java の設定
Java フレームワークのサポート
関連資料
Oracle Forms Functions Reference


Java バージョンとクラスパス設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Java アイコンをクリックします。 全般 ページが開きます。
  3. 使用する Java アーキテクチャに応じて、Java 32 ビット ホーム フィールド、または Java 64 ビット ホーム フィールドに Java ホームへのパスを指定します。32 ビットと 64 ビットの切り替えは、詳細 タブで行えます。 このオプションにより、Java 仮想マシンを PATH 環境変数で指定されたパスとは異なるところからロードできます。つまり、システムの PATH 環境変数を変更しない場合でも、さまざまな Java 仮想マシンを切り替えできます。
    注: Silk Performer は、ここで指定されたパスを自動的に検査します。パスが正しくない場合は、オペレーティング システムのデフォルトの Java ホーム パスが代わりに使用されます。
    クラスパス には、Java 仮想マシン用に指定されたクラスパスが表示されます。デフォルトでは、 クラスパスはシステム クラスパスに設定されます。
  4. JVM を検査 をクリックして、Java 仮想マシンの構成設定を検証します。 Java 環境が正しく設定されていることを確認するには、構成をテストする必要があります。
  5. クラス ファイルを検索して Java 仮想マシンのクラスパスに追加するには、ファイル をクリックします。
    注: 複数のクラス ファイルを選択してクラスパスに追加するには、Ctrl キーまたは Shift キーを押します。
  6. ディレクトリを検索して Java 仮想マシンのクラスパスに追加するには、ディレクトリ をクリックします。
  7. 選択したファイルをクラスパス階層内で上または下に移動するには、上 または 下 をクリックします。
  8. 選択したファイルをクラスパスから削除するには、削除 をクリックします。
  9. OK をクリックして、設定を保存します。
親トピック: Java の設定
次のトピック: Java システムの詳細設定を構成する
親トピック: Java の設定


Java システムの詳細設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Java アイコンをクリックします。 全般 ページが開きます。
  3. 詳細設定 タブをクリックします。
  4. コマンドライン オプション フィールドに、Java 仮想マシンに渡すコマンドライン オプションを入力します。 一部の Java クラスでは、正常に実行するために特定の仮想マシン オプションが必要です。チューニング パラメータは、VM パラメータでも指定できます。
  5. Java 仮想マシンの Just In Time (JIT) コンパイラを無効にする場合は、JIT コンパイラを無効にする チェック ボックスをオンにします。 必要に応じて JIT コンパイラを無効にし、標準以外の VM DLL を指定できます。
  6. システム クラスパスを使用する場合は、システム クラスパスを使用する チェック ボックスをオンにします。
  7. 32 ビット Java (デフォルト)、または 64 ビット Java を選択します。
  8. 64 ビット Java を使用する場合、Silk Performer ランタイムと JVM 間の通信における 実行タイムアウト を指定します。
  9. OK をクリックして、設定を保存します。
選択した Java アーキテクチャに応じて、Java テスト コードがプロセス内で実行されるか、プロセス外で実行されるかが決まります。つまり、次のような動作になります。
  • 32 ビット Java を有効にした場合：テストを実行すると、jvm.dll と必要な .jar ファイルが perfrun.exe に動的にロードされます。この結果、perfrun.exe のメモリ使用量が増加することになります。また、負荷テストの初期段階では、メモリ使用量が変動する可能性があることにもご注意ください。この現象はメモリ リークと誤解されがちですが、Java ガーベージ コレクタが機能しているためで、期待通りの動作となります。デフォルトでは、最大 50 仮想ユーザーが同じ JVM を共有するため、メモリ使用量を節約できます。ただし、この機能を使用するには、Java テスト コードがスレッドセーフ（特に静的変数に注意）になっている必要があります。
  • 64 ビット Java を有効にした場合：テストを実行すると、Java テスト コードが別のプロセスとして実行されます。 つまり、perfrun.exe にロードされません。

JavaSetOption BDL 関数を使って、32 ビット Java と 64 ビット Java を切り替えることもできます。BDL スクリプトで設定を定義すると、プロファイル設定でのオプション定義は上書きされます。

親トピック: Java の設定
前のトピック: Java バージョンとクラスパス設定を構成する
次のトピック: リモート エージェント Java 設定


リモート エージェント Java 設定

コントローラ（Silk Performer ワークベンチ）の Java 設定とは別に、リモート エージェントの Java 設定を構成できます。これにより、コントローラとエージェント マシンで完全に同じ Java 環境（Java のバージョン、設定、ディレクトリ）を準備する必要がなくなります。エージェントでは、JRE で十分ですが、コントローラでは、通常 JDK が必要になります。

エージェント マシン上の指定したパスにクラスや jar ファイルが見つからない場合は、ローカル データ ディレクトリが続いて検索されます。

設定 > アクティブ プロファイル > Java にあるリモート プロファイル設定タブの初期値は、設定 > システム > Java のリモート エージェントの設定から取得されます。テスト時にリモート エージェントに実際に適用されるのは、アクティブ プロファイル タブの値です。

親トピック: Java の設定
前のトピック: Java システムの詳細設定を構成する


リモート エージェント

Silk Performer では、リモート エージェントのコンピュータを LAN 内または外部のインターネット上のどちらにでも配置できます。 リモート エージェントとコントローラの間の通信を、暗号化されたセキュアな接続が組み込まれた安全な分散環境内で構成できます。

リモート エージェントとコントローラ間は、選択プロキシによりさまざまな方法で通信できます。複数のファイアウォール経由の接続、TCP/IP、HTTP または SOCKS ファイアウォール経由も可能です。 接続の設定では、セキュアまたは非セキュアな接続および暗号の使用または不使用を選択できます。

  • リモート エージェントの接続シナリオ
    さまざまなリモート エージェントの接続タイプを示す図が含まれます。
  • リモート エージェント用のポート設定の指定
    リモート エージェント用に、セキュアではないポート番号とセキュアなポート番号を設定する方法について説明します。
  • リモート エージェント用のパスワードの指定
    コントローラが、リモート エージェントに接続するには、パスワードを送信する必要があります。
  • リモート エージェント Java 設定を構成する
    ワークベンチの Java 設定から独立して、リモート エージェントの Java 設定を構成できます。
親トピック: Silk Performer の構成


リモート エージェントの接続シナリオ

さまざまなリモート エージェントの接続タイプを示す図が含まれます。

  • リモート エージェントへの直接接続 (デフォルト設定)
    直接接続に必要なポート設定について説明します。
  • TCP/IP ファイアウォール経由で接続する
    TCP/IP ファイアウォール経由でのリモート エージェントへの接続を設定する方法について説明します。
  • HTTP ファイアウォール経由で接続する
    HTTP ファイアウォール経由でリモート エージェントに接続するために必要なポート設定について説明します。
  • SOCKS ファイアウォール経由で接続する
    SOCKS ファイアウォール経由でリモート エージェントに接続するために必要な設定について説明します。
  • 複数のファイアウォール経由で接続する
    複数のファイアウォール経由でリモート エージェントに接続する場合に必要な SOCKS および HTTP プロキシ サーバー設定について説明します。
  • クラウドに接続する
    クラウドのリモート エージェントに接続するのに必要な設定について説明します。
親トピック: リモート エージェント


リモート エージェントへの直接接続 (デフォルト設定)

次の図は、コントローラとリモート エージェントの間の直接接続を示しています (ファイアウォールなし)。

この環境では、以下のポートがリモート エージェントへの接続に使用されます。

  • UDP 19200：ブロードキャストに使用されます (ハードコード済み、変更なし)
  • TCP 19200：Launcher Service への最初の非セキュア接続エージェントでは System Configuration Manager から、Workbench では システム > 設定 > エージェント プール > プロパティ からアクセス可能です。
  • TCP 19202：Silk Performer エージェント ポート。このポートは、エージェント接続ポート (デフォルト 19200) およびセキュア エージェント接続ポート (デフォルト 19201) の最大のポート番号の次に空いているポートです。
  • TCP 19203：Silk Performer エージェントのリアルタイム測定値通信ポート。このポートは、リアルタイム測定値が有効になっている場合にのみ使用されます。エージェント接続ポートの次に空いているポートになります。

ファイアウォールなしのエージェント接続の確立

  1. コントローラが、Silk Launcher Service への初期直接接続を開きます。
  2. サービスが、Silk Performer エージェント プロセス (perfLtcAgent.exe) を起動します。
  3. サービスがエージェントのリスナー ポート (19202) をコントローラに返します。
  4. コントローラがポート 19202 のエージェントに直接接続します。
  5. 省略可能：リアルタイム測定値データを収集する場合は、コントローラはポート 19203 のエージェントに直接接続します。
親トピック: リモート エージェントの接続シナリオ


TCP/IP ファイアウォール経由で接続する

  1. Silk Performer メニュー バーの ツール > System Configuration Manager を選択します。 System Configuration Manager ダイアログ ボックスが表示されます。
  2. サービスのステータス タブをクリックします。
  3. ポート フィールドおよび セキュア ポート フィールドに、セキュアではないポートとセキュアなポートの番号を入力します。 デフォルトの設定は、セキュアではないポートが 19200、セキュアなポートが 19201 です。ファイアウォールがブロックしてしまう場合には、これらのポート接続を変更する必要があります。 必要に応じて、お使いのファイアウォール上で次のポートを開く必要があります：
    • 19200：Silk Performer Silk Launcher Service に対するデフォルトの接続ポート。
    • 19201：Silk Launcher Service に対するセキュアな接続 (セキュアな接続が必要な場合にのみ開く必要があります)。
    • 19202、19203、19204：これらのポートは、Silk Performer エージェント、リアルタイム測定値サービス、および System Configuration Manager エージェントとの通信に使用されます。ポート割り当ては先着順で行われます。
  4. OK をクリックして、設定を保存します。
親トピック: リモート エージェントの接続シナリオ


HTTP ファイアウォール経由で接続する

エージェントの プロパティ ダイアログで HTTP プロキシ サーバーを使用する 設定を選択します。

HTTP プロキシ経由のエージェント接続の確立

  1. コントローラが、HTTP プロキシ経由で Silk Launcher Service への初期接続を開きます。
  2. サービスが、Silk Performer エージェント プロセス (perfLtcAgent.exe) を起動します。
  3. サービスがエージェントのリスナー ポート (19202) をコントローラに返します。
  4. コントローラがプロキシ経由でポート 19202 のエージェントに接続します。
  5. 省略可能：リアルタイム測定値データを収集する場合は、コントローラはプロキシ経由でポート 19203 のエージェントに接続します。
親トピック: リモート エージェントの接続シナリオ


SOCKS ファイアウォール経由で接続する

エージェントの プロパティ ダイアログで SOCKS プロキシ サーバーを使用する 設定を選択します。

SOCKS プロキシ経由のエージェント接続の確立

  1. コントローラが、SOCKS 経由で Silk Launcher Service への初期接続を開きます。
  2. サービスが、Silk Performer エージェント プロセス (perfLtcAgent.exe) を起動します。
  3. サービスがエージェントのリスナー ポート (19202) をコントローラに返します。
  4. コントローラがプロキシ経由でポート 19202 のエージェントに接続します。
  5. 省略可能：リアルタイム測定値データを収集する場合は、コントローラはプロキシ経由でポート 19203 のエージェントに接続します。
親トピック: リモート エージェントの接続シナリオ


複数のファイアウォール経由で接続する

SOCKS プロキシおよび HTTP プロキシを連続で使用するように、Silk Performer エージェントの接続を構成できます。この場合、エージェントは最初に SOCKS プロキシに接続し、次に HTTP プロキシに接続します。

エージェントの プロパティ ダイアログで、HTTP プロキシ サーバーを使用する と SOCKS プロキシ サーバーを使用する の両方の設定を選択します。

複数プロキシ経由のエージェント接続の確立

  1. コントローラが、SOCKS プロキシ、HTTP プロキシの順に経由して Silk Launcher Service への初期接続を開きます。
  2. サービスが、Silk Performer エージェント プロセス (perfLtcAgent.exe) を起動します。
  3. サービスがエージェントのリスナー ポート (19202) をコントローラに返します。
  4. コントローラが両方のプロキシ経由でポート 19202 のエージェントに接続します。
  5. 省略可能：リアルタイム測定値データを収集する場合は、コントローラは両方のプロキシ経由でポート 19203 のエージェントに接続します。
親トピック: リモート エージェントの接続シナリオ


クラウドに接続する

開始する前に、Enterprise Cloud Services のユーザー名およびパスワードを販売代理店に問い合わせてください。

  1. ツール > Cloud Agent Manager を選択します。
  2. Enterprise Cloud Services の ユーザー名 および パスワード に値を入力し、OK をクリックします。
  3. 社内でプロキシの使用が必要な場合は、コネクションの詳細設定 をクリックします。
    1. プロキシの有効化 を選択します。
    2. 必要な情報を アドレス および ポート に入力します。
    3. OK をクリックします。
  4. ログイン をクリックします。 社内プロキシで認証が必要な場合は、ログイン時に別のダイアログ ボックスが表示される場合があります。

クラウドでのエージェント接続の確立

  1. コントローラは、HTTP プロキシおよびポート 443 経由で Silk Launcher Service への初期接続を開きます。Silk Performer は、セキュアな接続の場合はデフォルトのポート番号 443 を自動的に使用します。社内ポリシーにより必要となる場合は、追加の HTTP プロキシ経由で接続が行われます。
  2. サービスが、Silk Performer エージェント プロセス (perfLtcAgent.exe) を起動します。
  3. サービスがエージェントのリスナー ポート (19202) をコントローラに返します。
  4. コントローラはプロキシ、ポート 443、別のプロキシ (必要な場合) 経由でポート 19202 のエージェントに接続します。
  5. 省略可能：リアルタイム測定値データを収集する場合は、コントローラはプロキシ、ポート 443、別のプロキシ (必要な場合) 経由でポート 19203 のエージェントに接続します。
親トピック: リモート エージェントの接続シナリオ


リモート エージェント用のポート設定の指定

  1. Silk Performer メニュー バーの ツール > System Configuration Manager を選択します。 System Configuration Manager ダイアログ ボックスが表示されます。
  2. サービスのステータス タブをクリックします。
  3. セキュアではないポートとセキュアなポートの番号を入力します。 ポート は、セキュアではないコントローラ/エージェント接続用の TCP/IP リスナー ポートです (これは、コントローラがエージェントに接続するために使用するデフォルトのポートです)。 セキュア ポート は、セキュアなコントローラ/エージェント接続用の TCP/IP リスナー ポートです (コントローラは、セキュアな SSL 接続によっても接続できます。 エージェント接続プロパティ で暗号化 (SSL) を有効にすると、コントローラはセキュアなポートに接続します)。 デフォルトの設定は、セキュアではないポートが 19200、セキュアなポートが 19201 です。
  4. OK をクリックして、設定を保存します。
親トピック: リモート エージェント


リモート エージェント用のパスワードの指定

  1. Silk Performer メニュー バーの ツール > System Configuration Manager を選択します。 System Configuration Manager ダイアログ ボックスが表示されます。
  2. サービスのステータス タブをクリックします。
  3. パスワード 領域の 変更 をクリックします。
  4. パスワードを指定して、確認します。
  5. OK をクリックします。
    注: コントローラが、このリモート エージェントに接続するには、このパスワードを送信する必要があります。
親トピック: リモート エージェント


リモート エージェント Java 設定を構成する

  1. システム > 設定 > Javaに移動します。
  2. リモート タブをクリックします。
  3. リモート エージェントに別の設定を使用する を有効にします。このオプションを無効にすると、Silk Performer コントローラの Java 設定がエージェントにも適用されます。コントローラの Java 設定は、全般 タブで定義されます。
  4. Java ホーム パスのディレクトリは、使用する Java アーキテクチャに応じて、Java 32 ビット ホーム フィールド、または Java 64 ビット ホーム フィールドで指定します。このオプションにより、Java 仮想マシンを PATH 環境変数で指定されたパスとは異なるところからロードできます。つまり、システムの PATH 環境変数を変更しない場合でも、さまざまな Java 仮想マシンを切り替えできます。クラスパス フィールドには、Java 仮想マシン用に指定されたクラスパスが一覧表示されます。デフォルトでは、 クラスパスはシステム クラスパスに設定されます。
    注: クラスパス フィールド内のクラスパスのエントリは、手動で編集できます。
  5. コマンド ライン オプション テキスト ボックスに、Java 仮想マシンに渡すコマンド ライン オプションを入力します。
  6. OK をクリックします。
親トピック: リモート エージェント


クライアント証明書

セキュアな Web サーバーは、信頼できる認証機関から発行された適切なクライアント証明書を持たないクライアントを拒否するように、構成できます。 このような場合、サーバーはリクエストを実行する前に、証明書の送信をクライアントに要求します。 信頼できる CA がクライアントに署名している場合、サーバーはクライアントの身元を気にかけません。 Web サーバーがクライアント証明書をリクエストしている場合は、Web ブラウザからクライアント証明書をエクスポートして、記録と再生に使用する Silk Performer 証明書ストアに格納する必要があります。

Web ブラウザでのクライアント証明書の処理

セキュアな Web サーバーは、信頼できる認証機関から発行された適切なクライアント証明書を持たないクライアントを拒否するように、構成できます。 Web サーバーがクライアント証明書をリクエストしている場合は、Web ブラウザからクライアント証明書をエクスポートして、Silk Performer 証明書ストアに格納する必要があります。

クライアント証明書のエクスポート

Silk Performer Recorder はクライアントと Web サーバーの間のプロキシとして動作し、再生エンジンはシミュレートされたクライアント自体を表すので、サーバーへの接続に成功するには、クライアントからの証明書が必要です。 したがって、Web ブラウザから証明書をエクスポートして、Silk Performer にインポートする必要があります。

注: 認証機関からクライアント証明書を取得するときは、証明書と共に秘密鍵をエクスポートできるようにしてください。 そうしないと、セキュアな Internet Recorder で証明書を使用できません。
  • クライアント証明書をインストールする
    Web サーバーがクライアント証明書をリクエストしている場合は、Web ブラウザからクライアント証明書をエクスポートして、Silk Performer にインポートする必要があります。
  • 記録におけるクライアント証明書の使用
    再生エンジンが実際のクライアントの代わりに Web サーバーに提示するクライアント証明書を作成します。
  • GUI での再生のためのクライアント証明書の使用
    セキュアな Web サーバーは、信頼できる認証機関から発行された適切なクライアント証明書を持たないクライアントを拒否するように、構成できます。このような場合、サーバーはリクエストを実行する前に、証明書の送信をクライアントに要求します。
  • スクリプトでの再生のためのクライアント証明書の使用
    セキュアな Web サーバーは、信頼できる認証機関から発行された適切なクライアント証明書を持たないクライアントを拒否するように、構成できます。このような場合、サーバーはリクエストを実行する前に、証明書の送信をクライアントに要求します。
  • Internet Explorer からクライアント証明書をエクスポートする
    Web サーバーがクライアント証明書をリクエストしている場合は、Web ブラウザからクライアント証明書をエクスポートして、Silk Performer にインポートする必要があります。
  • Firefox からクライアント証明書をエクスポートする
    Web サーバーがクライアント証明書をリクエストしている場合は、Web ブラウザからクライアント証明書をエクスポートして、Silk Performer にインポートする必要があります。
親トピック: Silk Performer の構成


クライアント証明書をインストールする

クライアント証明書は、通常、システム、またはブラウザの証明書ストアに保存されます。クライアント証明書を Silk Performer で使用するためには、Web ブラウザから証明書をエクスポートして、Silk Performer にインポートする必要があります。

  1. メニュー バーから、設定 > アクティブ プロファイル を選択します。
  2. 左側のショートカット リストから インターネット アイコンをクリックします。
  3. セキュリティ タブに切り替えます。
  4. クライアント証明書 領域で インポート をクリックし、.p12 または .pfx 形式の証明書ファイルを探します (たとえば、C:\clientcert\johndoe.pfx)。
  5. Web ブラウザから証明書をエクスポートするときに暗号化に使用したパスワードを入力します。
  6. OK をクリックします。

    この確認により、Silk Performer ユーザー データ ディレクトリ (たとえば、<ユーザーのパブリックのドキュメント>\Silk Performer 21.0\Data\johndoe.pem) にも証明書ファイル (.pem) が作成されます。

    注: Silk Performer Recorder での各プロキシ接続セットアップは、クライアント証明書と関連付けることができます。Silk Performer Recorder が実際のクライアントの代わりに、Web サーバーにクライアント証明書を提示します。
親トピック: クライアント証明書


記録におけるクライアント証明書の使用

ここでの手順を実行する前に、クライアント証明書が Silk Performer にインストールされていることを確認してください。

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. システム設定 - Recorder ダイアログの プロキシ タブをクリックします。
  4. 新しいプロキシ接続をセットアップするか、クライアント証明書に関連付ける任意の既存プロキシ (たとえば、SOCKS) を選択して、編集 をクリックします。
  5. クライアント証明書 領域の 証明書 ボックスの一覧から適切な証明書を選択します (たとえば、John Doe)。
  6. OK をクリックします。
  7. 記録を開始する前に、Silk Performer Recorder を再起動します。 Silk Performer 再生エンジンは、実際のクライアントの代わりに、Web サーバーにこのクライアント証明書を提示します。
親トピック: クライアント証明書


GUI での再生のためのクライアント証明書の使用

ここでの手順を実行する前に、クライアント証明書が Silk Performer にインストールされていることを確認してください。

  1. メニュー バーから、設定 > アクティブ プロファイル を選択します。
  2. 左側のショートカット リストから インターネット アイコンをクリックします。
  3. セキュリティ タブに切り替えます。
  4. クライアント証明書 領域の 証明書 ボックスの一覧から適切な証明書を選択します (たとえば、John Doe)。
  5. OK をクリックします。
リモート エージェントでも証明書が利用できるようにするために、プロジェクトのデータ ファイルに証明書ファイルを追加してください。インポートした証明書は、次のような Silk Performer のユーザー ディレクトリに格納されます：<ユーザーのパブリックのドキュメント>\Silk Performer <バージョン>\Data。
親トピック: クライアント証明書


スクリプトでの再生のためのクライアント証明書の使用

ここでの手順を実行する前に、クライアント証明書が Silk Performer にインストールされていることを確認してください。

BDL 関数 SslSetClientCert() を使用すると、仮想ユーザーが指定したクライアント証明書を使用できるようになります。 例：
SslSetClientCert("johndoe.pem")
リモート エージェントでも証明書が利用できるようにするために、プロジェクトのデータ ファイルに証明書ファイルを追加してください。インポートした証明書は、次のような Silk Performer のユーザー ディレクトリに格納されます：<ユーザーのパブリックのドキュメント>\Silk Performer <バージョン>\Data。
親トピック: クライアント証明書
関連資料
SslSetClientCert Function


Internet Explorer からクライアント証明書をエクスポートする

  1. Internet Explorer でメニュー バーの ツール > インターネット オプション を選択します。 インターネット オプション ダイアログの 全般 ページが開きます。
  2. コンテンツ タブをクリックします。
  3. 証明書 領域の 証明書 をクリックします。 証明書 ダイアログが開きます。
  4. 一覧からエクスポートする証明書を選択して、エクスポート をクリックします。 証明書のエクスポート ウィザード が自動的に起動されます。
  5. このウィザードを使用し、表示されるすべてのステップを実行して、クライアント証明書をエクスポートします。
    注: 証明書を Silk Performer Recorder で使用するには、証明書と一緒に秘密鍵をエクスポートしてください。
  6. 証明書 ダイアログで 閉じる をクリックします。
  7. OK をクリックして インターネット オプション ダイアログを閉じます。 この操作で、証明書ファイル (.pfx) を Silk Performer Recorder にインポートできます。
親トピック: クライアント証明書


Firefox からクライアント証明書をエクスポートする

  1. Firefox メニュー バーの ツール > オプション を選択します。 オプション ダイアログが開きます。
  2. 詳細 アイコンをクリックします。
  3. 暗号化 タブを選択します。
  4. 証明書 領域の 証明書を表示 をクリックします。 証明書マネージャ ダイアログが開きます。
  5. 一覧からエクスポートする証明書を選択して、エクスポート をクリックします。
  6. 証明書をファイルに保存 ダイアログに証明書ファイルの名前を入力してファイルの種類を選択し、保存 をクリックします。
  7. 証明書マネージャ ダイアログで OK をクリックしてダイアログを閉じます。
  8. OK をクリックして オプション ダイアログを閉じます。
親トピック: クライアント証明書


カスタム画面レイアウト

それぞれの画面レイアウトは、それぞれに便利な場合があります。 テストの開発、テストの実行、結果の分析をラップトップで行う場合、ラップトップのネイティブの画面解像度で十分であるため、むしろこの解像度が好まれます。 一般に、解像度が高いほど、多くのペインを一度に表示できます。 このような場合には、すべてのペインを表示できる 高解像度 画面レイアウトを使用するのが妥当です。

解像度が低い装置で Silk Performer を表示する場合や、プロジェクタを使用したプレゼンテーションや Web 会議では、画面の解像度が制限されます。 このような場合には、標準の画面レイアウトを使用した方が便利な場合があります。

有効または無効にするペインや、ペインを配置する場所などのカスタマイズは、高解像度と標準の両方のレイアウトに保存されます。 たとえば、高解像度レイアウトで プロジェクト ペインの位置を変えてから、標準レイアウトに切り替えた場合、プロジェクト ペインは、高解像度レイアウトに次回戻ったときに同じカスタム位置に表示されます。

  • 高解像度画面レイアウトを有効/無効にする
    高解像度画面レイアウトを毎日のテスト作業に使用し、標準 (低解像度) レイアウトをプレゼンテーションやデモに使用することを検討します。
  • デフォルトの画面レイアウトにリセットする
    有効になっているペインやその位置を含め、標準と高解像度の両方の画面レイアウトは、デフォルトの状態に戻すことができます。
親トピック: Silk Performer の構成


高解像度画面レイアウトを有効/無効にする

  1. 表示 > 画面のレイアウト を選択します。
  2. 高解像度 を選択すると、毎日のテスト作業用に追加の Silk Performer 表示ペインを高解像度画面に表示できます。 高解像度レイアウトが有効になっているときは、高解像度 メニュー オプションの横にチェックマークが表示されます。
    注: 高解像度レイアウトを無効にして標準レイアウトに戻るには、高解像度 を選択します。
Silk Performer 画面レイアウトは、解像度に基づいて描画しなおされます。
親トピック: カスタム画面レイアウト


デフォルトの画面レイアウトにリセットする

  1. 表示 > 画面のレイアウト を選択します。
  2. リセット を選択して、画面の各ペインとそれぞれ位置をデフォルトの状態に戻します。 リセット コマンドは、高解像度と標準の両方のレイアウトではなく、現在のレイアウトだけに適用されます。
Silk Performer 画面レイアウトは、解像度に基づいて描画しなおされます。
親トピック: カスタム画面レイアウト


複数のバージョンの Silk Performer を管理する

単一のマシン上に複数のバージョンの Silk Performerがインストールされている場合、デスクトップからプロジェクトまたはスクリプト ファイルをダブルクリックすると、誤ったバージョンの Silk Performerが起動することがあります。 Silk Performerのファイル タイプはすべて、特定のファイル タイプがダブルクリックされたときに起動されるプログラムを指定するエントリを、レジストリに持っています。

デフォルトでは、最後にインストールされたバージョンの Silk Performer が、Silk Performerのファイル タイプすべての操作で使用されます。 以前のバージョンの Silk Performerが最後にインストールされた場合、Silk Performerファイルをダブルクリックすると、そのバージョンが使用されます。

デフォルトのバージョンを変更する方法は、次の 2 つです。

  • Silk Performerの最新バージョンを再インストールする - バージョンの選択を制御しているすべてのレジストリ エントリが更新され、最新バージョンが指定されます。 これは所要時間の少ない手法で、レジストリを手動で変更するより安全です。
  • 手動でレジストリを変更する - HKEY_CLASSES_ROOT\Silk Performer Project Archive File\shell\Open\command に 移動し、各ファイル タイプに対するデフォルト値を変更します。 各ファイル タイプに、特定のバージョンを選択できます。
    注: 各 Silk Performer ファイル タイプには、それに関連付けられているレジストリ キーがあります。 各エントリを変更する必要があります。 これは時間がかかることがありますが、異なるファイル タイプに対して、異なるバージョンの Silk Performerが使用されるように指定できます。
親トピック: Silk Performer の構成


負荷テストの管理

このセクションでは、負荷テストの準備、実行、およびその結果の分析を行うために遂行する必要があるタスクについて説明します。

  • プロジェクトの概要設定
    プロジェクトの名前、説明、テストするアプリケーションの種類といったパラメータの定義方法を説明します。
  • スクリプトを作成する
    テスト スクリプトの作成方法 (手動、記録、またはサンプル スクリプトに基づく方法) について説明します。 テスト スクリプトは、負荷テストにおける仮想ユーザーのアクションを定義したものです。
  • スクリプトの試行
    スクリプトが成功したか失敗したかを評価する方法について説明します。
  • スクリプトをカスタマイズする
    負荷テストを実行する前にスクリプトをカスタマイズすることを推奨する理由、およびスクリプトをカスタマイズしない場合に発生する問題について説明します。
  • ユーザー タイプの定義
    アクティブ ワークロード用にユーザー タイプを定義する方法について説明します。ユーザー タイプの定義では、テストで使用すれるスクリプト、ユーザー グループ、およびプロファイルを指定します。
  • ベースラインを検索する
    ベースライン テストを実行して、アプリケーションの理想的なパフォーマンスのベースラインを決定する方法について説明します。
  • ベースラインの表示
    テスト対象のアプリケーションが目標とするパフォーマンスに、ベースライン テストが反映されることを確認する方法と、ベースライン テストをベースラインとして設定する方法の概要について説明します。
  • ワークロードの調整
    負荷テストのワークロードを定義する方法について説明します。
  • エージェントを割り当てる
    個々のエージェントおよびエージェント クラスタを設定し、プロジェクトに割り当てる方法について説明します。
  • エージェントの試行
    テスト スクリプトの試行を行って、スクリプトがさまざまなエージェントで機能することを確認する方法について説明します。
  • 監視を構成する
    テスト中に Performance Explorer を使用してローカルおよびリモート コンピュータを監視するためのオプションを説明します。
  • 負荷テストの実行
    負荷テストを実行して監視する方法について説明します。
  • テスト結果の検討
    アプリケーションおよびサーバーのパフォーマンスを評価するには、結果を表示して、分析します。
親トピック: Silk Performer Workbench 21.0


プロジェクトの概要設定

プロジェクトの名前、説明、テストするアプリケーションの種類といったパラメータの定義方法を説明します。

  • プロジェクトの概要設定
    プロジェクトの名前、説明、テストするアプリケーションの種類といったパラメータの定義方法を説明します。
  • プロジェクトのプロファイル設定
    プロジェクトのプロファイル設定では、テスト スクリプト生成、再生シミュレーション、または結果ファイル出力を定義します。
  • テスト スクリプト
    テスト中に仮想ユーザーが行うアクションを指定します。
  • データ ファイル
    プロジェクトは、ユーザー データ ファイル (CSV)、IDL、証明書ファイル (PEM)、ランダム データ ファイル (RND)、およびタイプ ライブラリ ファイル (TLB、DLL、EXE、OCX、OLB、PKG) など、さまざまなデータ ファイルの種類に依存します。
  • エージェント コンピュータ
    エージェント コンピュータは、テスト中に実行される仮想ユーザーをホストします。
親トピック: 負荷テストの管理


プロジェクトの概要設定

Silk Performer の負荷テストを作成する場合、負荷テストプロジェクトの基本設定を定義する必要があります。 プロジェクトには名前を付け、必要に応じて簡単な説明を付けることができます。 テスト対象のアプリケーションの種類は、最も重要なデータベースや分散アプリケーションなど、今日インターネットや Web 上で利用できる主要なトラフィックから幅広く指定できます。

指定された設定は、特定の負荷テストプロジェクトに関連付けられます。 プロジェクトの切り替え、プロジェクトの編集、およびプロジェクトの保存が簡単にできるので、後で変更したり、再利用したりできます。

プロジェクトには、負荷テストの完了に必要なすべてのリソースが含まれています。 この中には、ワークロード、1 つ以上のプロファイルと負荷テストスクリプト、エージェント コンピュータの特定の数とサーバー側監視のための情報、およびスクリプトからアクセスされるすべてのデータ ファイルが含まれます。 こうしたリソースすべてのオプションは、プロジェクト メニュー ツリーのプロジェクト ノードから直接入手できます。

  • プロジェクトの概要を設定する
    テスト中のプロジェクト名、アプリケーションの種類などの基本設定を構成します。
  • 利用可能なアプリケーションの種類
    Silk Performer でのテストが可能なアプリケーションの種類 (ベンダー、プロトコル、およびバージョン) を一覧します。
親トピック: プロジェクトの概要設定
関連資料
利用可能なアプリケーションの種類


利用可能なアプリケーションの種類

次のアプリケーションの種類は、セキュアおよび非セキュアの両方での Silk Performer でテストが可能です：

  • Web Browser
    Web Browser アプリケーションの種類は、Web ブラウザ内で動作するアプリケーションの負荷テストに利用されます。
  • Internet
    Internet アプリケーションの種類を 1 つ選択して、インターネット ベースのプロトコルおよび通信に依存するアプリケーションをテストします。
  • Terminal Emulation
    Silk Performer はターミナル エミュレーション アプリケーション ("グリーン スクリーン" アプリケーション) をサポートしており、Telnet プロトコルに基づいたターミナル エミュレータのトラフィックを記録できます。
  • ERP/CRM
    ERP/CRM アプリケーションの種類を選択し、エンタープライズ リソース プランニング アプリケーションまたはカスタマー リレーションシップ マネジメント アプリケーションをテストします。
  • Web Services
    Web Services アプリケーションの種類を 1 つ選択して、その Web サービス ソフトウェア フレームワークを利用するアプリケーションをテストします。
  • Database
    Database アプリケーションの種類を 1 つ選択して、共通データベース API に依存するアプリケーションをテストします。
  • Application Server/Component Models
    Application Server/Component Models の種類を 1 つ選択して、特定のミドルウェアに依存するアプリケーションをテストします。
  • Terminal Services
    Terminal Services アプリケーションの種類を 1 つ選択して、Citrix ベースのアプリケーションをテストします。
  • .NET
    .NET アプリケーションの種類のいずれか 1 つを選択して、Web サービス、.NET Remoting オブジェクト、NUnit、またはその他の .NET テクノロジをテストします。
  • Java
    Java アプリケーションの 1 つを選択して、Web サービス、RMI、JUnit、またはその他の Java ベースのテクノロジをテストします。
  • Frameworks
    含まれているフレームワークの 1 つを選択して、Java Framework、Visual Basic Framework、Visual Studio .NET を使用した .NET Framework のいずれかを使用するアプリケーションをテストします。
  • Monitoring
    Monitoring アプリケーションの種類を選択すると、サーバー側の結果が生成されますが、これらは、後で確認や比較を行えるようにアーカイブにすることができます。 Monitoring は、サーバーのボトルネックを明らかにし、その場所を特定して解決する働きもするので、オペレーティング システムとアプリケーション サーバーのパフォーマンスを調べることができます。
  • Unit Testing
    Unit Testing アプリケーションの種類を選択して、JUnit、Java、NUnit、.NET ユニット テストを実行します。
  • GUI-Level Testing
    GUI-Level アプリケーションの種類は、プロトコルまたは API レベルでのテストができない負荷テストに使用されます。
  • Legacy
    Legacy グループには、以前のバージョンの Silk Performer で提供されていたプロジェクトの種類が含まれます。
  • Samples
    事前構成済みのテスト スクリプト サンプル を 1 つ選択し、テスト スクリプトを手動で作成する際の時間を節約します。
親トピック: プロジェクトの概要設定
関連概念
プロジェクトの概要設定


Web Browser

Web Browser アプリケーションの種類は、Web ブラウザ内で動作するアプリケーションの負荷テストに利用されます。 ブラウザ ベースのアプリケーションの基盤となっている多数のテクノロジにより、さまざまなプロジェクト タイプを選択できます。

  • Web business transaction (HTML/HTTP)
    Web business transaction (HTML/HTTP) を選択して、高度な機能が組み込まれている簡単なスクリプトで Web アプリケーションをテストします。
  • Web browser-driven (AJAX)
    Web ブラウザ (Internet Explorer) を使用してテストを行うには、Web browser-driven (AJAX) を選択します。
  • Web (Async)
    ポーリング、ロング ポーリング、プッシュなどの非同期通信パターンを使用する Web アプリケーションのテストするには、Web (Async) を選択します。このようなアプリケーションは、ユーザーとのやり取りなしに、定期的に、またはエベントに基づき、またはサーバーがトリガとなってコンテンツを更新するという特徴があります。
  • Web low level (HTTP)
    Web low level (HTTP) を選択して、できる限り高い負荷をかける Web アプリケーションをテストします。
  • Mobile Devices
    Mobile Devices を選択し、モバイル Web アプリケーションをテストします。 このアプリケーションの種類は、iPhone、iPad、Android、Windows Phone、Blackberry のようなさまざまなモバイル デバイスをシミュレーションする機能を提供しています。
  • Flex/AMF3 (Adobe)
    Adobe/BlazeDS の実装に基づいて AMF0 と AMF3 の両方のテストを行う場合は、Flex/AMF3 (Adobe) を選択します。
  • Flex/AMF3 (GraniteDS)
    GraniteDS の実装に基づいて Flex アプリケーションと AMF3 プロトコルのテストを行う場合は、Flex/AMF3 (GraniteDS) を選択します。
  • HTTP Live Streaming (HLS)
    HTTP ライブ ストリーミング プロトコルを介してビデオやオーディオ データをストリーミングする Web アプリケーションのテストを行うには、HTTP Live Streaming (HLS) を選択します。
  • Java Over HTTP
    Java over HTTP を選択して、HTTP プロトコルを介してクライアントとサーバー間でオブジェクトを転送するために Java Object Serialization を利用する、Web アプリケーションをテストします。
  • WebDAV (MS Outlook Web Access)
    WebDAV を選択して、たとえば Microsoft Outlook Web Access といった WebDAV に依存するクライアントをテストします。
  • Silverlight
    Silverlight を選択し、Microsoft Silverlight を使用して構築された、ブラウザ ベースのアプリケーションをテストします。
  • Oracle ADF
    Oracle ADF を選択して、エンタープライズ アプリケーションを構築するための Java ベースのフレームワークである Oracle Application Development Framework ベースの Web アプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
サポートされる Web アプリケーション


Web business transaction (HTML/HTTP)

Web business transaction (HTML/HTTP) を選択して、高度な機能が組み込まれている簡単なスクリプトで Web アプリケーションをテストします。 このアプリケーションの種類は、ブラウザ ベースのアプリケーションにも使用してください。

親トピック: Web Browser
関連概念
Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


Web browser-driven (AJAX)

Web ブラウザ (Internet Explorer) を使用してテストを行うには、Web browser-driven (AJAX) を選択します。 このアプリケーションの種類は、AJAX ロジックが組み込まれ、プロトコル レベル (HTTP) での Web アプリケーションのテストがうまく機能しないことが判明した場合に、特に有用です。

親トピック: Web Browser
関連概念
Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)


Web (Async)

ポーリング、ロング ポーリング、プッシュなどの非同期通信パターンを使用する Web アプリケーションのテストするには、Web (Async) を選択します。このようなアプリケーションは、ユーザーとのやり取りなしに、定期的に、またはエベントに基づき、またはサーバーがトリガとなってコンテンツを更新するという特徴があります。

親トピック: Web Browser
関連概念
Web アプリケーション通信の概要


Web low level (HTTP)

Web low level (HTTP) を選択して、できる限り高い負荷をかける Web アプリケーションをテストします。 Web 低レベルのスクリプトは、Web ビジネス トランザクションのスクリプトより複雑であるため、カスタマイズには手間がかかります。

親トピック: Web Browser
関連概念
Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


Mobile Devices

Mobile Devices を選択し、モバイル Web アプリケーションをテストします。 このアプリケーションの種類は、iPhone、iPad、Android、Windows Phone、Blackberry のようなさまざまなモバイル デバイスをシミュレーションする機能を提供しています。 他のモバイル ブラウザは、カスタム プロパティを使用してシミュレーションできます。

親トピック: Web Browser
関連概念
モバイル デバイスのアプリをテストする


Flex/AMF3 (Adobe)

Adobe/BlazeDS の実装に基づいて AMF0 と AMF3 の両方のテストを行う場合は、Flex/AMF3 (Adobe) を選択します。 このアプリケーションの種類では、Flex/AMF3、HTTP リクエスト/レスポンスの変換、および JVM に関するプロファイル設定が自動的に構成されます。

親トピック: Web Browser
関連概念
Flex/AMF3 のサポート


Flex/AMF3 (GraniteDS)

GraniteDS の実装に基づいて Flex アプリケーションと AMF3 プロトコルのテストを行う場合は、Flex/AMF3 (GraniteDS) を選択します。 このアプリケーションの種類では、Flex/AMF3、HTTP リクエスト/レスポンスの変換、および JVM に関するプロファイル設定が自動的に構成されます。

親トピック: Web Browser
関連概念
Flex/AMF3 プロジェクトのセットアップとテスト


HTTP Live Streaming (HLS)

HTTP ライブ ストリーミング プロトコルを介してビデオやオーディオ データをストリーミングする Web アプリケーションのテストを行うには、HTTP Live Streaming (HLS) を選択します。

親トピック: Web Browser


Java Over HTTP

Java over HTTP を選択して、HTTP プロトコルを介してクライアントとサーバー間でオブジェクトを転送するために Java Object Serialization を利用する、Web アプリケーションをテストします。 シリアル化された Java オブジェクトの交換に基づき、この通信は基本的にバイナリ形式のデータを使用します。

親トピック: Web Browser
関連概念
Java Over HTTP のサポート


WebDAV (MS Outlook Web Access)

WebDAV を選択して、たとえば Microsoft Outlook Web Access といった WebDAV に依存するクライアントをテストします。 WebDAV は HTTP に基づくメソッドのセットで、Web サーバーに格納されたドキュメントやファイルの編集と管理でユーザー間の協業を容易にします。

親トピック: Web Browser


Silverlight

Silverlight を選択し、Microsoft Silverlight を使用して構築された、ブラウザ ベースのアプリケーションをテストします。

注: Microsoft Silverlight ブラウザ ベース アプリケーションを Silk Performer を使用してテストするワークフローは、Web ベース アプリケーションのテストに使用するワークフローと同じです。
親トピック: Web Browser
関連概念
Microsoft Silverlight のサポート


Oracle ADF

Oracle ADF を選択して、エンタープライズ アプリケーションを構築するための Java ベースのフレームワークである Oracle Application Development Framework ベースの Web アプリケーションをテストします。このプロジェクトの種類は、スクリプトのカスタマイズを容易にするために、あらかじめ定義された記録設定と記録ルールを使用します。

親トピック: Web Browser


Internet

Internet アプリケーションの種類を 1 つ選択して、インターネット ベースのプロトコルおよび通信に依存するアプリケーションをテストします。

  • Email (SMTP/POP)
    Email (SMTP/POP) を選択して、簡易メール転送プロトコルを使用して電子メール メッセージの送受信を行うアプリケーションおよび電子メール クライアントをテストします。
  • Directory server (LDAP)
    Directory server (LDAP) を選択して、Lightweight Directory Access Protocol (LDAP) を使用するサーバー (Active Directory など) をテストします。
  • Radius
    Radius を選択して、ネットワーク アクセスの管理のための認証、承認、アカウンティングに RADIUS (Remote Authentication Dial In User Service) ネットワーク プロトコルを使用するアプリケーションまたはデバイスをテストします。
  • FTP
    FTP を選択して、ファイル転送プロトコル (FTP) を使用するアプリケーションをテストします。FTP は、あるホストから別のホストへ、インターネットなどの TCP ベースのネットワークを介してファイルを転送する際に使用される、標準的なネットワーク プロトコルです。
  • TCP/IP based application
    TCP/IP based application を選択して、TCP/IP ベースの専用プロトコルを使用するアプリケーションをテストします。
  • Mixed Protocols
    Mixed Protocols を選択して、HTTP、ODBC、およびその他のプロトコルを組み合わせた複数のプロトコルを使用するアプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
Internet


Email (SMTP/POP)

Email (SMTP/POP) を選択して、簡易メール転送プロトコルを使用して電子メール メッセージの送受信を行うアプリケーションおよび電子メール クライアントをテストします。

親トピック: Internet
関連概念
POP3 Functions Reference


Directory server (LDAP)

Directory server (LDAP) を選択して、Lightweight Directory Access Protocol (LDAP) を使用するサーバー (Active Directory など) をテストします。

親トピック: Internet
関連概念
LDAP Functions Reference


Radius

Radius を選択して、ネットワーク アクセスの管理のための認証、承認、アカウンティングに RADIUS (Remote Authentication Dial In User Service) ネットワーク プロトコルを使用するアプリケーションまたはデバイスをテストします。

親トピック: Internet
関連概念
Radius Functions Reference


FTP

FTP を選択して、ファイル転送プロトコル (FTP) を使用するアプリケーションをテストします。FTP は、あるホストから別のホストへ、インターネットなどの TCP ベースのネットワークを介してファイルを転送する際に使用される、標準的なネットワーク プロトコルです。

親トピック: Internet
関連概念
FTP Functions Reference


TCP/IP based application

TCP/IP based application を選択して、TCP/IP ベースの専用プロトコルを使用するアプリケーションをテストします。

親トピック: Internet
関連概念
TCP/IP Functions Reference


Mixed Protocols

Mixed Protocols を選択して、HTTP、ODBC、およびその他のプロトコルを組み合わせた複数のプロトコルを使用するアプリケーションをテストします。

親トピック: Internet


Terminal Emulation

Silk Performer はターミナル エミュレーション アプリケーション ("グリーン スクリーン" アプリケーション) をサポートしており、Telnet プロトコルに基づいたターミナル エミュレータのトラフィックを記録できます。 サポートされているターミナル タイプには、 VT100 と VT200 (UNIX、IBM AS400) および TN3270(E) と TN5250 からアクセスされる IBM メインフレームが含まれます。 ターミナル エミュレータのトラフィックを記録するための前提条件は、ホスト アプリケーションにアクセスするためのターミナル エミュレータがインストールされていることです。

注: ターミナル エミュレーション アプリケーションに対する Silk Performer のサポートの詳細は、Miscellaneous Tutorials を参照してください。
  • TN3270
    TN3270 を選択して、TN3270(E) ターミナル エミュレータを使用してアクセスされた IBM メインフレーム アプリケーションをテストします。
  • TN5250
    TN5250 を選択して、TN5250 ターミナル エミュレータを使用してアクセスされた IBM メインフレーム アプリケーションをテストします。
  • VT100
    VT100 を選択して、VT100 ターミナル エミュレータを使用してアクセスするアプリケーションを記録します。
  • VT200+
    VT200+ を選択して、VT200+ ターミナル エミュレータを使用してアクセスするアプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
ターミナル エミュレーションのサポート


TN3270

TN3270 を選択して、TN3270(E) ターミナル エミュレータを使用してアクセスされた IBM メインフレーム アプリケーションをテストします。

親トピック: Terminal Emulation
関連概念
ターミナル エミュレーションのサポート


TN5250

TN5250 を選択して、TN5250 ターミナル エミュレータを使用してアクセスされた IBM メインフレーム アプリケーションをテストします。

親トピック: Terminal Emulation
関連概念
ターミナル エミュレーションのサポート


VT100

VT100 を選択して、VT100 ターミナル エミュレータを使用してアクセスするアプリケーションを記録します。

親トピック: Terminal Emulation
関連概念
ターミナル エミュレーションのサポート


VT200+

VT200+ を選択して、VT200+ ターミナル エミュレータを使用してアクセスするアプリケーションをテストします。

親トピック: Terminal Emulation
関連概念
ターミナル エミュレーションのサポート


ERP/CRM

ERP/CRM アプリケーションの種類を選択し、エンタープライズ リソース プランニング アプリケーションまたはカスタマー リレーションシップ マネジメント アプリケーションをテストします。

エンタープライズ リソース プランニング (ERP：Enterprise resource planning) システムは、組織全体にわたる管理情報を統合します。 カスタマー リレーションシップ マネジメント (CRM：Customer relationship management) システムは、販売、マーケティング、カスタマー サービス、テクニカル サポートなどのビジネス プロセスを体系化します。

  • SAP
    SAP ERP および CRM アプリケーションを 1 つ選択して、SAP アプリケーションをテストします。
  • PeopleSoft
    PeopleSoft アプリケーションの種類を 1 つ選択して、PeopleSoft ERP/CRM アプリケーションをテストします。
  • Clarify 8-10 (Tuxedo)
    Clarify 8-10 (Tuxedo) を選択して、eFrontOffice アプリケーションをテストします。
  • Oracle
    Oracle アプリケーションの種類を選択して、Oracle ビジネス (非データベース) ソフトウェア上に構築されたアプリケーションをテストします。
  • Siebel
    Siebel 6 または Siebel Web Client アプリケーションの種類を選択し、Siebel ベース (Oracle) の CRM アプリケーションをテストします。
  • Remedy
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
SAP のサポート
PeopleSoft Overview
Siebel Functions Overview
BMC Remedy IT Service Management のサポート


SAP

SAP ERP および CRM アプリケーションを 1 つ選択して、SAP アプリケーションをテストします。

  • SAPGUI
    SAPGUI を選択して、SAPGUI クライアントを使用する SAP アプリケーションをテストします。
  • SAP NetWeaver (Web)
    SAP NetWeaver (Web) を選択して、SAP NetWeaver ベースのアプリケーションをテストします。
親トピック: ERP/CRM
関連概念
SAP のサポート


SAPGUI

SAPGUI を選択して、SAPGUI クライアントを使用する SAP アプリケーションをテストします。

親トピック: SAP
関連概念
SAPGUI のサポート


SAP NetWeaver (Web)

SAP NetWeaver (Web) を選択して、SAP NetWeaver ベースのアプリケーションをテストします。 (たとえば、SAP GUI for HTML または SAP Enterprise Portal アプリケーション。)

親トピック: SAP
関連概念
SAP のサポート


PeopleSoft

PeopleSoft アプリケーションの種類を 1 つ選択して、PeopleSoft ERP/CRM アプリケーションをテストします。

  • PeopleSoft8
    PeopleSoft8 を選択して、PeopleSoft 8.x アプリケーションをテストします。
  • PeopleSoft9
    PeopleSoft9 を選択して、PeopleSoft 9.x アプリケーションをテストします。
親トピック: ERP/CRM
関連概念
PeopleSoft Overview


PeopleSoft8

PeopleSoft8 を選択して、PeopleSoft 8.x アプリケーションをテストします。

Silk Performer では、PeopleSoft 8.x アプリケーションのテストでページ レベルのサポートを提供しています。 このアプリケーションの種類では、セッション処理、アプリケーション レベルのエラーの検出、ログイン データの容易なカスタマイズ、思考時間、ページ タイマの名前、およびテーブル行へのアクセスに関して、PeopleSoft 固有の拡張が加えられています。

親トピック: PeopleSoft
関連概念
PeopleSoft Overview


PeopleSoft9

PeopleSoft9 を選択して、PeopleSoft 9.x アプリケーションをテストします。

Silk Performer では、PeopleSoft 9.x アプリケーションのテストでページ レベルのサポートを提供しています。 このアプリケーションの種類では、セッション処理、アプリケーション レベルのエラーの検出、ログイン データの容易なカスタマイズ、思考時間、ページ タイマの名前、およびテーブル行へのアクセスに関して、PeopleSoft 固有の拡張が加えられています。

親トピック: PeopleSoft
関連概念
PeopleSoft Overview


Clarify 8-10 (Tuxedo)

Clarify 8-10 (Tuxedo) を選択して、eFrontOffice アプリケーションをテストします。

Clarify eFrontOffice は、その多層アーキテクチャの一部として TUXEDO を使用しています。

親トピック: ERP/CRM
関連概念
TUXEDO Data Structures Overview


Oracle

Oracle アプリケーションの種類を選択して、Oracle ビジネス (非データベース) ソフトウェア上に構築されたアプリケーションをテストします。

Oracle Applications は、Oracle Corporation のアプリケーション ソフトウェアまたはビジネス ソフトウェアで構成されます。 この用語は、Oracle のデータベース以外のソフトウェア製品ラインを表します。 Oracle 社は Oracle Financials、Oracle HRMS、Oracle Projects、Oracle CRM、Oracle Procurement など、Oracle RDBMS をバックエンドとして使用する多くの機能モジュールを販売しています。

  • Oracle Applications 11i
    Oracle Applications 11i を選択して、Oracle Applications 11i をテストします。
  • Oracle Applications 12i
    Oracle Applications 12i を選択して、Oracle Applications 12i をテストします。
親トピック: ERP/CRM
関連概念
Oracle Forms / Oracle Applications のサポート


Oracle Applications 11i

Oracle Applications 11i を選択して、Oracle Applications 11i をテストします。

親トピック: Oracle
関連概念
Oracle Forms / Oracle Applications のサポート


Oracle Applications 12i

Oracle Applications 12i を選択して、Oracle Applications 12i をテストします。

親トピック: Oracle
関連概念
Oracle Forms / Oracle Applications のサポート


Siebel

Siebel 6 または Siebel Web Client アプリケーションの種類を選択し、Siebel ベース (Oracle) の CRM アプリケーションをテストします。

  • Siebel 6/DB2
    Siebel 6/DB2 を選択して、IBM DB2 RDBMS 上に構築された Siebel 6 ベース (Oracle) の CRM アプリケーションをテストします。
  • Siebel 6/Oracle
    Siebel 6/Oracle を選択して、Oracle RDBMS 上に構築された Siebel 6 ベース (Oracle) の CRM アプリケーションをテストします。
  • Siebel 6/SQL Server
    Siebel 6/SQL Server を選択して、SQL Server RDBMS 上に構築された Siebel 6 ベース (Oracle) の CRM アプリケーションをテストします。
  • Siebel Web Client
    Siebel Web Client を選択し、Web クライアントを使用する Siebel ベース (Oracle) の CRM アプリケーションをテストします。
親トピック: ERP/CRM
関連概念
Siebel Functions Overview


Siebel 6/DB2

Siebel 6/DB2 を選択して、IBM DB2 RDBMS 上に構築された Siebel 6 ベース (Oracle) の CRM アプリケーションをテストします。

親トピック: Siebel
関連概念
Siebel Functions Overview


Siebel 6/Oracle

Siebel 6/Oracle を選択して、Oracle RDBMS 上に構築された Siebel 6 ベース (Oracle) の CRM アプリケーションをテストします。

親トピック: Siebel
関連概念
Siebel Functions Overview


Siebel 6/SQL Server

Siebel 6/SQL Server を選択して、SQL Server RDBMS 上に構築された Siebel 6 ベース (Oracle) の CRM アプリケーションをテストします。

親トピック: Siebel
関連概念
Siebel Functions Overview


Siebel Web Client

Siebel Web Client を選択し、Web クライアントを使用する Siebel ベース (Oracle) の CRM アプリケーションをテストします。

親トピック: Siebel
関連概念
Siebel Functions Overview


Remedy

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

  • Remedy 7.5
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.5 Patch 04
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.6.02
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.6.03
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.6.04
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.6.04 SP1
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.6.04 SP3
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.6.04 SP4
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.6.04 SP5
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 7.7
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 8.0
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • Remedy 8.1
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • RemedyAR 8.1 SP1
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • RemedyAR 8.8
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
  • RemedyAR 9.0
    正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。
親トピック: ERP/CRM
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.5

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.5 Patch 04

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.6.02

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.6.03

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.6.04

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.6.04 SP1

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.6.04 SP3

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 7.6.04 SP4

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy


Remedy 7.6.04 SP5

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy


Remedy 7.7

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy
関連概念
BMC Remedy IT Service Management のサポート


Remedy 8.0

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy


Remedy 8.1

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy


RemedyAR 8.1 SP1

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy


RemedyAR 8.8

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy


RemedyAR 9.0

正しい Remedy バージョンを選択して、BMC Remedy IT Service Management をテストします。BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーションの負荷テストを行う方法について説明します。チュートリアルを入手するには、BMC に連絡し、次のホワイト ペーパーを請求してください：Performance Benchmarking Kit:Using Incident Management with Silk Performer

親トピック: Remedy


Web Services

Web Services アプリケーションの種類を 1 つ選択して、その Web サービス ソフトウェア フレームワークを利用するアプリケーションをテストします。 これらのオプションの中で、各ユーザーのニーズに最適なものは、ユーザーの環境と前提条件によって決まります。 一部の Web サービスは、Web サービスのサーバー側の実装によって、特定の SOAP スタックでのみ機能します。

  • XML/SOAP
    XML/SOAP を選択して、SOAP (Simple Object Access Protocol) 標準仕様を利用する Web サービスをテストします。
  • .NET Explorer
    .NET Explorer を選択して、Web サービス、.NET Remoting オブジェクト、および他の .NET コンポーネントをテストします。
  • Java Explorer
    Java Explorer を選択して、Web サービス、Enterprise JavaBeans (EJB)、RMI オブジェクト、およびその他の GUI を持たない Java オブジェクトをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
.NET 用の SOAP Web サービスをテストする
Java 用の SOAP Web サービスをテストする


XML/SOAP

XML/SOAP を選択して、SOAP (Simple Object Access Protocol) 標準仕様を利用する Web サービス アプリケーションをテストします。

親トピック: Web Services
関連概念
.NET 用の SOAP Web サービスをテストする
Java 用の SOAP Web サービスをテストする


.NET Explorer

.NET Explorer を選択して、Web サービス、.NET Remoting オブジェクト、および他の .NET コンポーネントをテストします。

.NET Explorer は、ポイント アンド クリック インターフェイスを通してテスト ケースを作成するためのツールです。

親トピック: Web Services
親トピック: .NET
関連概念
Silk Performer .NET Explorer
Silk Performer .NET Explorer


Java Explorer

Java Explorer を選択して、Web サービス、Enterprise JavaBeans (EJB)、RMI オブジェクト、およびその他の GUI を持たない Java オブジェクトをテストします。

Java Explorer は、ポイント アンド クリック インターフェイスを通してテスト ケースを作成するための、Java ベース テクノロジに最適なツールです。

親トピック: Web Services
親トピック: Java
関連概念
Silk Performer Java Explorer
Java Explorer のヘルプ


Database

Database アプリケーションの種類を 1 つ選択して、共通データベース API に依存するアプリケーションをテストします。

  • Oracle
    Oracle を選択して、Oracle API に依存するデータベース アプリケーションをテストします。
  • ODBC
    ODBC を選択し、Open Database Connectivity (ODBC) フレームワークを利用するアプリケーションをテストします。
  • DB2 CLI
    DB2 CLI を選択して、IBM DB2 CLI インターフェイスを使用するデータベース アプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
Database (DBMS) Functions


Oracle

Oracle を選択して、Oracle API に依存するデータベース アプリケーションをテストします。 Silk Performer では、テスト用に、Oracle データベースのトラフィックの記録および再生のサポートとともに、Oracle API 関数が提供されています。

親トピック: Database
関連概念
Oracle API Functions Overview


ODBC

ODBC を選択し、Open Database Connectivity (ODBC) フレームワークを利用するアプリケーションをテストします。 アプリケーションは、使用しているオペレーティング システムや DBMS に関係なく、DBMS のデータのクエリを実行するために ODBC を使用できます。

親トピック: Database
関連概念
データベース アプリケーションでの作業 - 概要


DB2 CLI

DB2 CLI を選択して、IBM DB2 CLI インターフェイスを使用するデータベース アプリケーションをテストします。

親トピック: Database
関連概念
データベース アプリケーションでの作業 - 概要


Application Server/Component Models

Application Server/Component Models の種類を 1 つ選択して、特定のミドルウェアに依存するアプリケーションをテストします。

  • CORBA (IIOP)
    CORBA (IIOP) を選択して、VisiBroker などの CORBA ミドルウェアに依存するアプリケーションのテストを行います。
  • EJB (RMI over IIOP)
    EJB (RMI over IIOP) を選択し、RMI over IIOP によって通信する Enterprise JavaBeans を使用して開発されたアプリケーションをテストします。
  • EJB (Java Explorer)
    Java Explorer を使用して、Enterprise JavaBeans で開発されたアプリケーションをテストするには、EJB (Java Explorer) を選択します。
  • Tuxedo (ATMI)
    Tuxedo (ATMI) を選択して、Tuxedo ミドルウェアおよび ATMI API 上に構築されているアプリケーションをテストします。
  • Tuxedo (JOLT)
    Tuxedo (Jolt) を選択して、Tuxedo ミドルウェア上に構築されて、Jolt に依存するアプリケーションをテストします。
  • .NET Remoting
    .NET Remoting を選択して、.NET Remoting 通信に依存する広範囲に分散した複数のアプリケーションをテストします。
  • Jacada
    Jacada を選択して、Jacada の統合型デスクトップとプロセス最適化ソフトウェアに依存するアプリケーションをテストします。
  • Oracle
    Oracle Forms クライアントを使用するアプリケーションをテストするには、Oracle Forms の適切なバージョンを選択します。
親トピック: 利用可能なアプリケーションの種類
関連概念
Working with Enterprise JavaBeans
Working with RMI Over IIOP


CORBA (IIOP)

CORBA (IIOP) を選択して、VisiBroker などの CORBA ミドルウェアに依存するアプリケーションのテストを行います。

親トピック: Application Server/Component Models
関連概念
CORBA Functions Reference


EJB (RMI over IIOP)

EJB (RMI over IIOP) を選択し、RMI over IIOP によって通信する Enterprise JavaBeans を使用して開発されたアプリケーションをテストします。 このアプリケーションの種類を使用すると、Silk Performer を使用して、ワークフローを記録/再生できます。

親トピック: Application Server/Component Models
関連概念
Working with RMI Over IIOP
Working with Enterprise JavaBeans


EJB (Java Explorer)

Java Explorer を使用して、Enterprise JavaBeans で開発されたアプリケーションをテストするには、EJB (Java Explorer) を選択します。このアプリケーションの種類を使用すると、視覚的なスクリプト作成機能を使用してテスト スクリプトを作成できます。

親トピック: Application Server/Component Models
関連概念
Working with Enterprise JavaBeans
Silk Performer Java Explorer


Tuxedo (ATMI)

Tuxedo (ATMI) を選択して、Tuxedo ミドルウェアおよび ATMI API 上に構築されているアプリケーションをテストします。

親トピック: Application Server/Component Models
関連概念
TUXEDO Functions Reference
TUXEDO Data Structures Overview


Tuxedo (JOLT)

Tuxedo (Jolt) を選択して、Tuxedo ミドルウェア上に構築されて、Jolt に依存するアプリケーションをテストします。

親トピック: Application Server/Component Models
関連概念
TUXEDO Functions Reference
TUXEDO Data Structures Overview


.NET Remoting

.NET Remoting を選択して、.NET Remoting 通信に依存する広範囲に分散した複数のアプリケーションをテストします。 このアプリケーションの種類では、.NET Explorer の視覚的なスクリプト作成機能を使用してテスト スクリプトを作成できます。

親トピック: Application Server/Component Models
関連概念
.NET Framework で Web Services および .NET Remoting オブジェクトをテストする


Jacada

Jacada を選択して、Jacada の統合型デスクトップとプロセス最適化ソフトウェアに依存するアプリケーションをテストします。

親トピック: Application Server/Component Models
関連概念
Jacada のサポート


Oracle

Oracle Forms クライアントは Web ブラウザでアプレットとして実行されます。 デフォルトでは、Web ブラウザは、初めて Oracle Forms アプリケーションをロードしたときに JRE をダウンロードおよびインストールします。 Oracle Forms 10g 以前の場合、Oracle Forms 用 Oracle JRE は JInitiator という名前です。 JInitiator の使用は必須ではありません。 JRE がインストールされると、Silk Performer は Oracle Forms アプリケーションを記録するようにセットアップされます。

  • Oracle Forms 10g
    Oracle Forms 10g を選択して、Oracle Forms 10g クライアントを使用するアプリケーションをテストします。
  • Oracle Forms 11g
    Oracle Forms 11g を選択して、Oracle Forms 11g クライアントを使用するアプリケーションをテストします。
  • Oracle Forms 12c
    Oracle Forms 12c を選択して、Oracle Forms 12c クライアントを使用するアプリケーションをテストします。
  • Oracle Forms 6i
    Oracle Forms 6i を選択して、Oracle Forms 6i クライアントを使用するアプリケーションをテストします。
  • Oracle Forms 9i
    Oracle Forms 9i を選択して、Oracle Forms 9i クライアントを使用するアプリケーションをテストします。
親トピック: Application Server/Component Models
関連概念
Oracle Forms / Oracle Applications のサポート


Oracle Forms 10g

Oracle Forms 10g を選択して、Oracle Forms 10g クライアントを使用するアプリケーションをテストします。

親トピック: Oracle
関連概念
Oracle Forms / Oracle Applications のサポート


Oracle Forms 11g

Oracle Forms 11g を選択して、Oracle Forms 11g クライアントを使用するアプリケーションをテストします。

親トピック: Oracle
関連概念
Oracle Forms / Oracle Applications のサポート


Oracle Forms 12c

Oracle Forms 12c を選択して、Oracle Forms 12c クライアントを使用するアプリケーションをテストします。

親トピック: Oracle


Oracle Forms 6i

Oracle Forms 6i を選択して、Oracle Forms 6i クライアントを使用するアプリケーションをテストします。

親トピック: Oracle
関連概念
Oracle Forms / Oracle Applications のサポート


Oracle Forms 9i

Oracle Forms 9i を選択して、Oracle Forms 9i クライアントを使用するアプリケーションをテストします。

親トピック: Oracle
関連概念
Oracle Forms / Oracle Applications のサポート


Terminal Services

Terminal Services アプリケーションの種類を 1 つ選択して、Citrix XenApp がホストする Citrix ベースのアプリケーションをテストします。

  • Citrix
    Citrix を選択して、Citrix オンライン プラグインを介してアクセスする Citrix アプリケーションをテストします。
  • Citrix Web Interface
    Citrix Web Interface を選択して、Internet Explorer 内で実行される Citrix Web インターフェイスから起動される Citrix アプリケーションをテストします。
  • Citrix StoreFront/Netscaler Gateway
    Citrix StoreFront/Netscaler Gateway を選択して、Citrix StoreFront サーバーから起動される Citrix アプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
ターミナル エミュレーションのサポート


Citrix

Citrix を選択して、Citrix オンライン プラグインを介してアクセスする Citrix アプリケーションをテストします。

親トピック: Terminal Services
関連概念
Citrix XenApp のサポート


Citrix Web Interface

Citrix Web Interface を選択して、Internet Explorer 内で実行される Citrix Web インターフェイスから起動される Citrix アプリケーションをテストします。

親トピック: Terminal Services
関連概念
Citrix XenApp のサポート


Citrix StoreFront/Netscaler Gateway

Citrix StoreFront/Netscaler Gateway を選択して、Citrix StoreFront サーバーから起動される Citrix アプリケーションをテストします。

親トピック: Terminal Services


.NET

.NET アプリケーションの種類のいずれか 1 つを選択して、Web サービス、.NET Remoting オブジェクト、NUnit、またはその他の .NET テクノロジをテストします。

  • .NET Explorer
    .NET Explorer を選択して、Web サービス、.NET Remoting オブジェクト、および他の .NET コンポーネントをテストします。
  • .NET Framework using Visual Studio .NET Add-On
    .NET Framework using Visual Studio .NET Add-On を選択して、Visual Studio .NET 用 Silk Performer アドオンを使用して Web サービスまたは .NET コンポーネントをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
.NET のサポート


.NET Framework using Visual Studio .NET Add-On

.NET Framework using Visual Studio .NET Add-On を選択して、Visual Studio .NET 用 Silk Performer アドオンを使用して Web サービスまたは .NET コンポーネントをテストします。

親トピック: .NET
関連概念
Silk Performer Visual Studio Extension


Java

Java アプリケーションの 1 つを選択して、Web サービス、RMI、JUnit、またはその他の Java ベースのテクノロジをテストします。

  • Java RMI/EJB (recording)
    Java RMI/EJB (recording) を選択して、Enterprise JavaBeans を使用して開発されたアプリケーションをテストします。
  • Java Explorer
    Java Explorer を選択して、Web サービス、Enterprise JavaBeans (EJB)、RMI オブジェクト、およびその他の GUI を持たない Java オブジェクトをテストします。
  • Java Framework
    Java Framework を選択して、Silk Performer Java フレームワークを使用した Java アプリケーションをテストします。
  • Java Message Service (JMS)
    Java Message Service (JMS) を選択して、作成したスクリプトを再生することによって、Java メッセージ指向ミドルウェア アプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
Java テストのサポート


Java RMI/EJB (recording)

Java RMI/EJB (recording) を選択して、Enterprise JavaBeans を使用して開発されたアプリケーションをテストします。 このアプリケーションの種類を使用すると、Silk Performer を使用して、ワークフローを記録/再生できます。

親トピック: Java
関連概念
Java RMI のサポート
Working with Enterprise JavaBeans


Java Framework

Java Framework を選択して、Silk Performer Java フレームワークを使用した Java アプリケーションをテストします。

Java フレームワークを使用すると、Java でユーザー動作を実装できます。 既存の Java アプリケーションをテストする場合、テスト スクリプトを作成するために多くの時間を費やす必要はありません。 必要な作業は、既存の Java ソース コードをフレームワークに埋め込むことだけです。

親トピック: Java
関連概念
Java Framework Developer Guide


Java Message Service (JMS)

Java Message Service (JMS) を選択して、作成したスクリプトを再生することによって、Java メッセージ指向ミドルウェア アプリケーションをテストします。

親トピック: Java


Frameworks

含まれているフレームワークの 1 つを選択して、Java Framework、Visual Basic Framework、Visual Studio .NET を使用した .NET Framework のいずれかを使用するアプリケーションをテストします。

  • .NET Framework using Visual Studio .NET Add-On
    .NET Framework using Visual Studio .NET Add-On を選択して、Visual Studio .NET 用 Silk Performer アドオンを使用して Web サービスまたは .NET コンポーネントをテストします。
  • Java
    Java を選択して、Silk Performer Java フレームワークを使用した Java アプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
.NET Framework のサポート
Java フレームワークのサポート


.NET Framework using Visual Studio .NET Add-On

.NET Framework using Visual Studio .NET Add-On を選択して、Visual Studio .NET 用 Silk Performer アドオンを使用して Web サービスまたは .NET コンポーネントをテストします。

親トピック: Frameworks
関連概念
The .NET Framework Approach


Java

Java を選択して、Silk Performer Java フレームワークを使用した Java アプリケーションをテストします。

Java フレームワークを使用すると、Java でユーザー動作を実装できます。 既存の Java アプリケーションをテストする場合、テスト スクリプトを作成するために多くの時間を費やす必要はありません。 必要な作業は、既存の Java ソース コードをフレームワークに埋め込むことだけです。

親トピック: Frameworks
関連概念
Java テストのサポート


Monitoring

Monitoring アプリケーションの種類を選択すると、サーバー側の結果が生成されますが、これらは、後で確認や比較を行えるようにアーカイブにすることができます。 Monitoring は、サーバーのボトルネックを明らかにし、その場所を特定して解決する働きもするので、オペレーティング システムとアプリケーション サーバーのパフォーマンスを調べることができます。

  • Silk Performance Manager - インフラストラクチャ監視
    Silk Performance Manager - Infrastructure Monitor を選択して、自動実行用に Performance Manager にアップロード可能なインフラストラクチャ監視プロジェクトを作成します。
  • BDL Monitor for Performance Explorer
    BDL Monitor for Performance Explorer を選択して、Performance Explorer でリアルタイム監視に使用できる BDL 監視プロジェクトを作成します。
親トピック: 利用可能なアプリケーションの種類
関連概念
負荷テストを監視する


Silk Performance Manager - インフラストラクチャ監視

Silk Performance Manager - Infrastructure Monitor を選択して、自動実行用に Performance Manager にアップロード可能なインフラストラクチャ監視プロジェクトを作成します。

親トピック: Monitoring


BDL Monitor for Performance Explorer

BDL Monitor for Performance Explorer を選択して、Performance Explorer でリアルタイム監視に使用できる BDL 監視プロジェクトを作成します。

親トピック: Monitoring


Unit Testing

Unit Testing アプリケーションの種類を選択して、JUnit、Java、NUnit、.NET ユニット テストを実行します。

  • JUnit
    JUnit を選択して、JUnit ユニット テストを実行します。
  • Java Testing
    Java Testing を選択して、Java クラスをインポートし、Java フレームワークを使用するそのメソッドをテストします。
  • NUnit
    NUnit を選択して、NUnit ユニット テストを実行します。
  • .NET Testing
    .NET Testing を選択して .NET アセンブリをインポートし、.NET Framework を用いてメソッドをテストします。
親トピック: 利用可能なアプリケーションの種類
関連概念
JUnit インテグレーション
NUnit インテグレーション


JUnit

JUnit を選択して、JUnit ユニット テストを実行します。

Silk Performer のユニット テスト インポート ツールを使用すると、特定のテスト メソッドを選択し、自動的に BDL スタブ コードを生成できます。

親トピック: Unit Testing
関連概念
JUnit インテグレーション


Java Testing

Java Testing を選択して、Java クラスをインポートし、Java フレームワークを使用するそのメソッドをテストします。

親トピック: Unit Testing
関連概念
Java テストのサポート


NUnit

NUnit を選択して、NUnit ユニット テストを実行します。

Silk Performer のユニット テスト インポート ツールを使用すると、特定のテスト メソッドを選択し、自動的に BDL スタブ コードを生成できます。

親トピック: Unit Testing
関連概念
NUnit インテグレーション


.NET Testing

.NET Testing を選択して .NET アセンブリをインポートし、.NET Framework を用いてメソッドをテストします。

親トピック: Unit Testing
関連概念
.NET のサポート


GUI-Level Testing

GUI-Level アプリケーションの種類は、プロトコルまたは API レベルでのテストができない負荷テストに使用されます。Silk Performer は、Silk Test (Silk Test Classic、UFT Developer (Silk4J)、または UFT Developer (Silk4NET)) を経由して、実際のクライアントのユーザー インターフェイス (ファット クライアント) を制御します。負荷テスト中は、各仮想ユーザーは自身の Windows セッション内でターミナル サービスを使用して操作を行います。

  • Silk Test
    Silk Test を選択して、プロトコルまたは API レベルでテストできないクライアント アプリケーションに対する GUI レベルのテストを実行します。
親トピック: 利用可能なアプリケーションの種類
関連概念
GUI レベルのテストのサポート


Silk Test

Silk Test を選択して、プロトコルまたは API レベルでテストできないクライアント アプリケーションに対する GUI レベルのテストを実行します。Silk Performer は、Silk Test (Silk Test Classic、UFT Developer (Silk4J)、および UFT Developer (Silk4NET)) を経由して、実際のクライアントのユーザー インターフェイス (ファット クライアント) を制御します。負荷テスト中は、各仮想ユーザーは自身の Windows セッション内でターミナル サービスを使用して操作を行います。

親トピック: GUI-Level Testing
関連概念
Silk Test Automation Functions Overview


Legacy

Legacy グループには、以前のバージョンの Silk Performer で提供されていたプロジェクトの種類が含まれます。これらのプロジェクトの種類は、廃止として宣言されるか、または新しい機能やより良い機能を提供する他のプロジェクトの種類で置き換えられています。後方互換性を保持するために、これら一部の古いプロジェクトの種類が利用可能です。

  • Legacy Web business transaction (HTML/HTTP)
    Legacy Web business transaction (HTML/HTTP) を選択して、記録中にトラフィックをキャプチャせずに Web アプリケーションをテストします。
親トピック: 利用可能なアプリケーションの種類


Legacy Web business transaction (HTML/HTTP)

Legacy Web business transaction (HTML/HTTP) を選択して、記録中にトラフィックをキャプチャせずに Web アプリケーションをテストします。スクリプトは即座に生成されます。つまり、後で設定を変えてスクリプトを再生成することはできません。

親トピック: Legacy


Samples

事前構成済みのテスト スクリプト サンプル を 1 つ選択し、テスト スクリプトを手動で作成する際の時間を節約します。

標準的な方法である Silk Performer Recorder を使用せずに、Silk Performer のテスト スクリプトを手動で生成する場合に、時間を節約できる選択肢の 1 つがサンプル スクリプトを再利用することです。

サンプル プロジェクト ファイルには、スクリプト、インクルード ファイル、データ ファイル、プロファイル ファイル、ワークロード定義などが含まれます。

  • Internet
    Cookie、POP3/SMTP、HTML フォームなどをテストするスクリプトを手動で作成したい場合は、インターネット サンプルを選択します。
  • Java Framework
    サンプルの Java Framework のアプリケーションの種類を選択して、Silk Performer Java フレームワークを使用する JDBC、RMI、RMI/IIOP テスト プロジェクトを設定します。
  • .NET
    .NET アプリケーションの種類を選択して、Silk Performer .NET Framework を使用する、シンプルな .NET Remoting または Web サービスのテスト プロジェクトを設定します。
  • JMS
    JMS を選択して、メッセージの構成、送信、受信に使用する Silk Performer JMS API 関数の使用方法を示すプロジェクトを設定します。
  • ShopIt v6.0
    ShopIt v6.0 を選択して、Silk Performer のサンプル e コマース Web サイトの使用方法を説明するプロジェクトを設定します。
  • XML
    XML を選択して、XML ドキュメントの読み込み、書き込み、修正に使用する Silk Performer XML API 関数の使用方法を示すプロジェクトを設定します。
親トピック: 利用可能なアプリケーションの種類
関連概念
サンプル スクリプト


Internet

Cookie、POP3/SMTP、HTML フォームなどをテストするスクリプトを手動で作成したい場合は、インターネット サンプルを選択します。

  • Recording Rule with Custom Conversion DLL
    Recording Rule with Custom Conversion DLL を選択して、記録ルールにおけるカスタム変換 DLL の使用方法を示す Web プロジェクトを生成します。
  • Cookies
    Cookies を選択し、Cookie をサポートするサンプル プロジェクトの設定を行います。
  • eMail
    eMail を選択して、POP3 および SMTP 電子メール クライアントをシミュレートするテスト プロジェクトを設定します。
  • Form-based File Upload
    Form-based File Upload を選択して、HTML ベースのファイル アップロード機能のテスト プロジェクトを作成します。
  • FTP
    FTP を選択して、汎用的な事前設定済みの FTP テスト プロジェクトを作成します。
  • LDAP
    LDAP を選択して、汎用的な事前構成済みの LDAP テスト プロジェクトを設定します。
  • MAPI
    MAPI を選択して、基本的な Mapi セッションをシミュレートするテスト プロジェクトを設定します。
親トピック: Samples
関連概念
Internet


Recording Rule with Custom Conversion DLL

Recording Rule with Custom Conversion DLL を選択して、記録ルールにおけるカスタム変換 DLL の使用方法を示す Web プロジェクトを生成します。これは、後続の操作の入力として使用するために、解析した出力データを変換する必要がある場合に便利です。

親トピック: Internet
関連概念
CallConversionFunction Function
変換関数


Cookies

Cookies を選択し、Cookie をサポートするサンプル プロジェクトの設定を行います。

サンプル WebCookie01.bdf を再生する前に、以下の前提条件を満たしてください。

  1. Active Server Pages で Web サーバーにアクセスしてください。
  2. ファイル cookie_counter.asp を Web サーバーの Web ルートにコピーしてください。
親トピック: Internet
関連概念
クッキー


eMail

eMail を選択して、POP3 および SMTP 電子メール クライアントをシミュレートするテスト プロジェクトを設定します。

親トピック: Internet
関連概念
POP3 Functions Reference


Form-based File Upload

Form-based File Upload を選択して、HTML ベースのファイル アップロード機能のテスト プロジェクトを作成します。

親トピック: Internet
関連概念
Page-Level Web Functions Overview


FTP

FTP を選択して、汎用的な事前設定済みの FTP テスト プロジェクトを作成します。

親トピック: Internet
関連概念
FTP Functions Reference


LDAP

LDAP を選択して、汎用的な事前構成済みの LDAP テスト プロジェクトを設定します。

親トピック: Internet
関連概念
LDAP Functions Reference


MAPI

MAPI を選択して、基本的な Mapi セッションをシミュレートするテスト プロジェクトを設定します。

親トピック: Internet
関連概念
MAPI Functions Reference


Java Framework

サンプルの Java Framework のアプリケーションの種類を選択して、Silk Performer Java フレームワークを使用する JDBC、RMI、RMI/IIOP テスト プロジェクトを設定します。

  • JDBC
    JDBC を選択して、Silk Performer Java フレームワークを使用するシンプルな JDBC クライアントを実装するサンプル プロジェクトを設定します。
  • RMI/IIOP
    RMI/IIOP を選択して、Silk Performer Java フレームワークを使用する仮想ユーザー クラスのメソッドを呼び出す、サンプル プロジェクトを設定します。
  • RMI
    RMI を選択して、Silk Performer Java フレームワークを使用する仮想ユーザー クラスのメソッドを呼び出す、サンプル プロジェクトを設定します。
親トピック: Samples
関連概念
Java Framework Developer Guide


JDBC

JDBC を選択して、Silk Performer Java フレームワークを使用するシンプルな JDBC クライアントを実装するサンプル プロジェクトを設定します。

サンプルは JDBC THIN ドライバを使用して、関連する BDL スクリプトに指定されるクエリを実行します。 サンプルを実行する前に、Java ランタイムとコンパイラ プロファイル設定を構成し、JDBC THIN ドライバの JarFile をクラスパスに追加します。

親トピック: Java Framework
関連概念
Java Sample Projects


RMI/IIOP

RMI/IIOP を選択して、Silk Performer Java フレームワークを使用する仮想ユーザー クラスのメソッドを呼び出す、サンプル プロジェクトを設定します。

このサンプルは、ProductManagerServicesUser.java に実装される仮想ユーザー クラスのメソッドを呼び出します。

親トピック: Java Framework
関連概念
Java RMI のサポート
Java Sample Projects


RMI

RMI を選択して、ServiceHelloUser.java に実装される仮想ユーザー クラスのメソッドを呼び出す、サンプル プロジェクトを設定します。 RMI サービスは ServiceHello.java に定義され、ServiceHelloImpl.java に実装されます。

親トピック: Java Framework
関連概念
Java RMI のサポート
Java Sample Projects


.NET

.NET アプリケーションの種類を選択して、Silk Performer .NET Framework を使用する、シンプルな .NET Remoting または Web サービスのテスト プロジェクトを設定します。

  • .NET Remoting
    .NET Remoting を選択して、Silk Performer .NET Framework を使用した .NET Remoting のテスト方法を表示するサンプル テストを設定します。
  • Web Services
    Web Services を選択して、Silk Performer .NET Framework を使用した SOAP Web サービスのテスト方法を示すサンプル プロジェクトを設定します。
親トピック: Samples
関連概念
.NET のサポート


.NET Remoting

.NET Remoting を選択して、Silk Performer .NET Framework を使用した .NET Remoting のテスト方法を表示するサンプル テストを設定します。

このサンプルでは、サンプルのリモート サーバー (RemotingServApp.exe) をホストとするリモート オブジェクトをテストします。

親トピック: .NET
関連概念
.NET Framework で Web Services および .NET Remoting オブジェクトをテストする


Web Services

Web Services を選択して、Silk Performer .NET Framework を使用した SOAP Web サービスのテスト方法を示すサンプル プロジェクトを設定します。

サンプルは、デモ サーバーで ASP.NET Web サービスをテストします。

親トピック: .NET
関連概念
.NET Framework で Web Services および .NET Remoting オブジェクトをテストする


JMS

JMS を選択して、メッセージの構成、送信、受信に使用する Silk Performer JMS API 関数の使用方法を示すプロジェクトを設定します。

親トピック: Samples


ShopIt v6.0

ShopIt v6.0 を選択して、Silk Performer のサンプル e コマース Web サイトの使用方法を説明するプロジェクトを設定します。

ShopIt V 6.0 は、シンプルな e コマース Web サイトをシミュレートするもので、オンライン購入のシミュレーションに使用できるキャンピング用品カタログを備えています。 このアプリケーションを使用すると、Silk Performer の Web アプリケーション機能を試すことができます。 ShopIt V 6.0 は、不明な Web リンク (商品の在庫切れが原因) やセッション エラーなどのエラーを生成するように作られています。

親トピック: Samples
関連概念
典型的な Web アプリケーションのサンプル


XML

XML を選択して、XML ドキュメントの読み込み、書き込み、修正に使用する Silk Performer XML API 関数の使用方法を示すプロジェクトを設定します。

親トピック: Samples
関連概念
XML アプリケーションでの作業 - 概要


プロジェクトのプロファイル設定

プロジェクトを設定するときに、プロファイルの追加、コピー、名前の変更、または削除を行うことができます。 プロジェクトには、それぞれ独自で、プロジェクト固有の設定を持つさまざまなプロファイルを、必要なだけいくつでも持つことができます。

各プロファイルでは、記録されたトラフィックから Silk Performer Recorder がスクリプトを生成する方法を管理するためにオプションを設定できます。 またオプションは、記録中に使用されるプロトコルにも設定できます。そしてシミュレーション設定は、スクリプトの再生向けに定義できます。 生成される結果ファイルに関するオプションも定義できます。

次に挙げる各種ネットワーク トラフィックのオプションを指定できます。

  • Citrix
  • CORBA/IIOP
  • データベース
  • インターネット
  • Java
  • Jolt
  • .NET
  • Oracle Forms
  • TUXEDO
  • Web

指定した設定は、特定の負荷テスト プロジェクトに関連付けられます。 プロジェクトの切り替え、プロジェクトの編集、およびプロジェクトの保存が簡単にできるので、後で変更したり、再利用したりできます。

  • プロファイルの管理
    プロジェクト設定プロファイルを管理し、プロジェクトに適用します。
  • 記録の設定
    プロジェクトに対し、全般的なスクリプト記録設定やプロトコル固有の設定を構成します。
  • 再生の設定
    ワークロード シミュレーションやエラー処理など、プロジェクトのスクリプト再生設定を構成します。
  • 結果ファイルの設定
    TrueLog、時系列データ、クライアント側監視、ログなど、プロジェクトの結果ファイル設定を構成します。
  • インターネットの設定
    ネットワーク シミュレーション、ホスト サーバー、セキュリティ、記録のオプションなど、プロジェクトのインターネット関連の設定を構成します。
  • Web (プロトコル レベル) 設定
    ブラウザ、プロキシ、記録、検証のオプションなど、プロジェクトの Web 関連設定を構成します。
  • 端末クライアント オプションを設定する
    IBM メインフレームや VT 100+ アプリケーションを記録する前に、Telnet、コマンド プロンプト、デフォルト画面その他に関連する端末クライアント プロファイル設定を構成します。
  • GUI レベル テスト オプションを設定する
    コンソール セッション、接続タイムアウト、実行タイムアウトなどに関連する GUI レベル テスト設定を構成します。
  • Oracle Forms オプションを設定する
    接続モードやコントロールのタイマやカウンタの有効化など、Oracle Forms 設定を構成します。
  • SAPGUI オプションを設定する
    カウンタ/タイマ、ログ レベル、スクリーンショットなど、SAPGUI の設定を構成します。
  • Citrix XenApp オプションの構成
    Citrix テストをセットアップするために、ウィンドウの位置、マウスの速度、思考時間などのオプションを含め、Citrix 設定を構成します。
  • .NET オプションを設定する
    HTTP .NET および SOAP のトラフィック ルーティング オプションなど、.NET 設定を構成します。
  • CORBA/IIOP の設定
    記録、再生、WChar/WString の設定など、CORBA/IIOP オプションを構成します。
  • Java の設定
    クラスパス、バージョン、JVM、JIT コンパイラ、ログのオプションなど、Java 設定を構成します。
  • データベースの設定
    SQL、ODBC、記録のオプションなど、データベース設定を構成します。
親トピック: プロジェクトの概要設定
関連タスク
Eclipse で Silk Performer プロジェクト設定を構成する


プロファイルの管理

プロジェクト設定プロファイルを管理し、プロジェクトに適用します。

  • プロファイルを追加する
    負荷テスト プロジェクト用の新しいプロジェクト設定プロファイルを作成します。
  • プロファイルをアクティブにする
    プロジェクトに適用する設定プロファイルを選択します。
  • プロファイルを編集する
    プロジェクトの記録、再生シミュレーション、または結果出力の設定を再構成します。
  • プロファイル名を変更する
    プロジェクトの設定プロファイル名を変更します。
  • プロファイルを削除する
    プロジェクトから設定プロファイルを削除します。
  • プロファイルをコピーする
    既存のプロジェクト設定プロファイルをコピーして、新しいプロファイルの基礎として使用します。
親トピック: プロジェクトのプロファイル設定


プロファイルを追加する

  1. プロジェクト > プロファイルの新規作成 を選択します。 新規のプロファイル ダイアログが開きます。
  2. 新しいプロファイルの名前を入力する に名前を入力して OK をクリックします。 プロジェクト メニュー ツリーで プロファイル フォルダが展開し、新しいプロファイルが利用可能になります。
親トピック: プロファイルの管理


プロファイルをアクティブにする

プロジェクト メニュー ツリーで、アクティブ プロファイルとして設定するプロファイルを右クリックして、アクティブ プロファイルとして設定 を選択します。

アクティブ プロファイルが太字で表示されます。

親トピック: プロファイルの管理


プロファイルを編集する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 必要に応じて、設定を編集します。 設定の編集に関するヘルプは、テストするアプリケーションの種類に関するヘルプ トピックを参照してください。
  4. OK をクリックすると、ダイアログを終了し、変更を保存します。
親トピック: プロファイルの管理
関連概念
プロジェクトのプロファイル設定


プロファイル名を変更する

  1. プロジェクト メニュー ツリーで、名前を変更するプロファイルを右クリックします。
  2. プロファイル名の変更 を選択します。 プロファイル名の変更 ダイアログが開きます。
  3. プロファイルの新しい名前を入力します。
  4. OK をクリックします。
親トピック: プロファイルの管理


プロファイルを削除する

  1. プロジェクト メニュー ツリーで、削除するプロファイルを右クリックします。
  2. プロファイルの削除 を選択します。
  3. 確認ダイアログで はい をクリックして、プロファイルを削除します。
親トピック: プロファイルの管理


プロファイルをコピーする

  1. プロジェクト メニュー ツリーで、コピーするプロファイルを右クリックします。
  2. コンテキスト メニューから プロファイルのコピー を選択します。 新しいプロファイルが、プロジェクト メニュー ツリーに [<プロファイル名> のコピー] の名前で表示されます。
親トピック: プロファイルの管理


記録の設定

プロジェクトに対し、全般的なスクリプト記録設定やプロトコル固有の設定を構成します。

  • 全般的な記録オプションを設定する
    プロジェクトに対し、テスト スクリプトを記録する前にトラフィック記録の全般的な設定を定義します。
  • プロトコル固有のオプションを設定する
    特定のプロトコル タイプのプロジェクトに対し、トラフィック記録の設定を定義します。
親トピック: プロジェクトのプロファイル設定


全般的な記録オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. 左側のショートカット リストから スクリプト アイコンをクリックします。
  5. 全般 タブをクリックして、コメント チェック ボックスをオンにします。 Silk Performer Recorder は、生成されたスクリプトにコメントを自動的に挿入します。コメントは、// 記号で区切った右側のステートメントです。
  6. コメント化された関数 チェック ボックスをオンにすると、記録するスクリプト内で戻りパラメータをコメントとして取得するために実行する関数呼び出しにマークを付けます。
  7. 思考時間を含める チェック ボックスをオンにすると、記録されたスクリプト内に ThinkTime 関数呼び出しを生成します。 ThinkTime 関数呼び出しは、遅延を発生させます。この遅延は、より現実的なシミュレーションを作り上げるために、記録するスクリプト内で入力時間や思考時間をシミュレートするものです。
  8. 記録する最小思考時間 テキスト ボックスに、時間をミリ秒で入力して遅延の最低限度を定義します。 この限度は記録されたスクリプト内の ThinkTime 関数呼び出しに含まれます。遅延が 記録する最小思考時間 テキスト ボックスで指定した時間より短いものは、ThinkTime 関数呼び出しには展開されません。
  9. 行の最大長 テキスト ボックスに、スクリプト行の最大文字数を指定します。 この設定を使用して、記録されるデータが大きい場合に複数のスクリプト行に分割します。
  10. 省略可能：スクリプトの名前空間 テキスト ボックスに、生成するスクリプト内で宣言する名前の接頭辞を入力します。 スクリプト内で定義されるユーザー グループ、トランザクション、および変数の先頭には、指定された文字列が付きます。
  11. 暗号化されたパスワードを記録する チェック ボックスをオンにすると、レコーダは記録するパスワードを自動的に暗号化してから生成するスクリプトに挿入します。
  12. OK をクリックして、設定を保存します。
親トピック: 記録の設定


プロトコル固有のオプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. スクリプト アイコンをクリックします。
  5. プロトコル タブをクリックします。
  6. ページ上の Web コメント 領域では、生成するスクリプトに自動的に挿入されるコメント (Web 機能用) に関する詳細を指定します。 これらのオプションの設定は、スクリプト生成の コメント オプション (全般 タブ) が有効になっている場合にのみ考慮に入れられます。
    オプション | 説明
    リダイレクト/認証 | ある URL から別の URL へのリダイレクト (HTTP 302、HTTP 407) が記録されると、生成するスクリプトにコメントを挿入します。
    HTTP エラー | HTTP エラー (HTTP 4xx、HTTP 5xx) が記録されると、生成するスクリプトにコメントを挿入します。
    リンク、フォーム、カスタム URL 検索の詳細 | リンク、フォーム、またはカスタム URL が記録されると、生成するスクリプトにコメントを挿入します。
    フォーム フィールドの詳細情報

    フォーム フィールドの非表示、変更済み、または埋め込みが記録されると、生成するスクリプトにコメントを挿入します。

    注: このオプションが選択されていない場合でも、フォーム フィールドのコメントは記録されますが、追加の詳細情報 (値の変更の有無など) は記録されません。
    カスタム URL 解析の詳細 | カスタム URL の詳細解析が記録されると、生成するスクリプトにコメントを挿入します。
  7. ページの IIOP 領域で、 IIOP の Get 関数を生成する チェック ボックスをオンにすると、CORBA 操作呼び出しの戻りパラメータを取得するテスト スクリプトに関数を組み込むことができます。 対応する関数呼び出しをコメントとしてマークすることができます。 ページ上の データベース 領域を使用して、SQL 文の表示方法と取得したデータを生成するスクリプトに含めるかどうかを指定します。
  8. SQL コメント チェック ボックスをオンにすると、コメントとしてマークされた SQL 文を、生成するテスト スクリプト内の解析操作の直前に入れます。
  9. SQL のトリミング チェック ボックスをオンにすると、生成するテスト スクリプト内の SQL 文に改行や SQL キーワードでのインデントを行って、読みやすい形式で表示します。
  10. 取得されたデータ チェック ボックスをオンにすると、取得したデータをコメントとしてマークし、生成するテスト スクリプト内の取得処理の直後に入れます。
  11. 最大 行数 テキスト ボックスには、取得処理の直後にコメントとして挿入するデータの最大行数を入力します。
  12. 最大 列幅 テキスト ボックスには、コメントとして挿入される最大列幅を入力します。
  13. 設定を保存するには、OK をクリックします。
親トピック: 記録の設定


再生の設定

ワークロード シミュレーションやエラー処理など、プロジェクトのスクリプト再生設定を構成します。

  • シミュレーション設定を構成する
    思考時間やワークロードのオプションなど、スクリプト再生のためのプロジェクト プロファイルのシミュレーション設定を構成します。
  • エラー処理設定を構成する
    テストで特定のエラー状況を処理する方法をカスタマイズするために、エラー コードやエラーの説明など、プロジェクトのエラー処理の設定を構成します。
親トピック: プロジェクトのプロファイル設定


シミュレーション設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. シミュレーション タブで ストレス テスト チェック ボックスをオンにすると、低レベルの Web 関数で指定するか思考時間関数の呼び出しにより指定する待ち時間の使用を無効にします。
  4. ランダムな思考時間 チェック ボックスをオンにすると、低レベルの Web 関数で指定するか思考時間関数の呼び出しにより指定する実際の思考時間の記録を、指数分布に従ってランダムな値に置き換えます。
    • 指数分布 - このオプションをクリックすると、Web 関数で指定するか ThinkTime 関数の呼び出しにより指定する思考時間の記録を、指数分布に従ってランダムな値に置き換えます。指数分布の性質上、思考時間が極端にばらつく場合があります。詳細については、SetRandomThinkTime BDL 関数を参照してください。
    • +/- [nn] % の一様分布 - このオプションをクリックすると、Web 関数で指定するか ThinkTime 関数の呼び出しにより指定する思考時間の記録を、指定した範囲内の一様分布に従ってランダムな値に置き換えます。一様分布は、思考時間が極端なものにならないようにする場合に使用します。詳細については、SetRandomThinkTime BDL 関数を参照してください。
  5. 思考時間の制限 チェック ボックスをオンにすると、思考時間の限度を定義できます。このオプションをオンにすると、思考時間は指定した最大値に制限されます。上限値 (秒) を入力してください。
  6. トランザクションの到着率を滑らかにする (キューイングのワークロード) チェック ボックスをオンにすると、各仮想ユーザーは指定したシミュレーション間隔でトランザクションを実行します。このオプションをオンにすると、シミュレーション時間と呼び出されるトランザクションの合計数によってトランザクションの平均到着間隔が決まります。このオプションを無効にすると、Silk Performer が各トランザクションの到着の遅延をランダムに計算します。
    注: この設定は、アプリケーション監視に使用するプロジェクトには影響しません。
  7. トランザクションをランダムに選択する チェック ボックスをオンにすると、シミュレーション エンジンは、キュー ワークロード モデルに従って、負荷テストスクリプトに定義されているすべてのトランザクションをランダムな順序で実行します。このオプションを無効にすると、シミュレートされる仮想ユーザーは負荷テストスクリプトに定義されているとおりの順序でトランザクションを実行します。
  8. シミュレーション時間の後で仮想ユーザーを停止する (キューイングのワークロード) チェック ボックスをオンにすると、シミュレーション時間を過ぎるとユーザーはキャンセルされます。
    注: この設定は、アプリケーション監視に使用するプロジェクトには影響しません。
  9. 停止された仮想ユーザーに対して終了トランザクションを呼び出す チェック ボックスをオンにすると、停止された仮想ユーザーの停止前に終了トランザクションを実行します。このオプションを無効にすると、仮想ユーザーは終了トランザクションを呼び出さずに実行を終えます。
  10. 停止された仮想ユーザーの現在のトランザクションを完了する チェック ボックスをオンにすると、停止された仮想ユーザーの停止前にアクティブなトランザクションを完了させることができます。このオプションがオンになっていると、仮想ユーザーは新しいトランザクションの開始時に停止すべきかどうかを確認します。そのため、ユーザーが停止するのは、アクティブなトランザクションの実行を終えてからとなります。このオプションを無効にすると、仮想ユーザーは、思考時間や待ち時間、キューに入っている間、そして各トランザクションの開始時に、停止すべきかどうかを確認します。
  11. トランザクションの開始時にエラーが発生した場合は仮想ユーザーを停止する チェック ボックスをオンにすると、テスト初期化中にエラーが発生した場合 (通常はトランザクションの開始時に発生します) は、即座に仮想ユーザーを停止させることができます。この設定により、停止された仮想ユーザーに対して終了トランザクションを呼び出す チェック ボックスと 停止された仮想ユーザーの現在のトランザクションを完了する チェック ボックスがオーバーライドされます。この設定は、接続操作のようにテストを進めるためには成功しなければならない操作に関わるテストの場合に便利です。
  12. OK をクリックして、設定を保存します。
親トピック: 再生の設定
関連資料
SetRandomThinkTime Function


エラー処理設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. エラー タブをクリックします。
  4. Silk Performer が 監視 ウィンドウに報告するシミュレーション エラーの深刻度を変更するには、深刻度の定義 領域を使用します。
  5. 一覧に深刻度のカスタム定義を追加するには、追加 をクリックします。

    再生のエラーと警告の編集 ダイアログ ボックスが開きます。

  6. カスタム レベルの深刻度を定義する対象シミュレーション エラーが起こる可能性があるモジュールを モジュール リスト ボックスから選択します。
  7. 深刻度 リスト ボックスから、深刻度のカスタム レベルを定義するエラーに対して、デフォルトの深刻度を選択します。
    深刻度 | 説明
    成功 | エラーは無視されます。
    通知 | エラーは無視されますが、報告されます。
    警告 | エラーは無視されますが、警告が生成されます。
    エラー | エラーはエラーとして扱われます。
    選択されている深刻度のすべてのエラーが下のリスト ボックスに表示されます。
  8. エラー コード テキスト ボックスに、深刻度のカスタム レベルを定義するエラー コードを入力します。 または、テキスト ボックスの上にある一覧から対応するエラーを選択できます。
  9. 説明 テキスト ボックスに、ネイティブ エラーの説明を入力します。 その他のシミュレーション エラーの説明は定義済みなので、ユーザーは変更できません。
  10. カスタム深刻度 リスト ボックスから、指定したエラーのカスタム深刻度を選択します。
    深刻度 | 説明
    成功 | エラーは無視されます。
    通知 | エラーは無視されますが、報告されます。
    警告 | エラーは無視されますが、警告が生成されます。
    エラー | エラーは報告されますが、シミュレーションには影響しません。
    トランザクション終了 | 現在のトランザクションは中止されます。
    プロセス終了 | ユーザー シミュレーションは終了されます。
  11. OK をクリックします。
  12. エラーのカスタム深刻度を編集するには、深刻度の定義 リスト ボックスから選択して、編集 をクリックします。 再生のエラーと警告の編集 ダイアログ ボックスが開きます。
  13. ここに前述した手順で、エラーのカスタム深刻度を編集します。
  14. 一覧から深刻度のカスタム定義を削除するには、深刻度の定義 リスト ボックスから選択して、削除 をクリックします。
  15. 変更を保存してダイアログ ボックスを閉じるには、OK をクリックします。
親トピック: 再生の設定


結果ファイルの設定

TrueLog、時系列データ、クライアント側監視、ログなど、プロジェクトの結果ファイル設定を構成します。

  • 全般的な結果オプションを設定する
    時系列データやログ ファイルなどの、プロジェクトが生成する出力ファイルの種類を指定します。
  • 時系列データ オプションを設定する
    計算間隔や概要レポートなど、プロジェクトが生成する時系列データの種類を指定します。
  • 監視オプションを設定する
    プロジェクトで必要な再生の監視を定義する監視テンプレートを構成します。
  • TrueLog のトラフィック キャプチャのオプションを設定する
    スクリプトの記録および再生の間にサーバー トラフィック データをキャプチャする方法とタイミングを構成します。
  • 全般的なログ オプションを設定する
    タイマ、トランザクション、関数呼び出しデータなど、スクリプトを実行したときにログに記録するデータの種類を定義します。
  • インターネット固有のログ オプションを設定する
    HTTP ヘッダー、Java クラス、TCP/IP データなど、スクリプトを実行したときにログに記録するインターネット固有のデータの種類を定義します。
  • Recorder のフック ログ オプションを設定する
    Silk Performer Recorder のログ オプションを構成します。
  • クライアント側のリアルタイム監視を有効にする
    クライアント側のリアルタイム測定値を有効にします。結果は、Performance Explorer で分析できます。
親トピック: プロジェクトのプロファイル設定


全般的な結果オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから 結果 アイコンをクリックします。
  4. 全般 タブをクリックします。 結果ファイル 領域を使用して、生成する結果ファイルの種類を指定します。テストの実行中は、現在のエージェントの仮想ユーザーごとに異なるファイルが作成されます。結果ファイルを生成するとテストの時間測定値が変化するので、これらのファイルはデバッグのためにのみ作成する必要があります。
    • 現在のエージェントの仮想ユーザーごとに 1 つずつログ ファイル (.log) を生成するには、仮想ユーザー ログ ファイル (.log) チェック ボックスをオンにします。このファイルには、特定のユーザーのトランザクションで行われたすべての関数呼び出しが格納されます。
    • 現在のエージェントの仮想ユーザーごとに 1 つずつレポート ファイル (.rpt) を生成するには、仮想ユーザー レポート ファイル (.rpt) チェック ボックスをオンにします。このファイルには、ユーザーごとのシミュレーション結果が格納されます。
    • 現在のエージェントの仮想ユーザーごとに 1 つずつ出力ファイル (.wrt) を生成するには、仮想ユーザー出力ファイル (.wrt) チェック ボックスをオンにします。このファイルには、テスト スクリプトで使用されている write 文の出力が格納されます。出力ファイルは、ユーザーが write 文を実行した場合にのみ、その特定のユーザーに対して生成されます。
    • エラー (特定の深刻度レベル) が発生した場合にのみ、エラー ファイル (.rpt) および仮想ユーザーごとのエラー ファイル (.err) についてのレポートを生成するには、仮想ユーザー エラー レポート ファイル (.rpt) チェック ボックスをオンにします。このファイルには、仮想ユーザーごとのシミュレーション結果が格納されます。
    • スループット情報 (Performance Explorer で表示可能) の生成を有効にするには、時系列データ (.tsd) チェック ボックスをオンにします。データを計算する間隔を指定できます。この設定は、アプリケーション監視に使用するプロジェクトには影響しません。
    • Performance Explorer で使用するためのリアルタイムのクライアント側測定値を Silk Performer が取得できるようにするには、リアルタイムでのクライアント側測定値 チェック ボックスをオンにします。
      注: このオプションは、現在のプロファイルにのみ適用します。
  5. パスワード 領域で パスワードをログに表示しない チェック ボックスをオンにし、記録および再生ログ ファイル (*.xlg および *.log) で、HTML フォームのパスワード フィールドへの入力時に文字が非表示にされて、アスタリスク ( * ) と置き換えられるようにします。
    注: この機能は、ブラウザのエミュレーション レベルの ページ レベルの Web API (HTML / HTTP) が有効化されているとき (このアプリケーションの種類ではデフォルト)、Web ビジネス トランザクション (HTML/HTTP) プロジェクトのアプリケーションの種類でのみサポートされます。
  6. 測定値名の接頭辞としてトランザクション名と ID を追加するには、トランザクション名と ID を測定値名に追加する チェック ボックスをオンにします。この設定は、トランザクション タイマに加えてすべての測定値の種類に適用されます。この設定を有効にすると、レポートに含まれる測定値がスクリプトに出現する順序になるので、レポートとスクリプトの間の移動が容易になります。
  7. OK をクリックして、設定を保存します。
親トピック: 結果ファイルの設定
関連タスク
負荷テストの監視を構成する


時系列データ オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから 結果 アイコンをクリックします。
  4. 時系列 タブをクリックします。
  5. 計算間隔 リスト ボックスから、データを計算する間隔を選択します。 この設定は、生成されるすべての時系列データに使用されます。 間隔を短くするほど、またテストが長くなるほど、生成されるデータが増えることに注意してください。
  6. 下のリストで示されているすべての測定値グループに対して高レベルのスループット情報を生成するには、すべての測定値グループを有効にする チェック ボックスをオンにします。 高レベルのスループット情報を生成する特定の測定値グループの組み合わせを選択するには、すべての測定値グループを有効にする チェック ボックスをオフにし、測定値グループのリストでチェック ボックスをオンにします。
  7. 詳細ページ タイマ の生成設定を指定します。 次のいずれかを選択します。
    • ページ全体
    • ドキュメントのみ
    • 無効
  8. 概要レポートを Silk Performance Explorer で生成するための概要レポート テンプレートをこのテスト プロジェクトに定義するには、時系列 ページの 概要レポート テンプレート 領域にある参照 (...) ボタンをクリックします。
    1. テンプレート ファイルの選択 ダイアログ ボックスで、プロジェクトに適用する概要レポート テンプレート (.ovt) ファイルを選択します。
    2. 開く をクリックします。
    ここで指定したファイルは、このテスト プロジェクトのあらゆる概要レポートを生成するための概要レポート テンプレートとして使用されることになります。新しい概要レポートを手動で作成する際にも、このテンプレート ファイル名が 概要レポート テンプレート ワークフロー ダイアログ ボックスであらかじめ選択されています。
  9. 設定を保存するには、OK をクリックします。
親トピック: 結果ファイルの設定


監視オプションを設定する

Silk Performer では、プロジェクト用の監視テンプレートを定義し、負荷テストを開始したときに Performance Explorer を自動的に起動するプロジェクトを構成できます。

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから 結果 アイコンをクリックします。
  4. 監視 タブをクリックします。
  5. テストを開始したら Silk Performer の監視機能が自動的に起動されるようにするには、監視オプション 領域の 自動的に監視を開始する チェック ボックスをオンにします。
  6. プロジェクトに最適な監視テンプレートを自動的に使用するには、デフォルト監視テンプレートを使用する をクリックします。 たとえば、Web プロジェクトを作成している場合、Web 負荷テストに役立つ測定値をテンプレートで指定します。
  7. カスタム監視テンプレートを使用するには、カスタム監視テンプレートを使用する をクリックし、次のいずれかのステップを実行します。
    • サーバー監視に使用するカスタム テンプレート ファイル (.pew) の名前を入力します。 Silk Performer により、標準監視テンプレートのコピーが作成されます。
    • 名前フィールドのフォルダ アイコンをクリックして、既存の監視テンプレートを選択します。
  8. 省略可能： カスタム監視テンプレートの編集 をクリックして、任意の監視パフォーマンス データを追加または削除します。
    このボタンをクリックすると、Silk Performance Explorer が開きます。 以下の手順を実行します。
    1. 任意の監視パフォーマンス データを追加や削除します。
    2. 変更をテンプレートに適用するには、Silk Performance Explorer ワークスペースを保存します。
  9. Windows のパフォーマンス モニタに表示される追加パフォーマンス測定値のデータを計算するには、パフォーマンス モニタのインテグレーション 領域の オンライン パフォーマンス データを計算する チェック ボックスをオンにします。 このデータを使用すると、同時使用ユーザー、トランザクションのスループット、送信/受信されたデータ、および実行された SQL 文を表示できます。
  10. 設定を保存するには、OK をクリックします。
テストを実行すると、Silk Performer は、テスト対象のサーバーの種類に関連するサーバー パフォーマンス データを表示します。
親トピック: 結果ファイルの設定


TrueLog のトラフィック キャプチャのオプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから 結果 アイコンをクリックします。
  4. TrueLog タブをクリックします。
  5. 記録の間に TrueLog ファイル (.xlg) の生成を有効にするには、TrueLog ファイル (.record.xlg) チェック ボックスをオンにします。 TrueLog ファイルには、サーバーとの間で送受信されるすべてのトラフィック、およびテスト スクリプトで生成する必要のあるトランザクションと関数呼び出しが格納されます。
    注: TrueLog ファイルは、デバッグのためにのみ作成する必要があります。
  6. 仮想ユーザーごとに TrueLog ファイル (.xlg) を生成するには、TrueLog ファイル (.xlg) チェック ボックスをオンにします。 このファイルには、特定の仮想ユーザーのトランザクションで行われたすべての関数呼び出しが格納されます。
  7. TrueLog On Error ファイル (.xlg) の生成を有効にするには、TrueLog On Error ファイル (.xlg) チェック ボックスをオンにします。
    注: 再生のパフォーマンスに大きな影響を与えないほどの数のエラーが予想される場合は、大きいテストであっても Truelog On Error ファイルを有効にしてかまいません。
  8. TrueLog の保存 オプションを使用して、TrueLog に保存する情報の量を指定します。 TrueLog On Error 領域のオプションは、TrueLog On Error ファイルの生成が上で有効になっている場合にのみ使用できます。
    • 個々のエラーが発生するトランザクション全体を記録するには、1 トランザクションごと オプション ボタンをクリックします。このオプションを指定すると、大量のメモリが必要になります。
    • (履歴に保持されているデータに基づく) 最小限の関連データを TrueLog に記録するには、コンテンツ履歴ベース オプション ボタンをクリックします。低レベルの Web 呼び出しが使用されている場合、この設定は保存されるデータのサイズに影響を与えません。この選択には最小限のメモリが必要です。
  9. TrueLog On Error の生成対象 リスト ボックスから、TrueLog を生成する深刻度レベル ([エラー]、[深刻なエラー]、または [警告]) を選択します。 デフォルトの深刻度レベルは [エラー] です。
  10. すべての埋め込みオブジェクト (画像、Java ファイルなど) を TrueLog に記録するには、すべての埋め込みオブジェクトを記録する オプション ボタンをクリックします。記録されたオブジェクトは、TrueLog の [キャッシュされたドキュメント] セクションに表示されます。
  11. 現在のログのスコープ内でダウンロードされた埋め込みオブジェクト (画像、Java ファイルなど) のみを TrueLog に記録するには、キャッシュされた埋め込みオブジェクトを除外する オプション ボタンをクリックします。キャッシュ ヒットとして現在のログに表示されるオブジェクトは、記録されない場合があります。そのようなオブジェクトは、現在のログのスコープの外部でダウンロードされている可能性があります。キャッシュに存在しなくなっている場合もあります。
  12. すべての埋め込みオブジェクト (画像、Java ファイルなど) を TrueLog への記録から除外するには、すべての埋め込みオブジェクトを除外する オプション ボタンをクリックします。
    注: このオプションを選択すると、スケーラビリティが最善になります。
  13. OK をクリックして、設定を保存します。
親トピック: 結果ファイルの設定
関連資料
WebSetOption Function


全般的なログ オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから 結果 アイコンをクリックします。
  4. ログ タブをクリックします。
  5. すべての入手可能な種類の情報を生成されるログ ファイルに含めるには、すべてを記録する チェック ボックスをオンにします。 このファイルには、タイマ、仮想ユーザーによって実行されたトランザクション、およびトランザクションによって行われた関数呼び出しについての情報が格納されます。 ログ ファイルを作成すると、時間測定値が変化する可能性があることに注意してください。
  6. 全般 領域を使用して、ログ ファイルに含めるデータの種類を指定します。
    • シミュレーションの間に仮想ユーザーが実行するトランザクションの概要を含めるには、トランザクション チェック ボックスをオンにします。
    • カスタム タイマの情報を含めるには、タイマ チェック ボックスをオンにします。
    • シミュレーションの間にユーザーが実行する Silk Performer API 呼び出しの概要を含めるには、API 呼び出し チェック ボックスをオンにします。
    • 接続情報などの追加情報を含めるには、情報 チェック ボックスをオンにします。
    • サーバーと交換されるデータを含めるには、データ チェック ボックスをオンにします。
    • 印刷不可能な文字をドットで表して含めるには、印刷不能文字 チェック ボックスをオンにします。
  7. 設定を保存するには、OK をクリックします。
親トピック: 結果ファイルの設定


インターネット固有のログ オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから 結果 アイコンをクリックします。
  4. インターネット ログ タブをクリックします。
  5. サーバーに送信するデータ 領域を使用して、Silk Performer および Recorder がサーバーに送信するデータをログ ファイルに書き込む詳細さのレベルを指定します。
    • サーバーに送信するすべてのクライアント リクエストのヘッダーを書き込むには、クライアントからの HTTP リクエスト ヘッダー チェック ボックスをオンにします。 このオプションは、HTTP トラフィックを (再生ではなく) 記録しているときにのみ使用できます。
    • サーバーに送信するリクエストに含まれるすべてのヘッダーを書き込むには、ヘッダー チェック ボックスをオンにします。
    • サーバーに送信するリクエストに含まれるすべての印刷可能なデータを書き込むには、印刷可能データ チェック ボックスをオンにします。
    • サーバーに送信するリクエストに含まれるすべてのバイナリ データを書き込むには、バイナリ データ チェック ボックスをオンにします。
    • 最大 行数 テキスト ボックスで、リクエスト データを含む行をサーバーに送信するときにログ ファイルに書き込むことのできる最大行数を指定します。
  6. サーバーから受信するデータ 領域を使用して、Silk Performer および Recorder がサーバーから受信するデータをログ ファイルに書き込む詳細さのレベルを指定します。
    • サーバーから受信するクライアント HTTP レスポンスのヘッダーをログ ファイルに書き込むには、クライアントへの HTTP レスポンス ヘッダー チェック ボックスをオンにします。 このオプションは、HTTP トラフィックを (再生ではなく) 記録しているときにのみ使用できます。
    • サーバーから受信するレスポンスに含まれるすべてのヘッダーを書き込むには、ヘッダー チェック ボックスをオンにします。
    • サーバーから受信するレスポンスに含まれるすべての印刷可能なデータを書き込むには、印刷可能データ チェック ボックスをオンにします。
    • サーバーから受信するレスポンスに含まれるすべてのバイナリ データを書き込むには、バイナリ データ チェック ボックスをオンにします。
    • 最大 行数 テキスト ボックスで、レスポンス データを含む行をサーバーから受信するときにログ ファイルに書き込むことのできる最大行数を指定します。
  7. サーバーから受信するすべての画像、アプレット、Java クラスを書き込むには、画像、アプレット、Java クラス チェック ボックスをオンにします。 このオプションを選択すると、これらのアイテムはバイナリ データとして表されます。
  8. サーバーへの接続が確立されたとき、または閉じられたときなどの追加情報をログ ファイルに書き込むには、TCP/IP 接続情報 チェック ボックスをオンにします。
  9. 設定を保存するには、OK をクリックします。
親トピック: 結果ファイルの設定


Recorder のフック ログ オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストから 結果 アイコンをクリックします。
  5. フック ログ タブをクリックします。
  6. Silk Performer Recorder の ログ ページにある フック 領域を使用すると、クライアント アプリケーションが実行するすべての関数呼び出し、およびクライアント アプリケーションが関数呼び出しに渡すパラメータを表示できます。
    • クライアント アプリケーションが実行するすべての関数呼び出しを表示するには、関数呼び出し をオンにします。
    • クライアント アプリケーションが関数呼び出しに渡すすべてのパラメータを表示するには、関数パラメータ チェック ボックスをオンにします。 このオプションを有効にするには、先に 関数呼び出し チェック ボックスをオンにする必要があります。
  7. OK をクリックして、変更を保存します。
親トピック: 結果ファイルの設定


クライアント側のリアルタイム監視を有効にする

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 結果 グループ アイコンをクリックします。
  4. 全般 タブをクリックします。
  5. リアルタイムでのクライアント側測定値 チェック ボックスがオンであることを確認します。
  6. クライアント側測定値 タブをクリックします。 ダイアログの右上隅にあるボタンを使用して、使用可能なタブに移動することが必要な場合があります。
  7. 計算間隔 を「5 秒」に設定します。
  8. すべての測定値グループの監視を有効にするには、すべての測定値グループを有効にする チェック ボックスをオンにします。 または、リストから特定の測定値の種類を選択することもできます。
  9. 設定を保存するには、OK をクリックします。
親トピック: 結果ファイルの設定


インターネットの設定

ネットワーク シミュレーション、ホスト サーバー、セキュリティ、記録のオプションなど、プロジェクトのインターネット関連の設定を構成します。

  • ネットワーク最適化設定を構成する
    仮想ユーザー ネットワーク環境のシミュレーション設定を構成します。
  • ネットワーク エミュレーション設定を構成する
    必要に応じて帯域幅、待機時間、パケット損失率の値を設定してネットワークをエミュレートします。
  • ホスト サーバーの設定を構成する
    テストでのデータ トラフィックを特定のサーバーを経由してルーティングする必要がある場合 (ファイアウォールとのネゴシエーションなど) は、ホスト サーバーの IP アドレスとポート設定を指定します。
  • セキュリティ設定を構成する
    プロトコル、SSL、暗号化の設定など、シミュレートしているネットワーク環境のセキュリティ設定を構成します。
  • 記録設定を構成する
    SMTP やサーバー証明書の設定など、シミュレートしているネットワーク環境の記録設定を構成します。
親トピック: プロジェクトのプロファイル設定


ネットワーク最適化設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから インターネット アイコンをクリックします。
  4. 最適化 タブをクリックします。
  5. ネットワーク設定最適化の対象 リスト ボックスで、Silk Performer および WinSock のバッファに対するシミュレーションのタイプを選択します。 この設定により、サーバーとの双方向のデータ転送に使用するバッファのサイズが決まります。バッファを大きくするとパフォーマンスが向上しますが、そのためには Silk Performer は多くのメモリを必要とします。メモリの少ないドライバ マシンでは、小さいバッファの方が便利な場合があります。モデム シミュレーションを使用するときは、小さいバッファを使用すると、より現実的なシミュレーションが作成されることに注意してください。
  6. IP アドレスの多重化を有効にするには、クライアント IP アドレスの多重化 チェック ボックスをオンにします。
    注: 仮想ユーザーに個別の IP アドレスを割り当てるには、最初にネットワーク デバイスに対して複数の IP アドレスを設定する必要があります。そのためには、Silk Performer System Configuration Manager を使用します。その後で、各 IP アドレスを異なる仮想ユーザーに割り当てることができます。
  7. パッシブ FTP セマンティクスを有効にするには、パッシブ FTP のセマンティクス チェック ボックスをオンにします。この設定は、ファイアウォールまたはプロキシを通して接続するときに便利な場合があります。 このオプションは、FTP データ転送に対してのみ有効です。
  8. 接続試行回数 テキスト ボックスには、エラーが報告される前に、シミュレートされているユーザーがサーバーへの接続を試みることができる回数を入力します。
  9. 接続タイムアウト テキスト ボックスでは、タイムアウトが報告される前に、シミュレートされているユーザーがサーバーへの接続を試みることができる時間を指定します。
  10. 送信タイムアウト テキスト ボックスでは、タイムアウトが報告される前に、シミュレートされているユーザーがサーバーへのデータ送信を試みることができる時間を指定します。
  11. 受信タイムアウト テキスト ボックスでは、タイムアウトが報告される前に、シミュレートされているユーザーがサーバーからのデータ受信を試みることができる時間を指定します。
  12. OK をクリックして、設定を保存します。
親トピック: インターネットの設定


ネットワーク エミュレーション設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから インターネット アイコンをクリックします。 エミュレーション ペインが表示されます。
  4. 接続タイプ として、Mobile、Wired、Wireless を選択し、さらに特定のテクノロジ (LTE など) を選択します。 選択に応じて、Silk Performer は、帯域幅、待機時間、パケット損失率の特定のデフォルト値を提供します。
  5. ネットワーク エミュレーション ドライバがエージェントにインストールされている場合のみ、ネットワーク エミュレーション ドライバを使用する は有効です。待機時間 と パケット損失率 の設定は、必要に応じて調整できます。ドライバがエージェントにインストールされていない場合、このオプションは有効ではありません。この場合、待機時間 と パケット損失率 の設定は使用されません。
  6. サーバーとの距離 を選択します。選択に応じて、待機時間 が変わります。
  7. 帯域幅 - ダウン、帯域幅 - アップ、待機時間、パケット損失率 の設定値は、手動で調整できます。
  8. リセット をクリックすると、選択した接続タイプのデフォルト値に戻ります。
  9. エミュレーション ペインのすべての値を完全にもとに戻したい場合は、デフォルト をクリックします。
  10. OK をクリックして、設定を保存します。
親トピック: インターネットの設定


ホスト サーバーの設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから、インターネット アイコンをクリックします。
  4. ホスト タブをクリックします。
  5. 標準ホスト 領域で、標準ホストとして使用するサーバーを指定します。 ホスト名または IP アドレスを使用できます。 テスト スクリプトで standardhost 変数を使用すると、ここで指定した名前が常に使用されます。 必要に応じて、ポート テキスト ボックスを使用して、標準ホストで使用するポート番号を指定できます。
  6. SOCKS4 プロキシ 領域で、プロキシ名または IP アドレス テキスト ボックスと ポート テキスト ボックスを使用して、すべてのインターネット トラフィックが経由する SOCKS4 プロキシのホスト名または IP アドレスとポート番号を指定します。 たとえば、テストのトラフィックがファイアウォールをネゴシエートする必要があるときに、このオプションを使用します。
  7. 設定を保存するには、OK をクリックします。
親トピック: インターネットの設定


セキュリティ設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから インターネット アイコンをクリックします。
  4. セキュリティ タブをクリックします。 リモート サーバーへのセキュアな接続に使用するプロトコル固有の設定を指定するには、プロトコル 領域を使用します。
  5. SSL のバージョン リスト ボックスで、サーバーへのセキュアな接続を確立するときに使用する Secure Socket Layer プロトコルのバージョンを選択します。
  6. 暗号化の強度 リスト ボックスで、セキュアな接続を通してサーバーとの間で転送するデータの暗号化の強度を選択します。
  7. クライアント証明書 領域の 証明書 リスト ボックスで、実際のクライアントの代わりに Silk Performer が Web サーバーに提示するクライアント証明書を選択します。 クライアント証明書を使用するには、先に証明書を Web ブラウザからエクスポートし、それを Silk Performer の証明書ストアに格納する必要があります。
  8. 現在使用中のクライアント証明書に関する詳細情報を表示するには、表示 をクリックします。
  9. 証明書ファイル (.p12 または .pfx) から新しいクライアント証明書をインポートするには、インポート をクリックします。
    1. 証明書を開く ダイアログ ボックスを使用し、新しいクライアント証明書に移動して選択します。
    2. OK をクリックします。
  10. 現在選択されているクライアント証明書をリスト ボックスから削除するには、削除 をクリックします。
  11. スクリプトの再生に Secure Socket Layer プロトコルを使用するには、セキュアな接続を強制する チェック ボックスをオンにします。 これは、たとえば、低レベルの Web 関数の URL で、すべての HTTP スキームを HTTPS に置き換えるのと同じです。テストを使用して、セキュアな接続を使用した場合と使用しない場合のパフォーマンスを簡単に比較するために使用できます。
  12. OK をクリックして、設定を保存します。
親トピック: インターネットの設定


記録設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから インターネット アイコンをクリックします。
  4. 記録 タブをクリックします。
  5. クライアント アプリケーションとメール サーバーの間で交換されるメール本文のデータを記録するには、SMTP 領域で SMTP データの記録を有効にする チェック ボックスをオンにします。 SMTP トラフィックを記録するには、プロキシ ページ (Web 設定) を使用して適切なプロキシ接続をセットアップします。
  6. 実際のサーバーの代わりに Silk Performer Recorder がクライアントに対して提示するサーバー証明書を指定するには、Recorder サーバー証明書 領域を使用します。
  7. デフォルトの Recorder サーバー証明書の代わりにカスタム サーバー証明書を Recorder がクライアントに示す場合は、カスタム サーバー証明書を使用する チェック ボックスをオンにします。
    1. フィールドの右側にある参照 (...) ボタンをクリックし、使用するサーバー証明書を指定します。
  8. Recorder が使用するサーバー証明書がパス フレーズで保護されている場合は、パス フレーズ テキスト ボックスに使用するパス フレーズを入力します。
  9. SSL ハンドシェークの間に Recorder がルート CA 証明書を送信する場合は、SSL ハンドシェークの間にルート CA を送信する チェック ボックスをオンにします。 Recorder サーバー証明書に署名した認証機関を認証するために、クライアントがルート CA 証明書をリクエストする場合があります。
    1. フィールドの右側にある参照 (...) ボタンをクリックし、使用するルート CA 証明書を指定します。
  10. 設定を保存するには、OK をクリックします。
親トピック: インターネットの設定
関連タスク
プロキシ設定を構成する


Web (プロトコル レベル) 設定

ブラウザ、プロキシ、記録、検証のオプションなど、プロジェクトの Web 関連設定を構成します。

  • ブラウザ設定を構成する
    同時接続数や HTTP バージョンなど、シミュレートしているネットワーク環境のブラウザ設定を構成します。
  • プロキシの設定
    プロキシの設定では、Silk Performer のインターネットへの接続方法 (直接かプロキシ サーバー経由か) を指定することができます。
  • ブラウザ シミュレーション設定を構成する
    ブラウザ シミュレーション設定を構成し、Web サイトにアクセスする仮想ユーザーの現実的なシミュレーションを作成します。
  • ブラウザ認証のオプションを設定する
    仮想ユーザーが入力しなければならないログイン時の資格情報を構成します。
  • ブラウザ エミュレーション認証のオプションを設定する
    クッキー、ブラウズ履歴、リダイレクト、DNS 検索など、認証に関連するブラウザ エミュレーションの動作を構成します。
  • ブラウザ記録オプションを設定する
    トラフィック レベル、HTTP ヘッダー、コンテキスト管理、およびページ検出などの Web トラフィックの記録方法を構成します。
  • 検証オプションを設定する
    再生した Web トラフィックを、記録した Web トラフィックと比較して検証する方法を構成します。
  • HTTP ボディ変換オプションを設定する
    HTTP ボディ変換を、HTTP リクエスト ボディ、HTTP レスポンス ボディ、その両方のいずれに適用するかを構成します。
  • カスタム コンテンツ タイプおよびエンコーディングの変換
    デフォルトのコンテンツ タイプとコンテンツのエンコーディングが圧縮変換を起動しない場合に、変換トリガーをカスタマイズする方法について説明します。
親トピック: プロジェクトのプロファイル設定
関連タスク
ブラウザ駆動型の記録設定を構成する
ブラウザ駆動型の再生設定を構成する


ブラウザ設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで Web アイコンをクリックします。
  4. ブラウザ タブをクリックします。 ブラウザの種類 領域を使用して、ブラウザ固有の設定を行います。
  5. ブラウザ リスト ボックスから、シミュレーションに使用する Web ブラウザを選択します。 この選択により、HTTP リクエストに含まれるヘッダー情報の形式と、シミュレーションに使用するスレッド モデルが決まります。
    注: モバイル Web アプリケーション テスト (iPhone、iPad、Android、Windows Phone または Blackberry) では、記録に使用するユーザー エージェント文字列を変更できます。
  6. 実際のブラウザが行うのと同様に、サーバーごとに接続を制限するには(たとえば、1 サーバー当たり 2 接続、2 サーバー当たり 4 接続など)、サーバーごとの接続数を制限する オプション ボタンをクリックします。
    注: 最大合計接続数 のみが考慮されるので、低レベルの Web API に対してはこのオプションの使用は推奨されません。
    • HTTP 1.0 サーバーへの最大同時接続数 テキスト ボックスで、HTTP 1.0 を使用するサーバーごとの接続数を指定します。
    • HTTP 1.1 サーバーへの最大同時接続数 テキスト ボックスで、HTTP 1.1 を使用するサーバーごとの接続数を指定します。
    • 最大合計接続数 テキスト ボックスで、エミュレートしているブラウザで開くことができる無条件の最大接続数を指定します。正確な接続シミュレーションを実行するには、この値をサーバーごとの設定よりも大きくする必要があります。
  7. 仮想ユーザーごとの接続数を制限する オプション ボタンをクリックし、仮想ユーザーごとの接続数を制限します(たとえば、1 ユーザー当たり 4 接続、2 ユーザー当たり 4 接続など)。
    1. 最大同時接続数 テキスト ボックスで、カスタム ブラウザの場合にクライアントがサーバーと確立できる同時接続の最大数を指定します。 サーバーでは、各接続に対してさらに多くのシステム リソースを割り当てる必要があるため、接続数が増加するとサーバーのパフォーマンスは低下します。Web ブラウザと同様、Silk Performer は、データの送受信を同時に行うために、接続ごとに 1 つのスレッドを使用します。シングルスレッド(同期)オペレーションの場合は、この値を [1] に設定します。マルチスレッド シミュレーションの場合は、[2] から [32] の間の値を選択します。
      注: 選択したブラウザごとに値があらかじめ定義されています。ブラウザ リスト ボックスから Custom を選択した場合は、最大同時接続数 のみ編集できます。
    2. シングルスレッドを使用してスクリプトを再生するには、シングルスレッド オプションを選択します。 この設定を選択すると、すべて低レベルの Web 関数が強制的に同期的に実行されます。
  8. HTTP のバージョン リスト ボックスから、シミュレートするブラウザの HTTP バージョンを選択します。これは通常、HTTP/1.0 です。
  9. HTTP/HTTPS に対して「キープアライブ」を設定するには、キープアライブのセマンティクス チェック ボックスをオンにします。キープアライブは、リクエストやレスポンスが終了した後も接続を維持したままにする機能です(ただし、ブラウザとサーバーの両方がそれをサポートしている場合)。
  10. Silk Performer を利用して、サーバーから受信した圧縮データをデコードするには、コンテンツのエンコーディング をオンにします。 このオプションが有効になっていると、Silk Performer は Accept-Encoding ヘッダーを送信して、エンコードされたデータを受信可能であることをサーバーに通知します(gzip および圧縮デフレーション法による)。
  11. ユーザー エージェント テキスト ボックスで、カスタム ブラウザを使用したときにサーバーに送信するユーザー エージェント情報を指定します。 これは通常、プラットフォーム情報を含むブラウザ名です。この文字列は、Silk Performer の低レベルの Web 関数を使用して送信される HTTP リクエスト ヘッダー User-Agent: に使用されます。
  12. 受け付け テキスト ボックスには、サーバーから、カスタム ブラウザを使用するクライアントに送信できるドキュメント タイプを指定します。 この文字列は、Silk Performer の低レベルの Web 関数を使用して送信される HTTP リクエスト ヘッダー Accept: に使用されます。
  13. 追加 HTTP ヘッダー テキスト ボックスには、正確な構文を使用して 1 つ以上の追加ヘッダーを指定できます(カスタム ブラウザの場合)。ヘッダーごとに 1 行使用します。 これらのヘッダーは、Silk Performer の低レベルの Web 関数を使用して送信される各リクエストの後ろに付加されます。
  14. OK をクリックして、設定を保存します。
親トピック: Web (プロトコル レベル) 設定


プロキシの設定

プロキシの設定では、Silk Performer のインターネットへの接続方法を指定することができます。 以下のいずれかの方法を指定できます。

  • 直接インターネット に接続する - プロキシを使用せずにインターネットに接続します。
  • プロキシ サーバーを通してシミュレートされたブラウザに接続する - 特定のプロキシ サーバーを通じてインターネットに接続します。 HTTP、HTTPS、FTP、および SOCKS トラフィックに対して別個のプロキシを指定できます。
  • 自動プロキシ構成 URI - 動的プロキシ構成によりインターネットに接続します。 動的プロキシ構成は、Web ブラウザからインターネットに送信されるリクエストごとにプロキシを決定するのに Web ブラウザで用いられる手法です。 接続先の URL やホストに応じて、プロキシが動的に決定されます。

    PAC (Proxy Auto-Config: プロキシ自動構成) ファイルを使用して、リクエストごとにプロキシ サーバーが決定されます。 PAC ファイルは、ユーザーが直接入力する静的な情報からではなく、リモートの JavaScript ファイルからプロキシ構成情報をロードするようにブラウザに指示するためのものです。

    PAC ファイルの仕様の詳細については、 http://www.microsoft.com/technet/prodtechnol/ie/reskit/6/part6/c26ie6rk.mspx を参照してください。

  • プロキシ設定を構成する
    プロキシ設定を構成して、Silk Performer のインターネットへの接続方法を指定します。
親トピック: Web (プロトコル レベル) 設定


プロキシ設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで Web アイコンをクリックします。
  4. プロキシ タブをクリックします。
  5. 次のいずれかを選択します。
    • 直接インターネットに接続する: プロキシを使用せずにインターネットに接続します。
    • 自動プロキシ構成 URI: 動的プロキシ構成によりインターネットに接続します。 以下の手順に従って、ロードする PAC ファイルの場所を指定します。
    • プロキシ サーバーを通してシミュレートされたブラウザに接続する: 特定のプロキシ サーバーを通じてインターネットに接続します (以下の手順に従います)。
    1. 詳細 ボタンをクリックして、プロキシの設定 ダイアログ ボックスを開きます。
    2. インターネット アクセス 領域で、プロトコルごとにプロキシ サーバーの ホスト名または IP アドレス と ポート を構成します。 すべての Web トラフィックに同じプロキシを使用する場合は、すべてのプロトコルに同じプロキシ サーバーを使用する チェック ボックスをオンにします。 この設定をオンにすると、プロファイル - [<プロファイル名>] - Web ダイアログ ボックスの アドレス テキスト ボックスと ポート テキスト ボックスが有効になります。 SOCKS プロキシの設定を変更するには、プロファイル - [<プロファイル名>] - インターネット ダイアログ ボックスの ホスト タブをクリックします。
    3. 例外 領域では、インターネット アクセス 領域で指定したプロキシを使用しないホスト名、IP アドレス、またはサブドメインを列挙します。 このリストにはワイルドカード (*) を含めることができ、その場合は、指定されたパターンに合致するアドレスのプロキシ サーバーをアプリケーションが無視することになります。 複数のアドレスやホスト名を列挙する場合は、それらをセミコロンで区切ります。
    4. 設定を保存するには、OK をクリックします。
  6. プロファイル - [<プロファイル名>] - Web ダイアログ ボックスに戻り、OK をクリックしてプロキシの設定を保存します。
親トピック: プロキシの設定
関連タスク
記録設定を構成する


ブラウザ シミュレーション設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで Web アイコンをクリックします。
  4. シミュレーション タブをクリックします。 シミュレーション 領域を使用して、Web サイトを訪問するユーザーの現実的なシミュレーションのためのオプションを設定します。
  5. トランザクションのたびに、仮想ユーザーにブラウザ エミュレーションをリセットさせるには、トランザクションごとにユーザーの動作をシミュレートする チェック ボックスをオンにします。 選択した追加オプションに応じて、Silk Performer は、Web サイトを初めて訪問したユーザー、またはそのサイトを再訪問したユーザーのいずれかをシミュレートします。 サイトを初めて訪問したユーザーの場合は、永続クッキーが設定されておらず、ドキュメントもキャッシュされていません。一方、サイトを再訪問したユーザーの場合は、通常、再訪問までの間にブラウザを閉じたとしても、ドキュメントがキャッシュされ、永続クッキーが設定されています。 このオプションを無効にすると、仮想ユーザーは、テストが終了するまで閉じられることのない Web ブラウザをエミュレートします。したがって、複数のトランザクションにわたってキャッシュされた情報が再利用されます。
  6. 初めて Web サイトを訪問したユーザーを実際にシミュレートするには、初めてのユーザー オプション ボタンをクリックします。 トランザクションごとに、永続的な接続は閉じられ、Web ブラウザのエミュレーションがリセットされます。また、ドキュメント キャッシュ、ドキュメント履歴、クッキー データベース、認証データベース、および SSL コンテキスト キャッシュもクリアされます。 このオプションを選択した場合、Silk Performer は、サーバーから全サイト(すべてのファイルを含む)をダウンロードします。
  7. Web サイトを再訪問したユーザーを実際にシミュレートするには、2 回目以降のユーザー オプション ボタンをクリックします。 トランザクションごとに、永続的な接続は閉じられ、ドキュメント履歴、非永続クッキー データベース、認証データベース、および SSL コンテキスト キャッシュがクリアされます。 このオプションを選択した場合、ユーザーはドキュメント キャッシュをクリアしません。 詳細については、『The BDL Function Reference』(英語) のWebSetUserBehavior 関数を参照してください。 ユーザーの許容度をシミュレートするための詳細なオプションを調整するには、ユーザーの許容度 領域を使用します。
  8. スライダを使用して、シミュレートしているユーザーの許容度のレベルを調節します。
  9. カスタマイズ ボタンをクリックして、ユーザー許容度の詳細設定 ダイアログ ボックスを表示すると、選択したユーザー許容度レベルの個々の動作を変更できます。 ロード回数に関連するユーザー許容度を指定するには、ロード回数許容度 領域を使用します。
    1. 一定の時間内にサーバーがまったく応答しない場合の仮想ユーザーの反応を設定するには、データの到着を待つ時間 チェック ボックスをオンにします。 そして、サーバーが応答しない場合の、ユーザーの最大待ち時間を秒単位で指定します。
    2. 最初のドキュメント(ルート)を受信してから一定の時間内に HTML コンテンツが完全にロードされない場合の仮想ユーザーの反応を設定するには、ドキュメントの完了を待つ時間 チェック ボックスをオンにします。 そして、最初のドキュメント(ルート)を受信してから HTML コンテンツが完了しない場合の、ユーザーの最大待ち時間を秒単位で指定します。
    3. HTML コンテンツ(ドキュメント)を受信してから一定の時間内に埋め込みオブジェクトが完全にロードされない場合の仮想ユーザーの反応を設定するには、ページの完了を待つ時間 チェック ボックスをオンにします。 そして、HTML コンテンツ(ドキュメント)を受信してから埋め込みオブジェクトが完了しない場合の、ユーザーの最大待ち時間を秒単位で指定します。
    4. 埋め込みオブジェクトのロード時間が一定の時間を超えた場合の(最後の HTML ドキュメントを受信した時点でタイマーが開始する)仮想ユーザーの反応を設定するには、画像のみのロードを待つ時間 チェック ボックスをオンにします。 そして、埋め込みオブジェクトのロードに対する、ユーザーの最大待ち時間を秒単位で指定します。 最後の HTML ドキュメントがロードされた時点でタイマーが開始します。
    5. タイムアウトが発生して、ページが指定された回数だけ(無制限、または別のタイムアウトが発生するまで)再試行されても、ユーザーが待ち続ける場合は、待ち続ける オプション ボタンをクリックします。
    6. タイムアウトが発生して、ページが指定された回数だけ再試行されたら、ユーザーが停止ボタンを押す場合は、中止する オプション ボタンをクリックします。
    7. タイムアウトが発生して、ページが指定された回数だけ再試行されたら、ユーザーがさらに一定時間待つ場合は、さらに オプション ボタンをクリックします。 この時間が再度切れたら、ユーザーは 停止 ボタンを押します(負荷テストを中止します)。 そして、仮想ユーザーが停止ボタンを押すまでの待ち時間を秒単位で指定します。 ページ上のエラーに関連するユーザー許容度を指定するには、エラー許容度 領域を使用します。
    8. ページ内のエラーに対する仮想ユーザーの反応を設定するには、エラー時に再試行する チェック ボックスをオンにします。
    9. エラーが発生した場合にユーザーが 更新 ボタンを押す頻度を指定します。
    10. ページ内の任意のエラー(たとえば、画像が見つからないなど)に対して、ユーザーが 更新 ボタンを押すようにするには、 ページでのエラーの場合 オプション ボタンをクリックします。
    11. ページのドキュメント部分にエラーが発生した場合(たとえば、フレームが見つからないなど)のみ、ユーザーが 更新 ボタンを押すようにするには、 ドキュメントでのエラーの場合 オプション ボタンをクリックします。
  10. OK をクリックして、ユーザー許容度の詳細設定 ダイアログ ボックスの設定を保存します。
  11. OK クリックして、プロファイル - [<プロファイル名>] ダイアログ ボックスの設定を保存します。
親トピック: Web (プロトコル レベル) 設定


ブラウザ認証のオプションを設定する

注: 再生時にすべての仮想ユーザーに同じ資格情報でログインさせる場合、ブラウザ認証の設定を使用します。また、別個のログイン資格情報を使用して各仮想ユーザーにログインさせる場合、プロジェクト属性を使用して資格情報を指定します。詳細については、『The BDL Function Reference』(英語) の「Project Attributes」を参照してください。または、データ ファイルを使ったスクリプトのカスタマイズを使用してください。
  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで Web (プロトコル レベル) アイコンをクリックします。
  4. 認証 タブをクリックします。
  5. ユーザー認証 領域にある ユーザー名 と パスワード に、保護されたリモート サーバーに接続する際の認証に使用する資格情報を入力します。
  6. 以下は、記録時にのみ適用されます。
    1. ショートカット リストから 記録 をクリックします。
    2. 新しいユーザー認証トークンを Recorder で生成する をオンにします。
      注: スクリプトを記録する際に、Silk Performer Recorder はブラウザが生成した認証データをサーバーに送ります。これは、デフォルトの動作です。このオプションは、新しいユーザー認証トークンを生成してサーバーに送信するように Recorder に指示するために使用します。詳細については、下部のメモを参照してください。
  7. プロキシ認証 領域にある ログイン名 と パスワード には、プロキシ認証ログインに使用する資格情報を入力します（プロキシ サーバーを経由してインターネットに接続する場合に必要）。
  8. OK をクリックして、設定を保存します。
注: デフォルトでは、Silk Performer Recorder は何もせずにブラウザが生成した認証データをサーバーに送信します。正しい認証情報をブラウザが見つけられないと、記録中でもプロンプトを表示します。このデフォルトの動作による Recoder に対するオーバーヘッドはありません。しかし、サーバーが チャネル バインディング（IIS サーバーの 拡張保護）を有効にしている場合は、このデフォルトの動作は機能しません。このような場合には、新しいユーザー認証トークンを Recorder で生成する をオンにします。このオプションをオンにすると、Recorder は、ブラウザが生成した認証データを、チェックボックス下で指定した資格情報を使って置き換えます。このとき、以下の点に注意してください。(1) ユーザー名とパスワードは、記録を開始する前に設定する必要があります。(2) このモードは、Recorder にオーバーヘッドが生じます。(3) ブラウザが資格情報の入力用にプロンプトを表示してもその入力は無視され、Recorder は設定で定義された資格情報で自動的に置き換えます。OK をクリックして（キャンセル ではない）、プロンプトを閉じてください。
親トピック: Web (プロトコル レベル) 設定
関連概念
データ ファイル
Project Attributes


ブラウザ エミュレーション認証のオプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストで Web アイコンをクリックします。
  4. エミュレーション タブをクリックします。 エミュレーション 領域を使用して、現実的な Web ブラウザ エミュレーションのためのオプションを設定します。
  5. 仮想ユーザーごとに Silk Performer のクッキー データベースにクッキーを保存するには、クッキーを受け入れる チェック ボックスをオンにします。
    注: クッキー データベースは永続的なものではなく、負荷テスト が実行されている間のみ有効です。
  6. リダイレクション レスポンスを自動的に解析して、特定のサーバーにリクエストをリダイレクトするには、自動リダイレクションを許可する チェック ボックスをオンにします。 このオプションがオンになっている場合は、認証 ページで入力したユーザー名とパスワードが、必要に応じてそのサーバーへの自動認証に使われます。
    1. このチェック ボックスの右にあるテキスト ボックスに、自動リダイレクションの最大数を入力します。 Silk Performer が自動的にリダイレクション レスポンスを解析して、特定のサーバーにリクエストをリダイレクトします。
  7. サーバーから画像をダウンロードするには、画像を自動的にロードする チェック ボックスをオンにします。 Web アプリケーションの動的な部分をテストしている場合は、このオプションをオフにした方が有益な場合もあります。 画像は、一般に、サーバーよりもネットワークに負荷をかける静的なオブジェクトだからです。 ただし、画像を無視すると、シミュレートしているブラウザ トラフィックの現実性を制限することになります。
  8. Silk Performer でドキュメント キャッシュをエミュレートするには、ドキュメント キャッシュ チェック ボックスをオンにします。 Silk Performer では、頻繁にアクセスされるドキュメントのローカル コピーを保持することによってドキュメント キャッシュをエミュレートし、サーバーのヒット数とネットワークへの接続時間を削減することができます。 詳細については、『The BDL Function Reference』(英語) の WebSetDocumentCache 関数を参照してください。
  9. 仮想ユーザーが最後にページを表示して以来、そのページが Web サーバー上で変更されたかどうかをセッションごとに確認するには、セッションごとに 1 回 オプション ボタンをクリックします。 セッションという用語には、Web ブラウザを起動して、Web サーフィンを行い、Web ブラウザを閉じるまでのシーケンス全体が含まれます。 Silk Performer のトランザクションとセッションとの相互関係を調整するには、シミュレーション ページにある トランザクションごとにユーザーの動作をシミュレートする チェック ボックスを使用します。 セッションごとに 1 回 は次のように動作します。Web ブラウザを起動するたびに、キャッシュを確認してからリクエストを送信します。 リクエストには、条件付きリクエスト(ドキュメントがキャッシュ内に存在し、そのセッションで初めて要求された場合)、通常リクエスト(ドキュメントがキャッシュ内に存在しない場合)、キャッシュ ヒット(ドキュメントが既にそのセッションで要求されている場合)の 3 種類があります。 仮想ユーザーが最後にページを表示して以来、そのページが Web サーバー上で変更されたかどうかを常にチェックするには、毎回 オプション ボタンをクリックします。 有効期限のあるドキュメントは、有効期限が切れるまでは要求されません。 毎回 オプションは、 ページが再ロードされるたびに、ドキュメントが新しくなっているかどうかを確認するという点で、セッションごとに 1 回 のキャッシングとは少し異なります。 仮想ユーザーが最後にページを表示して以来、そのページが変更されたかどうかを確認しない場合は、しない オプションを選択します。 このオプションを選択すると、ユーザーが既に表示したことのあるページの表示が速くなります。
  10. ドキュメント履歴のサイズ テキスト ボックスに、履歴に保存するページの最大数を入力します。 最大数を超えると、一番古いページが履歴から削除されます。
    注: ページが履歴に保存されている限り、その情報に関連するすべての HTML ドキュメント (リンク、フォーム、埋め込みオブジェクト、フレーム) はメモリ内に保持されます。 ページが履歴から削除されるとすぐに、それらの情報は使用できなくなります。 このため、関連する WebPageLink 呼び出しと WebPageSubmit 呼び出しは失敗します。また、その後で同じ URL へのページレベルの呼び出しを行うと、そのドキュメントはキャッシュ内に見つかりません。
  11. Silk Performer で、各仮想ユーザーに対して DNS 検索メカニズムをエミュレートするには、DNS 検索をエミュレートする チェック ボックスをオンにします。 このオプションをユーザー動作のオプションと一緒に使用すると、仮想ユーザーごとに、DNS サーバーに個別に DNS クエリを送信できます。 詳細については、WebSetOption 関数および WebSetUserBehavior 関数を参照してください。
  12. 設定を保存するには、OK をクリックします。
親トピック: Web (プロトコル レベル) 設定
関連資料
WebSetDocumentCache Function
WebSetOption Function
WebSetUserBehavior Function


ブラウザ記録オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストで Web (プロトコル レベル) アイコンをクリックします。
    注: モバイル Web アプリケーションのテストでは、ブラウザ タブで、代替のユーザー エージェント文字列 (たとえば、iPhone、iPad、Android、Windows Phone、または Blackberry) を選択できます。
  5. 記録 タブをクリックします。
  6. ブラウザ エミュレーション レベル 領域を使用して、テスト スクリプトで使用するために Web トラフィックを記録する際のレベルを指定します。
    • ブラウザ レベルで Web トラフィックを記録するには ページ レベルの Web API (HTML / HTTP) オプション ボタンをクリックします。このオプションを選択すると、Silk Performer Recorder は、ページ レベルの Web API で提供されている関数を呼び出すスクリプトを生成します。
    • ブラウザ レベルで Web トラフィックを記録するには 低レベルの Web API (HTML / HTTP) オプション ボタンをクリックします。このオプションを選択すると、Recorder は、低レベルの Web API で提供されている関数を呼び出すスクリプトを生成します。
    • TCP/IP レベルで Web トラフィックを記録するには、TCP/IP レベルの API (TCP/IP / HTTP) オプション ボタンをクリックします。このオプションを選択すると、HTTP で送信される専用プロトコルをキャプチャできます。
  7. リスト ボックスから 詳細なコンテキスト管理 レベルを選択します。 詳細なコンテキスト管理を無効にして、個々の設定をカスタマイズしたり、あらかじめ設定されている [Level 1]、[Level 2](デフォルト)、または [Level 3] のいずれかを選択することもできます。

    これらのオプションは、ブラウザのエミュレーション レベルが ページ レベルの Web API (HTML / HTTP) に設定されている場合にのみ有効です。

    • 詳細なコンテキスト管理のレベルを表示したりカスタマイズするには、設定の表示 ボタンをクリックします。
  8. Recorder のページ表記技術を有効にするには、ページを自動的に検出する チェック ボックスをオンにします。 ページ レベルの Web 関数を使用した場合、この機能によって、JavaScript でロードされる埋め込みドキュメントが Web ページに添付されます。低レベル関数を使用した場合、WebUrlBeginPage 関数呼び出しと WebUrlEndPage 関数呼び出しで Web ページをロードするすべてのリクエストがラップされて、自動的にページ タイマが作成され、Web ページのダウンロードがより正確になるように同期されます。
  9. 記録された URL クエリ文字列を Web フォームに変換して、生成されたテスト スクリプトの dclform セクションにそのフォームを含めるには、URL クエリ文字列をフォームに変換する チェック ボックスをオンにします。 URL が変則的な場合にのみ、このオプションを無効にします。
  10. Recorder が、現在のトランザクションの先頭に、Web サーバーから受信する永続クッキーごとに WebCookieSet 関数呼び出しを生成するには、返送ユーザーのシミュレーションのために永続クッキーの記録を有効にする チェック ボックスをオンにします。 スクリプトが実行されると、各 WebCookieSet 関数が、仮想ユーザーのクッキー データベースに永続的に保存されているクッキーをエミュレートします。
    注: WebCookieSet 関数呼び出しがコメントになっている場合は、コメント マークを削除して、この関数呼び出しを有効にする必要があります。
  11. タイマを使用して同時実行ページをカプセル化するには、タイマを使用して同時実行ページをカプセル化する チェック ボックスをオンにします。 通常、ページ レベルの Web 関数や、WebUrlBeginPage 関数の呼び出しに含まれるページ タイマはスクリプトに記述されません。代わりに、MeasureStart 関数と MeasureStop 関数がタイミングに基づいて自動的に挿入されます。ブラウザのアイドル期間が、記録された最小思考時間を超えなければ、一連のブラウザ アクティビティは「同時」であると見なされます。
  12. 記録したい追加 HTTP ヘッダー(カスタム HTTP クライアントによって生成されるヘッダーなど)を指定するには、追加 HTTP ヘッダーを記録する 領域を使用します。
  13. 追加 ボタンをクリックして、記録したい追加 HTTP ヘッダー(カスタム HTTP クライアントによって生成されるヘッダーなど)の名前を追加します。この機能を使用するには、記録するヘッダー名を正確に知っておく必要があります。HTTP ヘッダー ダイアログ ボックスが開きます。
    1. リストに追加するヘッダーの名前を入力するか、またはリスト ボックスから名前を選択します。
    2. OK をクリックします。
  14. 選択した HTTP ヘッダーの名前を編集するには、編集 ボタンをクリックします。HTTP ヘッダー ダイアログが表示されます。
    1. 必要に応じてヘッダー名を編集します。
    2. OK をクリックします。
  15. 選択した追加 HTTP ヘッダーをリストから削除するには、削除 ボタンをクリックします。
    1. はい をクリックして、削除を確定します。
  16. OK をクリックして、設定を保存します。
親トピック: Web (プロトコル レベル) 設定


検証オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストで Web アイコンをクリックします。
  5. 検証 タブをクリックします。 キャプチャした Web トラフィックに基づいてスクリプトを記録する際に、検証関数を生成するためのオプションを指定するには、記録 領域を使用します。
  6. Recorder で自動的にWeb ページごとにタイトル検証関数 (WebVerifyHtmlTitle) を生成させるには、タイトル検証を記録する チェック ボックスをオンにします。
  7. Recorder で自動的にレスポンス検証ダイジェスト関数 (WebVerifyDataDigest) を生成させるには、ダイジェスト検証を記録する チェック ボックスをオンにします。 検証関数には以下の種類があります。
    • Web サーバーから HTTP レスポンス メッセージとして受信したすべての文字をダイジェストに含めるには、すべての文字 オプション ボタンをクリックします。
    • Web サーバーから HTTP レスポンス メッセージとして受信した印刷可能な文字のみをダイジェストに含めるには、印刷可能な文字 オプション ボタンをクリックします。
    • Web サーバーから HTTP レスポンス メッセージとして受信した英数字のみをダイジェストに含めるには、英数字 オプション ボタンをクリックします。
    • レスポンス検証ダイジェストの生成対象にする HTTP レスポンス コンテンツ タイプをすべて列挙するには、コンテンツ タイプのデータを検証する 領域を使用します。
  8. 追加 ボタンをクリックして、レスポンス検証に使用する新しい HTTP レスポンス コンテンツ タイプを追加します。レスポンス コンテンツ タイプ ダイアログ ボックスが開きます。
    1. リストに追加する新しいコンテンツ タイプの名前を入力するか、またはリスト ボックスから選択します。
    2. OK をクリックします。
  9. 現在選択されている HTTP レスポンス コンテンツ タイプを編集するには、編集 ボタンをクリックします。レスポンス コンテンツ タイプ ダイアログ ボックスが開きます。
    1. 現在選択されている HTTP レスポンス コンテンツ タイプを編集します。
    2. OK をクリックします。
  10. 現在選択されている HTTP レスポンス コンテンツ タイプをリストから削除するには、削除 ボタンをクリックします。
    1. はい をクリックして、削除を確定します。
  11. 左側のショートカット リストから 再生 ボタンをクリックします。 再生カテゴリが表示されます。
  12. Silk Performer Recorder でキャプチャされた Web トラフィックに基づいてスクリプトを再生する際に、HTML および XML ドキュメントの検証を有効にするには、HTML / XML 領域を使用します。Silk Performer を利用して HTML ドキュメントのタイトルを検証するには、タイトル検証 チェック ボックスをオンにします。

    検証が失敗した場合は、オペレーション(指定された深刻度 ([エラー]、[警告]、[情報]、または [カスタム]) によって異なる) が実行されます。ここでの設定は、ページ レベルの Web API および低レベルの Web API (WebSetVerificationEx) の両方に有効です。

    このオプションが選択されている場合、BDL スクリプト内で WebVerifyHtmlTitle 関数が実行されます。

  13. Silk Performer を利用して、指定されたテキストを含む HTML ドキュメント内のテーブルを検証するには、テーブル検証 チェック ボックスをオンにします。 検証が失敗した場合は、オペレーション(指定された深刻度 ([エラー]、[警告]、[情報]、または [カスタム]) によって異なる) が実行されます。ここでの設定は、ページ レベルの Web API および低レベルの Web API (WebSetVerificationEx) の両方に有効です。 このオプションによって、BDL スクリプト内で WebVerifyTable 関数が実行されます。
  14. サーバー レスポンスの HTML コンテンツを検証するには、ダイジェスト検証 許容度レベル チェック ボックスをオンにします。

    TrueLog Explorer を使用して、WebVerifyHtmlDigest 関数呼び出しを生成します。

    HTML ダイジェストを生成するために TrueLog Explorer が使用したサーバー レスポンスと、再生中に受信したレスポンス間に生じる可能性がある、文字頻度の差の最大値をバイト数で入力します。差のバイト数がこの制限を超えた場合は、オペレーション(指定された深刻度 ([エラー]、[警告]、[情報]、または [カスタム]) によって異なる) が実行されます。

  15. Silk Performer を利用して、HTML ドキュメントが、指定のテキストを含んでいるかどうかを検証するには、HTML 検証 チェック ボックスをオンにします。

    検証が失敗した場合は、オペレーション(指定された深刻度 ([エラー]、[警告]、[情報]、または [カスタム]) によって異なる) が実行されます。ここでの設定は、ページ レベルの Web API および低レベルの Web API の両方に有効です。

    このオプションが選択されている場合、BDL スクリプト内で WebVerifyHTML 関数および WebVerifyHTMLBound 関数が実行されます。

  16. テスト中に受信した HTML ドキュメント内のリンクの有効性を確認するには、リンク検査 チェック ボックスをオンにします。 受信時に HTML ドキュメントが解析されて、リンクが有効かどうか確認するために追加リクエストが送信されます。リンクで指定されたターゲットが無効の場合は、エラー メッセージが生成されます。この機能は、ページ レベルの Web API でのみ利用できます。
  17. Silk Performer を利用して、XML ドキュメントが、指定の値または属性を含んでいるかどうかを検証するには、XML 検証 チェック ボックスをオンにします。

    検証が失敗した場合は、オペレーション(指定された深刻度 ([エラー]、[警告]、[情報]、または [カスタム]) によって異なる) が実行されます。ここでの設定は、ページ レベルの Web API および低レベルの Web API の両方に有効です。

    このオプションが選択されている場合、BDL スクリプト内で WebXmlVerifyNodeValue 関数および WebXmlVerifyNodeAttribute 関数が実行されます。

  18. Recorder でキャプチャした Web トラフィックに基づいてスクリプトを再生する際に、HTTP レスポンス検証のオプションを指定するには、データ 領域を使用します。Silk Performer を利用して、サーバーから受信したそのままのデータが、指定のデータ (たとえば、特定のコードを含む HTML ソース コード) を含んでいるかどうかを検証するには、データ検証 オプションを選択します。

    検証が失敗した場合は、オペレーション(指定された深刻度 ([エラー]、[警告]、[情報]、または [カスタム]) によって異なる) が実行されます。ここでの設定は、ページ レベルの Web API および低レベルの Web API の両方に有効です。

    このオプションが選択されている場合、BDL スクリプト内で WebVerifyData 関数および WebVerifyDataBound 関数が実行されます。

  19. Silk Performer を利用して、テスト中にサーバー レスポンス データを検証するには、ダイジェスト検証 許容度レベル チェック ボックスをオンにします。
    注: Recorder によって、検証に必要なダイジェストが生成されます。

    右側のフィールドには、記録中にサーバーから受信したレスポンス メッセージと、再生中に受信したレスポンス メッセージ間で生じる可能性のある文字頻度の差の最大値をバイト数で入力します。差のバイト数がこの上限を越えた場合、Silk Performer はエラーを報告します。Recorder は、コンテンツ タイプのデータを検証する リストに含まれているコンテンツ タイプに対してのみダイジェストを作成します。

  20. OK をクリックして、設定を保存します。
親トピック: Web (プロトコル レベル) 設定


HTTP ボディ変換オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで Web アイコンをクリックします。
  4. 変換 タブをクリックします。
    注: 変換 タブが表示されていない場合は、ダイアログの右上隅にある矢印ボタンをクリックして、使用可能なタブをスクロールします。
  5. タイプ リスト ボックスから、変換タイプを選択します。
  6. 必要に応じて、変換タイプの追加パラメータを入力します。
  7. 変換を HTTP リクエスト ボディに適用するか (HTTP リクエストを変換する)、HTTP レスポンス ボディに適用するか (HTTP レスポンスを変換する)、あるいはその両方に適用するかを、これらのチェック ボックスを使って指定します。
  8. さらに、エンコードされた HTTP レスポンス ボディのログを記録する場合は、それぞれの エンコード済みを記録する チェック ボックスをオンにします。
  9. 設定を保存するには、OK をクリックします。
親トピック: Web (プロトコル レベル) 設定


カスタム コンテンツ タイプおよびエンコーディングの変換

概要

デフォルトでは、HTTP ヘッダー Content-Type または Content-Encoding が以下の値に設定されている HTTP 要求と応答では、変換が有効になっています。
  • Flex/AMF3 (Adobe、BlazeDS、GraniteDS)： Content-Type を次に設定： "application/x-amf"
  • Java over HTTP： Content-Type を次に設定： "application/octet-stream" または "application/x-java-serialized-object"
  • Microsoft Silverlight： Content-Type を次に設定： "application/soap+msbin1" または "application/msbin1"
  • GZIP POST Data： Content-Encoding を次に設定： gzip

異なる HTTP コンテンツ タイプまたはコンテンツのエンコーディング ヘッダーを使用してデータを変換する必要がある場合は、追加パラメータ フィールドの 設定 > アクティブ プロファイル > Web (プロトコル レベル) > 変換 で、プロトコル設定をカスタマイズできます。

再生中のカスタム変換を有効にする

  1. 設定 > アクティブ プロファイル > Web (プロトコル レベル) > 変換 を選択します。
  2. 追加パラメータ フィールドに、AdditionalContentTypes=application/<myApp1>;application/<myApp2> を入力します。myApp1 および myApp1 は、テスト対象アプリケーションのカスタム コンテンツ タイプとなります。

記録中のカスタム変換を有効にする

注: これらのステップは、Content-Encoding のカスタマイズには必要ありません。
  1. 設定 > アクティブ プロファイル > Web (プロトコル レベル) > 変換 を選択します。
  2. 追加パラメータ フィールドに、AdditionalContentTypes=application/<myApp1>;application/<myApp2> を入力します。myApp1 および myApp1 は、テスト中のアプリケーションのカスタム コンテンツタイプとなります。
  3. ファイル エクスプローラを使用して、現在のプロジェクト ディレクトリで Documents フォルダを開きます (<my documents>\Silk Performer21.0\Projects\<現在のプロジェクト>\Documents)。
  4. このフォルダに記録ルール ファイル (xrl) が含まれている場合は、テキスト エディタで開きます。
  5. 記録ルール ファイルで、コンテンツタイプ を検索して、使用するカスタム コンテンツタイプ で既存のエントリを複製します。例：
    <CompareData>
  <ApplyTo>Http.Final.Response.Header.Content-Type</ApplyTo>
  <Data>application/x-amf</Data>
</CompareData>

<Or>
  <CompareData>
    <ApplyTo>Http.Final.Response.Header.Content-Type</ApplyTo>
    <Data>application/x-amf</Data>
  </CompareData>
  <CompareData>
    <ApplyTo>Http.Final.Response.Header.Content-Type</ApplyTo>
    <Data>application/myApp1</Data>
  </CompareData>
  <CompareData>
    <ApplyTo>Http.Final.Response.Header.Content-Type</ApplyTo>
    <Data>application/myApp2</Data>
  </CompareData>
</Or>
    注: <CompareData> 要素が <Or> 要素でカプセル化されていない場合は、これを追加する必要があります。
親トピック: Web (プロトコル レベル) 設定
関連概念
Microsoft Silverlight のサポート
Java over HTTP プロジェクトのセットアップとテスト
Flex/AMF3 プロジェクトのセットアップとテスト
関連タスク
GZIP POST データのカスタマイズを有効にする


端末クライアント オプションを設定する

注: Silk Performer には、端末クライアント テスト用アプリケーション (IBM メインフレーム アプリケーションおよび VT 100+ アプリケーション) の負荷テストの過程をたどるチュートリアルがあります。 このチュートリアルは、スタート > すべてのプログラム > Silk > Silk Performer 21.0 > ドキュメント > チュートリアル > Miscellaneous Tutorials から利用できます。
  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストから 端末クライアント アイコンをクリックします。
  5. Telnet タブをクリックします。
  6. Telnet の設定 領域で、次の Telnet 検出モードのいずれかを指定します。
    • 常に Telnet-Mode と想定する オプション ボタンをクリックすると、各接続が Telnet 接続であることを想定するようレコーダに指示します。 このオプションは、トラブルシューティングの目的でのみ使用します。
    • Telnet-Mode を自動検出する オプション ボタンをクリックすると、新しい接続それぞれで Telnet を自動的に検出するようレコーダに指示します (デフォルト)。
    • Telnet-Mode と想定しない オプション ボタンをクリックすると、Telnet 接続である接続はないと想定するようレコーダに指示します。 このオプションは、トラブルシューティングの目的でのみ使用します。
  7. コマンド プロンプト文字列 テキスト ボックスには、コマンド プロンプト文字列を指定します。可能なところでは常に、レコーダがその文字列を使用して WebTcpipRecvPacketsUntilData 関数をスクリプトします。 この文字列を使用すると、記録されるスクリプトは動的コンテンツに対してより効率的になります。
  8. 端末のプロパティ セクションでは、ログ レベル リスト ボックスから次の項目のいずれかを選択します。
    • なし
    • エラー
    • 通常
    • デバッグ
  9. テストを行う特定の端末タイプが 端末タイプ リスト ボックスに表示されていることを確認します。 プロジェクトのアプリケーションの種類を選択すると、この設定は自動的に構成されます。 正しく指定されると、レコーダは該当する端末タイプの初期化関数のスクリプトを作成し、TrueLog の画面を表示します。
  10. 設定文字列 テキスト ボックスでは、ターミナル エミュレータをカスタム構成文字列で初期化します。 利用可能なオプションについては、ターミナル エミュレータのドキュメントを参照してください。
  11. デフォルト画面 の次の値を指定して、端末画面のデフォルト表示をレコーダに指示します。
    • 行 テキスト ボックスには、端末画面の高さを入力します。 値を空にすると、Silk Performer によりセッション初期化中に高さが検出されます。
    • 列 テキスト ボックスには、端末画面の幅を入力します。 値を空にすると、Silk Performer によりセッション初期化中に幅が検出されます。
    • カラー チェック ボックスをオンにして、端末画面でデフォルトの色を使用するように指定します。
    入力した値により、Silk Performer が検出したデフォルトは無効になります。 ターミナル アプリケーションでカスタム画面サイズを使用する場合は、スクリプトが正常に再生されるように、スクリプトを記録する前にこれらの値を設定するようにしてください。
  12. ホスト コード ページ テキスト ボックスには、サーバーが使用するコード ページを指定します。 コード ページはさまざまなデータ変換に使用されます。使用可能なコード ページのすべてはシステムにインストール済みです。 必要なコード ページが一覧にない場合は、インストールできます。 選択したコード ページは、各エージェント コンピュータでも利用できるようにしてください。 インストールされているすべてのコード ページを確認するには、スタート > コントロール パネル > 地域と言語のオプション > 詳細設定 に移動します。 リストされ、チェックマークによって有効になっているホスト コード ページのみ利用可能です。
  13. 詳細 タブをクリックし、基本機能を記録する チェック ボックスをオンにすると、レコーダは WebTcpipScreenRecvPacketsUntilCursor や WebTelnetScreenRecvRecordsUntilStatus など、同期化される受信関数のスクリプトを作成しません。 このオプションが有効になっていると、スクリプト化される受信関数は、表示された画面の内容には依存しません。 このオプションは、端末タイプが指定されていない場合には、デフォルトで有効になっています。
  14. 設定を保存するには、OK をクリックします。
親トピック: プロジェクトのプロファイル設定


GUI レベル テスト オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから GUI レベル テスト アイコンをクリックします。 セッション ページで、セッションの設定 領域を使用して、コンソール セッションとリモート デスクトップ セッションとの間の接続を構成します。
  4. コンソールで TryScript を実行する チェック ボックスをオンにすると、Silk Performer はコンソール アプリケーション上で TryScript を実行します。
    このオプションが有効になっていると、テスト中に Silk Performer が何を行うのかをユーザーが見ることができますが、Silk Test がコンソールを使用するので、ユーザーがコンピュータ上でできる作業が制限されます。無効になっている場合は、TryScript はリモート デスクトップ セッションに接続して Silk Test を実行します。
  5. すべてのエージェントに対する端末サーバー ライセンスを持っていない場合や、エージェントが Windows Home や Windows Professional 版で実行されている場合には、エージェントでのコンソール セッションの使用を許可する チェック ボックスをオンにします。 Silk Performer は、端末サービス セッションへの接続に失敗するか、ユーザー資格情報が提供されていない場合には、このオプションのみを使用します。
    注: このオプションがオンになっていると、各エージェント (端末サーバー ライセンスを持たないエージェントおよび Windows Home/Professional システム) で開始できる仮想ユーザーは 1 つだけです。
  6. 接続タイムアウト (秒) を定義して、Silk Performer がリモート デスクトップとの接続を確立するまでの待ち時間を指定します。 タイムアウトにしない場合は、この設定を 0 にします。
  7. 色の解像度 の設定を選択します。 色の解像度 設定を使用すると、仮想ユーザーが Silk Test でアプリケーションを操作するために使用するターミナル サーバーのセッションの色の解像度を指定できます。8 ビット (256 色) から 32 ビット (True Color) まで選択できます。
    注: BDL 関数 StInitSession を使用して定義された色の解像度は、ここで構成したプロファイル設定より優先されます。オプションの uColorDepth パラメータが省略されている場合は、プロファイル設定が使用されます。

    サーバーにより、色の解像度の最大値が制限されることがあります。クライアントでは、サーバーでサポートされている色の解像度より高い設定にすることはできません。サーバー版の色の解像度の制限については、ターミナル サービス構成のドキュメントを参照してください。

  8. ユーザー名/パスワード の設定に入力すると、ログイン資格情報セットを 1 つしか必要としない場合、自動ログインが可能になります。 これらの資格情報は、StInitSession 関数に自動的にロードされます。これらの資格情報は、たとえば、プロジェクト属性を使用して StInitSession 関数にパラメータを渡すなど、スクリプトの設定によって無効になる場合があります。
  9. 実行 ページの 実行の設定 領域では、スクリプトとランタイムの設定を構成することができます。Silk Test のエラーをログに記録する チェック ボックスをオンにすると、Silk Test から返されるエラーと警告が「情報」警告としてログに記録されます (このオプションはデフォルトで有効になっています)。
  10. 次の場合 TrueLog ファイルを生成する リスト ボックスから、リモート デスクトップ セッションの TruleLog 設定を選択します。
    • [なし] (デフォルト) を選択すると、TrueLog には書き出しません。
    • [エラー時] を選択すると、エラーが発生した場合にのみ TrueLog に書き出します。
    • [カスタム] を選択すると、カスタム設定に基づいて TrueLog に書き出します。
    [カスタム] TrueLog 設定を選択すると、TrueLog 設定を Silk Test オプション ファイルから読み取りますが、StSetOption 関数で設定することもできます。
    注: 次の場合 TrueLog ファイルを生成する リスト ボックスから [エラー時] や [カスタム] を選択しても、Silk Test が TrueLog ファイルを書き出すのは、Silk Performer の設定でも TrueLog を書くよう指定されている場合に限られます。このように指定するには、Silk Performer のツールバーにある TrueLog ファイルの生成 ボタンまたは TrueLog On Error ファイルの生成 ボタンをクリックします。
  11. スクリーンショット モード を選択します。
    • なし：スクリーンをキャプチャしません。
    • アクティブ ウィンドウ：テスト アプリケーションのアクティブ ウィンドウをキャプチャします。
    • アクティブ アプリケーション：テスト アプリケーションとテスト アプリケーション内のすべてのウィンドウをキャプチャします。
    • デスクトップ：デスクトップ領域全体をキャプチャします。
    注: このリスト ボックスは、UFT Developer (Silk4J) および UFT Developer (Silk4NET) プロジェクトに対してのみ有効になります。TrueLog ファイルに対して使用されるスクリーンショット モードを設定します。この設定は、成功した再生ステップに対してのみ適用されます。再生ステップが失敗した場合には、デスクトップ領域全体がキャプチャされます。
  12. 実行タイムアウト (秒) を指定して、ランタイムがテストケースの実行を待つ時間を指定します。タイムアウトにしない場合は、この設定を 0 にします。
  13. 結果履歴サイズ (デフォルトでは 9 を設定) では、テストケースの結果を Silk Test はいくつ .res ファイルに保存できるかを指定します。
    注: 新規テストを開始すると、.res ファイル内の結果はリセットされます。
  14. Silk Test Classic の オプション ファイル フィールドで、Silk Test Classic オプション ファイルを検索し、選択します。 オプション ファイルの詳細については、Silk Test のヘルプを参照してください。
    注: このフィールドは、Silk Test Classic プロジェクトに対してのみ有効になります。
  15. 設定を保存するには、OK をクリックします。
注: GUI レベルのモニタがターミナル サービスのインストールされている Silk Test エージェントに配置されると、Silk Performer はターミナル サーバーのセッション作成に使用される RDP ポートを自動的に検索します。
親トピック: プロジェクトのプロファイル設定
関連概念
GUI レベルのテストのユーザー資格情報
GUI レベルのテストのサポート


Oracle Forms オプションを設定する

Oracle Forms 固有の設定を使用すると、再生中に Silk Performer が Oracle Forms クライアントとやり取りする方法を変更できます。

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから Oracle Forms アイコンをクリックします。
  4. 全般 ページで、Oracle Forms サーバーが受け付ける接続タイプを反映する 接続モード 設定を選択します。 Oracle Forms クライアントは、Socket、HTTP、または HTTPS を経由してサーバーと通信できます。
    注: この設定は、BDL 関数呼び出し OraFormsSetConnectMode(connectMode) により上書きできます。
    • Oracle Forms サーバーをソケット モード用にセットアップする場合、ソケット モード オプション ボタンをクリックします。
    • HTTP 接続用に構成されている Oracle Forms サーバーの場合、HTTP モード オプション ボタンをクリックします。
    • セキュアな HTTP 接続用に構成されている Oracle Forms サーバーの場合、HTTPS モード オプション ボタンをクリックします。
  5. 接続タイムアウト テキスト ボックスには、例外をレポートする前に、エミュレートされるクライアントがサーバーとの通信の確立を試行する長さを指定するため、タイムアウト時間 (秒) を指定します。
  6. その他のランタイム設定を構成するために、オプションで、仮想ユーザーからサーバーにハートビート メッセージを指定の間隔で送信させることができます。これは、長い思考時間の期間中など、Oracle Forms クライアントが長時間サーバーと通信していない場合などに、役に立ちます。ハートビートを有効にする チェック ボックスをオンにして、周期 フィールドにその間隔 (秒) を入力します。
  7. アプリケーション タイマを自動的に待機する チェック ボックスをオンにすると、各関数呼び出しの後、アプリケーション タイマの期限切れを待つよう再生エンジンに指示します。
  8. アプリケーション タイマとウィンドウ タイムアウト テキスト ボックスには、アプリケーション タイマとウィンドウ表示の期限切れの最大待ち時間を指定します。時間設定 (秒) を入力します。 再生エンジンは各関数呼び出しの後、タイマの期限切れを待ちます。関数 OraFormsWaitForTimer を使用して、アプリケーションにタイマの期限切れを待たせることができます。最大待ち時間は、この設定で指定した時間です。関数 OraFormsWaitForWindow を使用して、アプリケーションにウィンドウの表示を待たせることができます。この設定は、ウィンドウが表示されるまでの最大待ち時間を指定します。
  9. Oracle Forms サーバーでは、特定のクライアントを解放できます。Oracle Forms 設定を指定して、Oracle Forms クライアント バージョンを指定します。 Oracle Forms クライアントは、Oracle Forms サーバーに接続するときに必要なバージョンを送信します。テスト アプリケーションがさまざまなサーバー バージョンで配置されている場合、複数のプロファイルを作成して、この設定を変更します。
    注: この設定は、BDL 関数呼び出し OraFormsSetInt("INITAL_VERSION", theVersion) により上書きできます。
  10. ログ タブをクリックします。 ここでは、再生中に値をログに記録する追加プロパティを指定できます。
  11. ログ レベル リスト ボックスから、仮想ユーザー ログのログ レベルを選択します。
    • なし - TrueLog は生成されますが、Oracle メッセージは記録されず、ログ ファイルのコントロールに関する詳細情報は書き込まれません。
    • エラー - なし ログ レベルに加え、再生中に発生したエラーが記録されます。
    • 通常 - エラー ログ レベルに加え、Oracle メッセージが TrueLog およびログ ファイルに記録されます。
    • デバッグ - 通常 ログ レベルに加え、TrueLog Explorer の 受信本文 および 送信本文 タブなどに、コントロール メッセージに関する詳細情報が記録されます。この情報は、スクリプトの試行の実行と比較する場合に、ユーザーのスクリプトをカスタマイズし、デバッグするのに役に立ちます。再生中に問題を検出し、分析のためにログ ファイルを Micro Focus SupportLine に送信する必要がある場合にも、使用する必要があります。
    アプリケーションのコントロールごとに TrueLog で記録される追加のプロパティも、定義できます。このようなプロパティは、その内部名を使用して定義する必要がある Oracle Forms 内部プロパティです。ほとんどの場合、デフォルトのプロパティ (名前、値) がコントロールごとに記録されるため、この機能を使用する必要はありません。OraForms.bdh ファイルには、すべての内部プロパティの完全な一覧が含まれます。そのほとんどはコントロールによっては使用されませんので、定義する場合でも通常は無視されます。
  12. 追加プロパティ テキスト ボックスでは、仮想ユーザーが値をログに記録するその他のプロパティを指定します。
    • 追加 をクリックすると 追加プロパティ ダイアログが開くので、再生中に値をログに記録するプロパティを追加します。
    • 編集 をクリックすると 追加プロパティ ダイアログが開くので、選択したプロパティを編集します。
    • 削除 をクリックすると、選択したプロパティを削除します。削除確認ダイアログで はい をクリックします。それ以降、このプロパティの値はログに記録しません。
  13. 測定 タブをクリックします。 ここでは、カスタムな測定レベルを指定します。デフォルトでは、テスト実行中に使用可能なパフォーマンス指標がすべて収集されます。
  14. すべてのコントロールの、すべてのタイマとカウンタを有効にする チェック ボックスをオンにすると、再生中、コントロールでのすべてのアクションについて、すべてのタイマとカウンタを有効にします。 または、すべてのコントロールの、すべてのタイマとカウンタを有効にする チェック ボックスをオフにし、特定のコントロールを コントロール リスト ボックスから選択してから、そのコントロールに適用する特定のタイマ/カウンタ タイプを次の中から選択します。
    • [タイマを有効にする] - 選択したコントロールでのアクション完了にかかる時間を測定します。
    • [ラウンドトリップをカウント] - 選択したコントロールでの各アクションのラウンドトリップ数を数えます。
    • [バイト数をカウント] - 選択したコントロールでの各アクションで送受信したバイト数を数えます。
    • [メッセージをカウント] - 選択したコントロールでの各アクションで送受信したメッセージ数を数えます。
    注: あるいは、すべてのコントロールに適用 ボタンをクリックして、タイマ/カウンタ設定をすべてのコントロールに適用します。
  15. OK をクリックして、設定を保存します。
親トピック: プロジェクトのプロファイル設定
親トピック: 再生の概念


SAPGUI オプションを設定する

Silk Performer には、SAPGUI アプリケーションのテストを順番に説明するチュートリアルがあります。 チュートリアルは、 スタート > すべてのプログラム > Silk > Silk Performer 21.0 > Documentation > Tutorials > SAP から利用できます。

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストから SAPGUI アイコンをクリックします。 全般 ページで、SAP Recorder によるスクリプトの記録、再生方法に関するオプションを定義できます。
  5. SAP システムにログオンするには、いくつかのユーザー操作が必要です。 ログオンを単一機能としてスクリプト化する チェック ボックスをオンにすると、レコーダは必要なログオン アクションのすべてを実行する 1 つの機能のみをスクリプト化します。
  6. 低レベル機能をスクリプト化する チェック ボックスをオンにすると、オブジェクト固有の機能の代わりに、スクリプト化機能の基本セットを使用します。
  7. タイマをスクリプト化する チェック ボックスをオンにすると、タイマを自動的にスクリプト化します。 こうしたタイマは、SAP API 呼び出しの測定に使用されます。
  8. 既存の SAP セッションへ接続する チェック ボックスをオンにすると、レコーダは新しいセッションを作成するのでなく、既存のセッションに接続します。
  9. ウィンドウ タイトルの検証を記録する チェック ボックスをオンにすると、テスト実行中にアクティブ化されたウィンドウ上でタイトルの検証が自動的に行われるのと同じ方法で SapGuiSetActiveWindow 関数を記録します。
  10. 左側のショートカット リストから 再生 ボタンをクリックします。 再生カテゴリが表示されます。
  11. 再生タイムアウト テキスト ボックスで、SAPFewgsrv の自動シャットダウンのタイムアウト (ミリ秒) を指定します (指定しない場合は、テスト実行が終わるときに終了します)。
  12. 単一実行中に SAPGUI を表示する チェック ボックスをオンにすると、テスト実行中に R/3 クライアントを表示します。 GUI 表示は、TryScript 実行のみのオプションです。 この設定は、ベースライン テストと負荷テストでは無視されます。
  13. クライアント側スクリプトを有効にする チェック ボックスをオンにすると、レジストリ経由で SAP のクライアント側スクリプトを有効にします。 このオプションにより、新しいユーザーの開始時にポップアップ ウィンドウを開く警告が無効になります。
  14. 新しい SAP Visual Design を使用する チェック ボックスをオンにすると、SAP クライアント用の SAP Visual Design を有効にします。
  15. ログ タブをクリックして、追加のログ レベルを指定します。
    注: これらの設定は、パフォーマンスとリソースの使用に影響します。
  16. ログ レベル リスト ボックスで、仮想ユーザー ログのログ レベルを次の中から選択します。
    • [無効] - 仮想ユーザー ログを無効にします。
    • [通常] - デフォルトのログ。
    • [デバッグ] - 追加セッション情報やエラーなどの詳細情報をログに記録します。
  17. スクリーンショットをキャプチャする チェック ボックスをオンにすると、アクティブ化されたウィンドウごとにスクリーンショットを生成します。
    注: スクリーンショット キャプチャは、TryScript 実行でのみ有効です。 この設定は、ベースライン テストと負荷テストでは無視されます。
  18. すべてのアクションのスクリーンショットをキャプチャする チェック ボックスをオンにすると、スクリプトによって実行される各アクションをスクリーンショットと一緒にドキュメント化します。
    注: スクリーンショット キャプチャは、TryScript 実行でのみ有効です。 この設定は、ベースライン テストと負荷テストでは無視されます。
  19. コントロールの情報を TrueLog に記録する チェック ボックスをオンにすると、追加のコントロール情報を TrueLog に書き込みます。
  20. 単一実行のコントロールの情報を TrueLog に記録する チェック ボックスをオンにすると、スクリプトの試行と検証テストに限り、追加のコントロール情報を TrueLog に書き込みます。
  21. エラー時のコントロールの情報を記録する チェック ボックスをオンにすると、エラー時の TrueLog へのコントロール情報の書き込みが有効になります。
    注:

    大規模な負荷テストでは、コントロールの情報を TrueLog に記録する をオフにし、エラー時のコントロールの情報を記録する のみをオンにすることをお勧めします。 これらの設定では、各スクリーンのすべての情報が記録されるわけではないので、全体のパフォーマンスが大幅に改善されます。 エラーが発生した場合は、エラーの原因となったノードにコントロールの状態が記録されます。これにより、アクティブ ウィンドウのすべての状態を表示することで、問題のトラブルシューティングを行うことができます。

  22. コントロールを強調表示する チェック ボックスをオンにすると、コントロールはスクリプトがアクセスすると強調表示されます。
  23. 測定 タブを選択して、カスタムな測定レベルを指定します。 デフォルトでは、テスト実行中に使用可能なパフォーマンス指標がすべて収集されます。
  24. すべてのコントロールの、すべてのタイマとカウンタを有効にする チェック ボックスをオンにすると、再生中、コントロールでのすべてのアクションについて、すべてのタイマとカウンタを有効にします。オフにする場合は、特定のコントロールを コントロール リスト ボックスから選択し、そのコントロールに適用する特定のカウンタ タイプを次の中から選択します。
    • [ラウンドトリップをカウント] - コントロールでのアクションのラウンドトリップ数。
    • [レスポンス時間をカウント] - 関数がリクエストしたデータを返すまでにかかる時間。
    • [解釈時間をカウント] - リクエストの解釈にかかる時間。
    • [フラッシュをカウント] - アクションごとのフラッシュ数をカウントします。
    注: あるいは、すべてのコントロールに適用 ボタンをクリックして、カウンタ設定をすべてのコントロールに適用します。
  25. 設定を保存するには、OK をクリックします。
親トピック: プロジェクトのプロファイル設定
親トピック: 記録と再生の概念


Citrix XenApp オプションの構成

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで下までスクロールし、Citrix アイコンをクリックします。 全般 タブが開きます。
  4. 同期タイムアウト テキスト ボックスには、デフォルトの同期タイムアウトをミリ秒で入力します。これは、タイムアウト値を指定しないすべての CitrixWaitForXXX 関数で使用されます。 デフォルト値は、60000 ms です。
  5. ウィンドウの位置を強制する をオンにすると、記録中に取得した座標に対して移動ウィンドウ CitrixWaitForWindowCreation と CitrixWaitForWindowRestore の呼び出しを行います (デフォルトでは有効)。 このチェック ボックスがオフの場合、CitrixWaitForWindowCreation および CitrixWaitForWindowRestore の両方の関数にはパラメータ (bForcePos) があるので、呼び出すごとにこのオプションを有効にすることができます。
  6. トランザクションが終了したら切断する をオンにすると、TInit トランザクションを含めたトランザクションが終了するごとに、Citrix クライアントを切断します (デフォルトでは無効)。
  7. セッションを正常に切断する をオンにすると、Citrix XenApp セッションの接続を解除するときに、ログオフが実行されます (デフォルトでは有効)。
  8. 各ユーザー アクションの前に画面を記録する をオンにすると、各ユーザー アクションの開始時にもスクリーンショットをキャプチャして書き込みます (デフォルトでは有効)。 TrueLog 生成が有効になっている場合は、同期関数それぞれの終了時にスクリーンショットを取って TrueLog に書き出します。

    CitrixWaitForScreen 関数は、画面領域をキャプチャし、記録時にキャプチャしたハッシュ値ではなく指定した条件と一致するか確認します。 このファイルを、後で、検討したり、エラー分析のために記録中にキャプチャしたものと比較することができます。

    関数呼び出し CitrixWaitForScreen が失敗し、画面の同期に失敗したらウィンドウ領域をダンプする がオンになっていると、キャプチャしたスクリーン領域を結果ディレクトリのファイルに書き出します。 タイムアウト期間が終了するときに条件が一致しないと、関数呼び出し CitrixWaitForScreen が失敗することがあります。

  9. RAM ディスクを使用する をオンにすると、イメージの中間ストレージとして、異なるドライブを使用します。
    注: RAM ディスクを使用する をオンにする場合は、リスト ボックスから RAM ディスクの適切なドライブ文字を選択する必要があります。 指定したドライブが RAM ディスクであれば、TrueLog 生成のパフォーマンスが向上します。
  10. シミュレーション タブを選択します。
  11. マウス ボタンが押された状態を維持する時間 フィールドには、仮想ユーザーがマウス ボタンを押した状態でいる必要がある時間を入力します。 デフォルト値は、200 ms です。 関数 CitrixMouseClick および CitrixMouseDblClick は、この値を使用します。
  12. ダブルクリックのクリック間の時間 フィールドには、ダブルクリックの 2 回のクリックの最大間隔を入力します。 デフォルト値は、100 ms です。 関数 CitrixMouseDblClick は、この値を使用します。
  13. マウスの速度 フィールドには、マウスが画面を移動する速度を入力します (ピクセル/秒)。 デフォルト値は、1000 ピクセル です。
  14. 各キーが押された状態を維持する時間 フィールドには、仮想ユーザーがキーボード キーを押した状態でいる必要がある時間を入力します。 デフォルト値は、50 ms です。 関数 CitrixKey および CitrixKeyString は、この値を使用します。
  15. 文字列を入力するときのキーストローク間の時間 フィールドには、個々のキーストロークの間隔を入力します。 デフォルト値は、100 ms です。 関数 CitrixKeyString は、この値を使用します。
  16. キー反復時間 フィールドには、繰り返し機能をシミュレートするときにキーストロークの完了に必要な時間を入力します。 デフォルト値は、50 ms です。 50 ms の値は、1 秒間に 20 キーを表します。
  17. このタブの 思考時間 領域にある 同期に成功した後の遅延 フィールドには、仮想ユーザーが同期成功点を通過した後、非アクティブな状態でいる時間を入力します。 デフォルト値は、1000 ms です。 関数 CitrixWaitForXXX は、この値を使用します。
  18. 各ユーザー アクションの後の遅延 フィールドには、仮想ユーザーがアクション間で非アクティブな状態でいる時間を入力します。 デフォルト値は、100 ms です。
  19. Citrix クライアント タブをクリックして、Citrix クライアント オプションを指定します。
  20. ネットワーク プロトコル ドロップ ボックスから、Citrix サーバーの検索と接続に使用する低レベルのネットワーク プロトコルを選択します。 詳細については、Citrix クライアントのドキュメントを参照してください。
  21. データ圧縮を使用する チェック ボックスをオンにすると、転送データをすべて圧縮します (デフォルトでは有効)。 この機能によって、ファイル サイズは小さくなりますが、多くのプロセッサ リソースが必要になります。
  22. ビットマップにディスク キャッシュを使用する チェック ボックスをオンにすると、ビットマップなどのよく使われるグラフィカルなオブジェクトを、ローカルのディスク キャッシュに保存します (デフォルトでは無効)。
  23. マウスの移動とキーストロークをキューに入れる チェック ボックスをオンにすると、マウスとキーボードの更新をキューに入れます (デフォルトでは無効)。 この機能によって、Citrix クライアントから Citrix XenApp サーバーに送信されるネットワーク パケット数が少なくなります。
  24. SpeedScreen 待機時間の短縮 ドロップ ボックスから、低速のネットワーク接続でのユーザー体験を向上させるために、次の項目のいずれかを選択します。
    • WAN やその他の低速の接続の場合、[オン] を選択します。
    • LAN やその他の高速の接続の場合、[オフ] を選択します。
    • 接続の待機時間に基づいて、待機時間の短縮をオンまたはオフにするには、[自動] を選択します。
  25. 暗号化レベル ドロップ ボックスから、ICA 接続の暗号化レベルを選択します。 Citrix XenApp サーバーは、選択した暗号化レベル以上を使用できるように構成する必要があります。
    注: サーバー デフォルトまたは 基本 以外の暗号化レベルを使用すると、Citrix XenApp サーバーへの自動ログオンができなくなります。
  26. 設定を保存するには、OK をクリックします。
親トピック: プロジェクトのプロファイル設定
親トピック: プロジェクトとシステムの設定


.NET オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから .NET アイコンをクリックします。
  4. Silk Performer Web エンジンを通して HTTP .NET をルーティングする チェック ボックスをオンにすると、.NET テスト ドライバが生成したすべての HTTP/HTTPS トラフィックを Silk Performer Web エンジン経由でルーティングします。
    こうすると、Silk Performer が正確なテストのために提供する、高性能の Web エンジン、モデム シミュレーション、各転送ごとの詳細なタイミング/スループット情報、HTTP/XML TrueLog、および IP なりすましなどの機能を活用できます。 ルーティングされる Web サービス プロキシ クラス テキスト ボックスには、.NET テスト ドライバで使用される .NET Web サービス クライアント クラスが表示されます。 選択されているクラスの HTTP/SOAP トラフィックは、上記の設定に関係なく、Silk Performer の Web エンジンを通してルーティングされます。 この設定は、Silk Performer .NET AddIn からのみ変更できます。
  5. 仮想ユーザー コンテナ プロセスごとに 1 つのアプリケーション ドメイン をクリックすると、1 つの仮想ユーザー プロセス内で実行されているすべての仮想ユーザー間で、1 つの .NET アプリケーション ドメインを共有します。 これにより、.NET 共通言語ランタイムに関する管理オーバーヘッドを最小限に抑えることができますが、すべてのオブジェクトが同じアプリケーション ドメインにロードされるため、ランタイムの問題を引き起こす場合があります。
  6. 仮想ユーザーごとに 1 つのアプリケーション ドメイン をクリックすると、各仮想ユーザーに固有の .NET アプリケーション ドメインが与えられます。 これにより、.NET 共通言語ランタイムの管理オーバーヘッドが増えますが、さまざまな仮想ユーザーからのオブジェクトが相互に干渉し合わないことを保証します。
  7. 設定を保存するには、OK をクリックします。
親トピック: プロジェクトのプロファイル設定


CORBA/IIOP の設定

  • CORBA/IIOP の再生オプションを設定する
    チャンク サイズやフラグメント化など、テストを実行する前に CORBA/IIOP の再生オプションを構成します。
  • CORBA/IIOP の WChar/WString オプションを設定する
    エンコードやコード設定など、CORBA/IIOP の WChar/WString のオプションを構成します。
  • CORBA/IIOP の記録オプションを設定する
    ORB、IDL、プリプロセッサ引数など、CORBA/IIOP の記録オプションを構成します。
親トピック: プロジェクトのプロファイル設定


CORBA/IIOP の再生オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから CORBA/IIOP アイコンをクリックします。
  4. 再生 タブをクリックします。
  5. IIOP 1.2 再生のデフォルト設定を指定するには、IIOP 1.2 領域を使用します。
  6. 値型の最大チャンク サイズ テキスト ボックスに、チャンクとしてエンコードされた値型の 1 つの部分の最大バイト サイズを入力します。 チャンクとしてエンコードされた値型は、さらに小さい部分に分割される値型です。
  7. IIOP リクエストおよびレスポンス メッセージが フラグメント化サイズ テキスト ボックスで設定する長さを超え、メッセージをフラグメント化する場合は、フラグメント化を使用する チェック ボックスをオンにします。
  8. フラグメント化サイズ テキスト ボックスに、チャンクとしてエンコードされる値型のフラグメント化バイト サイズを設定します。 リクエスト メッセージまたはレスポンス メッセージがこのサイズを超えると、フラグメント化を使用してメッセージが送信されます。
  9. 設定を保存するには、OK をクリックします。
親トピック: CORBA/IIOP の設定


CORBA/IIOP の WChar/WString オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから CORBA/IIOP アイコンをクリックします。
  4. WChar/WString タブをクリックします。
  5. ワイド文字コード セットの設定を指定するには、コード セット 領域を使用します。 一般に、コード セットは文字およびワイド文字のエンコード ルールを決定します。 コード セットには、バイト指向と非バイト指向があります (たとえば、ASCII はシングル バイト文字用のバイト指向コード セットです)。 非バイト指向コード セットによって定義されるマルチバイト文字にはバイトの方向 (ビッグ エンディアン、リトル エンディアン) がありますが、バイト指向コード セットにはありません。
  6. Unicode コード セットを使用するには、Unicode チェック ボックスをオンにします。 Unicode は、2 バイト文字用の非バイト指向コード セットです。 Unicode 文字のバイト方向は、IIOP メッセージのバイト順序によって決まります。
  7. WChar のサイズ リスト ボックスで、CORBA ワイド文字 (WChar) のサイズを選択します。
  8. CORBA の WChar と WString にバイト指向コード セットを使用する場合は、バイト指向 オプションをクリックします。 または、CORBA の WChar と WString に非バイト指向コード セットを使用する場合は、非バイト指向 オプションをクリックします。 このオプションを選択した場合は、スクリプトのバイト順序 リスト ボックスを使用して、非バイト指向の CORBA WChar/WString 表現の BDL スクリプトでのバイト方向を選択します。 バイトの方向は、リトルエンディアン (最下位ビットが先) または ビッグエンディアン (最上位ビットが先) のどちらかです。
    注: IIOP 1.2 の設定を指定するには、IIOP 1.2 領域を使用します。 IIOP 1.2 での WChar および WString のエンコードは、以前の IIOP のバージョンでのエンコードとは異なります。 ただし、すべての ORB が IIOP 1.2 の正しいエンコードを使用しているわけではありません。
  9. ORB が CORBA 準拠の WChar/WString エンコードを IIOP 1.2 で使用している場合は、CORBA 準拠 チェック ボックスをオンにします。
  10. IIOP 1.2 より前のエンコードを使用する場合は、WChar 領域で 長さをエンコードしない チェック ボックスをオンにします。 CORBA 準拠の IIOP 1.2 エンコードの WChar は、サイズを表すために長さの指示を使用します。
  11. ORB が NULL で終了する WString を使用する場合は、WString 領域で NULL で終了する チェック ボックスをオンにします。 CORBA 準拠の IIOP 1.2 エンコードの WString は、NULL で終了しません。
  12. ORB が WString の長さとして文字数を使用する場合は、Chars オプションをクリックします。 CORBA 準拠の IIOP 1.2 エンコードの WString は、文字列の長さをバイト数 (文字数) で指定します。 または、ORB が WString の長さとして WChar の数を使用する場合は、WChars オプションをクリックします。
  13. 設定を保存するには、OK をクリックします。
親トピック: CORBA/IIOP の設定


CORBA/IIOP の記録オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストから CORBA/IIOP アイコンをクリックします。
  5. 記録 タブをクリックします。
  6. 記録されている IIOP トラフィックを基にテスト スクリプトを生成するときに ORB 固有の機能を考慮するかどうかを指定するには、固有 ORB 機能のサポート 領域を使用します。 適切なオプションを選択すると、生成されるスクリプトが読みやすくなります。
  7. IIOP トラフィックの記録オプションを選択します。
    • Orbix 固有の機能の場合は Orbix
    • OrbixWeb 固有の機能の場合は OrbixWeb
    • VisiBroker for C++ の機能の場合は VisiBroker C++
    • VisiBroker for Java の機能の場合は VisiBroker Java
    • BEA Millennium for C++ の機能の場合は M3 C++
    • BEA Millennium for Java の機能の場合は M3 Java
  8. IDL ファイルの CORBA バージョン リスト ボックスから、テスト対象アプリケーションの CORBA のバージョンを選択します。 アプリケーションが CORBA のバージョン 2.0 から 2.2 を使用する場合は、リスト ボックスから 2.0 を選択します。 アプリケーションが CORBA 2.3 または CORBA 3.0 を使用する場合は、リスト ボックスから 3.0 を選択します。
  9. プリプロセッサの引数 テキスト ボックスに、IDF ファイル パーサーのプリプロセッサに渡す引数の数を入力します。 引数は、たとえば、インクルード ディレクトリを指定したり、定義済みのマクロを実行したりするために使用します。
  10. ロードする IDL ファイル リストには、現在 Silk Performer Recorder が上位レベル テスト スクリプトの生成に使用しているすべての IDL ファイルが表示されます。 対応するインターフェイスが IDL ファイルで定義されている場合は常に、Recorder は、テスト スクリプトで CORBA 操作の呼び出しのパラメータを指定するために、型に依存する関数を生成します。
  11. 設定を保存するには、OK をクリックします。
親トピック: CORBA/IIOP の設定


Java の設定

クラスパス、バージョン、JVM、JIT コンパイラ、ログのオプションなど、Java 設定を構成します。

  • Java バージョンとクラスパス設定を構成する
    クラスパスの設定など、Java オプションの全般的な設定を構成します。
  • 詳細な Java オプションを設定する
    JVM や JIT コンパイラ設定など、Java アプリケーションをテストする前に Java オプションの詳細設定を構成します。
  • Java ログ オプションを設定する
    ログに記録するプロパティやログ レベルなど、Java ログ オプションを構成します。
親トピック: プロジェクトのプロファイル設定
関連概念
Java の設定


詳細な Java オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから Java アイコンをクリックします。
  4. 詳細 タブをクリックします。 詳細 領域を使用して、Java 仮想マシンの詳細オプションを設定します。
  5. コマンド ライン オプション テキスト ボックスに、Java 仮想マシンに渡すコマンド ライン オプションを入力します。
  6. JIT コンパイラを無効にする チェック ボックスをオンにすると、Java 仮想マシンの Just In Time (JIT) コンパイラが無効になります。
  7. JVM dll テキスト ボックスには、使用する Java 仮想マシンを実装するダイナミック リンク ライブラリ (DLL) の名前を入力します。 必要であれば、参照 (...) ボタンをクリックして使用するダイナミック リンク ライブラリを検索して選択します。
  8. JVM を検査 をクリックして、Java 仮想マシンの構成設定を検証します。
  9. OK をクリックします。
親トピック: Java の設定


Java ログ オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストから Java アイコンをクリックします。
  5. ログ タブをクリックします。 記録の設定 領域を使用して、記録中に値をログに記録する追加プロパティを指定します。
  6. ログ レベル リスト ボックスから、仮想ユーザー ログのログ レベルを設定します。
    注: ログを無効にするには、ログ レベルを [なし] に設定します。
    次のログ レベルがあります。
    • [なし] – 追加ログは書き込みません。
    • [エラー] – 再生中に発生したエラーのみをログに記録します。
    • [通常] – Java メッセージをログに記録します。
    • [デバッグ] – 追加情報をログに記録します (イベントなど)。
  7. 設定を保存するには、OK をクリックします。
親トピック: Java の設定


データベースの設定

SQL、ODBC、記録のオプションなど、データベース設定を構成します。

  • SQLSTATE 固有のエラー処理を設定する
    シミュレーション例外とエラー コードに関係のある SQLSTATE 固有のエラー処理オプションを構成します。
  • ODBC 固有のエラー処理を設定する
    エラーの定義とエラー コードに関係のある ODBC 固有のエラー処理オプションを構成します。
  • 高レベル ODBC オプションを設定する
    データベース ログイン資格情報および SQL に関係のある高レベルの ODBC オプションを構成します。
  • データベースの記録オプションを設定する
    記録の前に、Oracle OCI に関係のあるデータベースの記録設定を構成します。
親トピック: プロジェクトのプロファイル設定


SQLSTATE 固有のエラー処理を設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから データベース アイコンをクリックします。
  4. SQLSTATE タブをクリックします。
  5. シミュレーションが終了しないように、特定の ODBC エラー コードに対して例外を定義するには、シミュレーションの例外 リストを使用します。 データベース エラーが発生すると、Silk Performer はシミュレーション全体を自動的に終了します。 このリストには、Silk Performer がデータベース固有のエラーの処理に使用するすべての例外が含まれます。 エラー フィールドには、ネイティブ エラー コードの一覧が表示されます。 クラス フィールドには、エラーの深刻度が表示されます。 クラス 0 のエラーは、Silk Performer トランザクション内で処理できます。 クラス 1 のエラーが発生すると、トランザクションは終了しますが、シミュレーションは終了しません。
  6. データベース固有のエラー例外のリストにエラーを追加するには、追加 ボタンをクリックします。 エラーの編集 ダイアログ ボックスが開きます。
    1. エラー フィールドに、例外リストに追加するエラーのエラー コードを入力します。
    2. クラス フィールドに、エラーのクラスを入力します。
    3. 説明 フィールドに、エラーの説明を入力します。
    4. OK をクリックします。
  7. エラーを編集するには、リストで編集するエラーを選択して、編集 をクリックします。 エラーの編集 ダイアログ ボックスが開きます。
    1. 必要に応じて、エラー コード、クラス、および説明を編集します。
    2. OK をクリックします。
  8. 例外リストからエラーを削除するには、削除するエラーを選択して、削除 ボタンをクリックします。
    1. 削除確認ダイアログで はい をクリックします。
  9. プロファイル - [<プロファイル名>] ダイアログ ボックスに戻り、OK をクリックして変更を保存します。
親トピック: データベースの設定


ODBC 固有のエラー処理を設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから データベース アイコンをクリックします。
  4. ODBC データベース エラー タブをクリックします。
  5. シミュレーションが終了しないように、特定のデータベース エラー コードに対して例外を定義するには、エラーの定義 リストを使用します。
  6. データベース固有のエラー例外のリストにエラーを追加するには、追加 ボタンをクリックします。 エラーの編集 ダイアログ ボックスが開きます。
    1. エラー フィールドに、例外リストに追加するエラーのエラー コードを入力します。
    2. クラス フィールドに、エラーのクラスを入力します。
    3. 説明 フィールドに、エラーの説明を入力します。
    4. OK をクリックします。
  7. エラーを編集するには、リストで編集するエラーを選択して、編集 をクリックします。 エラーの編集 ダイアログ ボックスが開きます。
    1. 必要に応じて、エラー コード、クラス、および説明を編集します。
    2. OK をクリックします。
  8. 例外リストからエラーを削除するには、削除するエラーを選択して、削除 ボタンをクリックします。
    1. 削除確認ダイアログで はい をクリックします。
  9. プロファイル - [<プロファイル名>] ダイアログ ボックスに戻り、OK をクリックして変更を保存します。
親トピック: データベースの設定


高レベル ODBC オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから データベース アイコンをクリックします。
  4. ODBC 高レベル タブをクリックします。
  5. データベース 領域を使用して、使用する ODBC データ ソースについての詳細、および Silk Performer が ODBC ドライバとやり取りする方法を指定します。
  6. 使用できる ODBC データ ソースの データ ソース名 リスト ボックスから、テスト用に接続するデータ ソースを選択します。
    注: 追加の ODBC データ ソースを設定するには、[Windows 32 ビット ODBC アドミニストレータ] を (Windows コントロール パネルから) 使用します。

    ここで選択したデータ ソースは、データベースへの暗黙の接続を実行する高レベル ODBC 関数を使用する場合にのみ使用されます。 中レベル ODBC 関数を使用するときは、このデータ ソースは使用されません。 代わりに、スクリプトでは明示的な DB_Connect("connection string") 関数で接続が実行されます。

  7. ユーザー ID テキスト ボックスに、データ ソースへの接続に使用するユーザー名を入力します。 接続する DBMS に有効なユーザーを指定する必要があります。 信頼できる接続を使用して DBMS に接続する場合は、このフィールドを空欄のままにします。 ここで入力するユーザー ID は高レベル ODBC 関数を使用する場合にのみ使用されることに注意してください。
  8. パスワード テキスト ボックスに、データ ソースに接続するときに使用するパスワードを入力します。 接続しているデータベース ユーザーに有効なパスワードを指定する必要があります。 信頼できる接続を使用している場合、またはユーザーにパスワードがない場合は、このフィールドを空欄のままにします。 ここで入力するパスワード、およびこの領域で選択する他のすべてのオプションは、高レベル ODBC 関数を使用する場合にのみ使用されることに注意してください。
  9. 分離 リスト ボックスで、テスト全体の分離のレベルを選択します。 分離レベルの詳細については、DBMS のドキュメントおよび ODBC 関数のリファレンスを参照してください。 分離レベルおよび他の DBMS 固有の設定は、スクリプトで ODBC 関数 SQLSetConnectOption および SQLSetStmtOption を使用して変更できます。
  10. SQL 同時実行 リスト ボックスから、テスト スクリプトでスクロール可能なカーソルに対して使用するカーソル同時実行の種類を選択します。 同時実行の設定の詳細については、DBMS のドキュメントを参照してください。
  11. SQL カーソル タイプ リスト ボックスから、テスト スクリプトで使用するスクロール可能なカーソルのカーソル タイプを選択します。 カーソル タイプの設定の詳細については、DBMS のドキュメントを参照してください。
  12. 各 SQL コマンドの後で自動的にデータベースをコミットするには、自動コミット チェック ボックスをオンにします。 選択しないと、データベースは明示的なコミット文の後でのみコミットされます。 この設定は、接続されるすべてのカーソルに有効です。
  13. 呼び出すたびに SQL 文を準備して実行する場合は、SQL コマンドを再準備するチェック ボックスをオンにします。 選択しないと、Silk Performer は必要なときにのみ SQL 文を準備します。 この設定は、テストで使用するすべてのカーソルに有効です。
  14. 設定を保存するには、OK をクリックします。
親トピック: データベースの設定


データベースの記録オプションを設定する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストから データベース アイコンをクリックします。
  5. 記録 タブをクリックします。
  6. クライアント アプリケーションとデータベース サーバーの間で交換される大量のデータをランダムなデータに置き換えるには、Oracle OCI 領域の 長いプレースホルダにランダムな入力を生成する オプションをクリックします。 元のデータが再生で必要になることはあまりないので、このオプションを指定すると、大きいデータ ファイルがテスト スクリプトに添付されるのを防ぐことができます。
  7. クライアント アプリケーションとデータベース サーバーの間で交換される大量のデータをファイルに格納する場合は、長いプレースホルダにファイルを生成する オプションをクリックします。 再生の間に、このファイルを使用して、クライアント アプリケーションに送信されるのとまったく同じデータがデータベース サーバーに送信されます。
  8. OK をクリックして、変更を保存します。
親トピック: データベースの設定


テスト スクリプト

テスト スクリプトは、テスト中に仮想ユーザーが行うアクションを指定します。 スクリプトは、Silk Performer 専用のスクリプト言語である Benchmark Description Language (BDL) で記述します。 通常、スクリプトを作成する場合、キャプチャによって記録された実際のネットワーク トラフィックから Silk Performer Recorder に生成させます。 それ以外にも、手動で生成することもできますし、Silk Performer で用意されているサンプル スクリプトを修正、再利用することもできます。

プロジェクトには、必要なだけのスクリプトを追加することができ、既存のテスト スクリプトは削除できます。 スクリプトは使用する前にコンパイルしてください。 プロジェクトにあるスクリプトは個別にコンパイルすることもできますし、特定のプロジェクトに関連したすべてのスクリプトを一括して再コンパイルすることもできます。

  • テスト スクリプトを追加する
    プロジェクトには、仮想ユーザーのアクションを指定したテスト スクリプトが少なくとも 1 つ必要です。
  • テスト スクリプトをコンパイルする
    テスト スクリプトは実行する前にコンパイルする必要があります。
  • テスト スクリプトを削除する
    プロジェクトには、必要なだけのスクリプトを追加することができ、既存のテスト スクリプトは削除できます。
親トピック: プロジェクトの概要設定


テスト スクリプトを追加する

  1. プロジェクト メニュー ツリーで プロジェクト ノードを右クリックして、既存のスクリプトの追加 を選択します。
    ヒント: または、メニュー バーから プロジェクト > 既存のスクリプトの追加 を選択します。
    スクリプトの選択 ダイアログ ボックスが開きます。
  2. スクリプトを探してクリックし、プロジェクトに追加します。
  3. 設定を保存するには、OK をクリックします。
親トピック: テスト スクリプト


テスト スクリプトをコンパイルする

  1. プロジェクト メニュー ツリーで スクリプト ノードを展開します。
  2. コンパイルするスクリプトを右クリックします。
  3. コンテキスト メニューから スクリプトのコンパイル を選択します。 または、メニュー バーから スクリプト > コンパイル を選択します。 コンパイル結果は コンパイラ ページの下で確認できます。
親トピック: テスト スクリプト


テスト スクリプトを削除する

  1. プロジェクト メニュー ツリーで、現在のプロジェクトのフォルダを展開します。
  2. スクリプト フォルダを展開します。
  3. 削除するスクリプトを右クリックします。
  4. コンテキスト メニューから スクリプトの削除 を選択します。 また、全スクリプトの削除 を選択すると、プロジェクトからすべてのスクリプトを削除できます。
  5. 削除確認ダイアログで はい をクリックします。
親トピック: テスト スクリプト


データ ファイル

Silk Performer スクリプトが必要とするデータ ファイル [ユーザー データ ファイル (CSV)、IDL、証明書ファイル (PEM)、ランダム データ ファイル (RND)、およびタイプ ライブラリ ファイル (TLB、DLL、EXE、OCX、OLB、PKG)] は、それが置かれるディレクトリを指定することにより、プロジェクトに追加されます。 コンパイラは、最初に BDF ファイルがあるディレクトリでランダム データ ファイルを検索し、次に指定されたディレクトリを検索します。 別の場所にあるランダム データ ファイルを使用する必要がある場合には、そのファイルへの完全パスをスクリプト ファイルに指定できます。

注: スクリプトで必要なすべてのユーザー データ ファイルがプロジェクトに追加されることが重要です。 追加されないと、テスト中、リモート エージェント コンピュータからは利用できません。
  • データ ファイルを追加する
    テスト スクリプトで必要なすべてのユーザー データ ファイルをプロジェクトに追加し、テスト中、リモート エージェント コンピュータから利用できるようにする必要があります。
  • データ ファイルを削除する
    プロジェクトには、必要なだけのファイルを追加することができ、既存のデータ ファイルは削除できます。
  • データ ファイルを圧縮する
    データ ファイルの圧縮を有効化する方法と、データ ファイルの圧縮が有用となる場合について説明します。
  • データ ファイルをキャッシュする
    データ ファイルのキャッシュを有効化する方法と、データ ファイルのキャッシュが有用となる理由について説明します。
親トピック: プロジェクトの概要設定


データ ファイルを追加する

  1. プロジェクト メニュー ツリーで、プロジェクト ノードを右クリックして、データ ファイルの追加 を選択します。 または、メニュー バーの プロジェクト > データ ファイルの追加 を選択します。 データ ファイルの選択 ダイアログ ボックスが開きます。
  2. データ ファイルの選択 ダイアログ ボックスを使用して、プロジェクトに追加するデータ ファイルを検索して選択します。
  3. 省略可能:ファイル名 テキスト ボックスにワイルドカード文字を挿入して、追加するデータ ファイルを選択できます。
    注: ファイル名 テキスト ボックスにワイルドカード文字を挿入する場合は、ワイルドカードで追加する をクリックして、指定した文字に一致するファイルを選択して、それをプロジェクトのデータ ファイルに追加します。
  4. 省略可能:指定したワイルドカード文字に一致するファイルをサブフォルダからも追加する場合は、サブフォルダを含める チェック ボックスをオンにします。
  5. 設定を保存するには、OK をクリックします。
親トピック: データ ファイル


データ ファイルを削除する

  1. プロジェクト メニュー ツリーで、現在のプロジェクトを展開します。
  2. データ ファイル フォルダを展開します。
  3. 削除するデータ ファイルを右クリックします。
  4. コンテキスト メニューから データ ファイルの削除 を選択します。
  5. 削除確認ダイアログで はい をクリックします。
親トピック: データ ファイル


データ ファイルを圧縮する

あるシナリオでは、エージェント コンピューターにデータ　ファイルを転送する前に圧縮することによって、負荷テストの初期化のスピードを向上させることができます。データ圧縮を有効化するには、Silk Performer メニューから 設定 > システム をクリックし、コントロール タブを選択して、LAN/WAN エージェントへのデータ ファイルを圧縮する および クラウド エージェントへのデータ ファイルを圧縮する チェック ボックスをオンにします。

クラウド エージェントへのデータ ファイルの圧縮はデフォルトで有効になっています。

データ ファイルの圧縮は次の場合に特に有用です。
  • 低バンド幅のネットワークを使用している場合。ローカル エリア ネットワーク（LAN）上にエージェントが存在する場合、通常、ローカル エリア ネットワークは高速であるため、データ ファイルの圧縮は有用ではありません。ただし、ワイド エリア ネットワーク（WAN）上にエージェントが存在する場合は、圧縮したデータ ファイルをデプロイすると、大幅な時間の節約になる場合があります。
  • 負荷テストに多くのエージェントを使用している場合。データ ファイルの圧縮は一度だけ行われます（コントローラ上で）。データ ファイルの解凍は各エージェント上で一度行われます。解凍処理は平行して行われるため、負荷テストの初期化のスピードを必ずしも低下させるものではありません。それでもなお、使用するエージェントが多くなればなるほど、圧縮したデータ ファイルによる時間の節約効果が高くなります。
  • 圧縮効果の高いデータ ファイルを使用している場合。テキスト ファイルや .csv ファイルは圧縮効果の高いデータ ファイルの一例です。これらは大幅にサイズを削減でき、圧縮も高速に行うことができます。

データ ファイルの圧縮が有用かどうかは、ユーザーの環境や負荷テストに強く依存します。一般的な規則として、「データ ファイルの圧縮、転送および解凍にかかる時間が、圧縮せずにファイルを転送するのにかかる時間よりも小さい場合、データ ファイルの圧縮は有用である」と言えます。

親トピック: データ ファイル


データ ファイルをキャッシュする

負荷テストの実行前に、まずは初期化が必要になります。コントローラからエージェントへのデータ ファイルのデプロイは、この初期化の一部です。データ ファイルのデプロイは、その数やサイズによっては、処理に時間がかかる場合があります。初期化を高速にするために、データ ファイルをエージェント上にキャッシュするように Silk Performer を設定できます。この場合、データ ファイルは最初の負荷テストに対してのみデプロイされることになります。その後の負荷テストでは、より速く初期化が完了します。

データ ファイルをキャッシュするには、Silk Performer メニューから 設定 > システム をクリックし、コントロール タブを選択して、エージェント上でデータ ファイルをキャッシュする チェック ボックスをオンにします。

キャッシュを無効にすると、データ ファイルはリモート エージェントに転送され、リモート プロジェクト フォルダに保存されます。キャッシュを有効にすると、データ ファイルは <パブリック ドキュメント>\Silk Performer <version>\DataCache に保存されます。GetDataFilePath 関数を使うと、どちらの場合でも正しいデータ ファイルへのパスを取得できます。データ ファイルの場所を確認するために、GetDirectory 関数に DIRECTORY_PROJECT を指定しても、データ ファイルのキャッシュが有効な場合は機能しません。

親トピック: データ ファイル


エージェント コンピュータ

エージェント コンピュータは、テスト中に実行される仮想ユーザーをホストします。 エージェント コンピュータは、必要な数の仮想ユーザーをサポートするのに必要な数をプロジェクトに追加することができます。

コントローラ コンピュータが使用可能なエージェント コンピュータのプールから、エージェント コンピュータを特定のプロジェクトに割り当てます。 各エージェント上で実行される仮想ユーザーの最大数は、Silk Performer が自動的に計算します。また、この数を手動で設定することもできます。 新規エージェントは、ローカル エリア ネットワークや他の Windows ドメインからエージェント プールに追加し、追加されたエージェントをプロジェクトに追加できるようになります。 エージェントは、利用可能かどうかを確認でき、プールから削除できます。

  • プロジェクト エージェントを構成する
    コントローラ コンピュータが使用可能なエージェント コンピュータのプールから、エージェント コンピュータをプロジェクトに割り当てます。
  • エージェント コンピュータを削除する
    エージェントは、利用可能なエージェント コンピュータのプールから削除できます。
親トピック: プロジェクトの概要設定


プロジェクト エージェントを構成する

  1. プロジェクト メニュー ツリーで、プロジェクト ノードを右クリックして、プロジェクト エージェントの設定 を選択します。 プロジェクト エージェントの設定 ダイアログ ボックスが開きます。
    注: エージェント名にカーソルを重ねると、エージェントのシステムとエージェント バージョンの詳細が表示されます。
    ヒント: または、Silk Performer ワークフロー バーの エージェントの割り当て をクリックします。 その後、エージェントの設定 ダイアログ ボックスの プロジェクト エージェントの設定 リンクをクリックします。
  2. エージェントをプロジェクトに追加するには、使用可能なエージェント ペインでエージェント コンピュータをダブルクリックします。
    注: プロジェクト エージェント ペインからすべてのエージェントを削除することはできません。 リストを空のままにしておくと、デフォルトで localhost が追加されます。
  3. プロジェクト エージェント ペインからエージェント プールに外部エージェント (疑問符アイコンで示されます) を追加するには、エージェントを右クリックして エージェント プールに追加 を選択します。
    外部エージェントとは、エージェント プールに追加されていないプロジェクトに対して構成されているエージェントです。
    1. 新しく追加されたエージェントを、割り当て可能な状態にするには、エージェント プール設定 をクリックして、システム設定 - エージェント ページでエージェントを構成します。
  4. 使用可能なエージェント リストに表示されていないエージェントを追加するには、エージェント プール設定 をクリックして、システム設定 - エージェント ページに移動します。
  5. OK をクリックします。
親トピック: エージェント コンピュータ
関連タスク
エージェント プール設定を構成する


エージェント コンピュータを削除する

  1. プロジェクト メニュー ツリーで、現在のプロジェクトを展開します。
  2. エージェント フォルダを展開します。
  3. 削除するエージェント コンピュータを右クリックします。
  4. コンテキスト メニューから エージェントの削除 を選択します。 プロジェクトには、アクティブなエージェントが少なくとも 1 つ残っている必要があります。
  5. 削除確認ダイアログで はい をクリックします。
親トピック: エージェント コンピュータ


スクリプトを作成する

Silk Performer の負荷テストを実行する前に、テスト中にシミュレートするユーザー実行のアクションを定義したテスト スクリプトを作成する必要があります。 テスト スクリプトは、Silk Performer 専用のスクリプト言語である Benchmark Description Language (BDL) で記述します。

スクリプトは、アプリケーションの種類に応じて、さまざまな方法で作成できます。 テスト スクリプトを作成するための標準的な (最も簡単な) 方法は、Silk Performer Recorder を使用して、テストでシミュレートする必要がある典型的なトラフィックを測定して記録することです。 Silk Performer Recorder は、記録されたトラフィックに基づいて自動的に BDL テスト スクリプトを生成します。

テスト スクリプトを作成するもう 1 つの方法は、手動で BDL スクリプトを新規作成することです。 手動によるアプローチの変形として、Silk Performer で提供されているサンプルの BDL スクリプトを基にしてテスト スクリプトを作成する方法もあります。

  • 記録によるテスト スクリプト
    Silk Performer Recorder がトラフィックを記録し、テスト スクリプトまたはキャプチャ ファイルを生成する方法について説明します。
  • 手動によるテスト スクリプトの記述
    テスト スクリプトを手動で記述するための必要条件について説明します。
  • サンプル スクリプト
    サンプル スクリプトによって、スクリプト作成の準備にかかる時間がどのように節約できるかを説明します。
親トピック: 負荷テストの管理
関連概念
Benchmark Description Language (BDL) Reference


記録によるテスト スクリプト

テスト スクリプトを作成するための標準的で最も簡単な方法は、Silk Performer Recorder を使用することです。Recorder は、トラフィックをキャプチャして記録し、テスト スクリプトを生成する Silk Performer のエンジンです。

最初に、Silk Performer Recorder は、テスト対象のクライアント アプリケーションとサーバー間の実際のトラフィックを測定して記録します。記録が完了すると、Silk Performer Recorder はテスト スクリプトまたはキャプチャ ファイルのいずれかを生成します。後で、キャプチャ ファイルからスクリプトを作成できます。テスト スクリプトは、Silk Performer 専用のスクリプト言語である ベンチマーク記述言語 (BDL: Benchmark Description Language) で記述します。

記録フェーズ中に、トランザクションを定義します。トランザクションは、後から負荷テストにおいて仮想ユーザーに割り当てられる独立した作業単位で、これに対して、個別に時間測定が行われます。別の作業単位に依存しない作業単位に対してのみ、新規のトランザクションを作成します。記録中に発生した任意のアクションまたは一連のアクションに対して、個別に時間測定を行うことができます。

Silk Performer Recorder を使用すると、以下のようなさまざまな利点があります。

  • 記録されたトラフィックや関数呼び出しには、静的な情報が多数含まれています。通常は、静的な情報を再生しても、信頼できるベンチマーク結果を得ることはできません。記録されたスクリプトは簡単にカスタマイズできるので、ランダム関数を追加して、動的で現実に近いワークロードを生成することができます。
  • 記録中に定義されたトランザクションによって、スクリプトを明確なシナリオに分割できます。Silk Performer に組み込みのランダム関数を使用すると、さまざまな統計や要件に基づいて簡単にワークロードを変更できます。
  • 記録中に設定したタイマによって、トランザクションの任意の部分をユーザーが定義した精度で測定できます。
  • 開発の時間とコストを大幅に削減できます。新規の動作をシミュレートするために、フロントエンド アプリケーションを変更する必要はありません。要件を満たすまで、スクリプトを変更してシミュレーションを繰り返すだけで十分です。フロントエンド アプリケーションは、1 度だけ実装する必要があります。その後は、スクリプトがそのアプリケーションのプロトタイプとなって、その動作を再現します。
  • テスト スクリプトを記録する
    Silk Performer Recorder を使用して、テスト スクリプトを作成します。Recorder は、トラフィックを記録し、テスト スクリプトを生成するための Silk Performer のエンジンです。
  • セキュアな接続と証明書
    セキュアな接続でスクリプトを記録および生成するための証明書の役割について説明します。
  • キャプチャ ファイルからスクリプトを生成する
    キャプチャ ファイルとは何か、いつ生成されるのかについて説明します。
  • トラフィック フィルタ
    不要なトラフィックを除外するために Silk Performer が提供するフィルタを一覧します。
  • ルール ベースの記録
    この章では、記録ルール ファイルを使って、Silk Performer の Recorder (HTTP、TCP/IP) を設定する方法を説明します。
親トピック: スクリプトを作成する
関連概念
Benchmark Description Language (BDL) Reference
関連資料
利用可能なアプリケーションの種類


セキュアな接続と証明書

テスト対象のアプリケーションにセキュアな接続でアクセスする場合は、クライアントとサーバー間で信頼できる通信を確立するために Silk Performer を設定する必要があります。これは証明書を使用して行い、次の 2 つの方法を選択できます。

Micro Focus 認証機関 (CA) の証明書

クライアントとサーバー間にセキュアな接続を確立するためには、C:\Program Files\Silk\Silk Performer21.0\IRCAcert.crt にある Micro Focus CA 証明書をクライアントにインストールする必要があります。Micro Focus 認証機関によって発行される、対応するサーバー証明書は、C:\Program Files\Silk\Silk Performer21.0\IRServerCert.pem にあります。

接続経路：
  1. クライアントが、サーバーとして機能する Recorder へのセキュアな接続を開きます。
  2. Recorder が Micro Focus サーバー証明書を送り返します。
  3. クライアントは証明書を受信し、信頼できるルート機関のいずれかが発行した証明書 (Micro Focus CA 証明書) であるかどうかをチェックします。チェックに成功すると、セキュアな接続が確立されます。
  4. Recorder はテスト対象システムへの 2 番目のセキュアな接続を開こうとします。
  5. テスト対象のシステムは自身のサーバー証明書を送り返します。
  6. Recorder はこの証明書を受け入れ、テスト対象へのセキュアな接続を確立します。

サーバー証明書

テスト対象のシステムのサーバー証明書があれば、プロファイル設定 でその証明書を指定することで、セキュアな記録と再生を有効にすることができます。

接続経路：
  1. クライアントが Recorder へのセキュアな接続を開き、プロファイル設定 で指定したサーバー証明書を受信すると、クライアントはテスト対象のシステムに接続できたと認識します。
  2. Recorder はテスト対象のシステムへの 2 番目のセキュアな接続を開きます。
  3. テスト対象のシステムは自身のサーバー証明書を送り返します。
  4. Recorder はこの証明書を受け入れ、テスト対象への接続を確立します。

ネイティブ モバイル アプリ

セキュアな接続で通信するモバイル デバイスのネイティブ アプリは通常、受信したサーバー証明書 (テスト対象のシステムからのサーバー証明書、または Micro Focus サーバー証明書) を特定の文字列 (会社名やドメイン名など) に照合します。このセキュリティ手法では、Micro Focus 証明書による方法は機能しません。

親トピック: 記録によるテスト スクリプト
関連タスク
セキュアな接続を介してテスト スクリプトを記録する


キャプチャ ファイルからスクリプトを生成する

キャプチャ ファイルとは

ユーザーとのやりとりを記録する際に、Silk Performer Recorder は、記録したセッションのトラフィック全体を含む Silk Performer キャプチャ ファイルというファイルを作成します。記録を停止すると、Silk Performer はキャプチャ ファイルを保存し、バックグラウンドでトラフィックを分析して キャプチャ ファイル ページを表示します。キャプチャ ファイル ページでは、潜在的な問題の解決、フィルタの適用、記録ルールの設定など、さまざまな設定を行えます。設定を終えたら、スクリプトの生成 をクリックして、.spcap ファイルから .bdf ファイルを生成します。

ヒント: キャプチャ ファイル ページの右下に表示されている 記録後にキャプチャ ファイル ページを常に表示する チェック ボックスをオンにすることもできます。このチェック ボックスをオフにすると、Silk Performer は キャプチャ ファイル ページを表示せずに、自動的にキャプチャ ファイルからスクリプトを作成します。
ヒント: 同じキャプチャ ファイルからいくつかのスクリプトを生成することができます (オプションを変えて)。

キャプチャ ファイルを使用できるプロジェクトの種類

キャプチャ ファイルは、次のプロジェクトの種類に対して生成されます。

  • Web business transaction (HTML/HTTP)
  • Web (Async)
  • Web low level (HTTP)
  • Mobile Devices
  • Flex/AMF3 (Adobe)
  • Flex/AMF3 (GraniteDS)
  • Silverlight
  • HTTP Live Streaming (HLS)
  • Java over HTTP
  • WebDAV (MS Outlook Web Access)
  • Oracle ADF
  • Email (SMTP/POP)
  • Directory server (LDAP)
  • Radius
  • FTP
  • TCP/IP based application
  • Mixed Protocols

Flex/AMF3 と Java over HTTP の記録に固有の機能

プロジェクトの種類が Flex/AMF3 (Adobe)、Flex/AMF3 (GraniteDS)、Java over HTTP のいずれかの場合、次の特別なステップが利用できます。

キャプチャ ファイル ページに問題が表示された場合 (キャプチャ ファイルの作成中に .jar ファイルが見つからない場合など)、問題の解決 領域のボタンを使用して、問題を修正します。すべての問題を解決できたら、スクリプトの生成 をクリックします。

親トピック: 記録によるテスト スクリプト


トラフィック フィルタ

Web アプリケーションを記録するとき、結果のスクリプトには、アプリケーションとは無関係な不要なトラフィックがたくさん含まれています。この不要なトラフィックによって、スクリプトにはかなり余計なコードが含まれるようになり、アプリケーション関連のコードはほんの数行であったとしても、複雑に見えるスクリプトになってしまいます。

本当に記録したいトラフィックだけを含むようにスクリプトを洗練させるために、キャプチャ ファイル ページでフィルタを使用できます。 Silk Performer は次のフィルタを提供します。

  • 全般フィルタ：このフィルタでは、特殊な TCP/IP トラフィックや UDP トラフィック、およびブラウザ固有のドメインのトラフィックを除外できます。
  • ドメイン フィルタ：このフィルタでは、特定のドメインからのトラフィックを除外できます。Web サイトに組み込まれているサードパーティ コンポーネント（ソーシャル メディアやアクセス解析プラグインなど）のトラフィックをフィルタするために使用できます。
  • パスとクエリ フィルタ：このフィルタでは、スクリプトからの Web リクエスト（API 呼び出し）を除外できます。
  • キャプチャ ファイルから全般的なトラフィックをフィルタする
    特殊な TCP/IP トラフィック、UDP トラフィック、およびブラウザ固有のドメインをスクリプトからフィルタする方法について説明します。
  • キャプチャ ファイルからドメインをフィルタする
    キャプチャ ファイルからドメインをフィルタして、生成されるスクリプトから不要なトラフィックを除外する方法について説明します。
  • キャプチャ ファイルからパスとクエリをフィルタする
    キャプチャ ファイルからパスとクエリをフィルタして、生成されるスクリプトから Web リクエスト (API 呼び出し) を除外する方法について説明します。
親トピック: 記録によるテスト スクリプト


キャプチャ ファイルから全般的なトラフィックをフィルタする

キャプチャ ファイル ページ上の次のフィルタを使用して、スクリプトから特殊な TCP/IP トラフィック、UDP トラフィック、およびブラウザ固有のドメインを除外できます。
  1. プロジェクト ツリーで、キャプチャ ファイル ノードを展開し、キャプチャ ファイルをダブルクリックします。
  2. 特殊な TCP/IP トラフィックを除外する をオンにします。 Silk Performer は、HTTP などの標準的な TCP/IP ベースの Web プロトコルのトラフィックを自動的に認識します。一方、標準的でない Web プロトコルのトラフィックをブラウザから生成されることがあり、これを特殊な TCP/IP トラフィックと呼びます。通常、このようなトラフィックは、記録する必要のないトラフィックで、スクリプトを乱雑にするため、除外することは有用です。
  3. UDP トラフィックを除外する をオンにします。 ブラウザーや Web アプリケーションは、デバイスやサービスの検出に UDP を使用することがよくあります。UDP トラフックもまた、通常は記録する必要のないトラフィックです。
  4. ブラウザ固有のドメインを除外する をオンにします。 Web アプリケーションを記録すると、通常、スクリプトには余計なブラウザ固有の Web 呼び出しも含まれます。これらの Web 呼び出しは、記録したアプリケーションとは無関係で、記録するときに特定のブラウザを使用した場合にのみスクリプトに現れます。よって、これらの Web 呼び出しを除外することは、より洗練されたスクリプトを生成するのに役立ちます。ツールチップには、Silk Performer がキャプチャ ファイルから見つけ出したブラウザ固有のドメインが表示されます。
  5. スクリプトの生成 をクリックします。
親トピック: トラフィック フィルタ


キャプチャ ファイルからドメインをフィルタする

ユーザー トランザクションを記録する間に、Silk Performer Recorder は Web サイトに組み込まれているサードパーティ コンポーネント (ソーシャル メディアやアクセス解析プラグインなど) の通信もキャプチャする可能性があります。これらの不要なトラフィックを削除するには、キャプチャ ファイルを開き、ドメイン フィルタを適用して新しいスクリプトを生成します。スクリプトにはユーザー トランザクションによる期待したコードのみが含まれるようになります。
  1. プロジェクト ツリーで、キャプチャ ファイル ノードを展開し、キャプチャ ファイルをダブルクリックします。
  2. ある特定のドメインからのトラフィックのみを含めるには、次のドメインのトラフィックのみを含める をオンにして、リスト ボックスからドメインを選択します。
  3. 複数のドメインからのトラフィックを含めるまたは除外するには、次のオプションのいずれかを選択します。
    • 以下で選択したドメインのトラフィックのみを含める をオンにして、その下で選択したドメインからのトラフィックだけをスクリプトに保存します。
    • 以下で選択したドメインのトラフィックを除外する をオンにして、その下で選択したドメインからのトラフィックをスクリプトから除外します。
  4. ドメインのリストを展開し、含める (または除外する) すべてのドメインを選択します。
    ヒント: すばやくリストを掘り進むには、ノードを右クリックして すべて展開 または すべて折りたたむ をクリックします。
  5. スクリプトの生成 をクリックします。
生成されたスクリプトは次のように変更されます。
  • フィルタされたドメインへの呼び出しがスクリプトから削除されます。
  • BDL 関数 WebSetDomainSuppress がスクリプトに追加されます。埋め込まれたオブジェクトは、明示的にスクリプトに記述されていなくても、ページ レベル関数によって自動的に読み込まれます。 WebSetDomainSuppress は、それを回避します。
親トピック: トラフィック フィルタ


キャプチャ ファイルからパスとクエリをフィルタする

キャプチャ ファイル ページ上の次のフィルタを使用して、スクリプトから Web リクエスト (API 呼び出し) を除外できます。
  1. プロジェクト ツリーで、キャプチャ ファイル ノードを展開し、キャプチャ ファイルをダブルクリックします。
  2. パスとクエリ フィルタの設定 で、1 つ以上のパターンを入力します。スクリプト上の一致箇所が直ちに表示されます。
  3. スクリプトの生成 をクリックします。
定義したパターンは、生成したスクリプトから除外されます。
親トピック: トラフィック フィルタ


ルール ベースの記録

この節では、記録ルール ファイルを使って、Silk Performer の Recorder (HTTP、TCP/IP) を設定する方法を説明します。記録ルールの構造と構文、および例について説明します。記録ルールは、Silk Performer の高度な概念です。Silk Performer と、関係するプロトコル (TCP/IP、HTTP、および HTML) を十分に理解している必要があります。

注: 記録ルールを手動で記述するだけでなく、記録ルール タブでテンプレートを使用することもできます。
記録ルールを使用すると、さまざまな方法で Recorder を構成できます。
  • TCP/IP： 専用の TCP/IP ベースのプロトコルのプロトコル記述を指定することによって構成します。
  • HTTP： Recorder が、動的に変更される値のための解析関数をスクリプト記述して、それらの値を置換する値を生成する必要があるシナリオを指定することによって構成します。
  • 記録ルール ファイル
    どんな記録ルール ファイルがあるか、どこに保存されているのか、そして記録ルールの 3　つの種類について説明します。
  • 記録ルールの一般的な属性
    Name 属性と Active 属性について説明します。
  • HTTP 解析ルール
    HTTP 解析ルールについて説明します。
  • TCP/IP プロトコル ルール
    独自の TCP/IP プロトコルを検出するために TCP/IP プロトコル ルールを使用する方法を説明します。
  • StringScriptingRule
    文字列のスクリプト化処理をフックするために StringScriptingRule を使用する方法について説明します。
  • HttpScriptingRule
    Recorder が行うスクリプト生成の判断をフックすることができる HttpScriptingRule について説明します。
  • ProxyEngineRule
    ProyEngine の操作の一部を制御することができる ProxyEngineRule について説明します。
  • 条件
    条件によって、ルールが適用されるべきときを厳密に指定することができます。
  • トラブルシューティング
    期待通り動作しない記録ルールのトラブルシューティングの推奨事項を提供します。
親トピック: 記録によるテスト スクリプト


記録ルール ファイル

記録ルール ファイルは、XML で書かれており、ファイル拡張子は .xrl です。このファイルは、Silk Performer Recorder のルールを含んでいます。

プロジェクト固有の記録ルールは、プロジェクトそれぞれのドキュメント ディレクトリ (Documents) に保存されます。 たとえば： <マイ ドキュメント>\Silk Performer <バージョン>\Projects\TestProj\Documents\

グローバルな記録ルールは、パブリックな、またはユーザーの RecordingRules ディレクトリに保存されます。 たとえば：<パブリックなユーザー ドキュメント>\Silk Performer <バージョン>\RecordingRules\

すべての記録ルール ファイル ノード ツリーのルート ノードは、RecordingRuleSet です。記録ルールには、それぞれの XML ノードを持つ 3 つの種類があります。
  • HTTP 解析ルール： HttpParsingRule
  • WebTcpipRecvProto(Ex) の TCP ルール： TcpRuleRecvProto
  • WebTcpipRecvUntil の TCP ルール： TcpRuleRecvUntil
  • XML ファイルを記述する
    XML エンコード要件について説明します。
  • 記録ルール ファイルの例
    記録ルール ファイルの例を示します。
  • 記録ルールのデータ型
    すべての有効な記録ルールのデータ型をリストします。
親トピック: ルール ベースの記録


XML ファイルを記述する

XML ファイルを記述する際には、以下のエンコード要件に従います。

特殊文字のエンコード

一部の文字や記号は、適切な XML 構文に従ってエンコードされる必要があります。

説明 | 文字 | XML 表現
より小さい | < | &lt;
より大きい | > | &gt;
二重引用符 | " | &quot;
アンパサンド | & | &amp;
アポストロフィ | ' | &apos;

バイナリ データのエンコード

バイナリ データは、16 進表記でエンコードされる必要があります。

説明 | XML 表現
復帰 (CR) | &#x0D;
改行 (LF) | &#x0A;
NULL バイト | &#x00;
任意の 16 進バイト | &#x<byte hex code>;
親トピック: 記録ルール ファイル


記録ルール ファイルの例

この例で使用されている命名規則

XML ノードは完全パス名で参照されます： RecordingRuleSet\HttpParsingRule\Search\LB\RegExpr

ベースのパスが明らかである場合は、XML ノードの相対パスが使用されます。Search\LB\RegExpr

例

<RecordingRuleSet>
  <HttpParsingRule>
    <Name>Siebel Session Cookie</Name>
    ...
  </HttpParsingRule>
  <TcpRuleRecvProto>
    <Name>Siebel TCP Protocol</Name>
    ...
  </TcpRuleRecvProto>
  <TcpRuleRecvUntil>
    <Name>Telnet screen</Name>
    ...
  </TcpRuleRecvUntil>
</RecordingRuleSet>
親トピック: 記録ルール ファイル


記録ルールのデータ型

記録ルール属性のデータ型にはさまざまな種類があります。次の表に、すべての有効なデータ型と関連する属性の説明をリストします。
データ型 | 説明
Strings | NULL バイト以外のバイナリ データを含む、すべての文字列値が有効です。
Binary Data | NULL バイトを含むすべてのバイナリ データが有効です。
Numbers | 0 から 4294967295 の範囲の符号なし整数が有効です。値 4294967295 は、符号なし整数の最大値です。
Signed Numbers | -2147483648 から 2147483647 の範囲の符号付き整数が有効です。値 2147483647 は、符号付き整数の最大値です。
Numeric Ranges | Numeric Ranges は、次の構文を使って表記します。[ MinValue ] [ "-" ] [ MaxValue ] MinValue および MaxValue は符号なし整数です。 MinValue を省略した場合は、デフォルト値 0 が使用されます。 MaxValue を省略した場合は、デフォルト値 符号なしの最大値が使用されます。
Boolean Values | ブール値が有効なデータ型です。これらの値は true および false となります。
Extended Boolean Values | 拡張ブール値が有効なデータ型です。これらの値は true、unknown、および false となります。
Distinct Values | 多くの一意な値が有効です。有効な値は指定した属性に依存します。
Distinct Value Lists | コンマ区切り値 (CSV) リストが有効です。有効な値は指定した属性に依存します。
Structured Data | ネストした XML ノードで構成される複合データ型は有効です。
親トピック: 記録ルール ファイル


記録ルールの一般的な属性

すべての記録ルールの種類で、Name 属性と Active 属性を指定することができます。
属性 | 説明
Name 属性 | データ型：strings デフォルト値：Unnamed Rule この属性は、指定した記録ルールの名前を指定します。Names には、特殊な意味や文法は必要ありません。記録したスクリプトのコメントに表示される場合もあります。
Active 属性 | データ型：Boolean Values デフォルト値：true この属性は、指定した記録ルールがアクティブかどうかを指定します。アクティブでない記録ルールは無視されます。この属性は、記録ルール ファイルから削除することなく、一時的に記録ルールを無効にすることができます。
親トピック: ルール ベースの記録


HTTP 解析ルール

HTTP 解析ルールは、HttpParsingRule という名前の XML ノードで指定します。

目的

HTTP 解析ルールは、動的に値を変更するために、Recorder が解析関数 WebParseDataBoundEx() を生成するタイミングと、解析結果を置換する場所を指定します。これによって、正しく機能するスクリプトを Recorder が直接生成できるようになり、TrueLog Explorer を使ってビジュアル スクリプトをカスタマイズする必要がなくなります。

HTTP トラフィックを記録する際に、Recorder は HTTP カイセキルールを次の設定を使って適用します。
  • ページ レベルの Web API
  • 低レベルの Web API (自動ページ検出あり/なし)

TCP/IP レベル API 設定を使って HTTP トラフィックを記録する場合は、Recorder は HTTP 解析ルールを適用しません。

HTTP 解析ルール アプリケーションが機能する方法

HTTP 解析ルール アプリケーションには、2 つの主要なステップがあります。
  • 可能な置換箇所の検出 (「ルール ヒット」もしくは、単に「ヒット」をよばれます)。
  • 解析関数と置換のスクリプト化

それぞれのステップについての詳細は、HTTP 解析ルールで指定できます。

可能な置換箇所の検出

記録中に、各サーバー レスポンスがルール ヒットに対して解析されます。HTTP 解析ルールでは、どのように解析が行われるか、およびどの解析結果 (ヒット) が後で使用するために残されるか、を指定します。解析関数は、このステップでは生成されません。ヒットは単に今後の使用のために保持されます。

解析関数のスクリプト化

Recorder が文字列値 (関数のパラメータまたはフォーム フィールド値/名の何れか) をスクリプト化するとき、すべての識別されたヒットを試し、スクリプト化される文字列の部分文字列がオーバーラップしないヒット群を決定します。それから、Recorder は、もとの文字列をスクリプト化する代わりに、必要な解析関数と置換をスクリプト化します。

  • HTTP 解析ルールの構造
    HTTP 解析ルールの構造についての例を提供します。
  • 変換関数
    独自のカスタム変換関数を書き、この変換関数を記録ルールに指定する方法について説明します。
  • HTTP 解析ルールの例
    HTTP 解析ルールを設計する例を提供します。
  • Search セクション - ルール ヒットの検索
    ルール ヒットを検索して見つける方法について説明します。
  • 解析関数と置換のスクリプト化
    ScriptGen セクションで、置換が適切であるスクリプトの位置にルール ヒットの使用を制限する条件を指定することを可能にする方法を説明します。
  • ScriptGen セクション
    ScriptGen セクションとその個々の属性について説明します。
親トピック: ルール ベースの記録


HTTP 解析ルールの構造

2 つの値をばらばらに保つため、HTTP 解析ルールは、Search および ScriptGen という名前の 2 つのセクションで構成されます。

<?xml version="1.0" encoding="UTF-8" ?>
<RecordingRuleSet>

  <HttpParsingRule>
    <Name>Example Rule</Name>
    <Active>true</Active>
    <Search>
      ...
    </Search>
    <ScriptGen>
      ...
    </ScriptGen>
  </HttpParsingRule>
</RecordingRuleSet>
親トピック: HTTP 解析ルール


変換関数

ユーザーは、独自のカスタム変換関数を書き、この変換関数を記録ルールに指定できます。変換関数は、ネイティブ DLL ファイル (C/C++ でプログラムを記述) に含まれます。変換関数内で、解析ルールの値が、指定された関数を使用して変換されます。解析関数では、元の値のみが解析されます。

たとえば、サーバーによって返される値が Double 形式で、クライアントが送信する値が整数形式の場合があります。したがって、簡単な解析ルールでは、スクリプトに一致を見つけることができません。ただし、整数を Double 形式に変換するカスタム変換関数を適用すると、解析ルールでは、想定される一致を再度見つけることができます。

注: 変換関数は、HTTP 解析ルールに対してのみ指定できます。

記録ルールのサンプル

次に、変換関数が指定されている記録ルールの例を示します。

<RecordingRuleSet>
  <HttpParsingRule>
    <Name>Parse by Boundaries, Convert and Replace (with custom conversion DLL)</Name>
    <Search>
      <SearchIn type="Select{Body|Header|All}">Body</SearchIn>
      <LB>
        <Str>&gt;</Str>
      </LB>
      <RB>
        <Str>&lt;/strong&gt;</Str>
      </RB>
      <Conversion>
        <Dll>SampleConversion.dll</Dll>
        <Function>ConvertToUpperCase</Function>
      </Conversion>
    </Search>
    <ScriptGen>
      <ReplaceIn type="MultiSelect{FormFieldValue|Url|PostedData}">FormFieldV alue, Url, PostedData</ReplaceIn>
      <VarName>ParsedByBoundary</VarName>
      <GenDebugPrint>true</GenDebugPrint>
      <Conversion>
        <BdlFunction>MyConvertToUpperCase</BdlFunction>
      </Conversion>
    </ScriptGen>
  </HttpParsingRule>
</RecordingRuleSet>
親トピック: HTTP 解析ルール


HTTP 解析ルールの例

この節では、Silk Performer に同梱される ShopIt V 6.0 サンプル アプリケーションを使用して、HTTP 解析ルールを設計する手順を順を追って説明します。

  • 解析ルールを使用せずに ShopIt V 6.0 を記録する
    解析ルールを使用せずに ShopIt V 6.0 を記録するスクリプトの例を示します。
  • ShopIt V 6.0 を TrueLog Explorer でカスタマイズする
    ShopIt V 6.0 を TrueLog Explorer でカスタマイズする方法について説明します。
  • カスタマイズの詳細を Recorder に転送する
    HTTP 解析ルールを使って手動でカスタマイズすることなく自動的に記録したスクリプトを生成する方法について説明します。
  • 記録ルールを試す
    記録ルールを試し、結果 (記録されたスクリプト) を表示する方法について説明します。
  • より特殊なルールの作成
    セッション ID に対してのみ解析関数を作成する特殊なルールを作成する方法について説明します。
  • 変換 DLL の作成
    サンプル プロジェクトを使用しながら、変換 DLL を作成する方法について説明します。
親トピック: HTTP 解析ルール


解析ルールを使用せずに ShopIt V 6.0 を記録する

Silk Performer サンプル Web アプリケーション ShopIt V 6.0 は、セッション ID を含むフォーム定義を持つコンテキストのない関数 WebPageUrl() をスクリプト化することを目的として構築されました。これは、JavaScript で URL を組み立てることによって実現されています。

記録ルールを使用せずに ShopIt V 6.0 を記録すると、以下の例に示すように、ハードコーティングされたセッション ID を含むスクリプトが生成されます。

WebPageUrl(sParsedUrl, "Unnamed page", SHOPITV60_ KINDOFPAYMENT_ASP002);

// …

dclform
  SHOPITV60_KINDOFPAYMENT_ASP002:
    "choice" := "CreditCard",
    "price"  := "69.9",
    "sid"    := "793663905";
親トピック: HTTP 解析ルールの例


ShopIt V 6.0 を TrueLog Explorer でカスタマイズする

[スクリプトの試行] を実行すると、ハードコードされたセッション ID が原因で再生エラーが発生します。TrueLog Explorer のセッション処理カスタマイズ機能では、次のようにスクリプトを変更することによって、この問題を解決します。
dclparam
  sSessionInfo1 : string;

dcluser
  user
    VUser
  transactions
    TInit : begin;
    TMain : 1;

var
  sFormSid1 : string;

// ...

  WebParseDataBoundEx(sSessionInfo1, STRING_COMPLETE,
    "name=\"", 3, "\"", WEB_FLAG_IGNORE_WHITE_SPACE
      | WEB_FLAG_CASE_SENSITIVE, 1);
  WebPageLink("Check out", "ShopIt - Check Out");// Link 3
  Print("sSessionInfo1: " + sSessionInfo1);

  sFormSid1 := sSessionInfo1;
  WebPageUrl("http://u2/ShopItV60/kindofpayment.asp",
    "Unnamed page", SHOPITV60_KINDOFPAYMENT_ASP003);

// ...

dclform
  SHOPITV60_KINDOFPAYMENT_ASP003:
    "choice" := "CreditCard",
    "price" := "15.9",

//  "sid" := "348363999";
    "sid" := sFormSid1;

第 2 の [スクリプトの試行] によって、カスタマイズが成功したこと、およびスクリプトが正しく実行されることを明確にします。

親トピック: HTTP 解析ルールの例


カスタマイズの詳細を Recorder に転送する

カスタマイズが完了して、スクリプトが正しく実行されるようになりました。しかし、今後記録されるスクリプトでも、毎回カスタマイズを行わなければならないという問題が残ります。

HTTP 解析ルールを利用すると、今後は、この種のカスタマイズを の Recorder に自動的に行わせることができます。つまり、手動でカスタマイズする必要がなく、記録スクリプトを自動生成できます。

それには、セッション ID の解析方法を調査する必要があります。TrueLog Explorer によって提供されるカスタマイズは、開始に適した場所を提供します。セッション ID が最初に発生した API 呼び出しがわかります。また、セッション ID を解析するために使用できる境界もわかります。

以下の例に示すように、TrueLog Explorer を使用して、HTML コード内でセッション ID が最初に出現する場所を見つけます。

<script LANGUAGE="JavaScript">
  function doProcess(mylink)
  {
    scheme="http://";
    server="u2";
    serverport="";
    path="/ShopItV60/";
    file="kindofpayment.asp?";
    name="348364005";
    price="15.9";
    choice="CreditCard";
    mylink.href=scheme + server + serverport + path
    + file + "choice=" + choice + "&price="
    + price + "&sid=" + name;
  }
</script>

TrueLog Explorer によって識別される左境界 ("name=\"") および右境界 ("\"") は、セッション ID を解析するための妥当な選択肢であるように思えます。これで、HTTP 解析ルールの初期バージョンを Recorder 用に書き込むことができます。

<?xml version="1.0" encoding="UTF-8" ?>
<RecordingRuleSet>
  <HttpParsingRule>
    <Name>ShopIt V6.0 Session Id</Name>
    <Search>
      <SearchIn>Body</SearchIn>
      <LB>
        <Str>name=&quot;</Str>
      </LB>
      <RB>
        <Str>&quot;</Str>
      </RB>
    </Search>
    <ScriptGen>
      <VarName>ShopItSessionId</VarName>
    </ScriptGen>
  </HttpParsingRule>
</RecordingRuleSet>

このルール ファイルをすべてのプロジェクトでグローバルに利用できるようにするには、Silk Performer の RecordingRules ディレクトリに保存します。ファイル名は任意ですが、ファイルの拡張子は .xrl にする必要があります。または、この記録ルールを 1 つのプロジェクトだけで使用する場合は、このファイルを、Silk Performer プロジェクトの Documents ディレクトリに保存します。

ShopIt V 6.0 のセッション ID は、HTTP のレスポンス ヘッダーには存在しないので、レスポンス本体だけを検索するように指定します (Search\SearchIn 属性を使用)。

左境界を検索して、セッション ID を見つけることができます。この境界は、属性 Search\LB\Str で指定します。XML では、引用符記号は、文字シーケンス "&quot;" を使用してエンコードされることにご注意ください。

セッション ID の終りには、単一引用符が付きます。これは、属性 Search\RB\Str で指定します。ここで、再び、引用符文字がエンコードされる必要があります。

最後に、解析結果用の変数に名前をつける方法に関する詳細を定義する必要があります。名前は、ScriptGen\VarName 属性を使用して指定します。

親トピック: HTTP 解析ルールの例


記録ルールを試す

ルールが記録セッションで使用されるとき、結果は多くの変数を持つ記録されたスクリプトです。

var
  gsShopItSessionId : string; // Confirm-Button
  gsShopItSessionId_001 : string; // 348364008
  gsShopItSessionId_002 : string; // myForm
  gsShopItSessionId_003 : string; // address
  gsShopItSessionId_004 : string; // city
  gsShopItSessionId_005 : string; // state
  gsShopItSessionId_006 : string; // zip
  gsShopItSessionId_007 : string; // ZipCode
  gsShopItSessionId_008 : string; // cardtype
  gsShopItSessionId_009 : string; // cardnumber
  gsShopItSessionId_010 : string; // expiration
  gsShopItSessionId_011 : string; // sid

MYFORM004:
  gsShopItSessionId_003 := "a",
  gsShopItSessionId_004 := "b",
  gsShopItSessionId_005 := "c",
  gsShopItSessionId_006 := "" <SUPPRESS> ,
  gsShopItSessionId_007 := "d",
  gsShopItSessionId_008 := "Visa",
  gsShopItSessionId_009 := "111-111-111",
  gsShopItSessionId_010 := "07.04",
  gsShopItSessionId_011 := "" <USE_HTML_VAL> ;

これはルールの汎用性が高すぎるためです。指定した境界は、セッション ID の解析に単純に適用されず、フォーム フィールドのほｔんどすべてに適用されます。これはスクリプトの再生に支障をきたすわけではありませんが、やりすぎです。

親トピック: HTTP 解析ルールの例


より特殊なルールの作成

セッション ID に対してのみ解析関数を作成するより特殊なルールが必要とされます。これを実際に行う方法はいくつかあります。

Rcorder は、各 HTTP レスポンスから部分文字列を抽出するために解析ルールの Search 属性に境界文字列を使用します。この部分文字列は、「ルール ヒット」もしくは、単に「ヒット」をよばれます。Recorder は各ヒットを記憶します。文字列をスクリプト化する際に、Recorder は識別した任意のルール ヒットがスクリプト化した文字列に含まれるかどうかを確認します。含まれる場合、Recorder はルール ヒットに対して解析関数を生成し、スクリプト化した文字列に結果の変数を置換します。

ルール ヒット数の制限

より特殊なルールは、ShopIt V 6.0 セッション ID の一意特性に基づいて作成することができます。

セッション ID プロパティは、以下を満たすものと考えます。
  • 数字のみで構成される。
  • その長さは常に 9 文字である。

この条件を考慮して、ルールを拡張します。

条件によるルール ヒット数の制限

<?xml version="1.0" encoding="UTF-8" ?>
<RecordingRuleSet>

  <HttpParsingRule>
    <Name>ShopIt V6.0 Session Id</Name>
      <Search>
        <SearchIn>Body</SearchIn>
        <LB>
          <Str>name=&quot;</Str>
        </LB>
        <RB>
          <Str>&quot;</Str>
        </RB>
        <CondRegExpr>[0-9]+</CondRegExpr>
        <CondResultLen>9-9</CondResultLen>
      </Search>
    <ScriptGen>
      <VarName>ShopItSessionId</VarName>
    </ScriptGen>
  </HttpParsingRule>
</RecordingRuleSet>

属性 Search\CondRegExpr は、各ルール ヒットに適用される正規表現を指定します。この正規表現に一致しないルール ヒットはドロップします。上の例の正規表現は、数字で構成されるルール ヒットのみが関連性があるものとして指定します。

属性 Search\CondResultLen は、ルール ヒットが許容できる長さの範囲を指定します。上の例では、厳密に 9 文字のヒットだけが関連性があるものとして指定します。この変更したルールを使用したその後の記録セッションが成功すると、記録したスクリプトは、セッション ID に対してのみ解析関数を含みます。

変更したルールを使用して記録したスクリプト

var
  gsShopItSessionId : string; // 348364011

dclform
  SHOPITV60_KINDOFPAYMENT_ASP003:
  "choice" := "CreditCard",
  "price" := "15.9",
  "sid" := gsShopItSessionId; // value: "348364011"

MYFORM004:
  "address" := "a", // changed
  "city" := "b", // changed
  "state" := "c", // changed
  "zip" := "" <SUPPRESS> , // value: ""
  "ZipCode" := "d", // added
  "cardtype" := "Visa", // added
  "cardnumber" := "111-111-111", // changed
  "expiration" := "07.04", // changed
  "sid" := "" <USE_HTML_VAL> ;//value:"348364011"

ルール ヒットの許される使用箇所の指定

ルール ヒット数の制限のほかに、スクリプト内でルール ヒットが使用される場所を指定することで、より特殊化することができます。この例に対して次の条件を考えます： セッション ID は、フォーム フィールド名が "sid" であるフォーム フィールド値にのみ現れます。解析ルールの ScriptGen セクションを拡張することで (以下の例で示す通り)、ルール ヒットはこれらの特殊な条件下でのみ使用されます。

スクリプト生成でのさらなる特殊化

<RecordingRuleSet>

  <HttpParsingRule>
    <Name>ShopIt V6.0 Session Id</Name>
    <Search>
      <SearchIn>Body</SearchIn>
      <LB>
        <Str>name=&quot;</Str>
      </LB>
      <RB>
        <Str>&quot;</Str>
      </RB>
    </Search>
    <ScriptGen>
      <VarName>ShopItSessionId</VarName>
      <ReplaceIn>FormFieldValue</ReplaceIn>
      <Conditions>
        <CompareData>
          <Data>sid</Data>
          <ApplyTo>FormFieldName</ApplyTo>
        </CompareData>
      </Conditions>
    </ScriptGen>
  </HttpParsingRule>

</RecordingRuleSet>

属性 ScriptGen\ReplaceIn は、Recorder がフォーム フィールド値をスクリプト化するときにのみルール ヒットが使用されるように指定します。加えて、関連したフォーム フィールド名が sid である場合のみ、置換が許可されるように条件を指定します。この変更したルールを使って記録すると、元のルールを使用して生成されたスクリプトとほほ同じスクリプトを生成します。

親トピック: HTTP 解析ルールの例


変換 DLL の作成

変換関数は、ネイティブ Win32 DLL でなければなりません (.NET アセンブリではありません)。Microsoft Visual Studio で作成するには、Win32 プロジェクトを作成し、アプリケーションの種類として DLL を選択する必要があります。

64 ビット OS 上では、Silk Performer は 64 ビット プロセスを使って、キャプチャ ファイルを分析して、スクリプトを生成します。つまり、32 ビット版（スクリプトの再生用）と 64 ビット版（スクリプトの生成用）の 2 種類の変換 DLL を作成する必要があります。64 ビット版 DLL は、<32 ビット版 DLL の名前>_x64.dll という名前で、32 ビット版 DLL と同じディレクトリに配置する必要があります。

何らかの理由で 64 ビット版 DLL を作成できない場合は、つぎのレジストリ キーを 1 に設定して、スクリプトの生成に 32 ビット プロセスを使うことを Silk Performer に強制することができます：HKEY_LOCAL_MACHINE\SOFTWARE\Silk\SilkPerformer\<version>\Force32BitCaptureAnalyzer。
重要: 32 ビットのスクリプト生成プログラムでは、キャプチャ ファイルのサイズが大きい場合に問題が発生する可能性があります。

Silk Performer は、独自のカスタム変換 DLL を作成するためのガイドラインとなる Microsoft Visual Studio のサンプル プロジェクトをヘッダーと .cpp ファイルと共に提供します。このサンプルは、<パブリック ユーザー ドキュメント>\Silk Performer <バージョン>\SampleApps\SampleConversion にあります。

プロジェクトを作成した後、いくつかの変更する必要のあるプロジェクト設定があります。
  • [文字セット] オプションを [マルチ バイト文字セットを使用する] (MBCS) に設定する必要があります。これは、文字列を MBCS 文字列として変換して渡す必要があるために必要となります。
  • C ランタイム DLL への依存性を除去するため、C ランタイムの静的なバージョンを使用することを推奨します。この依存性は、C ランタイム DLL (使用したバージョンの) がエージェントまたはコントローラ マシンにインストールされていない場合に問題を起こします。静的 C ランタイム ライブラリを使用するには、[C++ | コード生成] にある [ランタイム ライブラリ] 設定を変更します。
    • リリース構成の場合： [マルチスレッド (/MT)]
    • デバッグ構成の場合： [マルチスレッド デバッグ (/MTd)]

推奨

記録ルールで変換 DLL を参照する場合、DLL を Silk Performer 記録ルール ディレクトリ、または、プロジェクト ディレクトリにコピーする必要があります。変換 DLL を Microsoft Visual Studio で開発する際には、ポスト ビルド ステップで DLL をこれらのディレクトリ (記録ルールまたはプロジェクト) にコピーするか、または記録ルールにリリース構成の出力ディレクトリ パスを変更します。

変換関数のエクスポート

次のシグネチャを持つ変換関数をエクスポートする必要があります。

extern "C"
{
  __declspec( dllexport )
  long MyConversionFunction(
  LPCSTR sOriginalValue,
  LPSTR sConvertedValue,
  unsigned long* psConvertedValueLen,
  void* pReserved);
}

C++ リンケージ (extern "C") を使用する目的は、エクスポートした関数の C++ 名前マングルをオフにするためです。C++ リンケージを使用した場合、引数の型のようなほかの情報は関数のエクスポートした名前に加えられます。純粋関数の名前をエクスポートした関数名として使用します (上記の例では MyConversionFunction)。

関数の引数は次のとおりです。
sOriginalValue | 変換される MBCS 文字列の値。
sConvertedValue | 変換した値を MBCS 文字列として受け取る文字列バッファ。
psConvertedValueLen | 文字列バッファ sConvertedValue の長さを含む変数へのポインタ変数の値は、変換が成功した場合sConvertedValue に書き出されるバイト数に設定されます。この変数の値は、文字列バッファ sConvertedValue のサイズが小さすぎる場合、変換した値に必要なバイト数に設定する必要があります。
pReserved | 今後に利用するために予約。
戻り値
  • ERROR_SUCCESS (0): 変換が成功したかどうかを返します。psConvertedValueLen には、sConvertedValue に書き出されたバイト数が含まれます。
  • ERROR_INSUFFICIENT_BUFFER (122): sConvertedValue のサイズ (*psConvertedVale) が、変換した値と比較して小さすぎるため変換が失敗した場合に返されます。*psConvertedValueLen には、変換した値を格納するために必要な倍と数が含まれいます。この関数は、*psConvetedValueLen に増やした sConvertedValue のサイズで再び呼び出されます。
  • 変換が失敗したことを示す任意のその他の値を返します。
親トピック: HTTP 解析ルールの例


Search セクション - ルール ヒットの検索

ルール ヒットを Search セクションで指定して検索することについて説明します。この節で述べるプロパティのすべての XML パスは、HttpParsingRule\Search に相対です。

  • はじめに
    境界を定義し、正規表現を適用する方法について説明します。
  • LB\Str 属性
    属性 LB\Str の型とデフォルト値、および説明と例を提供します。
  • LB\RegExpr 属性
    属性の型とデフォルト値、および説明と例を提供します。
  • LB\Offset 属性
    属性 LB\Offset の型とデフォルト値、および説明と例を提供します。
  • RB\Str 属性
    属性 RB\Str の型とデフォルト値、および説明と例を提供します。
  • RB\CharType 属性
    属性 RB\CharType の型とデフォルト値、および説明と例を提供します。
  • RB\RegExpr 属性
    属性 RB\RegExpr の型とデフォルト値、および説明と例を提供します。
  • RB\Length 属性
    属性 RB\Length の型とデフォルト値、および説明と例を提供します。
  • RegExpr 属性と RegExprTag 属性
    属性 RegExpr と RegExprTag の型とデフォルト値、および説明と例を提供します。
  • SearchIn 属性
    属性 SearchIn の型とデフォルト値、および例を提供します。
  • CaseSensitive 属性
    属性 CaseSensitive の型とデフォルト値、および説明を提供します。
  • IgnoreWhiteSpaces 属性
    属性 IgnoreWhiteSpaces の型とデフォルト値、および説明と例を提供します。
  • CondContentType 属性
    属性 CondContentType の型とデフォルト値、および説明と例を提供します。
  • CondRegExpr 属性
    属性 CondRegExpr の型とデフォルト値、および説明と例を提供します。
  • CondResultLen 属性
    属性 CondResultLen の型とデフォルト値、および説明を提供します。
  • Conditions 属性
    属性 Conditions の型とデフォルト値、および説明を提供します。
  • Conversion\Dll 属性
    属性 Conversion\Dll の型とデフォルト値、および説明を提供します。
  • Conversion\Function 属性
    属性 Conversion\Function の型とデフォルト値、および説明を提供します。
親トピック: HTTP 解析ルール


はじめに

ルール ヒットは、HTTP レスポンスから 2 つの方法で取り出すことができます。
  • 境界の定義
  • 正規表現の適用

境界の定義

ルールが境界を定義するとき、HTTP レスポンス内の左境界が出現すると、ルール ヒットの開始としてマークされます。この地点から、HTTP レスポンス内を進めていき、右境界の最初の出現を、ルール ヒットの終わりとしてマークします。

左境界は、3 つの方法で定義できます。
  • 文字列：HTTP レスポンスで指定した文字列が出現すると、ルール ヒットの開始としてマークします。
  • 正規表現：HTTP レスポンスの部分文字列が指定した正規表現と一致すると、ルール ヒットの開始としてマークします。
  • オフセット計算：HTTP レスポンスで、ルール ヒットの開始を決定するために、オフセット計算を行います。オフセット計算は、「Offset と Length」の節で説明します。
右境界は、4 つの方法で定義できます。
  • 文字列：左境界地点の後の指定した文字列の次の出現を、ルール ヒットの終わりとしてマークします。
  • 正規表現：左境界地点の後の指定した正規表現と一致する HTTP レスポンスの次の部分文字列を、ルール ヒットの終わりとしてマークします。
  • 長さ：ルール ヒットの終わりは、HTTP レスポンスの稼動部分 (ルール ヒットの開始からレスポンスの終わりまで) から長さの計算まで決定されます。長さの計算は、「Offset と Length」の節で説明します。
  • 文字型：指定した文字型のセットと一致する次の文字を、ルール ヒットの終わりとしてマークします。

正規表現の適用

ルールが正規表現を定義する場合、その正規表現と一致する HTTP レスポンスの部分文字列がルール ヒットとなります。デフォルトでは、一致全体がルール ヒットとなります。または、ルールにタグ番号を定義して、タグ付きの部分式がルール ヒットになります。

注: 記録ルールでは、正規表現 (「Structure of Regular Expressions」を参照) を使用します。さらに、記録ルールは XML 形式で保存されるため、一部の文字は特殊なエンコードを必要とします。詳細については、「XML ファイルを記述する.」を参照してください。
親トピック: Search セクション - ルール ヒットの検索


LB\Str 属性

値 | 説明
型 | Binary Data
デフォルト | (空)
説明 | この属性は、ルール ヒットを検索する文字列を指定します。この文字列が出現すると、それぞれルール ヒットの開始としてマークします。検索するとき、属性 CaseSensitive と IgnoreWhiteSpaces が使用されます。

例

<LB>
  <Str>name=&quot;</Str>
</LB>

<LB>
  <Str>BV_EngineID=</Str>
</LB>
親トピック: Search セクション - ルール ヒットの検索


LB\RegExpr 属性

値 | 説明
型 | Strings
デフォルト | (空)
説明 | この属性は、ルール ヒットを検索する正規表現を指定します。HTTP レスポンスの各部分文字列が指定した正規表現と一致すると、ルール ヒットの開始としてマークします。一致する部分文字列を検索するとき、属性 CaseSensitive と IgnoreWhiteSpaces は使用されません。

例

<LB>
  <RegExpr>name *= *[&quot;']</RegExpr>
</LB>

Matches:
 - name="
 - name = "
 - name= '
 - name   ='
 - ...
注: 記録ルールでは、正規表現 (「Structure of Regular Expressions」を参照) を使用します。さらに、記録ルールは XML 形式で保存されるため、一部の文字は特殊なエンコードを必要とします。詳細については、「XML ファイルを記述する.」を参照してください。
親トピック: Search セクション - ルール ヒットの検索


LB\Offset 属性

値 | 説明
型 | Signed Numbers
デフォルト | (空)
説明 | この属性は、「Offset Length」の節で説明する、Offset/Length 計算のオフセット値を指定します。この計算は、指定したオフセットと長さ 0 の HTTP レスポンス全体に適用されます。計算の結果の開始は、ルール ヒットの開始としてマークします。

例

<LB>
  <Offset>17</Offset>
</LB>
親トピック: Search セクション - ルール ヒットの検索


RB\Str 属性

値 | 説明
型 | Binary Data
デフォルト | (空)
説明 | この属性は、ルール ヒットの終わりを検索する文字列を指定します。LB\Str、LB\RegExpr、または LB\Offset を使用して識別さレアルール ヒットの開始と使用されます。属性 CaseSensitive と IgnoreWhiteSpaces は、検索中に使用されます。

例

<RB>
  <Str>&quot;</Str>
</RB>
親トピック: Search セクション - ルール ヒットの検索


RB\CharType 属性

値 | 説明
型 | Distinct Value Lists
デフォルト | (空)
説明 | この属性は、文字型のリストを指定し、LB\Str、LB\RegExpr、または LB\Offset を使って見つかった各ルール ヒットの終わりを検索するために使用します。ルール ヒットの終わりは、以下で指定した文字型の 1 つと一致する最初の文字で定義されます。
有効な値は次のとおりです。
  • UpperCase：大文字
  • LowerCase：小文字
  • NewLine：改行文字
  • Digit：数値 0-9
  • HexDigit：16 進数値 0-9、a-z、A-Z
  • Letter： 英文字 a-z,、A-Z
  • White：空白類
  • WhiteNoSpace：空白類 (空白スペースを除く)
  • Printable：印刷可能な文字
  • NonPrintable：印刷不能な文字
  • EndOfString：文字列の終わり (単一および二重引用符)
  • NonBase64：Base 64 エンコードに使用されない文字

例

<RB>
  <CharType>EndOfString, White</CharType>
</RB>
親トピック: Search セクション - ルール ヒットの検索


RB\RegExpr 属性

値 | 説明
型 | Strings
デフォルト | (空)
説明 | この属性は、ルール ヒットの終わりを検索する正規表現を指定します。LB\Str、LB\RegExpr、または LB\Offset を使用して見つかったルール ヒットの開始と使用されます。属性 CaseSensitive と IgnoreWhiteSpaces は、検索中に使用されません。

例

<RB>
  <RegExpr>[&quot;' *value]</RegExpr>
</RB>

Matches:
 - ]
 - "
 - '
 -  (blank char)
 - *
 - v
 - a
 - l
注: 記録ルールでは、正規表現 (「Structure of Regular Expressions」を参照) を使用します。さらに、記録ルールは XML 形式で保存されるため、一部の文字は特殊なエンコードを必要とします。詳細については、「XML ファイルを記述する.」を参照してください。
親トピック: Search セクション - ルール ヒットの検索


RB\Length 属性

値 | 説明
型 | Signed Numbers
デフォルト | (空)
説明 | この属性は、「Offset Length」の節で説明する、Offset/Length 計算の長さの値を指定します。ルール ヒットが始まる HTTP レスポンスの一部からレスポンスの終わりまで、0 のオフセットと指定した長さを使用して、計算が適用されます。計算の結果の終わりは、ルール ヒットの終わりとしてマークします。

例

<RB>
  <Length>4</Length>
</RB>
親トピック: Search セクション - ルール ヒットの検索


RegExpr 属性と RegExprTag 属性

値 | 説明
型 | Strings、Numbers
デフォルト | (空)、0
説明 | これら 2 つの属性は、ルール ヒットの検索に使用する正規表現を指定します。属性 RegExprTag が省略されない場合、指定した正規表現内のタグ付き部分式の番号を指定する必要があります。 ルール ヒットは、指定した正規表現を HTTP レスポンスに適用することで検索されます。HTTP レスポンスの各部分文字列が指定した正規表現と一致すると、ルール ヒットとなります。属性 RegExprTag が指定された場合、ルール ヒットは全体の一致ではなく、指定したタグ付き部分式になります。

例

<RegExpr>name=&quot;\([0-9]+\)&quot;</RegExpr>
<RegExprTag>1</RegExprTag>

Matches:
 - name="1234"
 - name="0"
 - name="007"
 - ...
注: 記録ルールでは、正規表現 (「Structure of Regular Expressions」を参照) を使用します。さらに、記録ルールは XML 形式で保存されるため、一部の文字は特殊なエンコードを必要とします。詳細については、「XML ファイルを記述する.」を参照してください。
親トピック: Search セクション - ルール ヒットの検索


SearchIn 属性

値 | 説明
型 | Distinct Value Lists
デフォルト | All
有効な値は次のとおりです。
  • All：これは他の値の完全なリストの省略形です。
  • Header：HTTP レスポンス ヘッダーを検索します。
  • Body：HTTP レスポンス本体を検索します。
  • HeaderName：関数 WebHeaderAdd の最初のパラメータを参照します。
  • HeaderValue：関数 WebHeaderAdd の 2 番目のパラメータを参照します。

この属性は、ルール ヒットを検索する場所 (レスポンス ヘッダー、レスポンス本体、またはその両方) を指定します。

例

<SearchIn>Body</SearchIn>
<SearchIn>Header</SearchIn>
親トピック: Search セクション - ルール ヒットの検索


CaseSensitive 属性

値 | 説明
型 | Boolean Values
デフォルト | false
説明 | この属性は、文字列 LB\Str と RB\Str を検索する際に、検索が大文字小文字を区別するかしないかを指定します。 また、関数 WebParseDataBoundEx をスクリプト化する際に、オプション フラグ WEB_FLAG_CASE_SENSITIVE がスクリプト化されるべき場合にも指定します。
親トピック: Search セクション - ルール ヒットの検索


IgnoreWhiteSpaces 属性

属性の型とデフォルト値、および説明を提供します。

値 | 説明
型 | Boolean Values
デフォルト | true
説明 | この属性は、文字列 LB\Str と RB\Str を検索する際に、検索が空白類を無視するかしないかを指定します。 また、関数 WebParseDataBoundEx をスクリプト化する際に、オプション フラグ WEB_FLAG_IGNORE_WHITE_SPACE がスクリプト化されるべき場合にも指定します。
親トピック: Search セクション - ルール ヒットの検索


CondContentType 属性

値 | 説明
型 | Strings
デフォルト | (空)
説明 | この属性は、指定したコンテンツ タイプに一致するサーバー レスポンスにヒットするルールの検索を制限する文字列を指定します。比較は前方一致で行われます。

例

<CondContentType>text/</CondContentType>

これは、"text/html" や "text/plain" などのコンテンツ タイプでサーバー レスポンスにヒットするルールに対する検索を制限します。

親トピック: Search セクション - ルール ヒットの検索


CondRegExpr 属性

値 | 説明
型 | Strings
デフォルト | (空)
説明 | この属性は、ルール ヒットが今後の利用のために残されるべきかどうかを決定するために使用される正規表現を指定します。各ルール ヒットは、正規表現と一致する場合にチェックされます。一致するルール ヒットは保持され、一致しないルール ヒットはドロップします。

例

<CondRegExpr>eCS@Store@[0-9]+-.*</CondRegExpr>

Matches:
- eCS@Store@01234-Any other characters, even special chars like '"'
- eCS@Store@0-
- eCS@Store@987-0
- …
注: 記録ルールでは、正規表現 (「Structure of Regular Expressions」を参照) を使用します。さらに、記録ルールは XML 形式で保存されるため、一部の文字は特殊なエンコードを必要とします。詳細については、「XML ファイルを記述する.」を参照してください。
親トピック: Search セクション - ルール ヒットの検索


CondResultLen 属性

値 | 説明
型 | Numeric Ranges
デフォルト | 2 から
説明 | この属性は、ルール ヒットが今後の利用のために残されるべきかどうかを決定するために使用される範囲を指定します。ヒットのバイト数が指定された範囲と一致しない場合は、ヒットはドロップします。
親トピック: Search セクション - ルール ヒットの検索


Conditions 属性

値 | 説明
型 | Structured Data
説明 | この属性は、ルール ヒットが今後の置換のために残されるべきかどうかを決定するために適用される条件を指定します。 各ルール ヒットに対する条件は、ヒットに含まれる HTTP リクエスト/レスポンスとその他の関連するデータにアクセスを許可する環境内で評価されます。 条件が true でないことが決定すると、そのヒットはドロップします。条件に関する詳細については、「Conditions」を参照してください。条件の対象となる可能性のある情報に関しては「ConditionEvaluation 環境」の節を参照してください。
親トピック: Search セクション - ルール ヒットの検索
親トピック: 解析関数と置換のスクリプト化


Conversion\Dll 属性

値 | 説明
型 | Strings
デフォルト | (空)
説明 | この属性は、解析値を変更するのに使用した変換 DLL の名前です。指定した変換 DLL がデータ ファイルとして追加されていることを確認してください。プロジェクト ディレクトリにある DLL と記録ルール ディレクトリにある DLL に対して実行時に検索されます。
親トピック: Search セクション - ルール ヒットの検索


Conversion\Function 属性

値 | 説明
型 | Strings
デフォルト | (空)
説明 | この属性は、変換 DLL によってエクスポートされた変換関数の名前です。
親トピック: Search セクション - ルール ヒットの検索


解析関数と置換のスクリプト化

Search セクションは、HTTP レスポンスでルール ヒットを探す方法を指定しますが、ScriptGen セクションでは、スクリプト生成に関する詳細を指定します。ここで述べる属性のすべての XML パスは、HttpParsingRule\ScriptGen に相対です。

ScriptGen セクションでは、置換が適切であるスクリプトの位置にルール ヒットの使用を制限する条件を指定することを可能にし、ルール ヒットが完全に偶然に現れるような場所は除外します。さらに、使用する変数名や可読性を高めるためにスクリプトに追加するコメントなどの、いくつかの属性は Recorder に指示するために使用できます。

  • VarName 属性
    属性 VarName の型とデフォルト値、および説明を提供します。
  • OnlyIfCompleteResult 属性
    属性 OnlyIfCompleteResult の型とデフォルト値、および説明を提供します。
  • MaxLbLen 属性
    属性 MaxLbLen の型とデフォルト値、および説明を提供します。
  • ReplaceIn 属性
    属性 ReplaceIn の型とデフォルト値、および説明を提供します。
  • AlwaysNewFunc 属性
    属性 AlwaysNewFunc の型とデフォルト値、および説明を提供します。
  • CommentToVar 属性
    属性 CommentToVar の型とデフォルト値、および説明を提供します。
  • CommentToFunc 属性
    属性 CommentToFunc の型とデフォルト値、および説明を提供します。
  • GenBytesReadVar 属性
    属性 GenBytesReadVar の型とデフォルト値、および説明を提供します。
  • GenDebugPrint 属性
    属性 GenDebugPrint の型とデフォルト値、および説明を提供します。
  • Conditions 属性
    属性 Conditions の型とデフォルト値、および説明を提供します。
  • ルール ヒットのトークン化
    検索結果をトークンかすることによって、ルール ヒットを抽出する方法について説明します。
親トピック: HTTP 解析ルール


VarName 属性

値 | 説明
型 | Strings
デフォルト | (空)
説明 | この属性は、解析関数の結果に対してスクリプト化する変数名を指定します。省略された場合、ルールの名前が変数名として使用されます。
親トピック: 解析関数と置換のスクリプト化


OnlyIfCompleteResult 属性

値 | 説明
型 | Boolean Values
デフォルト | false
説明 | この属性は、スクリプト化される完全な文字列が単一の変数で置換できる場合にのみ、置換がスクリプト化されることを指定します。false の場合、ルールヒットがスクリプト化される文字列の部分文字列である場合に、置換がスクリプト化されます。
親トピック: 解析関数と置換のスクリプト化


MaxLbLen 属性

値 | 説明
型 | Numbers
デフォルト | 符号なし整数の最大値
説明 | 解析関数をスクリプト化するときに、Recorder は左境界を選択します。左境界にセッション情報が含まれるなどの危険性がある場合に、この属性は、左境界の最大長を指定するために使用できます。
親トピック: 解析関数と置換のスクリプト化


ReplaceIn 属性

値 | 説明
型 | Distinct Value Lists
デフォルト | All
説明 この属性は、置換されるヒットを含むスクリプトの位置を指定します。有効な値は次のとおりです。
  • All：これは他の値の完全なリストの省略形です。
  • Url：URL パラメータで置換します (WebPageUrl などのさまざまな関数)。
  • LinkName：リンク名で置換します (関数 WebPageLink)。WebPageParseUrl の結果となるリンク名は置換されません。
  • FormName：フォーム名で置換します (関数 WebPageSubmit)。
  • PostedData：バイナリ ポスト データで置換します (WebPagePost などのさまざまな関数)。
  • FormFieldName：スクリプトの dclform セクションのフォーム フィールド名。
  • FormFieldValue：スクリプトの dclform セクションのフォーム フィールド値。
  • SetCookie：関数 WebCookieSet のパラメータ。
  • HeaderName：関数 WebHeaderAdd の最初のパラメータを参照します。
  • HeaderValue：関数 WebHeaderAdd の 2 番目のパラメータを参照します。
親トピック: 解析関数と置換のスクリプト化


AlwaysNewFunc 属性

値 | 説明
型 | Boolean Values
デフォルト | false
説明 | この属性は、一旦解析されたルール ヒットを再利用可能かどうか、または Recorder が置換される文字列の最新の出現を解析するために新しい解析関数をスクリプト化すべきかどうかを指定します。
親トピック: 解析関数と置換のスクリプト化


CommentToVar 属性

値 | 説明
型 | Boolean Values
デフォルト | true
説明 | この属性は、解析結果を含む変数にたいしてコメントを生成するべきかどうかを指定します。true の場合、記録中の値を含むコメントが生成されます。
親トピック: 解析関数と置換のスクリプト化


CommentToFunc 属性

値 | 説明
型 | Boolean Values
デフォルト | false
説明 | この属性は、解析関数 WebParseDataBoundEx にたいしてコメントを生成するべきかどうかを指定します。true の場合、記録中に解析関数がトリガーされたルール名や解析結果を含むコメントが記録中に生成されます。
親トピック: 解析関数と置換のスクリプト化


GenBytesReadVar 属性

値 | 説明
型 | Boolean Values
デフォルト | false
説明 | この属性は、解析関数 (WebParseDataBoundEx、パラメータ nBytesParsed を参照) によって解析されるバイト数に対して変数を生成するかどうかを指定します。
親トピック: 解析関数と置換のスクリプト化


GenDebugPrint 属性

値 | 説明
型 | Boolean Values
デフォルト | false
説明 | この属性は、生成された解析関数が実行されるスクリプト関数の後に、診断用の Print 関数を生成するかどうかを指定します。true の場合、Silk Performer コントローラーの出力に解析結果を表示する Print 関数がスクリプト化されます。
親トピック: 解析関数と置換のスクリプト化


ルール ヒットのトークン化

HttpParsingRules および StringScriptingRules の両方でしようされる Search セクションには、検索結果をトークン化することによってルール ヒットを抽出することがでいる機能があります。抽出された各部分文字列 (たとえば、さまざまな左/右境界オプションを使用して) は、それ自身はルール ヒットではないが、それぞれのルール ヒットを発生させるために「トークン化」することができる、という考えに基づきます。このトークン化は、いくつかの方法で行われ、XML タグ Tokenize によって指定されます。

Tokenize タグの有効値は次のとおりです。
  • SiebelTokenHtmlSingleQuote
  • SiebelTokenHtml
  • siebelTokenApplet

トークン化メソッド SiebelTokenHtmlSingleQuote および SiebelTokenHtml は、検索結果を単一もしくは二重引用符で囲んだ個々の文字列にトークン化します。トークン化メソッド SiebelTokenApplet は、Siebel 7 Web アプリケーションのアプレット レスポンスで使用されるような長さを先頭に追加した文字列を想定して検索結果をトークン化します。

SiebelTokenHtml の例

検索結果 ["TestName","TestSite","USD","02/21/2003","N","1-2T"] は、トークン化され、次のルール ヒットの結果となります。
  • TestName
  • TestSite
  • USB
  • 02/21(2003
  • N
  • 1-2T

SiebelTokenApplet の例

検索結果 19*02/21/2003 08:20:176*SADMIN4*Note5*1-1P5 は、トークン化され、次のルール ヒットの結果となります。
  • 02/21/2003 08:20:17
  • SADMIN
  • Note
  • 1-1P5
Recorder は、実行時にトークンを抽出するためにトークン化関数の 1 つを生成することによって、スクリプトでこれらのルール ヒットを使用します。Search セクションにトークン化をもつ記録ルールを示します。
<HttpParsingRule>
  <Name>Siebel Submit Data Array in HTML (from Javascript function call)</Name>
  <Active>true</Active>
  <Search>
    <SearchIn>Body</SearchIn>
    <LB>
      <Str>SWESubmitForm</Str>
    </LB>
    <RB>
      <Str>'</Str>
    </RB>
    <Tokenize>SiebelTokenHtml</Tokenize>
    <CondResultLen>1-</CondResultLen>
  </Search>
  <ScriptGen>
    ...
  </ScriptGen>
</HttpParsingRule>
トークン化が行われた Siebel からのスクリプトの一部を示します。
var
gsRowValArray_003 : string; // 0*19*02/21/2003 08:20:176*SADMIN4*Note5*1-1P5
// ...
WebParseDataBoundEx(gsRowValArray_003, sizeof(gsRowValArray_003),
"ValueArray`", WEB_OCCURENCE_LAST, "`",
WEB_FLAG_IGNORE_WHITE_SPACE, 1);
WebPageForm("http://lab72/sales_enu/start.swe", SALES_ENU_START_SWE026,
"Account Note Applet: InvokeMethod: NewRecord");
Print("Parsed \"RowValArray_003\", result: \"" + gsRowValArray_003 + "\"");
// Was "0*19*02/21/2003 08:20:176*SADMIN4*Note5*1-1P5" when recording
// ...
dclform
// ...
SALES_ENU_START_SWE027:
"SWEMethod" := "GetQuickPickInfo",
"SWEVI" := "",
"SWEView" := "Account Note View",
"SWEApplet" := "Account Note Applet",
"SWEField" := "s_2_2_24_0",
"SWER" := "0",
"SWEReqRowId" := "1",
"s_2_2_26_0" := "2/21/2003 08:20:17 AM",
"s_2_2_27_0" := SiebelTokenApplet(gsRowValArray_003, 2), // value: "SADMIN"
"s_2_2_24_0" := SiebelTokenApplet(gsRowValArray_003, 3), // value: "Note"
"s_2_2_25_0" := "",
"SWERPC" := "1",
"SWEC" := "11",
"SWEActiveApplet" := "Account Note Applet",
"SWEActiveView" := "Account Note View",
"SWECmd" := "InvokeMethod",
"SWERowId" := SiebelTokenApplet(gsRowValArray_003, 4),
// value: "1-1P5"
"SWERowIds" := "SWERowId0=" + SiebelTokenHtml(gsRowValArray_002, 18),
// value: "SWERowId0=1-2T"
"SWEP" := "",
"SWEJI" := "false",
"SWETS" := GetTimeStamp(); // value: "1045844419057"
親トピック: 解析関数と置換のスクリプト化


ScriptGen セクション

この節では、ScriptGen セクションとその個々の属性について説明します。

  • MinRbLen LinLbLen
    属性 MinRbLen と LinLbLen の型とデフォルト値、および説明と例を提供します。
  • LastOccurence
    属性 LastOccurence の型とデフォルト値、および説明を提供します。
  • ExpectBinaryData
    属性 ExpectBinaryData について説明します。
  • Conversion\Bdl 属性
    属性 Conversion\Bdl について説明します。
  • 属性 Action
    属性 Action の値、および例を提供します。
  • 属性 VarName VarNamePrefix IsExternalVar
    属性 VarName、VarNamePrefix、IsExternalVar を説明します。
親トピック: HTTP 解析ルール
親トピック: StringScriptingRule


MinRbLen LinLbLen

値 | 説明
型 | Numbers
デフォルト | 1
説明 | このオプションでは、Recorder が決定し、WebParseDataBoundEx 関数呼び出しのパラメータとしてスクリプト化される左右の境界文字列の最小の長さを指定することができます。

例

<LB>
  <Str>name=&quot;</Str>
</LB>

<LB>
  <Str>BV_EngineID=</Str>
</LB>
親トピック: ScriptGen セクション


LastOccurence

値 | 説明
型 | Boolean Values
デフォルト | false
説明 | このオプションを true に設定すると、記録中に見つかった左境界の実際の出現が最後のものであった場合、ecorder は、実際の出現の代わりに、WEB_OCCURENCE_LAST 定数をスクリプト化します。
親トピック: ScriptGen セクション


ExpectBinaryData

このオプションを true に設定すると、Recorder は、このルールによって生成される変数のすべての利用箇所で "bin キャスト" を生成します。解析結果にバイナリ データが含まれる場合に、動的文字列の導入で必要となります。

Recorder は、"SomeText" + gsParsedValue + "some other text" の代わりに、"SomeText" + bin(gsParsedValue) + "some other text" を生成します。

デフォルト： false

親トピック: ScriptGen セクション


Conversion\Bdl 属性

この属性は省略可能です。変換 DLL の呼び出しをラップする BDL 関数の名前です。存在しないか、空のままの場合、BDL ラッパー関数の名前は、Conversion\Dll Attribute 関数と同じになります。

親トピック: ScriptGen セクション


TCP/IP プロトコル ルール

Recorder は、独自の TCP/IP プロトコルを検出するために TCP/IP プロトコル ルールを使用します。検出された場合、不明なプロトコルに対して自動的にスクリプト化される WebTcpipRecvExact 関数より、動的サーバー レスポンスを処理するのにふさわしい関数を Recorder は生成します (検出したプロトコルに従って)。

  • TCP/IP プロトコル ルールの種類
    2 種類の TCP/IP プロトコル ルール TcpRuleRecvProto および TcpRuleRecvUntil について説明します。
  • TCP/IP プロトコル ルールの構造
    2 種類の TCP/IP プロトコル ルールが共有する基本構造について説明します。
  • TcpRuleRecvProto
    TcpRuleRecvProto ルールとその個々の属性について説明します。
  • TcpRuleRecvProto の例
    TcpRuleRecvProto ルールの使い方の例を示します。
  • TcpRuleRecvUntil
    TcpRuleRecvUntil ルールとその個々の属性について説明します。
  • TcpRuleRecvUntil の例
    TcpRuleRecvUntil ルールの使い方の例を示します。
親トピック: ルール ベースの記録


TCP/IP プロトコル ルールの種類

TCP/IP プロトコル ルールには 2 種類あります。

TcpRuleRecvProto

長さベースのプロトコルを表現するために、TcpRuleRecvProto ルールを使用します。長さベースのプロトコルは、サーバーから受信するバイト数をプロトコル ヘッダーの固定位置から抽出できるプロトコルです。このルール タイプは、TcpRuleRecvProto という名前の XML ノードで指定します。

TcpRuleRecvUntil

サーバー レスポンスの終了が、終了バイト シーケンスによって検出できるかを示すプロトコルを表現するために、TcpRuleRecvUntil ルールを使用します。このルール タイプは、TcpRuleRecvUntil という名前の XML ノードで指定します。

親トピック: TCP/IP プロトコル ルール


TCP/IP プロトコル ルールの構造

2 種類の TCP/IP プロトコル ルールは、同じ基本構造を共有します。Identify セクションは、ルール タイプに固有の属性を含みます。Conditions セクションは、検出されるべきでない場所でプロトコルを検出するのを避けるために指定できる追加の条件を含みます (サーバー レスポンスが偶然にも似たプロトコルである場合など)。
<TcpRuleRecvProto>
  <Name>Sample TCP RecvProto Rule</Name>
  <Active>true</Active>
  <Identify>
    …
  </Identify>
  <Conditions>
    …
  </Conditions>
</TcpRuleRecvProto>

<TcpRuleRecvUntil>
  <Name>Sample TCP RecvUntil Rule</Name>
  <Active>true</Active>
  <Identify>
    …
  </Identify>
  <Conditions>
    …
  </Conditions>
</TcpRuleRecvUntil>
親トピック: TCP/IP プロトコル ルール


TcpRuleRecvProto

TcpRuleRecvProto ルール タイプは、次の基本構造を持つプロトコルを説明します。

受信されるバイト数は、LengthLen バイト数を使って、オフセット LengthOffset のプロトコル ヘッダーから抽出することができます。これは、ビッグ エンディアンまたはリトル エンディアン形式の何れかで解釈されます。さらに、得られた値は、値 (属性 LengthFactor) で乗算され、定数値 (属性 LengthAdd) が加算される場合があります。

  • Identify\LengthOffset 属性
    属性 Identify\LengthOffset の型とデフォルト値、および説明を提供します。
  • Identify\LengthLen 属性
    属性 Identify\LengthLen の型とデフォルト値、および説明を提供します。
  • Identify\OptionFlags 属性
    属性 Identify\OptionFlags の型とデフォルト値、および説明を提供します。
  • Identify\LengthFactor 属性
    属性 Identify\LengthFactor の型とデフォルト値、および説明を提供します。
  • Identify\LengthAdd 属性
    属性 Identify\LengthAdd の型とデフォルト値、および説明を提供します。
  • Conditions
    プロトコルの「検出」を除外するために指定できる追加の条件について説明します。
  • Conditions の GenVerify 属性
    属性 Identify\LengthAdd の型とデフォルト値、および説明を提供します。
親トピック: TCP/IP プロトコル ルール


Identify\LengthOffset 属性

値 | 説明
型 | Numbers
デフォルト | 0

この属性は、プロトコル ヘッダー内の長さ指定のオフセットを指定します。これは、関数 WebTcpipRecvProto(Ex) のパラメータ nProtoStart に対応します。

親トピック: TcpRuleRecvProto


Identify\LengthLen 属性

値 | 説明
型 | Numbers
デフォルト | 4

この属性は、プロトコル ヘッダー内の長さ指定のバイト数を指定します。これは、関数 WebTcpipRecvProto(Ex) のパラメータ nProtoLength に対応します。

親トピック: TcpRuleRecvProto


Identify\OptionFlags 属性

値 | 説明
型 | Distinct Value Lists
デフォルト | (空)

この属性は、長さ指定の解釈方法を指定します。有効な値は、関数 WebTcpipRecvProto(Ex) のパラメータ nOption に対して利用可能ななオプションに対応します。空のデフォルト値は、ビッグ エンディアンを意味します。

有効な値は次のとおりです。
  • LittleEndian:オプション TCP_FLAG_LITTLE_ENDIAN
  • ProtoIncluded:オプション TCP_FLAG_INCLUDE_PROTO
親トピック: TcpRuleRecvProto


Identify\LengthFactor 属性

値 | 説明
型 | Numbers
デフォルト | 1

この属性は、係数を指定します。プロトコルの長さは、この係数がかけられます。これは、関数 WebTcpipRecvProtoEx のパラメータ nMultiply に対応します。

親トピック: TcpRuleRecvProto


Identify\LengthAdd 属性

値 | 説明
型 | Signed Numbers
デフォルト | 0

このプロパティは定数値を指定します。この値は、プロトコルの長さに追加されます。これは、関数 WebTcpipRecvProtoEx のパラメータ nSum に対応します。

親トピック: TcpRuleRecvProto


Conditions

サーバー レスポンスが同時にプロトコル使用が似ている状況で、プロトコルの「検出」を除外するために指定できる追加の条件について説明します。

条件に関する詳細については、「Conditions」を参照してください。条件の対象となる可能性のある情報に関しては「ConditionEvaluation 環境」の節を参照してください。

親トピック: TcpRuleRecvProto
親トピック: TcpRuleRecvUntil


Conditions の GenVerify 属性

値 | 説明
型 | Boolean Values
デフォルト | false

基本条件を指定する最中に、GenVerify 属性を関数WebTcpipRecvProtoEx のパラメータ sVerify、nVerifyStart、nVerifyLength に対するスクリプトを指定するために使用することができます。

条件が評価されるときに、評価値が true となり、属性 GenVerify を指定する最初の基本条件は、どのデータにこの条件が適用されるかを決定し、WebTcpipRecvProtoEx 関数の検証部分をスクリプト化するのに使用されます。

親トピック: TcpRuleRecvProto


TcpRuleRecvProto の例

この例では、Siebel 6 Thin Client 用の記録ルールを書く方法を説明します。

このクライアントは、Web ブラウザで実行する ActiveX コントロールです。記録したスクリプトは、1 つの WebPageUrl() 呼び出しと、それに続く ActiveX コントロールからの TCP/IIIIP トラフィックで構成されます。記録ルールがないと、サーバー レスポンスは、WebTcpipRecvExact() 呼び出しによってスクリプト化されます。

記録した Siebel 6 TCP/IP スクリプトの一部

WebTcpipSendBin(hWeb0,
  "\h00000030000000000000000000000001" // ···0············ 00000000
  "\h0000000C0000001C0000019100000000" // ················ 00000010
  "\h00000020000002580000000C00000000" // ··· ···X········ 00000020
  "\h00000000", 52); // ···· 00000030
WebTcpipRecvExact(hWeb0, NULL, 40);

サーバー レスポンスは、TrueLog Explorer を利用して分析できます。

各レスポンスは、プロトコル ヘッダーを含み、プロトコル ヘッダーはバイト数を指定する 4 バイトと、プロトコル ヘッダーで構成されます。長さの指定は、ビッグ エンディアン形式で行われます (最上位バイトを先に)。

これらの結果に基づき、記録ルールは次に示すように記述されます。

Siebel 6 Thin Client TCP/IP トラフィックの記録ルール

<?xml version="1.0" encoding="UTF-8" ?>
<RecordingRuleSet>
  <TcpRuleRecvProto>
    <Name>Siebel TCP Protocol</Name>
    <Identify>
      <LengthOffset>0</LengthOffset>
      <LengthLen>4</LengthLen>
    </Identify>
  </TcpRuleRecvProto>
</RecordingRuleSet>

このルールは、プロトコル ヘッダーがデータ ブロックの長さをオフセット 0 から 4 バイトを使用して含んでいることを指定します。このルールを使用すると、 以下に示すように、Recorder はサーバー レスポンスに対して関数 WebTcpipRecvProto() を使用してスクリプトを生成します。

記録ルールを使用して記録したスクリプトの一部

WebTcpipSendBin(hWeb0,
  "\h00000030000000000000000000000001" // ···0············ 00000000
  "\h0000000C0000001C0000019100000000" // ················ 00000010
  "\h0000001F000002580000000C00000000" // ·······X········ 00000020
  "\h00000000", 52); // ···· 00000030
WebTcpipRecvProto(hWeb0, 0, 4);

このルールを使用して記録したスクリプトは、記録中に受信したバイト数と異なるバイト数を受信しても正しく再生されます。

親トピック: TCP/IP プロトコル ルール


TcpRuleRecvUntil

TcpRuleRecvUntil ルール タイプは、どのようにしてサーバー レスポンスの終了が、終了バイト シーケンスを検索することによって検出できるかを示すプロトコルを指定します。
  • Identify\TermData 属性
    属性 Identify\TermData の型とデフォルト値、および説明を提供します。
  • Identify\IgnoreWhiteSpaces 属性
    属性 Identify\IgnoreWhiteSpaces の型とデフォルト値、および説明を提供します。
  • Conditions
    プロトコルの「検出」を除外するために指定できる追加の条件について説明します。
親トピック: TCP/IP プロトコル ルール


Identify\TermData 属性

値 | 説明
型 | Binary Data
デフォルト | (空)
この属性は、プロトコルの終了バイト シーケンスを指定します。
親トピック: TcpRuleRecvUntil


Identify\IgnoreWhiteSpaces 属性

値 | 説明
型 | Boolean Values
デフォルト | false
この属性は、終端データを検索中に Recorder が空白類を無視するべきかどうかを指定します。スクリプト化した終端データ (関数 WebTcpipRecvUntil のパラメータ sPattern) は、記録中にあったことを厳密に反映します。つまり、空白類に関して、プロパティ Identify\TermData で指定したものと異なる場合があります。
親トピック: TcpRuleRecvUntil


TcpRuleRecvUntil の例

この例では、telnet セッションに対して記録したスクリプトを改良する方法について説明します。

telnet セッションを記録ルールなしで記録すると、次に示すように、数多くの WebTcpipRecvExact() 関数呼び出しがスクリプトに記録されます。

記録ルールを使用せずに記録した Telnet スクリプトの一部

WebTcpipSend(hWeb0, "l");
WebTcpipRecvExact(hWeb0, NULL, 1);
WebTcpipSend(hWeb0, "s\r\n");
WebTcpipRecvExact(hWeb0, NULL, 1);
WebTcpipRecvExact(hWeb0, NULL, 2);
WebTcpipRecvExact(hWeb0, NULL, 1220);

TrueLog Explorer は、サーバー レスポンスを分析するために使用できます。各サーバー レスポンスは、コマンド プロンプトで終わります。コマンド プロンプトは、3 文字のシーケンス、ブランク、ハッシュ、ブランクで終わります。これは、サーバー レスポンスのデータの終端として正しい選択であると思われます。

記録ルールは、この種のサーバー レスポンスに対して書き出すことができます。ルールは、この特殊な終端シーケンスで終わるサーバー レスポンスを監視し、これらのサーバー レスポンスに対して、関数 WebTcpipRecvExact() の代わりに関数 WebTcpipRecvUntil() をスクリプト化するように Rcorder に指示します。

Telnet の TCP/IP 記録ルール

<?xml version="1.0" encoding="UTF-8" ?>
<RecordingRuleSet>
  <TcpRuleRecvUntil>
    <Name>Telnet Command Prompt</Name>
    <Active>true</Active>
    <Identify>
      <TermData> # </TermData>
      <IgnoreWhiteSpaces>false</IgnoreWhiteSpaces>
    </Identify>
    <Conditions>
      <NoBlockSplit>true</NoBlockSplit>
    </Conditions>
  </TcpRuleRecvUntil>
</RecordingRuleSet>

終端データを、属性 Identify\TermData で指定します。終端データでは、空白類が意味を持つため、空白類を無視しないように属性 Identify\IgnoreWhiteSpaces で指定する必要があります。

サーバー レスポンスにたまたま同じ終端シーケンスがレスポンス中のほかの場所に含まれていたとしても、このルールを適用すべきではありません。よって、条件 NoBlockSplit を指定すべきです。これは、終端データの終わりが telnet サーバーから受信した TCP/IP パケットの終わりと一致しなければならないことを意味し、そうでなければルールは適用されません。

記録ルールを使用して記録した Telnet スクリプトの一部

WebTcpipSend(hWeb0, "l");
WebTcpipRecvExact(hWeb0, NULL, 1);
WebTcpipSend(hWeb0, "s");
WebTcpipRecvExact(hWeb0, NULL, 1);
WebTcpipSend(hWeb0, "\r\n");
WebTcpipRecvUntil(hWeb0, NULL, 0, NULL, " # ");

この例は、ルールが機能することを示しています。このスクリプトは、再生時にさまざまなサーバー レスポンスを処理しやすくなっています。

終端シーケンスは、他の Telnet サーバーでは異なる場合があります。オペレーティング システムやユーザー設定に依存することにご注意ください。よって、ここで示すルールは、すべての Telnet サーバーに対して機能する汎用のルールではありません。しかし、終端文字シーケンスを変更することによって、簡単に適用させることができます。TrueLog Explorer を使用することで、他の Telnet サーバーに対する適切な終端バイト シーケンスを簡単に決定できます。

親トピック: TCP/IP プロトコル ルール


StringScriptingRule

StringScriptingRule の目的は、文字列のスクリプト化処理をフックすることです。

Web Recorder が文字列をスクリプトに生成するときはいつでも (場所に関係なく、API 関数のパラメータやフォーム フィールド名や値など)、このタイプのルールは評価され、特殊なアクションが行われます。それによって、文字列がそのまま生成されずに、何らかの方法で処理されます。

  • 構造
    StringScriptingRule の基本構造について説明します。
  • Search セクション
    StringScriptingRule の Search セクションについて説明します。
  • ScriptGen セクション
    ScriptGen セクションとその個々の属性について説明します。
親トピック: ルール ベースの記録


構造

StringScriptingRule の基本構造は HttpParsingRule の構造と非常によく似ています。Search および ScriptGen という名前の 2 つのセクションで構成されます (以下の例を参照)。

<StringScriptingRule>
  <Name>Replace TimeStamp</Name>
  <Active>true</Active>
  <Search>
    <SearchIn>FormFieldValue</SearchIn>
    <LB>
      <Offset>0</Offset>
    </LB>
    <RB>
      <Length>0</Length>
    </RB>
  </Search>
  <ScriptGen>
    <Action>CheckTimeStamp</Action>
  </ScriptGen>
</StringScriptingRule>
親トピック: StringScriptingRule


Search セクション

HttpParsingRule の Search セクションの詳細は、任意の HTTP レスポンスに適用されますが (機能置換の候補であるルール ヒットを抽出する目的で)、StringScriptingRule の Search セクションは、特殊な方法で取り扱うべき部分文字列を抽出する目的で、スクリプト化される文字列に適用されます。部分文字列を抽出する方法についてのすべてのテクニックは、StringScriptingRule の　Search セクションで使用することも可能です (「Search セクション - ルール ヒットの検索」を参照)。

唯一、属性 SearchIn の意味が異なります。

HttpParsingRule の場合、属性 SearchIn は、ルール ヒットを検索する場所を指定します。有効な値は次のとおりです： Header、Body、All。

StringScriptingRule の場合、属性 SearchIn は、このルールを適用すべきスクリプトの位置のリストを指定します。これは、「Scripting 条件」で述べたように、条件タイプ Scripting に対するスクリプトの場所のリストになります。

さらに、2 つの新しいスクリプトの場所、HeaderName　と HeaderValue があります。これらは、関数 WebHeaderAdd の 2 つのパラメータを識別するものです。詳細については、「値への追加の適用」を参照してください。

部分を検索する方法にもうひとつの可能性があります (HttpParsingRule の Search セクションにも適用可能です)。

属性 Special は、特殊な検索アルゴリズムを指定することができます。 現在、サポートされている値は、SiebelParam のみです。これは、Siebel 7 Web アプリケーションで使用されているような長さを先頭に追加した値のような任意の部分文字列に対して文字列を検索します。

<StringScriptingRule>
  <Name>SiebelParam Function Call</Name>
  <Active>true</Active>
  <Search>
    <SearchIn>FormFieldValue</SearchIn>
    <Special>SiebelParam</Special>
    <Conditions>
    </Conditions>
  </Search>
  <ScriptGen>
    <Action>CheckSiebelParam</Action>
  </ScriptGen>
</StringScriptingRule>
親トピック: StringScriptingRule


属性 Action

この属性は、Search セクションによって識別される部分文字列に対して実行されるアクションを指定します。

以下の値を指定できます。

値 | 説明
CreateVariable | 文字列の値に初期化した変数を作成し、スクリプトの元の値の代わりに変数で置換されます。
CheckTimeStamp | 元の文字列が実際にタイムスタンプ値のように見える場合、もとの文字列の代わりに関数呼び出し GetTimeStamp() を作成します。
CheckSiebelParam | 元の文字列が Siebel 7 Web アプリケーションで使用されているような長さを先頭に追加した値のように構造化されているかどうかチェックします。もしそうなら、元の値を関数呼び出し Siebel7Param(...) で置き換えます。例："5*Value" will become: Siebel7Param("Value")
DecodeSiebelJavaScriptString | 元の文字列が JavaScript コード内でバックスラッシュでエスケープされる特殊文字を含むかどうかをチェックします。もしそうなら、JavaScript コードに埋め込まれたのと同じようになるように文字列を修正し、パラメータとしてエンコードした文字列をとる関数 SiebelDecodeJsString(...) を作成します。関数 SiebelDecodeJsString は、スクリプトの再生時にこのエンコードを元に戻します。つまり、同じネットワーク トラフィックが生成されます。この目的は、パラメータを修正することによって、HttpParsingRules が解析できるようにすることです。この置換をしないと解析できない場合があります。
CheckSiebelDateTime | 元の文字列が Siebel Web クライアントによって送信される形式の日付/時刻の組み合わせのように見えるかどうかをチェックします。もしそうなら、Siebel Web クライアントへのサーバー レスポンスに現れる形式と等価な日付/時刻の組み合わせに変換します。この場合、この変換をスクリプト再生時に戻すために、ラップ関数 SiebelDateTime が記録されます。この目的は、日付/時刻の組み合わせがサーバー レスポンスに現れるのと同じ形式でスクリプトに現れるため、他の解析ルールで解析できるようにすることです。
CheckSiebelDate | CheckSiebelDateTime と同じですが、日付のみです。ラップ関数 SiebelDate を記録します。
CheckSiebelTime | CheckSiebelDateTime と同じですが、時刻のみです。ラップ関数 SiebelTime を記録します。
CheckSiebelPhone | CheckSiebelDateTime と同じですが、電話番号に対してになります。ラップ関数 SiebelPhone を記録します。

たとえば、Siebel 7 Web SilkEssential の記録ルールを見てみます。

例 (オンライン ショップで品数用の変数を作成する)：この例は、フォーム フィールド名 qty で品数が送信されていると仮定します。

<?xml version="1.0" encoding="UTF-8" ?>
<RecordingRuleSet>
  <StringScriptingRule>
    <Name>Parameterize item quantity</Name>
    <Active>true</Active>
    <Search>
      <SearchIn>FormFieldValue </SearchIn>
      <LB>
        <Offset>0</Offset>
      </LB>
      <RB>
        <Length>0</Length>
      </RB>
      <Conditions>
        <CompareData>
          <ApplyTo>FormFieldName</ApplyTo>
          <Length>0</Length>
          <Data>qty</Data>
        </CompareData>
      </Conditions>
    </Search>
    <ScriptGen>
      <Action>CreateVariable</Action>
      <VarName>Quantity</VarName>
    </ScriptGen>
  </StringScriptingRule>
</RecordingRuleSet>
親トピック: ScriptGen セクション


属性 VarName VarNamePrefix IsExternalVar

これらの属性は Action 属性が CreateVariable である場合にのみ適用可能です。変数名 (属性 VarName) または変数名の接頭辞 (属性 VarNamePrefix) の何れかを指定できます。後者の場合、実際の変数名は、指定された接頭辞と記録中の実際の文字列値から構築されます。

属性 IsExternalVar (boolean, デフォルト： false) は、変数に対する宣言のスクリプト化を抑制するために使用されます。これは、この変数が SilkEssential 内の BDH ファイルですでに宣言されていることを知っている場合に有用です。

親トピック: ScriptGen セクション


HttpScriptingRule

ルール タイプ HttpScriptingRule は、Recorder が行うスクリプト生成の判断をフックすることができます。このルール タイプの前に Recorder が採用したデフォルトのヒューリスティックを上書きできます。このようなルールがない場合は、まだ採用されます。

  • 構造
    HttpScriptingRule の基本構造について説明します。
  • HttpScriptingRule アクション
    すべての HttpScriptingRule アクションの説明と例を示します。
親トピック: ルール ベースの記録


構造

HttpScriptingRule の基本構造は、かなりシンプルです。共通のタグ Name および Active に加えて、許されている唯一のタグは Action です。Action タグは、どの条件判断がフックされるかを指定します。

実際の条件判断は条件を使って実装されます。条件を評価した結果は、このようなルールの戻り値です。条件は、スクリプト化される HTTP リクエスト/レスポンスにアクセスできます。

<HttpScriptingRule>
  <Name>Suppress some cookie</Name>
  <Active>true</Active>
  <Action>SuppressCookie</Action>
  <Conditions>
    ...
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule


HttpScriptingRule アクション

  • ForceTcp
    ForceTcp アクションの説明と例を示します。
  • NoHtml ForceHtml
    NoHtml および ForceHtml アクションの説明と例を示します。
  • NoFuzzyFormDetection ForceFuzzyFormDetection
    NoFuzzyFormDetection および ForceFuzzyFormDetection アクションの説明と例を示します。
  • NoDynLinkParsing ForceDynLinkParsing
    NoDynLinkParsing および ForceDynLinkParsing アクションの説明と例を示します。
  • DefinePageName
    DefinePageName アクションの説明と例を示します。
  • SuppressCookie CommentCookie
    アクション SuppressCookie および CommentCookie の説明と例を示します。
  • ScriptCookieDomainAsRequestHost
    ScriptCookieDomainAsRequestHost アクションの説明と例を示します。
  • SuppressFrameName SuppressLinkName SuppressFormName SuppressCustomUrlName
    アクション SuppressFrameName、SuppressLinkName、SuppressFormName,、および SuppressCustomUrlName の説明と例を示します。
  • MapFunctionName
    MapFunctionName アクションの説明と例を示します。
  • AddInitFunction
    AddInitFunction アクションの説明と例を示します。
  • NoAddUrl
    NoAddUrl アクションを説明します。
  • SuppressRecording
    SuppressRecording アクションを説明します。
  • ForceContextless
    ForceContextless アクションを説明します。
  • DontUseHtmlVal
    DontUseHtmlVal アクションを説明します。
  • NoQueryToForm ForceQueryToForm
    NoQueryToForm および ForceQueryToForm アクションを説明します。
親トピック: HttpScriptingRule


ForceTcp

この記録ルールを使用すると、TCP/IP 低レベル関数を使用してスクリプトが生成されます。プロトコルの検出は実行されません。この記録ルールは、キャプチャ ファイルからスクリプトが生成される際にのみ適用されます。
<RecordingRuleSet>
  <HttpScriptingRule>
    <Name>Force TCP/IP Scripting</Name>
    <Active>true</Active>
    <Action>ForceTcp</Action>
  </HttpScriptingRule>
</RecordingRuleSet>
親トピック: HttpScriptingRule アクション


NoHtml ForceHtml

HTTP レスポンス本体が HTML またはそうでないかどうかを決定する必要がある場合はいつでも、Recorder は HttpScriptingRules をアクション NoHtml または ForceHtml を使用して評価します。このようなルールが存在しないと、あるいは true を返すルールがない場合、Recorder は HTTP レスポンスの Content-Type ヘッダーを調べます。

このルール タイプは、デフォルトの記録結果が要求を満たさない場合に、ページ レベル関数のスクリプト化を抑制する、または強制するために便利です。

WebPageAddUrl が適切なときでさえ、WebPageUrl または WebPageLink がスクリプト化されるので、「404 Not Found」レスポンスが HTML エラーの説明として返されることがよくあります。

<HttpScriptingRule>
  <Name>No HTML for zip files</Name>
  <Active>true</Active>
  <Action>NoHtml</Action>
  <Conditions>
    <CompareData>
      <ApplyTo>Http.Initial.Request.Url.Ext</ApplyTo>
      <Data>zip</Data>
    </CompareData>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


NoFuzzyFormDetection ForceFuzzyFormDetection

HttpScriptingRule のこれらアクションは、個々の HTTP リクエストのプロファイル設定の あいまいなフォーム検出 設定を上書きするために使用できます。

このルールは、フォーム フィールド名に sid を含むフォームに対してのみ、あいまいなフォーム検出が有効になります (プロファイル設定で有効化されているとします)。

<HttpScriptingRule>
  <Name>No fuzzy form detection except for forms with field sid</Name>
  <Active>true</Active>
  <Action>NoFuzzyFormDetection</Action>
  <Conditions>
    <Not>
      <Exists>
        <ApplyTo>Form.Field(Name:sid)</ApplyTo>
      </Exists>
    </Not>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


NoDynLinkParsing ForceDynLinkParsing

HttpScriptingRule のこれらアクションは、個々の HTTP リクエストのプロファイル設定の [動的なリンク解析] 設定を上書きするために使用できます。

この例では、クエリ文字列に文字列 sid= を含んだ HTTP リクエストに対して動的なリンク解析を強制します (プロファイル設定でオフに設定されている場合でも)。

<HttpScriptingRule>
  <Name>Force dynamic link parsing for some query strings</Name>
  <Active>true</Active>
  <Action>ForceDynLinkParsing</Action>
  <Conditions>
    <FindData>
      <ApplyTo>Http.Initial.Request.Url.QueryData</ ApplyTo>
      <Data>sid=</Data>
    </FindData>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


DefinePageName

このアクションでは、HTML ページに別のページ名を定義することができます。Recorder は、HTML ページの名前に基づいてさまざまな文字列 (ページ タイマ名、格納されたコンテキスト変数の名前) を生成します。デフォルトでは、Recorder は、ページ名として HTML ページのタイトル (タイトルがない場合は「名前のないページ」) を使用します。

このようなルールは次の条件を持つ必要があります。
  • true を返す
  • 変数 PageName (条件の SaveAs タグを使用) に空の文字列を保存

条件では、変数 DefaultPageName を通して、 Recorder が使用するデフォルト ページ名にアクセスします。

次の例では、デフォルト ページ名が存在しないかどうかをチェックし (存在しない場合は、Recorder は「名前のないページ」を使用します)、最低 3 文字の長さがあれば、HTTP ドキュメントの URL になるように代わりにページ名を定義します。

<HttpScriptingRule>
  <Name>Define Page Name</Name>
  <Active>true</Active>
  <Action>DefinePageName</Action>
  <Conditions>
    <Not>
      <Exists>
        <ApplyTo>DefaultPageName</ApplyTo>
      </Exists>
    </Not>
    <CheckRange>
      <ApplyTo>Http.Initial.Request.Url</ApplyTo>
      <Range>3-</Range>
      <SaveAs>PageName</SaveAs>
      <SaveMode>Replace</SaveMode>
    </CheckRange>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


SuppressCookie CommentCookie

有用でない場所や誤った場所で、関数 WebCookieSet が記録されることがあります。

これは、クライアント側 Cookie にタイトな継承があり、ページの埋め込みオブジェクトでサーバー側 Set-Cookie ヘッダーがあるとき、タイトなタイミングで発生する可能性があります。このような場合、ブラウザーは、異なるクッキー値を送信させるべく Set-Cookie ヘッダーをすでに受信していますが、ブラウザーはクッキーを送信しない、あるいは古い値のクッキーを送信することができます。

このような場合、これらのアクションは WebCookieSet 関数呼び出しをコメント化したり、記録を完全に抑制するために使用することができます。

このルールは、クッキー名が PS_TOKENEXPIRE である場合に (Peoplesoft SilkEssential より)、WebCookieSet 関数呼び出しのスクリプト化を抑制します。

<HttpScriptingRule>
  <Name>Suppress Cookie PS_TOKENEXPIRE</Name>
  <Active>true</Active>
  <Action>SuppressCookie</Action>
  <Conditions>
    <CompareData>
      <ApplyTo>Cookie</ApplyTo>
      <Data>PS_TOKENEXPIRE</Data>
    </CompareData>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


ScriptCookieDomainAsRequestHost

通常、クライアント側のクッキーを記録する場合、Silk Performer は domain 属性に対する汎用的な形式を使用します。ドメインは最初のドットによって分離されます。たとえば、http://demo.borland.com/testsite から、.borland.com が分離できます。上記の例では demo.borland.com や example.borland.com など、さまざまなドメインに対してこのようなクッキーは有効になるため、通常はこれが期待通り動作です。

記録ルール ScriptCookieDomainAsRequestHost は、クッキー用のドメインをより細かく定義します。domain 属性は、リクエスト ホストと厳密に一致します。

<data> タグにクッキーの名前を追加することによって、特定のクッキーに対して記録ルールを適用することができます。

<HttpScriptingRule>
  <Name>MyCookieRecordingRule</Name>
  <Active>true</Active>
  <Action>ScriptCookieDomainAsRequestHost</Action>
  <Conditions>
    <CompareData>
      <ApplyTo>Cookie</ApplyTo>
      <Data>MyClientsideTestCookie</Data>
    </CompareData>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


SuppressFrameName SuppressLinkName SuppressFormName SuppressCustomUrlName

WebPageLink、WebPageSubmit、および WebPageSetActionUrl などの関数は、名前 (リンク、フォーム、解析済み URL レスポンスの)、フレーム名、およびリンク、フォーム、解析済み URL を参照する序数を使用します。

たとえば、リンクやフォーム名が動的に変更されるような場合、名前を番号にカスタマイズすることがよく行われます。つまり、名前 (リンクやフォームの) を指定せずに、代わりに全体を通じた序数をページまたはフレーム内で指定することを意味します。

これらのアクションは、このカスタマイズを Recorder によって行わせるために使用することができます。

ショップ アプリケーションで、文字列 cart_ に数字のセッション ID を追加することによってビルドされたフォーム名を使用すると仮定します。

このルールは、WebPageSubmit 呼び出し内でフォーム名を記録しませんが、代わりに NULL を記録し、ページ全体でフォームを参照する序数が使用されます。

<HttpScriptingRule>
  <Name>Suppress XML to form conversion</Name>
  <Active>true</Active>
  <Action>SuppressFormName</Action>
  <Conditions>
    <RegExpr>
      <ApplyTo>FormName</ApplyTo>
      <Data>cart_[0-9]*</Data>
      <ExpectMatch>Complete</ExpectMatch>
    </RegExpr>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


MapFunctionName

このアクションは、関数名マッピングを定義するために使用できます。つまり、Recorder は元の関数の代わりにラッパー関数 (スクリプトをコンパイル可能にするために、BDH ファイルなどに存在する必要があります) をスクリプト化します。このルールは関数パラメータを変更しないので、このようなラッパー関数は、元の関数と同じパラメータ リストを持つ必要があります。

条件が true を返す場合に、Recorder は、元の関数の代わりにラッパー関数をスクリプト化し、条件の評価の過程で、変数 FunctionName に何らかの値を保存します。

条件が、変数 BdhFileName に空でない文字列を保存する場合も、Recorder は、指定した BDH ファイルをインクルードするように use ステートメントをスクリプトに生成します。

このルールは、各 WebPageLink 関数呼び出しを MyWebPageLink 関数呼び出しで置換します。

<HttpScriptingRule>
  <Name>Replace WebPageLink with my wrapper function</Name>
  <Active>true</Active>
  <Action>MapFunctionName</Action>
  <Conditions>
    <CompareData>
      <ApplyTo>DefaultFunctionName</ApplyTo>
      <Data>WebPageLink</Data>
    </CompareData>
    <Exists>
      <ApplyTo>Literal:MyWebPageLink</ApplyTo>
      <SaveAs>FunctionName</SaveAs>
    </Exists>
    <Exists>
      <ApplyTo>Literal:MyFunctions.bdh</ApplyTo>
      <SaveAs>BdhFileName</SaveAs>
    </Exists>
  </Conditions>
</HttpScriptingRule>
親トピック: HttpScriptingRule アクション


AddInitFunction

このアクションは、TInit または TMain トランザクションに関数呼び出しを追加するために使用できます。これは、Conditions タグ以外のタグを追加できる唯一のアクションです。条件は許されますが、何のデータも参照できないため、有用ではありません。

任意の数の関数を追加でき、それぞれが各自の Function タグを持ちます。Function タグ内に、FunctionName タグが必ず存在し、BdhFileName タグが任意で存在します。

任意の数の Param タグをパラメータを指定するために指定できます。各パラメータには、Value タグとType タグを持つ必要があります。Type タグは、String または Const のいずれかです。String はパラメータを引用符で囲む必要がありますが、Const は必要ありません。

<HttpScriptingRule>
  <Name>Automatically insert my useful function</Name>
  <Active>true</Active>
  <Action>AddInitFunction</Action>
  <Function>
    <FunctionName>InitMyLogLibrary</FunctionName>
    <BdhFileName>Log.bdh</BdhFileName>
    <Param>
      <Value>C:\Logs\xx.log</Value>
      <Type>String</Type>
    </Param>
    <Param>
      <Value>true</Value>
      <Type>Const</Type>
    </Param>
  </Function>
</HttpScriptingRule>

これは、次のスクリプトの断片を生成します：

use "Log.bdh"

transaction TInit
begin
  // ...
  InitMyLogLibrary("C:\\Logs\\xx.log", true);
end TInit;
Silk Performer では、次の値を持つ Location タグを使用できます。
  • TInit
  • TMainBegin
  • TMainEnd
親トピック: HttpScriptingRule アクション


NoAddUrl

このアクションは、特定の HTTP リクエストに対するWebPageAddUrl 関数の生成を抑制するために使用できます。Recorder は、それからこのリクエストを記録する次によい方法を選択します。これは通常、WebUrl 関数が代わりにスクリプト化されますが、状況に応じて他の関数である場合もあります (WebPageLink や WebPageUrl など)。

解析ルールは Web ページの埋め込みオブジェクトからデータを解析することは決してないため、これは便利です。HTTP リクエストが、代わりに WebUrl 関数呼び出しでスクリプト化される場合、HTTP 解析ルールをこのリクエストに適用することができます。

親トピック: HttpScriptingRule アクション


SuppressRecording

このアクションは、個々の HTTP リクエストの記録を抑制するために使用できます。異なる API レベルで記録される Oracle Forms アプレットからの HTTP リクエストの記録を抑制するために、Silk Performer Oracle Forms サポートで使用されます。
親トピック: HttpScriptingRule アクション


ForceContextless

このアクションは、WebPageLink や WebPageSubmit などのコンテキストフル関数を使った HTTP リクエストの記録を抑制するために使用できます。代わりに、Recorder は適切なコンテキストレス関数を記録します。

親トピック: HttpScriptingRule アクション


DontUseHtmlVal

このアクションは、個々のフォーム フィールドに対する <USE_HTML_VAL> タグの記録を抑制するために使用できます (そうしなくても Recorder がそうする場合でも)。

これは、フォーム フィールド値がスクリプトで必要とされる場合、たとえば、他の記録ルールがその値に適用される場合に有用です。

PeopleSoft プロジェクトの種類では、ログイン フォームのユーザー名がこのルールを使用してスクリプトに現れるように強制されます (たとえユーザー名フィールドが前もって処理されていても)。その後、他のルールの種類 StringScriptingRule のアクション CreateVariable を使ってそれに対して変数を作成します。このようにして、スクリプトはログイン データをランダム化しやすいようになります。

親トピック: HttpScriptingRule アクション


NoQueryToForm ForceQueryToForm

これらのアクションは、HTTP リクエストごとに URL クエリ文字列をフォームに変換する プロファイル設定を上書きするために使用できます。

親トピック: HttpScriptingRule アクション


ProxyEngineRule

ルール タイプ ProxyEngineRule では、ProyEngine の操作の一部を制御することができます。

  • 構造
    ProxyEngineRule の基本構造について説明します。
  • ProxyEngineRule アクション
    すべての ProxyEngineRule アクションについて説明し、例を示します。
親トピック: ルール ベースの記録


構造

ProxyEngineRule の基本構造は、かなりシンプルです。共通のタグ Name および Active に加えて、許されている唯一のタグは Action です。Action タグは、何を行うかを指定します。実際の条件判断は条件で実装します。条件を評価した結果は、このようなルールの戻り値です。
<ProxyEngineRule>
  <Name>Switch on GUI recording for Jacada</Name>
  <Active>true</Active>
  <Action>AddAppletParam</Action>
  <Conditions>
    <FindData>
      <ApplyTo>Attribute.ARCHIVE</ApplyTo>
      <Data>clbase.jar</Data>
    </FindData>
    <Exists>
      <ApplyTo>Literal:GUIMode</ApplyTo>
      <SaveAs>Param.Name</SaveAs>
      <SaveMode>Replace</SaveMode>
    </Exists>
    <Exists>
      <ApplyTo>Literal:GUIRecorder</ApplyTo>
      <SaveAs>Param.Value</SaveAs>
      <SaveMode>Replace</SaveMode>
    </Exists>
  </Conditions>
</ProxyEngineRule>
親トピック: ProxyEngineRule


ProxyEngineRule アクション

  • AddAppletParam
    AddAppletParam アクションを説明します。
  • RemoveAppletParam ChangeAppletParam
    アクション RemoveAppletParam および ChangeAppletParam の説明と例を示します。
  • DetectProtoFtp DetectProtoSmtp
    アクション DetectProtoFtp および DetectProtoSmtp を説明します。
  • DontModifyRequestHeader DontModifyResponseHeader
    アクション DontModifyRequestHeader および DontModifyResponseHeader の説明と例を示します。
  • DontDetectProtoHttp
    DontDetectProtoHttp アクションを説明します。
  • BypassBlockingHttp
    BypassBlockingHttp アクションを説明します。
親トピック: ProxyEngineRule


AddAppletParam

この Action は、HTML がクライアントに転送する前に HTML に含まれるアプレットを変更することができます。変更はログ ファイルで見ることできません。条件が true に評価された場合、条件は Param.Name と Param.Value に値を保存し、このパラメータはアプレット タグに追加されます。

AddAppletParam アクションをもつ任意のProxyEngineRule は、アプレットごとに一度評価されます。条件は、次の構文を使用してアプレットの属性にアクセスできます： Attribute.attr。 ここで、attr はアプレット タグの任意の属性になります。

親トピック: ProxyEngineRule アクション


RemoveAppletParam ChangeAppletParam

このアクションは、HTML がクライアントに転送する前に HTML に含まれるアプレットを変更することができます。変更はログ ファイルで見ることできません。条件が true に評価された場合、パラメータはアプレットから削除されます (RemoveAppletParam)。 または、その値は、条件によって Param.Value に保存されたものに変更されます (ChangeAppletParam)。

これらのアクションの 1 つを持つ任意の ProxyEngineRule は、アプレット パラメータごとに一度評価されます。条件は、アプレット パラメータ Param.Name と Param.Value による名前と値にアクセスできます。

<ProxyEngineRule>
  <Name>Remove Cabbase applet param</Name>
  <Active>true</Active>
  <Action>RemoveAppletParam</Action>
  <Conditions>
    <Or>
      <CompareData>
        <ApplyTo>Param.Name</ApplyTo>
        <Data>Cabbase</Data>
        <Length>0</Length>
      </CompareData>
      <CompareData>
        <ApplyTo>Param.Value</ApplyTo>
        <Data>.cab</Data>
        <Offset>-4</Offset>
      </CompareData>
    </Or>
  </Conditions>
</ProxyEngineRule>
親トピック: ProxyEngineRule アクション


DetectProtoFtp DetectProtoSmtp

プロトコル検出の過程で、FTP と SMTP はプロトコル開始時のトラフィックが非常に似ているため、区別するのが難しい場合があります。アクション DetectProtoFtp および DetectProtoSmtp は、FTP または SMTP の検出を強制するために使用できます。そうしないと Recorder が誤検出してしまう場合に有効です。

条件は、ApplyTo タグの情報の次の部分にアクセスします。
  • WelcomeMsg：サーバーのウェルカム メッセージ
  • NoopResponse：ProxyEngine によって送信される NOOP コマンドへのサーバー レスポンス
  • TargetPort：ターゲットのポート
親トピック: ProxyEngineRule アクション


DontModifyRequestHeader DontModifyResponseHeader

Recorder は、一般的なブラウザを使用した最善の記録結果を得るために、HTTP トラフィックのリクエスト/レスポンス ヘッダーを通常、変更します。しかし、ある一般的でないユーザー エージェントでは記録時に誤った動作を行う可能性があります。

Action によって、個々のリクエストに対するリクエスト/レスポンス HTTP ヘッダーの変更を抑制することで、このような記録における問題に対処することができます。

条件は、ApplyTo タグで変更することができるヘッダー名と値を値、HeaderName および HeaderValue を使用して参照できます。

この例は、Flex/AMF3 プロジェクトの種類のものです。このルールは、Accept-Language リクエスト ヘッダーがない場合に、Pragma と Cache-Control レスポンス ヘッダーの変更を抑制します。

<ProxyEngineRule>
  <Name>Suppress modification of some server response headers for HTTP requests coming from Shockwave/Flash</Name>
  <Active>true</Active>
  <Action>DontModifyResponseHeader</Action>
  <Conditions>
    <Not>
      <Exists>
        <ApplyTo>Http.Initial.Request.Header.Accept-Language</ApplyTo>
      </Exists>
    </Not>
    <Or>
      <CompareData>
        <ApplyTo>HeaderName</ApplyTo>
        <Data>Pragma</Data>
        <Length>0</Length>
      </CompareData>
      <CompareData>
        <ApplyTo>HeaderName</ApplyTo>
        <Data>Cache-Control</Data>
        <Length>0</Length>
      </CompareData>
    </Or>
  </Conditions>
</ProxyEngineRule>
親トピック: ProxyEngineRule アクション


DontDetectProtoHttp

自動プロトコル検出が HTTP を検出するが、TCP/IP レベルで TCP 接続を記録する必要がある場合があります。この場合、アクション DontDetectProtoHttp を使用して、HTTP の検出を抑制することができます。

条件は、ApplyTo タグの情報の次の部分にアクセスします。
  • PeekData：クライアントによって送信された最初のデータ チャンク。
親トピック: ProxyEngineRule アクション


BypassBlockingHttp

ネットワーク通信が遮断されるのを回避するため、Recorder はネットワーク トラフィックの分析を停止しなければならない場合があります。アクション BypassBlockingHttp を使用して、このような場合に記録を抑制することができます。アクションが使用されると、接続上のデータはまだフォワードされますが、接続が閉じられるまで、記録されません。

条件は、ApplyTo タグの情報の次の部分にアクセスします。

  • PeekData：相対リクエスト URL には、特定の値が含まれます。
親トピック: ProxyEngineRule アクション


条件

条件は、HttpParsingRule、TcpRuleRecvProto、TcpRuleRecvUntil ルールの種類の重要なアスペクトです。

これらは、ルールが適用されるべきときを厳密に指定するための強力な手段です。

  • はじめに
    複合条件、Extended Boolean Values、基本条件、条件評価環境、およびどのように条件がデータを操作するかについて説明します。
  • 条件のデータを指定する
    条件に使用するデータを指定する属性のセットについて説明します。
  • 一時変数を保存する
    データ ブロックを一時変数に保存し、その後の条件の ApplyTo 属性で参照できるようにする方法を説明します。
  • 条件評価環境
    条件が使用される場所によって、どの属性 ApplyTo 値が条件に対して許可されているかについて説明します。
  • CompareData 条件
    あるデータが特定の値を持つかどうかをチェックする CompareData 条件について説明します。
  • FindData 条件
    あるデータが特定の値を含むかどうかをチェックする FindData 条件について説明します。
  • RegExpr 条件
    あるデータに正規表現を適用する RegExpr 条件について説明します。
  • CheckRange 条件
    数値が指定した範囲内にあるかどうかをチェックする CheckRange 条件について説明します。
  • ResultLen 条件
    CheckRange 条件の特殊な形式である ResultLen 条件について説明します。
  • NoBlockSplit 条件
    どのデータがテスト対象なのか、データが利用可能でない場合に戻り値がどうなるかを決定する NoBlockSplit 条件について説明します。
  • Scripting 条件
    条件の型とデフォルト値、および説明と例を提供します。
  • Exists 条件
    ApplyTo タグで指定したデータが null でないかどうかをチェックする Exists 条件について説明します。
  • Loop 条件
    サブ条件の評価が true である限り評価し続ける Loop 条件について説明します。
親トピック: ルール ベースの記録


はじめに

複合条件

ブール演算子、And、Or、Not を使用して複雑な条件を作成できます。

<And>
  <Or>
    <SomeBasicCondition> … </SomeBasicCondition>
    <SomeBasicCondition> … </SomeBasicCondition>
    <Not>
      <SomeBasicCondition> … </SomeBasicCondition>
    </Not>
  </Or>
  <Not>
    <And>
      <SomeBasicCondition> … </SomeBasicCondition>
      <SomeBasicCondition> … </SomeBasicCondition>
    </And>
  </Not>
</And>

Extended Boolean Values

条件の結果は一旦評価され、Extended Boolean Values (拡張ブール値) になります。Extended Boolean Values は、true、unknown、false の何れかの値をとります。値 unknown は次のような場合になります。「現時点で評価できないが、さらにデータが利用できるようになったときに評価できる可能性がある」

これは、TcpRuleRecvProto および TcpRuleRecvUntil タイプのルールにとって重要です。TCP ルールの条件の結果が unknown 値の場合は、Recorder はスクリプト化を遅延し、よりデータがサーバーから受信した時点で条件を再評価します。

基本条件

チェックを実行し、結合して (ブール演算子 And、Or、Not を使用して) 複雑な複合条件を構築できる、いくつかの基本条件の種類があります。

基本条件の種類は次の通りです。
  • CheckRange：数値が指定した範囲内にあるかどうかをチェックします。
  • ResultLen：条件 CheckRange の特殊な形式です。
  • CompareData：データを比較します。
  • FindData：データを検索します。
  • Verify：条件 CompareData の特殊な形式です。
  • RegExpr：正規表現を適用します。
  • NoBlockSplit：ブロック境界をチェックします。
  • Scripting：スクリプト化される文字列のタイプをチェックします。

条件評価環境

条件はある環境内で評価されます。環境を通して、条件は、条件を適用できる多くの文字列を利用できます。環境構成は、各ルールの種類によって異なります。詳細は、「条件評価環境」の節を参照してください。

条件でのデータ操作方法

多くの条件 (Scripting 条件を除く) は特定のデータのブロックに特定のチェックを適用します。どのデータをチェックするかを指定する方法には柔軟性があります。詳細は、セクション「条件のデータを指定する」を参照してください。

親トピック: 条件


条件のデータを指定する

多くの条件 (Scripting 条件を除く) は特定のデータのブロックに効果があります。

条件は、使用するデータや、必要なデータが利用可能でない場合にすべきことを指定する属性のセットを持ちます。

これらの属性は次の通りです。
  • ApplyTo
  • Offset
  • Length
  • IfNull
  • UseDataAvail
基本的な概念は次の通りです。
  1. ApplyTo は、データのブロックを指定します (リクエスト URL、レスポンス本体、スクリプト化される文字列など)。
  2. Offset および Length をデータのサブセットを対象とするために使用することもできます。
  • ApplyTo
    属性 ApplyTo の型とデフォルト値、および説明と例を提供します。
  • Offset Length
    属性 Offset Length の型とデフォルト値、および説明と例を提供します。
  • UseDataAvail
    属性 UseDataAvail の型とデフォルト値、および説明を提供します。
  • IfNull
    属性 IfNull の型とデフォルト値、および説明を提供します。
親トピック: 条件


ApplyTo

値 | 説明
型 | Strings
デフォルト | Self
説明 | ApplyTo は、条件に影響を与えるデータを指定します。ApplyTo は現在の環境内で解決されます。よって、ApplyTo の有効な値は環境の設定に依存し、各ルール タイプによって異なります。

Literal (リテラル)

ApplyTo タグで Literal 値を使用すると、条件のデータとしてリテラルを指定できます。これは、Exists 条件や SaveAs 属性と一緒に使用する場合に有用です。

<Conditions>
  <Exists>
    <ApplyTo>Literal: - </ApplyTo>
    <SaveAs>PageName</SaveAs>
    <SaveMode>AppendSeparator</SaveMode>
  </Exists>
  <Exists>
    <ApplyTo>Form.Submit.Field(Name:SWECmd).Value</ApplyTo>
    <SaveAs>PageName</SaveAs>
    <SaveMode>Append</SaveMode>
  </Exists>
</Conditions>

追加の ApplyTo 値

HttpParsingRule の ScriptGen セクションの ApplyTo 値に、さらに追加の値があリます。

HttpParsingRule の ScriptGen セクションにある指定可能な値 LinkName、FormName、FormFieldName、FormFieldValue、TargetFrame に加えて、次の 4 つの新しい指定可能な値があります。

CustomUrlName | カスタム URL の現在の名前 (関数 WebPageLink、WebPageSetActionUrl、WebPageQueryParsedUrl が使用された場合)。
PostedData | WebPagePostBin およびそれに類似した関数へのパラメータとして現れるポスト データの値 (おそらくバイナリ)。関数 WebHeaderAdd が記録される際 (この関数の第 1 パラメータ) の HTTP ヘッダーの名前。
HeaderName | 関数 WebHeaderAdd が記録される際 (この関数の第 1 パラメータ) の HTTP ヘッダーの名前。
HeaderValue | 関数 WebHeaderAdd が記録される際 (この関数の第 2 パラメータ) の HTTP ヘッダーの値。

フォームへのアクセス

ルール タイプ HttpParsingRule (ScriptGen セクション) 、HttpScriptingRule、および StringScriptingRule (Search セクション) のすべてで、次の文法に従ってフォーム データに利用できるアクセス関数があります： "Form" [ ".Query" | ".Body" | ".Submit" ]

クエリ文字列 ("Query") のフォーム、または現在の HTTP リクエストのリクエスト本体 ("Body") のフォームを指定できます。

Submit 値 (デフォルト) は、HTTP リクエストが GET メソッドを使用する場合 Query を、POST メソッドを使用する場合は Body を指定したことと同等になります。

上記の文法にしたがってフォームが指定されると、このフォームについての詳細を取得できます。
  • ActionUrl：フォームのアクション URL を指定します。アクション URL のさらなる詳細を得ることができます。
  • Encoding：スクリプト化されるエンコードを指定します (ENCODE_BLANKS など)。
<ApplyTo>Form.ActionUrl</ApplyTo>
<ApplyTo>Form.ActionUrl.Host</ApplyTo>
<ApplyTo>Form.ActionUrl.Coords</ApplyTo>
<ApplyTo>Form.Query.Encoding</ApplyTo>
<ApplyTo>Form.Body.Encoding</ApplyTo>
<ApplyTo>Form.Submit.Encoding</ApplyTo>

さらに、次の文法に従って、個々のフォーム フィールドを指定できます： ".Field(" ( "Name" | "Value" | "Index" ) ":" Selector ")" "." ( "Name" | "Value" | "Encoding" | "Usage" )

つまり、Name、Value、Index (0 ベース) によってフォーム フィールドを参照し、Name、Value、Encoding、Usage のようなフォーム フィールドを取得できます。Encoding は次のうちの 1 つを意味します： "ENCODE_FORM".Usage は次のうちの 1 つを意味します："SUPPRESS"、"USE_HTML_VAL"、"USE_SCRIPT_VAL".

<ApplyTo>Form.Submit.Field(Name:SWECmd).Value</ApplyTo>
<ApplyTo>Form.Field(Name:sid).Usage</ApplyTo>
<ApplyTo>Form.Field(Name:sid).Encoding</ApplyTo>
<ApplyTo>Form.Field(Index:0).Name</ApplyTo>
<ApplyTo>Form.Field(Index:2).Value</ApplyTo>
<ApplyTo>Form.Field(Value:Submit with GET).Name</ApplyTo>
親トピック: 条件のデータを指定する
関連概念
条件評価環境
関連資料
HTTP リクエスト/レスポンス ペアへのアクセス
特殊な文字列へのアクセス


Offset Length

値 | 説明
型 | Signed Numbers
デフォルト値 | 0
説明 | Offset および Length は、ApplyTo で参照したデータのサブセットを対象として使用することができます。

最初に Offset を適用する

Offset >= 0 の場合、Offset はデータの最初から削除されるバイト数を指定します。

Offset < 0 の場合、-Offset は最後のバイトから逆向きに数えて、キープしておくバイト数を指定します。

次に Length を適用する

Length > 0 の場合、Length は最初のバイトから数えて、使用するバイト数を指定します。

Length <= 0 の場合、-Length は最後のバイトから逆向きに数えて、削除されるバイト数を指定します。

Offset およびLength 計算が可能でなかったり、部分的にのみ可能である場合があります。

例 1

ApplyTo は、30 バイトのデータを返します。 Offset は "40" を指定しているので、Offset 計算はできません。

この場合、結果のデータは値 Null になります。

例 2

ApplyTo は、30 バイトのデータを返します。 Length は "35" を指定しているので、Length 計算は可能ですが、Length は、最大の利用可能な値である "30" に変更されます。

この場合、結果のデータは特殊な値 Null になるか、または、利用可能なデータの最大値に等しくなるでしょう。 これは、条件属性 UseDataAvail に依存します。

親トピック: 条件のデータを指定する


UseDataAvail

値 | 説明
型 | Boolean Values
デフォルト値 | true
説明 | この属性は、Offset/Length 計算が部分的にのみ可能なときにどのデータが使用されるかを指定します。true の場合は、利用可能な最大のデータが使用されます。false の場合は、Offset/Length 計算の結果は Null となります。
親トピック: 条件のデータを指定する


IfNull

値 | 説明
型 | Extended Boolean Values
デフォルト値 | 不明
説明 | この属性は、操作するデータがない場合の条件の戻り値を指定します (つまり、ApplyTo、Offset、Length、UseDataAvail での計算が Null を返す場合)。
親トピック: 条件のデータを指定する


一時変数を保存する

データ ブロックに適用する条件は、「条件のデータを指定する」で説明するように、このデータを指定できます。

データ ブロックを「一時変数」に保存できるようになり、その後の条件の ApplyTo 属性で参照できます。

このような条件の新しい属性は次の通りです。
  • SaveAs
  • SaveIfTrue
  • SaveIfUnknown
  • SaveIfFalse
  • SaveMode
  • SaveTag
  • SaveAs
    属性 SaveAs の説明と型を示します。
  • SaveIfTrue SaveIfUnknown SaveIfFalse
    属性 SaveIfTrue、SaveIfUnknown、および SaveIfFalse の型とデフォルト値、および説明を提供します。
  • SaveMode
    属性 SaveMode の型とデフォルト値、および説明を提供します。
  • SaveTag
    属性 SaveTag の型とデフォルト値、および説明を提供します。
  • SaveWhat
    属性 SaveWhat の型とデフォルト値、および説明と例を提供します。
親トピック: 条件


SaveAs

値 | 説明
型 | Strings
説明 | この属性は、データを保存する一時変数の名前を指定して、データの保存を行います。
親トピック: 一時変数を保存する


SaveIfTrue SaveIfUnknown SaveIfFalse

値 | 説明
型 | Strings
デフォルト値
  • SaveIfTrue： true
  • SaveIfUnknown： false
  • SaveIfFalse： false
説明 | この属性は、条件の結果が true、unknown、false の場合に、データが保存されるべきかどうかを指定します。
親トピック: 一時変数を保存する


SaveMode

値 | 説明
型 | Distinct Values
デフォルト値 | IfNew
説明 | この属性は、一時変数にデータを保存する方法を指定します。
有効な値は次のとおりです。
  • IfNew：指定した変数名にまだ値が関連付けられていない場合にのみ、データを保存します。
  • Replace：常にデータを保存し、既存の値を置換します。
  • AppendSeparator：既存の値が空でない場合に、既存の値にデータを追加します。そうでなければ何もしません。
  • Append：既存の値にデータを追加します。
  • PrpendSeparator：既存の値が空でない場合に、既存の値の先頭にデータを追加します。そうでなければ何もしません。
  • Prepend：:既存の値の先頭にデータを追加します。
親トピック: 一時変数を保存する


SaveTag

値 | 説明
型 | Numbers
デフォルト値 | 0
説明 | このタグは、RegExpr 条件にのみ適用可能で、保存される正規表現のタグ付き部分式を参照するタグ番号を指定することができます。
親トピック: 一時変数を保存する


SaveWhat

値 | 説明
型 | Distinct Values
デフォルト値 | Self
説明 | 条件は、ApplyTo タグによって識別されるデータ ブロック全体の一部を抽出します。SaveWhat タグは、抽出した部分、その左側の部分、またはその右側の部分が保存されるべきかどうかを指定できます。
有効な値は次のとおりです。
  • Self：条件によって識別された部分を保存します。
  • Left：その左側の部分を保存します。
  • Right：その右側の部分を保存します。

例

<Conditions>
  <RegExpr>
    <ApplyTo>Http.Final.Response.Body</ApplyTo>
    <Data>Instructions:\([^&lt;]+\)&lt;</Data>
    <SaveAs>Instructions</SaveAs>
    <SaveTag>1</SaveTag>
  </RegExpr>
  <FindData>
    <ApplyTo>Instructions</ApplyTo>
    <Data>Download</Data>
  </FindData>
</Conditions>
親トピック: 一時変数を保存する


条件評価環境

条件属性 ApplyTo は、条件が使用されるルールの種類を基にして構成される環境内で解決されます。

本章では、条件が使用される場所によって、どの属性 ApplyTo 値が条件に対して許可されているかについて説明します。

  • 特殊な文字列へのアクセス
    特殊な文字列 All、Self、Left、Right、Rest にアクセスする方法について説明します。
  • HTTP リクエスト/レスポンス ペアへのアクセス
    HTTP リクエスト/レスポンス ペアへのアクセス方法について説明します。
親トピック: 条件


特殊な文字列へのアクセス

HttpParsingRule、TcpRuleRecvProto、TcpRuleRecvUntil ルール タイプは、文字列 All、Self、Left、Right、Rest を参照できます。

HTTP 解析ルールの ScriptGen セクションの条件は、ApplyTo プロパティを使って特定のデータを参照するための追加のオプションを持ちます：
  • LinkName：現在のリンク名 (WebPageLink 関数のスクリプト化時にのみ利用可能)
  • FormName：現在のフォーム名 (WebPageSubmit 関数のスクリプト化時にのみ利用可能)
  • FormFieldName：現在のフォーム フィールド名 (フォーム フィールド名またはフォーム フィールド値のスクリプト化時のみ利用可能)
  • FormFieldValue：現在のフォーム フィールド値 (フォーム フィールド名またはフォーム フィールド値のスクリプト化時のみ利用可能)
  • TargetFrame：現在のターゲット フレーム名 (WebPageLink または WebPageSubmit(Bin) 関数のスクリプト化時にのみ利用可能)

例

<ApplyTo>All</ApplyTo>
<ApplyTo>Self</ApplyTo>
<ApplyTo>FormFieldName</ApplyTo>
親トピック: 条件評価環境


HTTP リクエスト/レスポンス ペアへのアクセス

HttpParsingRule ルール内で使用した条件は、ApplyTo プロパティを使って HTTP リクエスト/レスポンスの詳細にアクセスできます。

"Http" [ ".Initial" | ".Final" ] ( ".Request" | ".Response" ) [ "." Component ]

オプションのコンポーネント Initial または Final は、HTTP リクエストがリダイレクト チェーンの一部である場合にのみ意味を持ちます。この場合、Initial はチェーンの最初の HTTP リクエストを、Final はチェーンの最後のリクエストを返します。

Final は、HttpParsingRule\Search セクションの条件のデフォルトです。

Initial は、HttpParsingRule\ScriptGen セクションの条件のデフォルトです。

HTTP リクエストの有効なコンポーネント値と戻り値は以下のとおりです。
(空) | Header と同じ
Body | リクエストの本体
RequestLine | リクエスト行 (メソッド + URL + HTTP のバージョン)
Method | HTTP メソッド
Version | HTTP のバージョン
Header | リクエスト行を含む完全なリクエスト ヘッダー
Header.* | 任意の HTTP リクエスト ヘッダーを参照する場合にこれを使用します
Url | 完全なリクエスト URL
Url.Complete | 完全なリクエスト URL
Url.BaseUrl | クエリー文字列のない URL
Url.DirectUrl | URL に相対的なリクエスト (スキーマとホストなし)
Url.BaseDirOnlyUrl | クエリー文字列とファイル名のない URL
Url.Scheme | URL スキーマ (HTTP、HTTPS、FTP)
Url.Host | URL のホスト名
Url.Port | URL のポート番号
Url.Path | パス (ディレクトリとファイル名)
Url.Dir | ディレクトリ
Url.File | ファイル名
Url.Ext | ファイル拡張子
Url.Username | ユーザー名
Url.Password | パスワード
Url.Query | "?" を含むクエリー文字列
Url.QueryData | "?" を除くクエリー文字列
Url.Coords | イメージの座標
HTTP レスポンスのような有効なコンポーネント値
(空) | Header と同じ
Body | レスポンスの本体
StatusLine | レスポンスのステータス行 (HTTP バージョンとステータス コード、ステータス フレーズ)
Version | HTTP のバージョン
StatusCode | HTTP レスポンスのステータス コード
StatusPhrase | HTTP レスポンスのステータス フレーズ
Header | ステータス行を含む完全なレスポンス ヘッダー
Header.* | 任意の HTTP レスポンス ヘッダーを参照する場合にこれを使用します

例

<ApplyTo>Http.Response.Header.Content-Type</ApplyTo>
<ApplyTo>Http.Response.Header</ApplyTo>
<ApplyTo>Http.Request.Url.QueryData</ApplyTo>
<ApplyTo>Http.Request.Body</ApplyTo>
<ApplyTo>Http.Response.StatusCode</ApplyTo>
親トピック: 条件評価環境


CompareData 条件

CompareData 条件は、あるデータが特定の値を持つかどうかをチェックします。属性 ApplyTo、Offset、Length、UseDataAvail 、IfNull を使用して、どのデータがテスト対象なのか、データが利用可能でない場合に戻り値がどうなるかを決定します。

セクション「条件のデータを指定する」を参照してください。

他の条件の種類とは異なり、Length プロパティが省略されると、Data プロパティで指定されたバイト数が Length プロパティとして使用されます。Length プロパティを省略することによって、完全一致でなく前方一致を行うことができます。

Verify 条件は、のエイリアスです。

Data 属性

型 | Binary Data
デフォルト | (空)
説明 | Data 属性は、どのようなデータが ApplyTo、Offset、Length によって参照されるデータと比較されるかを指定します。

CaseSensitive 属性

型 | Boolean Values
デフォルト | false
説明 | データの検索時に、大文字小文字が区別されるかどうかを指定します。

GenVerify 属性

この属性は、条件が TcpRuleRecvProto ルール内で使用される場合にのみ適用可能です。詳細は、「条件の GenVerify 属性」の節を参照してください。

例

<CompareData>
  <ApplyTo>Http.Response.Header.Content-Type</ApplyTo>
  <Data>text/css</Data>
  <IfNull>true</IfNull>
  <CaseSensitive>false</CaseSensitive>
</CompareData>
親トピック: 条件


FindData 条件

FindData 条件は、あるデータが特定の値を含むかどうかをチェックします。属性 ApplyTo、Offset、Length、UseDataAvail 、IfNull を使用して、どのデータがテスト対象なのか、データが利用可能でない場合に戻り値がどうなるかを決定します。

セクション「条件のデータを指定する」を参照してください。

Data 属性

型 | Binary Data
デフォルト | (空)
説明 | Data 属性は、どのようなデータが ApplyTo、Offset、Length によって参照されるデータで見つかるかを指定します。

CaseSensitive 属性

型 | Boolean Values
デフォルト | false
説明 | データの検索時に、大文字小文字が区別されるかどうかを指定します。

IgnoreWhiteSpaces 属性

型 | Boolean Values
デフォルト | false
説明 | 検索時に空白類を無視するかどうかを指定します。

GenVerify 属性

この属性は、条件が TcpRuleRecvProto ルール内で使用される場合にのみ適用可能です。詳細は、「条件の GenVerify 属性」の節を参照してください。

例

<FindData>
  <ApplyTo>Http.Request.Url</ApplyTo>
  <Data>/images/</Data>
  <CaseSensitive>true</CaseSensitive>
</FindData>
親トピック: 条件


RegExpr 条件

RegExpr条件は、あるデータに正規表現を適用します。プロパティ ApplyTo、Offset、Length、UseDataAvail 、IfNull を使用して、どのデータが正規表現の対象なのか、データが利用可能でない場合に戻り値がどうなるかを決定します。セクション「条件のデータを指定する」を参照してください。

Data 属性

型 | Binary Data
デフォルト | (空)
説明 | Data 属性は、ApplyTo、Offset、Length によって参照されるデータに適用される正規表現を指定します。

ExpectMatch 属性

型 | Distinct Values
デフォルト | Any
説明

正規表現が完全なデータと一致する必要があるのか、任意の部分文字列が正規表現と一致すれば十分なのかどうかを指定します。

有効な値は次のとおりです。
  • Any：部分文字列と一致すれば十分です。
  • Complete：完全なデータが正規表現と一致する必要があります。

GenVerify 属性

この属性は、条件が TcpRuleRecvProto ルール内で使用される場合にのみ適用可能です。詳細は、「条件の GenVerify 属性」の節を参照してください。

例

<RegExpr>
  <ApplyTo>Http.Response.Body</ApplyTo>
  <Data>&lt;html&gt;.*&lt/html&gt;</Data>
</RegExpr>
親トピック: 条件


CheckRange 条件

CheckRange 条件は、数値が指定した範囲内にあるかどうかをチェックします。プロパティ ApplyTo、Offset、Length、UseDataAvail 、IfNull を使用して、どのデータが数値に変換されるか、データが利用可能でないか変換に失敗した場合に戻り値がどうなるかを決定します。セクション「条件のデータを指定する」を参照してください。

Range 属性

型 | Numeric Ranges
デフォルト | -
説明 | 数値の許容範囲を設定します。

Convert 属性

型 | Distinct Values
デフォルト | Length
説明 | データ (プロパティ Apply、Offset、Length、UseDataAvail から得られた) を数値に変換する方法を指定します。
有効な値は次のとおりです。
Length (デフォルト) | データの長さ (バイト数) を計測することによって、データを数値に変換します。
Parse | テキスト数値であると仮定して解析し、データを数値に変換します。解析に失敗した場合、範囲チェック (Range) は実行されず、属性 IfNull で条件の結果を決定します。
LittleEndian | データをリトル エンディアン形式のバイナリ表現として扱います。データが空か、4 バイトより長い場合は失敗となり、属性 IfNull で条件の結果を決定します。
BigEndian | データをビッグ エンディアン形式のバイナリ表現として扱います。データが空か、4 バイトより長い場合は失敗となり、属性 IfNull で条件の結果を決定します。

例

<CheckRange>
  <ApplyTo>Http.Response.StatusCode</ApplyTo>
  <Range>200-299</Range>
  <Convert>Parse</Convert>
</CheckRange>
親トピック: 条件


ResultLen 条件

ResultLen 条件は、CheckRange 条件の特殊な形式で、次の 2 つに違いがあります。
  1. ApplyTo 属性のデフォルト値は、Self ではなく All です。
  2. 許容範囲は、Range 造成で指定せずに、ResultLen タグに直接指定します。

例

<ResultLen>5-15</ResultLen>
親トピック: 条件


NoBlockSplit 条件

NoBlockSplit 条件は、TcpRuleRecvProto および TcpRuleRecvUntil ルール内でのみ適用可能です。

属性 ApplyTo、Offset、Length、UseDataAvail 、IfNull を使用して、どのデータがテスト対象なのか、データが利用可能でない場合に戻り値がどうなるかを決定します。

セクション「条件のデータを指定する」を参照してください。

ほかの条件とは異なり、ApplyTo 属性に対するデフォルト値は、Self ではなく All です。

意味

TCP/IP トラフィックを記録する際に、サーバーは複数の TCP/IP パケット (ブロック群) でレスポンスを送信できます。NoBlockSplit 条件は、ApplyTo、Offset、Length によって得られたデータの終わりが。パケットのデータの終わりと同一かどうかをテストします。

テストしたデータの終わりがブロック境界上にない場合に結果が false になり、それ以外の場合は、結果が true になります。

例

<NoBlockSplit></NoBlockSplit>

<NoBlockSplit>
  <ApplyTo>Left<ApplyTo>
</NoBlockSplit>
親トピック: 条件


Scripting 条件

Scripting 条件は、特定のデータを操作するものではないので、属性 ApplyTo、Offset、Length、UseDataAvail、および IfNull は利用できません。

属性

型 | Distinct Values Lists
デフォルト | All
説明 | 属性値は、Scripting タグの中に直接指定します。条件のサブノード内ではありません。
有効な値は次のとおりです。
All | 他の値の完全なリストの省略形です。
Url | 任意の URL パラメータをスクリプト化します
LinkName | 次のリンク名をスクリプト化します： WebPageLink
FormName | 次のフォーム名をスクリプト化します：WebPageSubmit
PostedData | バイナリ ポスト データをスクリプト化します (WebPagePost など)
FormFieldName | dclform セクションのフォーム フィールド名をスクリプト化します
FormFieldValue | dclform セクションのフォーム フィールド値をスクリプト化します
SetCookie | 関数の最初のパラメータをスクリプト化します。WebCookieSet

True は、指定したスクリプトの場所の 1 つで、文字列パラメータをスクリプト化する間に条件が評価される場合に返されます。それ以外の場合は、false です。

例

<Scripting>Url, FormFieldValue</Scripting>
<Scripting>All</Scripting>
<Scripting>LinkName, FormName, PostedData</Scripting>
親トピック: 条件


Exists 条件

条件の種類 Exists は、ApplyTo タグで指定したデータが null でないかどうかをチェックします。これは、SaveAs 条件タグと一緒に使用する場合に特に有用です。

例

<Conditions>
  <Or>
    <Exists>
      <ApplyTo>Form.Submit.Field(Name:SWECmd).Value</ApplyTo>
      <SaveAs>Command</SaveAs>
    </Exists
    <Exists>
      <ApplyTo>Form.Submit.Field(Name:SWEMethod).Value</ApplyTo>
      <SaveAs>Command</SaveAs>
    </Exists>
  </Or>
  <Exists>
    <ApplyTo>Command</ApplyTo>
    <SaveAs>PageName</SaveAs>
    <SaveMode>Append</SaveMode>
  </Exists>
</Conditions>
親トピック: 条件


Loop 条件

新しい複合条件 Loop は、条件 And に似ており、そのサブ条件の評価が true である限り評価し続けます。ただし、And 条件とは異なり、すべての条件が評価されても停止しません。代わりに、Loop 条件は、もう一度やりなおして、そのサブ条件を繰り返し評価し、条件が false と評価された場合にのみ停止します。もちろん、これは少なくとも 1 つのサブ条件が SaveAs タグを使用した副作用がある場合にのみ意味があります。そうでない場合は、一旦すべてのサブ条件が最初の評価で true を返すと、無限ループに陥るでしょう。

例

この例は、Flex/AMF3 プロジェクトの種類からの抜粋で、ページ タイマ名がレスポンス本体から作られる方法を示します。

<Conditions>
  <Exists>
    <ApplyTo>Http.Initial.Request.Body</ApplyTo>
    <SaveAs>RestOfBody</SaveAs>
    <SaveMode>Replace</SaveMode>
  </Exists>
  <Loop>
    <RegExpr>
      <ApplyTo>RestOfBody</ApplyTo>
      <Data>operation=&amp;quot;\([^&amp;quot;]*\)</Data>
      <SaveAs>operation</SaveAs>
      <SaveMode>Replace</SaveMode>
      <SaveTag>1</SaveTag>
    </RegExpr>
    <RegExpr>
      <ApplyTo>RestOfBody</ApplyTo>
      <Data>operation=&amp;quot;\([^&amp;quot;]*\)</Data>
      <SaveAs>RestOfBody</SaveAs>
      <SaveMode>Replace</SaveMode>
      <SaveWhat>Right</SaveWhat>
    </RegExpr>
    <Exists>
      <ApplyTo>Literal:, </ApplyTo>
      <SaveAs>OperationList</SaveAs>
      <SaveMode>AppendSeparator</SaveMode>
    </Exists>
    <Loop>
      <FindData>
        <ApplyTo>operation</ApplyTo>
        <Data>.</Data>
        <SaveAs>operation</SaveAs>
        <SaveMode>Replace</SaveMode>
        <SaveWhat>Right</SaveWhat>
      </FindData>
    </Loop>
    <Exists>
      <ApplyTo>operation</ApplyTo>
      <SaveAs>OperationList</SaveAs>
      <SaveMode>Append</SaveMode>
    </Exists>
  </Loop>
  <Exists>
    <ApplyTo>OperationList</ApplyTo>
    <SaveAs>PageName</SaveAs>
    <SaveMode>Replace</SaveMode>
  </Exists>
</Conditions>
親トピック: 条件


トラブルシューティング

この節では、期待通り動作しない記録ルールのトラブルシューティングの推奨事項を提供します。Recorder は、次のスクリーンショットで示すような診断情報を ログ タブに出力します。

出力には次のものが含まれます。
  • Recorder によって読まれた記録ルール ファイル。
  • 記録ルール ファイルに含まれる記録ルール。
  • "+" 記号で始まるルールは正しく、アクティブです。
  • "-" 記号で始まるルールは間違っており、非アクティブです。
  • ルールが使用されない理由 (「非アクティブ」またはエラーの説明)。
ルール ファイルが診断出力に表示されない場合は、以下の事項を確認してください。
  • 現在のプロジェクトの Documents ディレクトリまたは、パブリックまたはユーザーの RecordingRules ディレクトリにルール ファイルがありますか？
  • ファイルの拡張子は .xrl ですか？

設定 登録されている拡張子は表示しない が、Windows エクスプローラーの フォルダー オプション ダイアログ ボックスでオフになっていることを確認します (次のスクリーンショットを参照)。そうでない場合、Windows は、ファイル名 Rule.xrl を表示していますが、実際のファイル名は Rule.xrl.txt である可能性があります。

親トピック: ルール ベースの記録


手動によるテスト スクリプトの記述

テスト スクリプトの生成に Silk Performer Recorder を使いたくない場合には、手動でスクリプトを作成することもできます。

Silk Performer のテスト スクリプトは、このプログラム独自のスクリプト言語で記述します。これは Benchmark Description Language (BDL) という、Pascal に似た高級言語です。 スクリプトを手動で編集するには、BDL をよく理解して、ユーザー リクエストのプロトタイプを作成できる必要があります。 また、モジュール、関数、ワークロード定義、トランザクション、Web フォームなど、テスト スクリプトの代表的なコンポーネントを定義できる必要もあります。

  • テスト スクリプトを手動で記述する
    Benchmark Description Language (BDL) を使用して、新規のテスト スクリプトをゼロから作成します。
  • エディタのキーボード ショートカット
    スクリプト エディタでは、作業を効率化するために、キーボード ショートカットや、キーボードとマウスを組み合わせた操作を使用できます。
親トピック: スクリプトを作成する
関連概念
Benchmark Description Language (BDL) Reference
関連資料
利用可能なアプリケーションの種類


テスト スクリプトを手動で記述する

  1. ファイル > 新規作成 > プレーン スクリプト (.bdf) をクリックします。 名前を付けて保存 ダイアログ ボックスが表示されます。
  2. スクリプト名を指定し、保存 をクリックします。
スクリプトを記述するには、Silk Performer 専用のスクリプト言語である Benchmark Description Language (BDL) を使用します。
親トピック: 手動によるテスト スクリプトの記述
関連概念
Benchmark Description Language (BDL) Reference
関連タスク
記録プロファイルを追加する


エディタのキーボード ショートカット

スクリプト エディタでは、作業を効率化するために、キーボード ショートカットや、キーボードとマウスを組み合わせた操作を使用できます。

Shift+Alt を押下したままマウスをドラッグ | 矩形領域の選択範囲指定。選択した範囲を一度に編集できます。マウスの代わりに矢印キーを使って選択範囲を変更することもできます。
Alt を押したまま上下矢印キーを押下 | 現在の行/選択した行を上下に移動します。
Ctrl を押したまま識別子をクリック | 識別子の定義へ移動します（定義へ移動 コマンドと同様）。
Ctrl+Minus | 前の場所へ移動します。定義へ移動 の後に特に便利です。
Ctrl+Space | コード補完ボックスを開きます。
Ctrl+I | パラメータ情報ボックスを開きます。
グループの縦線をダブルクリック | グループを折りたたみます。
Ctrl+Shift+L | 現在の行を削除します。
Ctrl+Enter | 現在の行の上に新しい行を追加します。
Ctrl+U | 選択したテキストを小文字に変換します。
Ctrl+Shift+U | 選択したテキストを大文字に変換します。
Tab | インデントを増やします。
Shift+Tab | インデントを減らします。
Ctrl+Q | 選択した行をコメントにします。
Ctrl+W | 選択した行のコメントを解除します。
Ctrl+G | 行に移動します。スクリプトの特定の行に移動します。
親トピック: 手動によるテスト スクリプトの記述


サンプル スクリプト

サンプル スクリプトを再利用することによって、Silk Performer のテスト スクリプトを手動で作成する (Silk Performer Recorder を使用した標準的な方法を取らない) 場合の時間を節約できる可能性があります。

サンプル プロジェクト ファイル (スクリプト、インクルード ファイル、データ ファイル、プロファイル ファイル、ワークロード定義などを含む) は、新規プロジェクトの概要を最初に設定するときに、プロジェクトの概要設定 ダイアログの 種類 リストから利用できます。 これらのファイルは、ニーズに合うように手動で編集できるテンプレートとして利用できます。

Silk Performer のテスト スクリプトは、このプログラム独自のスクリプト言語で記述します。これは Benchmark Description Language (BDL) という、Pascal に似た高級言語です。 スクリプトを手動で編集するには、BDL をよく理解して、ユーザー リクエストのプロトタイプを作成できる必要があります。 また、モジュール、関数、ワークロード定義、トランザクション、Web フォームなど、テスト スクリプトの代表的なコンポーネントを定義できる必要もあります。

  • サンプル スクリプトから作業する
    Benchmark Description Language (BDL) を使用して、サンプル スクリプトを基に新規のテスト スクリプトを作成します。
親トピック: スクリプトを作成する


サンプル スクリプトから作業する

  1. 作業対象のプロジェクトを開くか、新しいプロジェクトを作成します。
  2. ファイル > 開く > スクリプト ファイル (.bdf) をクリックします。 開く ダイアログ ボックスが開きます。
  3. Samples フォルダ (<public user documents>\Silk Performer21.0\Samples\<...>) に移動します。サンプル スクリプトを選択して、開く をクリックします。
  4. スクリプトをプロジェクトに追加することを確認します。
親トピック: サンプル スクリプト
関連タスク
記録プロファイルを追加する


スクリプトの試行

Silk Performer には、スクリプトの試行の実行後に、テスト スクリプトを評価するための手段がいくつか用意されています。

  • スクリプトの試行の概要
    テスト スクリプトにエラーがないことと、クライアント アプリケーションとサーバー間で必要なやり取りを正確に再現できることを保証します。
  • テスト スクリプトの試行
    スクリプトの動作を確認するために、テスト スクリプトの試行結果を検証します。
  • スクリプトの試行の要約
    スクリプトの試行の要約 ページで、最新のスクリプトの試行結果を解析することができます。
  • TrueLog Explorer による視覚的分析
    TrueLog Explorer を使用して、テスト結果を分析する方法について説明します。
  • ログ ファイル
    ログファイルの目的と内容について説明します。
  • レポート ファイルを表示する
    全般情報、仮想ユーザー、要約テーブル、トランザクション レスポンス時間、HTML ページ タイマ、および Web フォームの各測定値を表示します。
  • 出力ファイル
    出力ファイルの目的と内容について説明します。
親トピック: 負荷テストの管理


スクリプトの試行の概要

Silk Performer の負荷テスト実行処理のこの部分では、スクリプトの作成中に作成したテスト スクリプトの試行を行います。

通常、これは、スクリプトの作成中に Silk Performer Recorder によって記録されたトラフィックです。テスト スクリプトの試行では、実際にダウンロードされたデータがリアルタイムに表示されるように、オプションが自動的に選択されます。スクリプトが正しく動作しているかどうかを後から確認できるように、ログ ファイル、TrueLog ファイル、レポート ファイル、出力ファイル、およびエラー ファイルが作成されます。実行されるユーザーは 1 つだけです。また、ストレス テストのオプションは、思考時間なし、トランザクション間の遅延なしに設定されます。ただし、この段階では、実際の負荷テストによる標準的な測定は行われません。

[スクリプトの試行] の設定

[スクリプトの試行] を実行する際には、以下のオプションが自動的に設定されます (「再生の設定」も参照)。

  • ストレス テスト チェック ボックスはオン (思考時間が無効化されている場合)。
  • シミュレーション時間の後で仮想ユーザーを停止する (キューイングのワークロード) チェック ボックスはオフ。
  • 仮想ユーザー ログ ファイル (.log) チェック ボックスはオン。
  • 仮想ユーザー出力ファイル (.wrt) チェック ボックスはオン。
  • 仮想ユーザー レポート ファイル (.rpt) チェック ボックスはオン。
  • 仮想ユーザー エラー レポート ファイル (.rpt) チェック ボックスはオン。
  • TrueLog ファイル (.xlg) チェック ボックスはオン。
  • TrueLog On Error ファイル (.xlg) チェック ボックスはオフ。
  • 時系列データ (.tsd) チェック ボックスはオフ。
  • ログの詳細チェック ボックス (結果 > ログ および 結果 > インターネット ログ ページ) はすべてオン。
  • すべての測定値グループを有効にする チェック ボックスはオフ。
  • 帯域幅 オプションは High Speed (unlimited) に設定されます。
  • ダウンストリーム オプションは [無制限] に設定されます。
  • アップストリーム オプションは [無制限] に設定されます。
  • 二重 チェック ボックスはオフ。
親トピック: スクリプトの試行
関連概念
再生の設定
Project Attributes


スクリプトの試行の要約

スクリプトの試行が完了すると、 スクリプトの試行の要約 ページが表示されます。 結果 ツリーからこのページを開くこともできます。 右側にある 次のステップ 領域で、次の操作を実行できます。
  • ユーザー データのカスタマイズ をクリックすると、TrueLog Explorer が開いてスクリプトをカスタマイズできます。
  • ユーザー タイプの定義 をクリックすると、ワークフロー バーの次のステップに進みます。 このボタンは、 簡易ワークフロー バー を使用している場合にのみ表示されます。
  • ベースラインの検索 をクリックすると、ワークフロー バーの次のステップに進みます。 このボタンは、 完全ワークフロー バー を使用している場合にのみ表示されます。

結果ファイルの分析 領域では、さまざまなレポートとログ ファイルを開くことができます。

注: テストが完了するたびに、要約ページが表示されないようにするには、 監視 ページのツールバーで 要約ページの表示 ボタンを無効にします。
親トピック: スクリプトの試行


TrueLog Explorer による視覚的分析

TrueLog Explorer は、ワークフロー バーによって、[スクリプトの試行] の視覚的分析プロセスをガイドします。

TrueLog Explorer では、テスト中にダウンロードされた実際のデータを正確に表示できます。 これによって、テスト中にサーバーから受信するように指定されたデータが、実際に受信されたかどうかを検証できます。 たとえば、Web アプリケーションのテストの場合、TrueLog Explorer には、テスト中に受信した実際の Web ページが表示されます。 TrueLog Explorer のアニメーション モードを使用すると、ダウンロードされたデータのリアルタイム監視ができます (テスト中に受信されたとおりにデータが表示されます)。

TrueLog Explorer には、受信データ用にさまざまなビューがあり、以下が可能になります。

  • レンダリングされた HTML コードを表示する (実際のユーザーが見るものと同じ)。

  • HTML のソース コードを表示する。

  • 再生 TrueLog と記録 TrueLog の差分を示した差分テーブルを表示する。

  • TrueLog Explorer を利用してスクリプトを検証する
    仮想ユーザー要約レポートを調査したり、ダウンロードされた Web ページを表示したり、エラーを見つけることによって、テスト スクリプトを検証します。
親トピック: スクリプトの試行


TrueLog Explorer を利用してスクリプトを検証する

この作業を実行する前に、スクリプトを実行します。

  1. Silk Performer メニュー バーから、 実行 > スクリプトの試行 を選択します。
    注: TrueLog Explorer によるアニメーション実行 チェック ボックス をオンにします。次に、スクリプトの試行を実行すると、TrueLog Explorer が自動的に開きます。
  2. 仮想ユーザー要約レポートを調査します。 ウィンドウの左側にあるメニュー ツリーの先頭ノードにチェックが付いている場合は、仮想ユーザー レポートが自動的に表示されます。 このレポートには、[スクリプトの試行] の実行についての詳細な情報が表形式で表示されます。
  3. ウィンドウの左側のメニュー ツリーを使用して、必要に応じてフォルダを展開したり折りたたむことによって、テスト中にダウンロードされたデータを検索したり表示することができます。
  4. ダウンロードされた Web ページを表示するには、メニュー ツリーの URL またはリンクを選択します。
  5. 再生エラーを見つけるには、ワークフロー バーの テストの分析 ボタンをクリックして、エラーの検索 を選択します。 新しいウィンドウが表示されて、エラー間を次々と移動することができます。 通常、HTML エラーは、エンドユーザーに明らかになる 1、2 ステップ前に発生します。 TrueLog Explorer を利用すると、エラーの前に表示された Web ページを簡単に調べることができます。
  6. アプリケーションの記録中に作成された TrueLog と、再生 TrueLog を比較します。
親トピック: TrueLog Explorer による視覚的分析


ログ ファイル

ログ ファイルの生成が有効になっている場合、負荷テスト中に検出されたエラーは、すべてログ ファイルに記録されます。 ログ ファイルには、負荷テスト中に、各仮想ユーザーのトランザクションから呼び出されたすべての関数呼び出し記録が含まれています。 これらのファイルには、シミュレーション中に実行された各種のイベントの詳細、トランザクション内での API 呼び出し、サーバーとの間でやり取りされたデータなどの、セッション情報とエラー情報が含まれています。

ただし、ログ ファイルの生成プロセスによって、テストの時間測定値が変化します。 このため、ログ ファイルは、デバッグ目的にのみ使用します。 完全な負荷テストでは生成しないようにしてください。

  • ログ ファイルを表示する
    シミュレーション中に実行された各種のイベントの詳細、トランザクション内での API 呼び出し、サーバーとの間でやり取りされたデータ、その他の情報などの、セッション情報とエラー情報を表示します。
親トピック: スクリプトの試行


ログ ファイルを表示する

以下のうちいずれかを選択します。
  • Silk Performer メニュー バーから、ファイル > 開く > 仮想ユーザー ログ ファイル を選択して、適切なファイル (.log) を指定します。
  • Silk Performer の [監視] ウィンドウで仮想ユーザーの行を右クリックして、コンテキスト メニューから 仮想ユーザー ログ ファイルの表示 を選択します。
ログ ファイルが開きます。
親トピック: ログ ファイル


レポート ファイルを表示する

レポート ファイルには、ある特定の仮想ユーザーのベースライン レポートと同じ情報が含まれています。 このレポートは、XML/XSL に基づいており、最も重要なテスト結果を表示形式で含んでいます。

注: TrueLog Explorer を開くと、仮想ユーザー レポート ファイルが自動的に表示されます。
以下のうちいずれかを選択します。
  • Silk Performer メニュー バーから、ファイル > 開く > 仮想ユーザー レポート ファイル を選択して、適切なファイル (.rpt) を指定します。
  • Silk Performer の [監視] ウィンドウで仮想ユーザーの行を右クリックして、コンテキスト メニューから 仮想ユーザー レポート ファイルの表示 を選択します。
レポート ファイルが開きます。
  • レポートの内容
    レポートのセクションについて説明します。
親トピック: スクリプトの試行


レポートの内容

レポート ファイルには、以下のセクションが含まれています。

  • 全般情報

  • 仮想ユーザー

  • 要約テーブル

  • トランザクション レスポンス時間

  • HTML ページおよびアクション タイマ

  • Web フォーム測定値

全般情報

全般情報セクションには、管理情報が表形式で表示されます。

管理情報には、Silk Performer のバージョン情報、プロジェクト名、プロジェクトの説明、テストの実行日時、ワークロードの定義、ワークロード モデル、および発生したエラー数が含まれます。

ユーザー タイプ

仮想ユーザーについては、測定されたレスポンス時間の詳細を示したセクションが 1 つ表示されます。要約の行には、テストの実行時間、セッション時間、セッション ビジー時間、平均ページ時間、平均アクション時間、成功、キャンセル、および失敗したトランザクションの数、発生したエラー数が表示されます。

要約テーブル

このセクションには、測定値の要約 (測定値を集約したもの) が表形式で表示されます。最初のテーブルには、全般情報 (実行されたトランザクションの数、発生したエラーの数など) が含まれます。それ以降のテーブルには、テストしたアプリケーションの種類に関連する要約情報が含まれます。

トランザクション

このセクションには、要約された測定値 (特定の仮想ユーザーのすべてのトランザクション測定値を集約したもの) が表形式で表示されます。トランザクションごとに、トランザクション レスポンス時間とトランザクション ビジー時間が表示されます。

トランザクション レスポンス時間は、トランザクションの最初から最後まで (すべての思考時間を含む) 測定されます。

トランザクションのビジー時間は、思考時間を除いたトランザクション レスポンス時間です。

ページおよびアクション タイマ

このセクションには、アクセスされたすべての Web ページに対する測定値の要約が表形式で表示されます。ページごとに、ページ全体のダウンロード時間、HTML ドキュメントのダウンロード時間、サーバー ビジー時間、このページによってダウンロードされたデータ量、埋め込みオブジェクトのためにダウンロードされたデータ量が表示されます。

Web フォーム

このセクションには、使用されたすべての Web フォームに対する測定値の要約が表形式で表示されます。フォームごとに、ラウンド トリップ時間、サーバー ビジー時間、HTTP ヒット数、送信されたリクエスト データの量、受信したレスポンス データの量が表示されます。

親トピック: レポート ファイルを表示する


出力ファイル

出力ファイルには、テスト スクリプトで使用されている write 文の出力が含まれます。 出力ファイルは、特定のユーザーによって write 文が実行された場合にのみ、そのユーザーに対して生成されます。

注: 出力ファイルの生成によって、負荷テストの時間測定値が変化します。 このため、これらのファイルは、デバッグ目的にのみ使用し、完全な負荷テストでは生成しないようにしてください。
  • 出力ファイルを表示する
    テスト スクリプトで使用されている write 文の出力を表示します。
親トピック: スクリプトの試行
関連資料
Write Statement


出力ファイルを表示する

注: 出力ファイルの生成によって、負荷テストの時間測定値が変化します。 このため、これらのファイルは、デバッグ目的にのみ使用し、完全な負荷テストでは生成しないようにしてください。
以下のうちいずれかを選択します。
  • Silk Performer メニュー バーから、ファイル > 開く > 仮想ユーザー出力ファイル を選択して、適切なファイル (.wrt) を指定します。
  • Silk Performer の [監視] ウィンドウで仮想ユーザーの行を右クリックして、仮想ユーザー出力ファイルの表示 を選択します。
出力ファイルが開きます。
親トピック: 出力ファイル


関数とトランザクションの宣言

Silk Performer には GUI ツールが用意されていて、関数とトランザクションの宣言をテスト スクリプトに挿入するときに役に立ちます。

関数は、スクリプトで必要な複数のタスクをカプセル化するために使用されます。 各関数はその外部で宣言されたデータに、変数やパラメータをとおしてアクセスし変更できます。 オプションで、関数は特定の型の値を返すことができます。

トランザクションは、テストにおいて仮想ユーザーに割り当てられる独立した作業単位で、これに対して、個別に時間測定が行われます。

  • 関数の宣言を挿入する
    テスト スクリプトに関数の宣言を挿入します。
  • トランザクション宣言を挿入する
    テスト スクリプトにトランザクション宣言を挿入します。
親トピック: スクリプトをカスタマイズする


関数の宣言を挿入する

  1. 新しい関数を挿入するテスト スクリプトを開いて、スクリプト > 関数の新規作成 を Silk Performer のメニュー バーから選択します。 スクリプトの本文内を右クリックしてこのダイアログにアクセスすることもできます。コンテキスト メニューから 関数の新規作成 を選択します。 関数の新規作成 ダイアログが表示されます。
  2. 名前 フィールドに、テスト スクリプトに挿入する関数名を入力します。 名前は文字で始まる必要があり、英数字、下線 (_) を使用できます。
  3. 戻り値の型 リスト ボックスから、関数の戻り値のデータ型を選択します。 以下のうちいずれかを選択します。
    • [- none -] - 戻り値がない関数の場合
    • [boolean] - 戻り値が True または False である関数の場合
    • [float] - 戻り値が正または負の浮動小数点値やゼロである関数の場合
    • [number] - 戻り値が正または負の整数値やゼロである関数の場合
    • [string] - 戻り値が文字列である関数の場合
  4. パラメータ リストで、関数に渡すパラメータを挿入します。 各パラメータに対して、名前 列に名前を入力し、タイプ リスト ボックスからデータ型を選択します。
    • [boolean] - 値が True または False であるパラメータの場合
    • [float] - 値が正または負の浮動小数点値やゼロであるパラメータの場合
    • [number] - 値が正または負の整数値やゼロであるパラメータの場合
    • [string] - 値が文字列であるパラメータの場合
  5. プレビュー 領域で、スクリプトに挿入したときの関数宣言の内容を確認します。 この宣言には、戻り値とパラメータを挿入するリストが含まれます。 スクリプトに関数宣言が挿入された後に関数のコードを追加する必要があることに注意してください。
  6. OK をクリックします。
新しい関数がスクリプトに挿入され、スクリプト エディタ ウィンドウに表示されます。
親トピック: 関数とトランザクションの宣言


トランザクション宣言を挿入する

  1. 新しいトランザクションを挿入するテスト スクリプトを開いて、スクリプト > トランザクションの新規作成 を Silk Performer のメニュー バーから選択します。 スクリプトの本文内を右クリックしてこのダイアログにアクセスすることもできます。コンテキスト メニューから トランザクションの新規作成 を選択します。 トランザクションの新規作成 ダイアログが表示されます。
  2. 名前 フィールドに、テスト スクリプトに挿入するトランザクション名を入力します。 名前は文字で始まる必要があり、英数字、下線 (_) を使用できます。
  3. OK をクリックします。
新しいトランザクションがスクリプトに挿入され、スクリプト エディタ ウィンドウに表示されます。
親トピック: 関数とトランザクションの宣言


ユーザー グループ

ユーザー グループとは、似た動作 (同一の動作ではない) を共有する仮想ユーザーのグループのことです。 ユーザー グループのメンバは、現実のクライアントの動作をシミュレートすることを目的に、少し異なるトランザクションを実行します。

ユーザー グループは、パラメータ化されたユーザー入力データおよびプロファイル (たとえば、ブラウザ タイプや接続速度など) と共に使用され、エンドユーザーの典型的な活動をシミュレートします。

ユーザー グループは、呼び出すトランザクションとその呼び出し頻度で定義されます。 たとえば、TLogon トランザクションを 1 回、TSearch トランザクションを 5 回、TLogoff トランザクションを 1 回、それぞれ実行する Searcher というユーザー グループがあるとしましょう。 また、TLogon トランザクションを 1 回、TSearch トランザクションを 3 回、TUpdate トランザクションを 2 回、TLogoff トランザクションを 1 回、それぞれ実行する Updater というユーザー グループもあるとしましょう。 さらに、Inserter という第 3 のユーザー グループは、TLogon トランザクションを 1 回、TSearch トランザクションを 1 回、TInsert トランザクションを 3 回、TLogoff トランザクションを 1 回、それぞれ実行するとしましょう。 これらのユーザー グループをまとめて使用すると、負荷バランスを維持しつつ、つまり、すべてのユーザーが同時に同じトランザクションを実行しないような形でトランザクションを分散させながら、現実のクライアントの活動をシミュレートすることができます。

複数のユーザーが同じプロファイルを持っている場合は、それらのユーザーを 1 つのユーザー グループにまとめることができます。 ユーザー グループ リストには、ユーザー グループの名前、そのユーザー グループから呼び出されるトランザクション、それらのトランザクションを呼び出す頻度 (TransCount) が記述されています。 ユーザー グループの説明は Silk Performer テスト スクリプトの dcluser セクションに記載されています。

  • ユーザー グループをカスタマイズする
    ユーザー グループやトランザクションをカスタマイズします。
親トピック: スクリプトをカスタマイズする


ユーザー グループをカスタマイズする

  1. カスタマイズする BDF スクリプトを開き、アクティブ化します。
  2. スクリプト > ユーザー グループのカスタマイズ を Silk Performer のメニュー バーから選択します。 ユーザー グループのカスタマイズ ダイアログが表示されます。
  3. ユーザー グループまたはトランザクション ノードを右クリックすると、次の利用可能なオプションがリストされたコンテキスト メニューが開きます。
    • ユーザー グループの新規作成
    • ユーザー グループのコピー
    • ユーザー グループ名の変更
    • ユーザー グループの削除
    • トランザクションの挿入
    • トランザクションのコピー
    • トランザクション名の変更
    • トランザクションの削除
    トランザクションを各ユーザー グループに対して追加、削除できます。 トランザクション名の変更処理では、トランザクションが割り当てられているすべてのユーザー グループでトランザクション名を変更します。
  4. コンテキスト メニューから該当する処理を選択して、プロンプトに従います。
  5. Begin と End トランザクションは、開始/終了 列にあるチェック ボックスをオンまたはオフにすることによって各ユーザー グループで定義されます。
  6. 件数 列のエントリ (トランザクションが呼び出された回数を表す) はクリックして直接編集できます。
  7. トランザクションをランダムに選ぶ チェック ボックスをオンにして、ユーザー グループに "begin" トランザクションでも "end" トランザクションでもない、少なくとも 2 つのトランザクションが含まれるとき、ランダム順序 列には、トランザクション分布の加重方式がパーセンテージで示されます。 たとえば、2 つの begin と end 以外のトランザクションがある場合は、各トランザクションのランダム順序分布は 50 % です。 3 つの begin と end 以外のトランザクションがある場合は、各トランザクションのランダム順序分布は 33%、33% および 34% です。
  8. ユーザー グループとトランザクションのカスタマイズが完了したら、OK をクリックします。
変更されたデータは、テスト スクリプトの dcluser セクション (および必要な場合に dcltrans セクション) に書き込まれます。
親トピック: ユーザー グループ


[パラメータ ウィザード] でのパラメータの作成

[パラメータ ウィザード] により、テスト中に仮想ユーザーに対して、記録されたまたはスクリプトの値を定数値、ランダム値、複数列のデータ ファイルから取得した値で置き換えることによって、現実的なパラメータを作成できます。 これらの値の型それぞれは、ウィザードで生成できます。 つまり、仮想ユーザーを、Web フォームで必要なすべての共通データ (名前、住所、郵便番号、クレジット カード番号など) に対する、変動する個人データで調整できます。

[パラメータ ウィザード] では、手順をおって、変数を作成でき、テスト スクリプトに変数を挿入できます。 広範な変数型を利用できます。 各変数型は異なる値の型を生成できます (テキストや数値を含む文字列、シリアル番号、整数全体、浮動小数点数)。

値は、異なる分布パターンでランダム化できます。 事前定義の総合データ セット (名前、住所、パスワードなど) も利用できます。

  • スクリプトに定数値を挿入する
    パラメータ ウィザードでスクリプト内の記録値またはスクリプト値を単一の定数値で置き換えます。
  • スクリプトにランダム値を挿入する
    パラメータ ウィザードでスクリプト内の記録値またはスクリプト値をランダム変数で置き換えます。
  • 複数列データ ファイルから値をパラメータに挿入する
    パラメータ ウィザードでスクリプト内の記録値またはスクリプト値を複数列データ ファイルから値を引き出すパラメータで置き換えます。
  • 複数列データ ファイルを編集する
    複数列 CSV データ ファイルで使用されている値やセパレータ型を編集します。
  • テスト スクリプトにパラメータを挿入する
    事前に存在するパラメータをテスト スクリプトに挿入できます。
親トピック: スクリプトをカスタマイズする
関連概念
ユーザー データのカスタマイズ
Complex Input/Output Data
関連タスク
Customizing Input Parameters


スクリプトに定数値を挿入する

  1. メニュー バーで、 スクリプト > パラメータ新規作成 の順にクリックします。 パラメータ ウィザード - パラメータ新規作成 ダイアログ ボックスが表示されます。
  2. パラメータ新規作成 アイコンをクリックすると、[パラメータ ウィザード] が開きます。
  3. 値のカスタマイズ を選択します。
  4. 次へ をクリックします。
  5. テスト スクリプトに挿入する変数のデータ型を データ型 リスト ボックスから選択します。
  6. 名前 フィールドに、新しい定数値の名前を入力、またはデフォルト値を使用します。
  7. 値 フィールドに、新しい定数値を入力します。
  8. 終了 をクリックします。 これでスクリプトのパラメータ セクションに新しい定数値が追加されます。 スクリプトのコンテキスト メニューからウィザードを開いた場合は、選択した値が新しく作成された変数で自動的に置き換わります。

多くの定数値を作成する必要がある場合は、できるだけ頻繁にウィザードを起動します。 別の方式でウィザードを起動した場合は、スクリプトの定数値が作成した BDL 変数で置き換えます。

親トピック: [パラメータ ウィザード] でのパラメータの作成
関連資料
Variables Section


スクリプトにランダム値を挿入する

  1. メニュー バーで、 スクリプト > パラメータ新規作成 の順にクリックします。 パラメータ ウィザード - パラメータ新規作成 ダイアログ ボックスが表示されます。
  2. ランダム変数からパラメータを作成 をクリックします。
  3. 次へ をクリックします。
  4. ウィザードの ランダム変数の種類の選択 ウィンドウで、ランダムの種類 リスト ボックスからランダム変数の種類を選択します。 各ランダム変数の種類に対する説明と変数の説明をプレビューで確認し、必要な変数を選択し、属性を指定します。
  5. 次へ をクリックします。 パラメータの挿入属性の選択 ウィンドウが表示されます。
  6. 名前 フィールドに、新しい定数値の名前を入力、またはデフォルト値を使用します。
  7. 変数の属性を指定します。 これらの属性は、選択した変数の型によって決まります。 必要な場合は、< 戻る で、変数の型の説明をレビューします。
  8. 次へ をクリックします。 使用法の選択 ウィンドウが表示されます。
  9. 変数の使用方法を指定します。
    • [毎回] ランダム変数を使用するたびに新しいランダム値を生成します。
    • [トランザクションごと] 各トランザクション呼び出しごとに新しい値を生成します。
    • [テストごと] テスト全体で同じ値です。
  10. 終了 をクリックします。 これでスクリプトのランダム変数セクションに新しいランダム変数が追加されます。

    スクリプトのコンテキスト メニューからウィザードを開いた場合は、選択した値が新しく作成された変数で自動的に置き換わります。

多くのランダム変数を作成する必要がある場合は、できるだけ頻繁にウィザードを起動します。 別の方式でウィザードを起動した場合は、スクリプトの定数値が作成した BDL 変数で置き換えます。

親トピック: [パラメータ ウィザード] でのパラメータの作成
関連概念
Random Types
関連タスク
Customizing Input Parameters


複数列データ ファイルから値をパラメータに挿入する

  1. メニュー バーで、スクリプト > パラメータ新規作成 の順にクリックします。 パラメータ ウィザード - パラメータ新規作成 ダイアログ ボックスが表示されます。
  2. 複数列データ ファイルからパラメータを作成 を選択します。
  3. 次へ をクリックします。
  4. ウィザードの 複数列データ ファイルからのパラメータ作成 ウィンドウで、ファイル名 リスト ボックスから複数列データ ファイルを選択します。
    1. 区切り文字 リスト ボックスから適切な区切り文字を選択するか、カスタム区切り文字を入力します。
  5. ハンドル名 フィールドに、複数列データ ファイル変数のファイル ハンドル名を入力するか、デフォルト名を使用します。
  6. パラメータ名 フィールドに、新しいパラメータの名前を入力、またはデフォルト値を使用します。
  7. 次へ をクリックします。 パラメータ ウィザード - 複数列データ ファイルからのパラメータ作成 ウィンドウが表示されます。
  8. 行選択の順序 を選択し、属性 オプションを指定します。
  9. 変数の属性を指定します。これらの属性は、選択した変数の型によって決まります。必要な場合は、< 戻る で、変数の型の説明をレビューします。
  10. 終了 をクリックします。

    複数列データ ファイルから新しいパラメータが、スクリプトのパラメータ セクションに追加されます。

    選択した複数列データ ファイルがプロジェクトのデータ ファイルにも追加されます。

    スクリプトのコンテキスト メニューからウィザードを開いた場合は、選択した値が新しく作成された変数で自動的に置き換わります。

多くのランダム変数を作成する必要がある場合は、できるだけ頻繁にウィザードを起動します。別の方式でウィザードを起動した場合は、スクリプトの定数値が作成した BDL 変数で置き換えます。

親トピック: [パラメータ ウィザード] でのパラメータの作成
関連資料
Variables Section


複数列データ ファイルを編集する

  1. プロジェクト メニュー ツリーの データ ファイル サブツリーを開きます。
  2. 編集対象の複数列データ ファイルをダブルクリックします。 CSV ファイルの編集 ダイアログ ボックスが表示されます。
  3. 複数列データ ファイルの適切な区切り文字を 区切り文字 リスト ボックスから選択するか、カスタムの区切り文字を入力します。
  4. 複数列データ ファイルで必要に応じて値を変更、追加または削除します。
  5. OK をクリックすると、複数列データ ファイルの変更が保存され、ウィンドウが閉じます。名前を付けて保存 ボタンをクリックすると、複数列データ ファイルに異なる名前で保存します。
親トピック: [パラメータ ウィザード] でのパラメータの作成


テスト スクリプトにパラメータを挿入する

  1. BDL スクリプトでカスタマイズ可能な値 (文字列など) を右クリックします。
  2. コンテキスト メニューから 値のカスタマイズ を選択します。 [パラメータ ウィザード] が表示されます。 スクリプトの値がカスタマイズ可能ではない場合は、値のカスタマイズ メニュー項目は無効です。
  3. このウィザードの 値のカスタマイズ ウィンドウで、既存のパラメータを使用する を選択します。
  4. 次へ をクリックします。 ウィザードの 既存のパラメータを使用する ウィンドウが表示されます。
  5. リストから変数を選択して、完了 をクリックします。 表示するパラメータの種類 リスト ボックスから表示されたパラメータのデータ型を選択できます。 Silk Performer では、カスタマイズ値のデータ型と互換性のある選択データ型のウィンドウが自動的に表示されます。
選択した値は既存のパラメータで自動的に置き換わります。
親トピック: [パラメータ ウィザード] でのパラメータの作成


シリアル化と同期

テスト スクリプトのトランザクションをシリアル化または同期することによって、シミュレーションでの負荷のタイミングをさらに制御できる Silk Performer 関数があります。 シリアル化と同期は、既存の Windows 関数を呼び出す高レベルの関数を使用することによって実装されます。

  • シリアル化
    シリアル化を使用すると、一度に 1 つずつ実行されるトランザクションの影響をテストできます。
  • 同期
    同期は、同時に多数のトランザクションを呼び出したときの影響をテストする際に役立ちます。
  • 待ち合わせ機能
    指定された仮想ユーザーが一定の状態に達するまで遅延を発生させ、すべてのユーザーを同時に進めるために使用されます。
  • 複数エージェント
    Silk Performer では複数エージェント間で同期とシリアル化の使用を拡張する追加関数が用意されています。
親トピック: スクリプトをカスタマイズする


シリアル化

シリアル化を使用すると、一度に 1 つずつ実行されるトランザクションの影響をテストできます。 これは、たとえば、同時に多数のログインを処理できないサーバーに接続する際に役立ちます。

ユーザーおよびトランザクションをシリアル化するには、トークンまたはミューテックスのオブジェクトを使用する必要があります。 名前付きミューテックス オブジェクトは、CreateMutex 関数を呼び出すことによって作成されます。 同期されるユーザーは、ミューテックス オブジェクトを受け取るまで待機する必要があります。 これによって、一度に 1 ユーザーのみがトランザクションを実行することが保証されます。

ユーザーは、トランザクションを完了したら、ReleaseMutex 関数を呼び出すことによって、トークンを開放する必要があります。 これによって、その他のユーザーが、ミューテックス オブジェクトを使用できるようになります。

シリアル化関数

トランザクションおよびユーザーをシリアル化するために、以下の関数が使用されます。

  • CreateMutex
  • CreateMutexEx
  • ReleaseMutex
  • WaitForSingleObject
  • CloseHandle

シリアル化のサンプル スクリプト

以下の例は、Silk Performer のインストール ディレクトリの Samples\Database フォルダにある Mutexlogin.bdf というサンプル スクリプトから引用しています。 このスクリプトは、3 つのトランザクションから構成されています。 TMain は、ユーザーがトークンを受け取るまで待機してから、DBMS に接続します。Selling は、データベース トランザクションを実行します。CleanUp は、データベースへの接続を切断して、すべてのリソースを開放します。

最初に、トランザクション内の重要なセクションへのアクセスをシリアル化するために、MyConnectMutex というミューテックス オブジェクトが、複数の同時ユーザーに対して作成されます。 WaitForSingleObject 関数を呼び出すと、ミューテックス オブジェクトが合図を出している状態になるまで遅延が発生します。 これは、その時点から現在のトランザクションのみが実行され、この状態はトークンが開放されるまで続くことを意味します。 実行時に、データベース システムへの接続が確立されます。 正常に接続されると、ミューテックス オブジェクトの所有権が開放されます。 これらのステップが正常に完了すると、トランザクションがコミットされます。 この例では、データベース システムへの接続のみがシリアル化されます。

benchmark MutexLogin
use "dbapi.bdh"
var
  gHdbc1 : number; // handle for database connection
  gHMutex : number; // mutex handle
dcluser
  user
    Seller
  transactions
    TMain : begin;
    Selling : 50;
    CleanUp : end;

dcltrans
  transaction TMain
  var
    str: string;
  begin
    // SYNC: serialize connect transaction with mutex object
    // (enter critical section)
    gHMutex := CreateMutex("MyConnectMutex");
    WaitForSingleObject(gHMutex, INFINITE);
    gHdbc1 := DB_Connect("dsn=sqs_purple;uid=u1;pwd=u1");
    Print("Connected!", 1, 1);
    // SYNC: leave critical section and pass control to other user
    ReleaseMutex(gHMutex);
  end TMain;

  // process database transaction
  transaction Selling
  begin
  ...
  end Selling;

  transaction CleanUp
  begin
    DB_Disconnect(gHdbc1);
  end CleanUp;
親トピック: シリアル化と同期


同期

同期は、同時に多数のトランザクションを呼び出したときの影響をテストする際に役立ちます。 同期を使用することによって、同時実行に関する特殊な問題をテストするために、システムにストレスをかけることができます。 同期は、レースを開始するときの合図のように作用する Event Starter と呼ばれる追加のユーザーを利用することによって動作します。 CreateEvent 関数を使用すると、Event Starter ユーザーを使用して、指定された時間が経過した後にイベント オブジェクトを送信できます。 シミュレーションで使用するユーザーがこのイベントを待機するようにセットアップすることによって、イベントが開放されたときに、指定されたトランザクションを同時に実行できます。 Silk Performer は、PulseEvent 関数をこの目的で提供します。

その他のユーザーは、WaitForSingleObject 関数を呼び出して、指定されたイベントが合図が出された状態になるまで待機します。 WaitFor 関数を使用すると、イベント オブジェクトを使用せずにユーザー間で相互に同期できます。

同期関数

トランザクションおよびユーザーを同期するために、以下の関数が使用されます。

  • CreateEvent
  • PulseEvent
  • WaitFor
  • WaitForSingleObject
  • CloseHandle

同期のサンプル スクリプト

以下の例では、ユーザーは、StarterEvent というイベント オブジェクトを作成して、FTP サーバーへの接続を確立します。 Starter ユーザーは、イベント オブジェクト StarterEvent の状態を 10 秒ごとに合図するように設定し、該当する数の待機しているユーザーがトランザクションを処理した後にリセットします。 このようにして、すべての Uploader ユーザーは、TUpload トランザクションを同時に実行するように強制されます。 Uploader は、イベント オブジェクトが合図が出された状態になるまで待機してから、Upload トランザクションを実行します。

dcluser
  user
    Starter
  transactions
    TInit : begin;
    TStartEvent : 20;
  user
    Uploader
  transactions
    TInit : begin;
    TUpload : 20;
var
  hEventGo : number; // handle for starting event
  hFTP : number;

dcltrans
  transaction TInit
  begin
    hEventGo := CreateEvent("StarterEvent");
    WebFtpConnect(hFTP, "standardhost", WEB_PORT_FTP, "username", "password");
  end TInit;

  transaction TStartEvent
  begin
    wait 10.0;
    // every 10 seconds the starter event forces all
    // seller users to execute the selling transaction
    // at the same time
    PulseEvent(hEventGo);
  end TStartEvent;

  transaction TUpload
  begin
    WaitForSingleObject(hEventGo, INFINITE);
    WebFtpPut(hFTP, 4096, "test.dat", true);
  end TUpload;
親トピック: シリアル化と同期


待ち合わせ機能

この関数は、指定された仮想ユーザーが一定の状態に達するまで遅延を発生させ、すべてのユーザーを同時に進めるために使用されます。 これは、システムに対して非常に特殊なストレスを生成できるようにすることによって、システムが多数の同時トランザクションを処理する能力をテストします。 たとえば、FTP サーバーに多数のファイルを保存するトランザクションにおいて、すべてのユーザーがログオンするまで待機して、すべてのファイルを同時に保存するようにできます。

待ち合わせ機能

Silk Performer には、以下の待ち合わせ機能があります。

  • WaitFor

待ち合わせのサンプル スクリプト

この例では、スクリプトは、WaitFor 関数を含むスクリプトで 5 人の仮想ユーザー (Buyer) が揃うまで待機してから、トランザクションを実行します。

const
  USERS := 5;
dcluser
  user
    Buyer
  transactions
    TBuy : 10;

dcltrans
  transaction TBuy
  const
    TIMEOUT := 60;
  begin
    // wait for users rendezvousing at this point
    if not WaitFor("Rendezvous", USERS, TIMEOUT) then
      write("timeout"); halt;
    end;
    // proceed with transaction
    print("rendezvous", 1, TEXT_RED);
  end TBuy;
親トピック: シリアル化と同期


複数エージェント

シリアル化と同期機能は、単一のエージェント コンピュータのみで利用できます。 Silk Performer では複数エージェント間で同期とシリアル化の使用を拡張する追加関数が用意されています。

複数エージェント間でのシリアル化は GlobalResourceEnter と GlobalResourceRelease 関数により可能です。 GlobalResourceEnter は、限定されたユーザーのみで占有できるリソースを定義します。 リソースを占有するユーザー数がリソースの占有を許可された最大ユーザー数に到達するまで、呼び出し側は待機する必要があります。 GlobalResourceRelease 関数は GlobalResourceEnter 関数で占有されたリソースを解放します。 リソースを待機しているユーザーがまだいる場合は、キューの次のユーザーがシミュレーションを再開します。

複数エージェント間での同期は GlobalWaitFor 関数により可能です。 この関数はチェックポイント (遭遇点) を定義し、呼び出しユーザーをブロックします。 呼び出し側は、指定数のユーザー (呼び出し側を含む) がチェックポイントに達するまたは超えるまで、あるいは指定タイムアウトが発生するまで、待機します。 チェックポイントは名前で識別し、すべてのユーザーに表示されます。各種リモート エージェントで動作するユーザーを含みます。 待機中のユーザーは、指定したタイムアウトに到達するまで、またはユーザーの指定数がチェックポイントに対して関数を呼び出すとき、継続されます。 タイムアウトしたユーザーが、チェックポイントを通過したともみなされます。

関数 GlobalVarGet、GlobalVarInc および GlobalVarSet がそれぞれ使用され、すべてのエージェントのすべてのユーザーがアクセスできるグローバル整数変数の値を取得、インクリメント、設定します。

これらの関数の詳細な情報については、『The BDL Function Reference』(英語) を参照してください。

親トピック: シリアル化と同期
関連概念
Synchronization Functions


ロバストなスクリプトを構築するためのチェック リスト

Silk Performer Recorder で記録されたスクリプトは、負荷テストを行う際の開始点として十分機能します。しかし、このような手を加えていないスクリプトには、通常 2 つのマイナス面があります。それは、現実的な結果を生成しない上に、特にロバストでもないことと、再生中にエラーを起こす可能性があることです。

可能な限りスクリプトをロバストにするには、負荷テストを開始する前にスクリプトのカスタマイズを行うことを推奨します。スクリプトをカスタマイズする場合、次の点を考慮します。

  • 適切なテスト データ： 多くのアプリケーションは、適切なテスト データを必要とします。仮想ユーザーが正しいアクセス権を持つ適切なユーザー名を利用するようにスクリプトをカスタマイズする必要があります。仮想ユーザーがトランザクションを同時に実行する場合、別のユーザー ID を定義する必要があるでしょう。
  • 動的コンテンツ： リンク名が変更されたり、ある項目が利用できなくなったり、Web ショップの製品が在庫切れになるなど、多くの場合、アプリケーションのコンテンツは動的です。また、現実のユーザーはアプリケーションのさまざまな経路を辿ります。しかし、記録したスクリプトは、特定の経路のみを再生します。経路は、時間、ユーザー、あるいはその他の条件によって変わるかもしれません。
  • アプリケーションが使用できない： 負荷テストの開始時に、テスト対象アプリケーションが使用できない、準備が完了していない、データベース接続が確立していない、などの状況にある場合があります。スクリプトは、このような状況を適切に処理する必要があります。
  • タイミングの問題： BDL 関数でデフォルトのタイムアウト設定を使用すると、テスト シナリオにふさわしくない場合があります。特定の要求に合わせ、エラーを回避するために、これらのタイムアウト設定を調整します。
  • 同時性の問題： 同時性の問題を制御することもエラーを避けるのに役立ちます。データベースは同時に一部の仮想ユーザーに対してだけにしか、応答できないかもしれません。同時性を制御することで、仮想ユーザーをより現実的に動作させることにもなります。現実のユーザーは、通常、ある特定のタスクを同時ではなく、重ならないようにして実行します。Silk Performer のシリアル化機能、同期機能、待ち合わせ機能によって、仮想ユーザーに必要な動作を細かく制御できます。

スクリプトをよりロバストにするには、次のようなエラー シナリオも考慮する必要があります。エラーの発生時に仮想ユーザーがどのように動作するかを考えます。仮想ユーザーは次の動作を行うことができます。

  • トランザクションの残りの部分をスキップ： このアクションは、仮想ユーザーが Web ショップのアイテムを購入しようとしたが、在庫が無かった場合に適切な動作になるでしょう。仮想ユーザーは特定のトランザクションをスキップし、次のトランザクションの実行を続けることができます。このような動作は、return 文で実現できます。
  • 負荷テストの停止： このアクションは、データベース接続が確立できず、接続がないとテスト対象アプリケーションを使用できない場合に適切な動作になるでしょう。このような場合、負荷テストを続けることはできません。このような動作は、halt 文で実現できます。
  • エラーを処理してトランザクションの実行を続行： これは、仮想ユーザーがログイン ページで誤ったパスワードを入力した場合に有効でしょう。スクリプトがログイン エラーのようなエラーを処理できる場合、仮想ユーザーは他のパスワードでログインを再試行し、トランザクションの残りの実行を続けることができる可能性があります。このような動作は、エラー処理関数で実現できます。
親トピック: スクリプトをカスタマイズする
関連資料
Halt Statement
Return Statement
Error-Handling Functions


カスタム DLL

Silk Performer スクリプトで、DLL (ダイナミック リンク ライブラリ) で提供される関数を呼び出すことができます。 この機能により、ユーザーは DLL を生成できる任意のプログラミング言語の関数を実装できます。Silk Performer テスト スクリプトでそのような外部関数を利用できます。

  • 外部関数宣言
    BDL では、スクリプトから呼び出されたすべての外部関数は、使用する前に宣言する必要があります。
  • 関数のプロトタイプ
    スクリプトの外部関数セクションで、DLL 名を宣言した後で、任意の数の DLL 関数のプロトタイプを宣言できます。
  • 外部関数でのパラメータ
    任意の型のパラメータを外部関数に渡すことができます。
  • 外部関数の構造化データ型
    構造化データ型を外部関数に渡す方法について説明します。
親トピック: スクリプトをカスタマイズする


外部関数宣言

DLL を作成するために一般に次の 2 つのファイルが必要です。

  • 1 つまたは複数の関数の実装を含むソース ファイル
  • エクスポートされる関数の種類を指定する定義ファイル

一般的な C/C++ コンパイラで DLL を作成するときは、ソース ファイル (.c、.cpp) と定義ファイル (.def) が Visual Studio プロジェクトに必要です。

BDL では、スクリプトから呼び出されたすべての外部関数は、使用する前に宣言する必要があります。Silk Performer スクリプトの外部関数セクションで実行する必要があります。

注: DLL ファイルが Silk Performer のインストール ディレクトリや指定パスに含まれるディレクトリにない場合は、DLL ファイルをプロジェクトのデータ ファイルに追加する必要があります。
注: vb.net dll ファイルはサポートされません。
次のファイルはスクリプトのサンプルです。ファイルは、次のフォルダまたはそのサブフォルダにあります。C:\Users\Public\Public Documents\Silk Performer <バージョン>\SampleApps\CustomAPI.
  • DemoFunctions.bdf
  • DemoFunctions.dsp
  • demofunctions.cpp
  • DemoFunctions.dll

スクリプトの例

次の例では、外部関数 DemoSum と DemoDiff が宣言され、TMain トランザクションから呼び出されます。

dll "DemoFunctions.dll"

  // function without parameters and return value
  "DemoOutput"
    function Output;

  // function declared using C data types
  "DemoSum"
    function Sum(in long, in long): long;

  // function declared using BDL data types
  "DemoDiff"
    function Diff(in number, in number): number;

// DLL is not located in the Silk Performer directory
dll "C:\\Debug\\Functions.dll"

dcltrans

  transaction TMain
  var
    x, y, nSum, nDiff: number;
  begin
    x := 4; y := 5;
    nSum := Sum(x, y); // external function calls
    nDiff := Diff(x, y);
    Output();
  end TransMain;
親トピック: カスタム DLL
関連タスク
データ ファイルを追加する
関連資料
External Functions Section


関数のプロトタイプ

テスト スクリプトの外部関数セクションで、DLL 名を宣言した後で、任意の数の DLL 関数のプロトタイプを宣言できます。Silk Performer スクリプトで使用される各関数は、宣言が必要です。これらの宣言では大文字と小文字が区別されます。さらに、BDL スクリプトで使用されるすべての関数名を指定する識別子を定義する必要があります。

パラメータが外部関数に渡されるとき、これらのパラメータは関数に対して参照渡しまたは値渡し (デフォルト) かどうかを指定する必要があります。パラメータは BDL データ型または C データ型 (long、short、char、float、double または pointer) で宣言できます。

次の表は、DLL によりエクスポートされるネイティブ関数の正式パラメータ、BDH ファイルの DLL セクションで宣言された外部関数の正式パラメータと実パラメータ (BDL データ型) の間のデータ型マッピングを示します。

表 1. データ型マッピング
C データ型 | DLL セクション (BDH) | BDL データ型
char | char | Number
unsigned char | unsigned char | Number
short | short | Number
unsigned short | unsigned short | Number
long | long、number、boolean | Number、Boolean
unsigned long | long、number | Number
char* | string | String
*(Pointer) | long、number | Number
float | float | Float
double | double | Float
Ptr (任意のデータ型へのポインタを表す C データ型) | string | String
親トピック: カスタム DLL


外部関数でのパラメータ

任意の型のパラメータを外部関数に渡すことができます。 単純なデータ型を使用することは簡単ですが、配列や構造化データを処理するには、使用する特定のデータ型のサイズや配置に関する知識が必要です。

入力および出力パラメータとして許可される単純なデータ型は、以下のとおりです。
表 1. 単純データ型
C データ型 | BDL データ型
Char、unsigned char | Number
Short、unsigned short | Number
Long | Number
Double | Float
Float | Float
char* | String
注: unsigned long データ型は Silk Performer スクリプトで使用されると、long 型に変換されます。

パラメータが関数に値で渡されるときは、型を指定するだけで宣言されます。 パラメータが関数に参照で渡される場合は (出力パラメータとして使用される場合など)、データ型へのポインタを定義する必要があります。

次の例では、関数パラメータを C で宣言する方法と、必要な対応する外部関数を BDL で宣言する方法について説明します。 さらに、外部関数呼び出しの例も示します。

C ソース コード

この例では、外部関数 T_PARAM は、入力パラメータinChar、inShort、inLong、inDouble、inFloat、inUShort、および inUChar を受け取ります。 対応する出力パラメータにはそれぞれ、outChar、outShort、outLong、outDouble、outFloat、outUShort、および outUChar があります。 これらのパラメータはポインタとして宣言する必要があります。関数が呼び出しする間に変数への参照が関数に渡されるからです。 さらに、inoutString 文字列は入出力パラメータとして宣言されます。

char* T_PARAM( char            inChar,      // in
               short           inShort,
               long            inLong,
               double          inDouble,
               float           inFloat,
               unsigned short  inUShort,
               unsigned char   inUChar,
               char*           inoutString, // in/out
               char*           outChar,     // out
               short*          outShort,
               long*           outLong,
               double*         outDouble,
               float*          outFloat,
               unsigned short* outUShort,
               unsigned char*  outUChar )
{
  char sBuffer[1000];
  // copy the values of the input parameters to the
  // output parameters and the return value
  return sBuffer;
}

BDL 外部関数の宣言

前に定義した T_PARAM 関数を BDL で使用するには、Silk Performer スクリプトの外部関数セクションで関数を宣言する必要があります。 次の例で説明します。 この場合、パラメータは正式データ型として定義されます。 各パラメータについているコメントは対応する BDL データ型を示します。

"T_PARAM" function t_param(
  in char,                         // in number
  in short,                        // in number
  in long,                         // in number
  in double,                       // in float
  in float,                        // in float
  in unsigned short,               // in number
  in unsigned char,                // in number
  inout string,                    // inout string
  out char,                        // out number
  out short,                       // out number
  out long,                        // out number
  out double,                      // out float
  out float,                       // out float
  out unsigned short,              // out number
  out unsigned char): string(100); // out number

BDL 外部関数の呼び出し

次の例では、T_PARAM 関数を呼び出す方法について説明します。 この例では、ランダム値が変数に割り当てられ、入力パラメータとして関数に渡されます。

dcltrans
  transaction TMain
  var
    n1, n2, n3, n4, n5, n6, n7, n8, n9, n10 : number;
    f1, f2, f3, f4                          : float;
    s1, sRet                                : string;
  begin
    n1   := 127; n2 := 32000; n3 := 2000000;
    n4   := 64000; n5 := 255;
    f1   := 12345.12345; f2 := 12.99;
    s1   := "Teststring";
    sRet := t_param(n1, n2, n3, f1, f2, n4, n5, s1,
                    n6, n7, n8, f3, f4, n9, n10);
  end TMain;
親トピック: カスタム DLL


外部関数の構造化データ型

構造化データ型を使用する場合、構造要素の配置とサイズに注意することが重要です。 次の表に、Silk Performer スクリプトの関数宣言で使用できる一般的なすべてのデータ型のサイズを示します。

入力および出力パラメータとして許可される単純なデータ型は、以下のとおりです。
表 1. 通常のデータ型のサイズ
データ型 | サイズ
Char、unsigned char | 1
Short、unsigned short | 2
Long | 4
Double | 8
Float | 4
Char[x] | x

C ソース コード

次の例では、単純なデータ型をすべて含むデータ構造を示すことによって、構造の組成を明らかにします。

// declare a demo data structure
#pragma pack(1) // alignment to 1-byte boundaries
typedef struct {
  char           myChar;       // size: 1 byte pos: 1
  short          myShort;      // size: 2 bytes pos: 2
  long           myLong;       // size: 4 bytes pos: 4
  double         myDouble;     // size: 8 bytes pos: 8
  float          myFloat;      // size: 4 bytes pos: 16
  unsigned short myUShort;     // size: 2 bytes pos: 20
  char           myString[10]; // size: 10 bytes pos: 22
  unsigned char  myUChar;      // size: 1 byte pos: 32
} TESTSTRUCT;
#pragma pack()

 char* T_STRUCT(TESTSTRUCT * s)
{
  char sBuf[10000];
  // manipulate values of data structure and generate a
  // return value for demonstration purpose
  ...
  return sBuf;
}

BDL 外部関数の宣言

BDL は、構造化データ型を処理するために、適切な長さの文字列および型に従った数値の Get 関数および Set 関数を使用します。 関数に渡される各構造化データ型に対して、inout 文字列パラメータを定義する必要があります。 これらの文字列は、DLL で定義されているデータ構造と正確に一致する必要があります。

構造化データ型を保持できる BDL 文字列の最初の位置は 1 です。 変数が 1 バイト境界に配置されている場合、次の要素の開始位置は、現在の位置を現在の要素のサイズに加えることによって求めることができます。 上記の例で宣言されたデータ構造の場合、32 バイトの文字列が必要となります。

"T_STRUCT"
  function t_struct(inout string(32)): string(1000);

BDL 外部関数の呼び出し

以下の例では、データ構造のすべての要素に対して、対応する Set 関数を使用して任意の値が割り当てられます。 次に、外部関数 t_struct が呼び出されて、データ構造を操作します。

dcltrans
  transaction TMain
  var
    n1, n2, n3, n4, n5  : number;
    n6, n7, n8, n9, n10 : number;
    f1, f2, f3, f4      : float;
    sStruct             : string(100);
    sRet                : string(1000);
  begin
    /* one-byte alignment */
    SetChar (sStruct, 1, 127);
    SetShort (sStruct, 2, 32000);
    SetLong (sStruct, 4, 2000000);
    SetDouble(sStruct, 8, 12345.12345);
    SetFloat (sStruct, 16, 12.99);
    SetUShort(sStruct, 20, 64000);
    SetString(sStruct, 22, "123456789", 10);
    SetUChar (sStruct, 32, 255);
    sRet := t_struct(sStruct);
  end TMain;
親トピック: カスタム DLL
関連概念
Data Structure Functions


クライアント IP アドレスのシミュレーション

この章では、Silk Performer のクライアント IP アドレス シミュレーション機能を説明します。複数の IP アドレスにたいしてネットワーク インターフェイス カードを構成する方法と、ローカル IP アドレス群のセットアップに使用するスクリプト関数について説明します。また、新しくインストール、割り当てた IP アドレス群をアクティブにする方法について簡単に説明します。

  • NIC に複数のアドレスを割り当てる
    マルチホーム システムについて説明します。
  • System Configuration Manager で IP アドレスを追加する
    System Configuration Manager で IP アドレスを追加できます。このトピックでは、実行する方法をステップ バイ ステップで説明します。
  • 自動ラウンドロビンを使用して動的ユーザーの IP アドレスを設定する
    プロファイル ダイアログ ボックスで動的ユーザーの IP アドレスを設定する方法について説明します。
  • スクリプト関数を使用して動的ユーザーの IP アドレスを設定する
    動的ユーザーの IP アドレスを設定するのに使用される関数 WebSetLocalAddress および WebTcpipConnect について説明します。
  • クライアント IP アドレスのシミュレーションによるルーティングの問題
    クライアント IP アドレスのシミュレーションによるルーティングの問題について説明します。
  • クライアント IP アドレスのシミュレーションによるルーティング問題の解決策
    マルチホーム クライアントにレスポンスを送信するようにサーバーを設定するいくつかの方法について説明します。
  • ルーティング適応のテスト
    System Configuration Manager を使用して、新しく追加された IP アドレスとルーティング適応が正しく機能するかどうかテストする方法について説明します。
親トピック: スクリプトをカスタマイズする


NIC に複数のアドレスを割り当てる

1 台のコンピュータが複数の IP アドレスを持つように構成されることを、マルチホーム システムと言います。マルチホーム システムは、3 つの方式のうちの 1 つでサポートされます。
  • NIC に複数のアドレスを割り当てる (論理マルチホーム)：コントロール パネルを使って、1 つのカードに 5 つの IP アドレスを構成できます。ただし、レジストリに追加することで、より多くのアドレスを構成できます。
    • 要件：NT4、SP4
    • NIC に対して構成可能な IP アドレスの合計数は、インストールした NIC に依存します。テストした結果では、3COM905BTX は、約 2000 個の IP アドレスを処理できます。
  • 物理ネットワークに複数の NIC をインストールする (物理マルチホーム)：
    • ハードウェア以外の制約はありません。
  • 複数のネットワークとメディアの種類：
    • ハードウェアとメディアのサポート以外の制約はありません。
親トピック: クライアント IP アドレスのシミュレーション


System Configuration Manager で IP アドレスを追加する

  1. DHCP を無効化し、ゲートウェイと DNS アドレスを追加します。
  2. ツール > System Configuration Manager を選択します。
  3. 新しい IP アドレスを追加するマシンに接続します。接続先 をクリックしてマシンを選択してから、接続 をkリックします。
    注: デフォルトでは、localhost に接続されています。特定のホストに接続できない場合は、そのホスト上で Silk Launcher Service が実行されていることを確認してください。
  4. IP アドレス マネージャ タブをクリックし、新しい IP アドレスを追加するネットワーク アダプタを選択してから、追加 をクリックします。
  5. 追加する IP アドレスを指定します。
    • 数：開始 IP アドレス フィールドに指定したものに続いて追加される連続した IP アドレスの数。
    • 終了 IP アドレス：任意の数の IP アドレスがこの IP に一致するまで追加されます。アドレスは連続的で、かつ増加方向になります。
    注: 開始 IP アドレス と 終了 IP アドレス フィールドを使用する場合、終了 IP アドレス 値が 開始 IP アドレス 値よりも大きいことを確認してください。例：開始：192.12.23.1,、終了：192.12.23.108
  6. マシンを再起動します。
  7. 追加された IP アドレスが正しいことを確認するには、次のいずれかを実行します。
    • ipconfig.exe をシェルから実行して、すべての IP アドレスが正しく構成されていることを確認します。
    • System Configuration Manager を起動して、IP アドレスが正しく追加されたことをテストします。
    注: [ホスト名または IP アドレス] フィールドが空の状態で チェック ボタンをクリックすると、System Configuration Manager は、すべての追加されたアドレスが正しく機能することを確認します。特定の IP アドレスを [ホスト名または IP アドレス] フィールドに入力すると、そのアドレスだけが確認されます。
再生中にサードパーティ製のツールを使って、ローカルの仮想 IP アドレスへのバインドを試験することができます。TCPView は、http://www.sysinternals.com からダウンロードできます。
親トピック: クライアント IP アドレスのシミュレーション


自動ラウンドロビンを使用して動的ユーザーの IP アドレスを設定する

  1. 設定 > アクティブ プロファイル を選択します。
  2. プロファイル ダイアログ ボックスの左側で、インターネット を選択します。
  3. クライアント IP アドレスの多重化 チェック ボックスをオンにします。
  4. テストを実行し、TCPView のようなユーティリティを使用して IP アドレスの多重化を確認します。
親トピック: クライアント IP アドレスのシミュレーション


スクリプト関数を使用して動的ユーザーの IP アドレスを設定する

関数を使用して動的ユーザーの IP アドレスを設定するには、WebSetLocalAddress 関数および WebTcpipConnect 関数を使用します。

サンプル アプリケーションとして、ファイル WebMultipleClientIpAddresses01.bdf を確認してください。

親トピック: クライアント IP アドレスのシミュレーション


クライアント IP アドレスのシミュレーションによるルーティングの問題

  • マルチホーム クライアントからサーバーへのパケット送信時： マルチホーム クライアントを使うと、宛先 IP アドレスは常に選択したサーバーの IP アドレスです。 ネットワーク操作に違いはありません。マルチホーム クライアントからパケットを送信する場合には通常、問題は発生しません。
  • サーバーからマルチホーム クライアントへのパケット送信時：サーバーがマルチホーム クライアントに返信を戻そうとする際に、送信クライアント アプリケーションの宛先 IP アドレスを使用すると問題が発生します。IP アドレスがローカルのサブネット アドレスである場合、サーバーのルーティング テーブルに正しいエントリがすでに存在するため、パケットはクライアントに戻る方法がわかります。選択した IP アドレスが、ローカル サブネットに属していない場合、そして、サーバーがルーティング テーブルに他の一致するエントリを見つけられない場合 (これは、エントリが追加されなかった場合の通常の動作です)、デフォルト ゲートウェイにパケットが送信されます (デフォルト エントリを使用して)。デフォルト エントリが見つからないと、「ネットワークに到達できません」というエラーが発生します。
親トピック: クライアント IP アドレスのシミュレーション


クライアント IP アドレスのシミュレーションによるルーティング問題の解決策

マルチホーム クライアントにレスポンスを送信するようにサーバーを設定するために、いくつかの方法があります。異なるネットワーク構成に対して 2 つの方法があります。

同じサブネット上のサーバーとエージェント

エージェントとサーバーの間にルーターが存在しない場合、サーバーのルーティング テーブルにエントリを追加する必要があります。生成されたクライアントの IP アドレスが同じ 2 つの数 (192.200. など) で始まっている場合、ルーティング テーブルに 1 つだけエントリを追加する必要があります (route add 192.200.0.0 mask 255.255.0.0<your normal IP address>)。サーバーは、192.200. で始まるすべてのアドレスの適切なルータとしてクライアントをみなします。

以下の例では、サーバー 1 は、エージェント 1 からのパケットを受信し、192168.20.50 から 192.200.2.1 へ返信しようとします。サーバーの設定を修正していない場合は (エージェント 1 がマルチホームであることはサーバーは知らないことを意味します)、サーバー 1 はパケットをデフォルト ゲートウェイに送信します。これは、ルーティング テーブルの一致するエントリが唯一であるためです。

ネットワークの宛先 | ネットマスク | ゲートウェイ | インターフェース | メトリック
0.0.0.0 | 0.0.0.0 | 192.168.20.18 | 192.168.20.126 | 1

サーバー 1 で、route add 192.200.0.0 mask 255.255.0.0 192.168.20.21 を実行すると、新しいエントリが追加されます。エントリは、次のようになります。

ネットワークの宛先 | ネットマスク | ゲートウェイ | インターフェース | メトリック
192.0.0.0 | 255.255.0.0 | 192.168.20.21 | 192.168.20.50 | 1

このエントリは、デフォルト ゲートウェイのエントリよりも優先順位が高いため、サーバー 1 は、192.200.x.x の宛先アドレス タイプを持つすべてのパケットをエージェント 1 に送信します (これが正しいゲートウェイであると信じられている)。

サーバーとエージェント間にルーターまたはロード バランサーが存在

サーバーとエージェント間にルーターまたはロード バランサーが存在します。そのような場合、ルーターのルーティング テーブルを変更する必要があります。エージェント 1 がサーバー 1 にパケットを送信する場合は (192.200.2.1 から 192168.10.50)、エージェント 1 は正しく構成されています。つまり、次のようなルーティング テーブルのエントリがあります。

ネットワークの宛先 | ネットマスク | ゲートウェイ | インターフェース | メトリック
192.168.1.0 | 255.255.0. | 192.168.20.70 | 192.168.20.21 | 1

エージェント 1 はルーターにパケットを送信すると、ルーターは代わりにサーバー 1 にパケットを転送します。今度は、サーバー 1 がエージェント 1 のリクエストにレスポンスを送信する必要があります (192.168.10.50 から 192.200.2.1)。ルーティング　テーブルのデフォルト エントリであるルーターにサーバー 1 はパケットを送信します。しかし、ここで問題が発生します。ルーターには、エージェント 1 の新しい I アドレスの情報が無いため、デフォルト ルート (以下を参照) を使用してゲートウェイにパケットを送信します。

ネットワークの宛先 | ネットマスク | ゲートウェイ | インターフェース | メトリック
0.0.0.0 | 0.0.0.0 | 192.168.20.18 | 192.168.20.70 | 1

ルーターで、route add 192.200.0.0 mask 255.255.0.0 192.168.20.21 を実行すると、新しいエントリが追加され、次のようになります。

ネットワークの宛先 | ネットマスク | ゲートウェイ | インターフェース | メトリック
192.200.0.0 | 255.255.0.0 | 192.168.20.21 | 192.168.20.70 | 1
このエントリは、デフォルト ゲートウェイのエントリよりも優先順位が高いため、ルーターは、192.200.x.x の宛先アドレス タイプを持つすべてのパケットをエージェント 1 に送信します (それが正しいゲートウェイであると信じられている)。
注: サブネットのデフォルト ゲートウェイをサーバーからのすべてのパケットをマルチホーム エージェントに転送するように設定できます。しかし、パケットを受信したのと同じインターフェイスを通してパケットを送信することをルーターが余儀なくされた場合、ルーターはサーバーがもともと間違ったルーティングの決定を行ってパケットを送信したとみなすという問題が発生する可能性があります。そして、ルーターは ICMP リダイレクト エラーを生成します。これは、またネットワークとサーバー上の負荷を高めます。
親トピック: クライアント IP アドレスのシミュレーション


ルーティング適応のテスト

System Configuration Manager を使用して、新しく追加された IP アドレスとルーティング適応が正しく機能するかどうかテストします：
  1. ツール > System Configuration Manager を選択します。 System Configuration Manager ウィンドウが表示されます。
  2. 新しい IP アドレスを追加するマシンに接続します。
    注: デフォルトでは、localhost に接続されています。特定のホストに接続できない場合は、そのホスト上で Silk Launcher Service が実行されていることを確認してください。
  3. IP アドレス マネージャ タブをクリックします。
  4. 新しい IP アドレスを追加するネットワーク アダプタを選択します。
  5. ネットワーク セクションで、負荷テストを行いたいサーバーのホスト名または IP アドレスを入力します。
  6. チェック をクリックします。エラー ウィンドウが表示されなければ、、すべてのリストされた IP アドレスは、リスト ウィンドウのテスト結果セクションに稼働中マークの付いたルートを持ちます。
親トピック: クライアント IP アドレスのシミュレーション


ユーザー タイプ

ユーザー タイプは、スクリプト、ユーザー グループ、およびプロファイルの一意の組み合わせで定義されます。

Silk Performer は、使用可能なスクリプト、ユーザー グループ、およびプロファイルから、ユーザー タイプとして可能なすべての組み合わせを自動的に生成します。 必要なすべてのユーザー タイプを使用可能にするには、あらかじめ目的のプロファイルをテスト プロジェクトに追加しておく必要があります。 たとえば、負荷テスト中に 3 種類の帯域幅をエミュレートするには、各帯域幅に対してプロファイルを最初に追加する必要があります。

ベースラインの検索 または ユーザー タイプの定義 ダイアログ ボックスにより、ユーザー タイプをアクティブなワークロードに割り当てることができます。

ベースライン テストを実行して、選択したユーザー タイプの負荷テストのベースライン パフォーマンスを定めることができます。 異なるユーザー タイプを同時に実行できます。

ユーザー タイプごとに 1 人の仮想ユーザーのみがベースライン テストで実行できます。 スクリプトに含まれる思考時間は、比較するためにランダム化できません。

親トピック: ユーザー タイプの定義
親トピック: ベースラインを検索する


ベースライン テスト

ベースライン テストでは、アプリケーションの理想的なパフォーマンスのベースラインを決定することができます。

ベースライン テストにより、カスタマイズしたテストを、1 ユーザー タイプにつき 1 ユーザーだけで実行します。 このストレスのない状態でのアプリケーションのパフォーマンスから得られる結果が、ユーザー タイプごとの同時使用ユーザー数の計算や、HTML ページ レスポンス時間およびトランザクション レスポンス時間の適切な境界の設定に対する基礎となります。 さらに、負荷テストの実行に必要な帯域幅も、ベースラインの結果から計算されます。 実際の負荷テストの標準的な測定値が使用されて、レポート ファイルと出力ファイルが生成されます。

また、ベースライン テストは、テスト スクリプトの試験的実行として使用できます。 試験実行は次の情報の検証に役立ちます。

  • カスタマイズによってスクリプトに新たにエラーが組み込まれないこと。
  • クライアント アプリケーションとサーバー間の相互通信が正確に完全にスクリプトにより再現できること。
注: ベースライン テストでは、ランダムな思考時間 チェック ボックスは無視されます。 これにより、テスト間の思考時間が一定となるため、さまざまなベースライン テストの結果を容易に比較できます。
ベースライン テストの実行では、次の設定が自動的に設定されます。
  • ベースライン レポート ファイルが自動的に作成されます。

  • シミュレーション時間の後で仮想ユーザーを停止する (キューイングのワークロード) チェック ボックスはオンです。

  • ランダムな思考時間 チェック ボックスはオフに設定されます。
  • 負荷テストの説明 テキスト ボックスには、[Baseline Test] と設定されます。

  • [監視] ウィンドウの 全ユーザーの全エラーの表示 オプションはオンです。

  • 仮想ユーザー出力ファイル (.wrt) チェック ボックスはオンです。
  • 仮想ユーザー レポート ファイル (.rpt) チェック ボックスはオン。
親トピック: ベースラインを検索する


ベースライン テストの要約

ベースラインのテスト実行が完了すると、 ベースライン テストの要約 ページが表示されます。 結果 ツリーからこのページを開くこともできます。 右側にある 次のステップ 領域で、次の操作を実行できます。

  • ベースライン テスト レポートの表示 をクリックし、ベースラインのテスト実行のすべての指標の詳細を表示します。
  • ベースラインとして設定 をクリックし、実行したテストを次回の負荷テストのベースライン (基準レベル) とすることができます。
  • ベースラインと比較 をクリックし、現在のベースラインで実行したテストの結果を比較します。 このボタンは、ベースラインが既に設定されている場合のみ表示されます。
  • ワークロードの調整 をクリックし、ワークフローの次のステップを実行します。 このボタンは、ワークロードがまだ定義されていない場合のみ表示されます。

結果 ツリーから ベースライン テストの要約 ページを開くことにより、そのページにいつでも戻ることができます。

注: ベースラインとして設定 をクリックすると、 ベースラインの要約 ページが表示されます。 ベースライン テストの要約 ページと ベースラインの要約 ページを混同しないでください。 ベースライン テストが完了すると、 ベースライン テストの要約 ページが表示されます。 ベースラインをベースライン テストとして設定した場合、またはワークフロー バーで ベースラインを表示 をクリックした場合は、 ベースラインの要約 ページが表示されます。

ベースライン テストで 1 つ以上のユーザー タイプを実行できます。 結果をベースラインに設定した場合は、ユーザー タイプおよび結果がベースラインに追加されます。 ベースラインに既に特定のユーザー タイプの結果が存在する場合は、その結果が上書きされます。

注: テストが完了するたびに、要約ページが表示されないようにするには、 監視 ページのツールバーで 要約ページの表示 ボタンを無効にします。
親トピック: ベースラインを検索する


ベースライン テスト レポート

ベースライン テストを実行すると、 ベースライン テストの要約 ページが表示されます。 ベースライン テスト レポートの表示 をクリックすると、ベースライン テストのすべての結果および指標の詳細なレポートが表示されます。 詳細なテスト レポートは、スクリプトの試行を除くすべてのテストで表示できます。

詳細なテスト レポートは XML/XSL ベースのレポートであり、要約テーブル、トランザクション レスポンス時間の詳細、アクセスされたすべての HTML ページのタイマ、Web フォーム、発生したエラーなどが表示されます。 この情報には、最も重要なテスト結果が表形式で含まれ、テストに関係するすべてのユーザー タイプを参照できます。

親トピック: ベースラインを検索する


詳細なテスト レポートの内容

詳細なテスト レポートは、以下のセクションから構成されます。

  • 全般情報

  • ユーザー タイプ

    • 要約テーブル

    • トランザクション レスポンス時間

    • HTML ページおよびアクション タイマ

    • Web フォーム測定値

    • ベースラインの承認 ボタン

全般情報

全般情報 セクションには、管理情報が表形式で表示されます。

管理情報には、Silk Performer のバージョン情報、プロジェクト名、プロジェクトの説明、ベースライン テストの日時、ワークロードの定義、ワークロード モデル、および発生したエラー数が含まれます。

ユーザー タイプ

テスト実行に含まれるユーザーの各タイプについては、測定されたレスポンス時間の詳細を示したセクションが 1 つ表示されます。次の情報は要約行に表示されます。

  • 仮想ユーザー数 (ベースライン テストごとに 1 人)
  • テスト実行時間
  • セッション時間
  • セッション ビジー時間
  • 平均ページ時間
  • 平均アクション時間
  • 次の数値
    • 正常に実行したトランザクション
    • キャンセルしたトランザクション
    • 失敗したトランザクション
    • エラー数

セッション時間は、テスト スクリプトの dcluser セクションで定義されたすべてのトランザクションの実行時間で構成され、初期トランザクションと終了トランザクションは含まれません。セッション ビジー時間は、次の例に示すとおり、セッション時間 - 思考時間で計算されます。

dcluser
  user
    Vuser1
  transactions
    TInit  : begin;
    T1     : 1;
    T2     : 3;
    Tend   : end;

セッション時間は T1 の平均レスポンス時間 + 3 x T2 の平均レスポンス時間です。セッション ビジー時間は、この値から思考時間を除いたものです。

これらの結果に満足である場合は、ベースライン結果として設定し、同時使用の仮想ユーザー数や負荷テストに必要なネットワーク帯域幅の計算など、さらに処理を行うために結果を保存できます。

ユーザー タイプごとに、以下の詳細な結果が表示されます。

  • 要約テーブル：すべての仮想ユーザーの測定値を集約したものが、表形式で表示されます。最初のテーブルには、実行されたトランザクションの数や発生したエラーの数などの、全般情報が表示されます。残りのテーブルは、テストしているアプリケーションのタイプに関連する要約情報を提供します。
  • トランザクション：特定のユーザー タイプのすべてのトランザクションに対する測定値を集約したものが表形式で表示されます。
    • トランザクションのレスポンス時間：トランザクションの最初から最後まで (すべての思考時間を含む) 測定されます。
    • トランザクション ビジー時間：思考時間を除いたトランザクション レスポンス時間です。
  • ページおよびアクション タイマ：アクセスされたすべての Web ページに対する測定値の要約が表形式で表示されます。
    • ページ全体のダウンロード時間
    • HTML ドキュメント ダウンロード時間
    • サーバー ビジー時間
    • ページでダウンロードされたデータ量
    • 組み込みオブジェクトでダウンロードされたデータ量
  • Web フォーム ：使用されたすべての Web フォームに対する測定値の要約が表形式で表示されます。
    • ラウンドトリップ時間
    • サーバー ビジー時間
    • HTTP ヒット数
    • 送信されたリクエスト データ量
    • 受信したレスポンス データ量

調査された負荷テストの結果がベースラインとしての使用が承認されている場合は、ベースラインの承認 をクリックして、後で計算し処理するために保存できます。関係するすべてのユーザー タイプについてのテスト結果が、<プロジェクト ディレクトリ>\BaselineResults\baselineReport_<ワークロード名>.brp ファイルに保存されます。負荷テスト プロジェクトで定義されたすべてのワークロードに対して、個別にベースラインを定義する必要があります。ワークロードのコピーを作成すると、ベースラインの結果もコピーされます。

親トピック: ベースラインを検索する


ベースライン テストをベースラインとして設定する

ベースラインを設定する前に、次のベースライン テストを実行する必要があります。
  1. ワークフロー バーの ベースラインの検索 をクリックします。 ワークフロー - ベースラインの検索 ダイアログ ボックスが表示されます。
  2. ベースライン テストを開始するには、 実行 をクリックします。 このダイアログ ボックスの詳細については、「ベースラインを検索する」を参照してください。
  3. ベースライン テストが完了すると、 ベースライン テストの要約 ページが表示されます。
  4. 右側にある 次のステップ 領域の ベースラインとして設定 をクリックします。
  5. 確認ダイアログで はい をクリックします。
このベースライン テストがベースラインとして設定され、 ベースラインの要約 ページが表示されます。
注: ベースラインの検索 および ベースラインを表示 ボタンは、完全ワークフロー バーが有効な場合にのみ表示されます。
注: デフォルトで、Silk Performer には簡易ワークフロー バーが表示されます。ワークフロー バーの種類を切り替えるには、ワークフロー バーを右クリックして、簡易ワークフロー バーを表示する、完全ワークフロー バーを表示する、または 監視ワークフローバーを表示する をクリックします。
親トピック: ベースラインを検索する


ベースラインの要約

ベースライン テストの要約 ページの ベースラインとして設定 をクリックすると、 ベースラインの要約 ページが表示されます。 右側にある 次のステップ 領域で、次の操作を実行できます。
  • ベースライン レポートの表示 をクリックし、ベースラインのすべての指標の詳細を表示します。
  • レスポンス時間のしきい値の設定 をクリックし、後続の負荷テストが応答する必要がある時間枠を設定します。

ワークフロー バーの ベースラインを表示 をクリックして、いつでも ベースラインの要約 ページに戻ることができます。

注: ベースライン テストの要約 ページと ベースラインの要約 ページを混同しないでください。 ベースライン テストを実行すると、ベースライン テストの要約 ページが表示されます。 ベースライン テストとしてベースラインを設定した場合、またはワークフロー バーで ベースラインを表示 をクリックした場合は、 ベースラインの要約 ページが表示されます。
親トピック: ベースラインの表示


レスポンス時間のしきい値

前のベースライン テストの承認済みの結果を使用して、以降の負荷テストに対するレスポンス時間のしきい値を設定できます。 これらのしきい値は負荷テストの 一般の概要レポートで使用され、Web レスポンス時間を良好、許容可能、許容不可に分類します。

境界値を設定して、レスポンス時間を次の種類に分類します。

  • 良好 レスポンス時間が境界 1 未満に該当する。
  • 許容不可 レスポンス時間が境界 2 を超える。
  • 許容可能 レスポンス時間が境界内の値に該当する。
次のオブジェクトのしきい値を設定します。
  • トランザクション レスポンス時間
  • カスタム タイマ
  • HTML ページ タイマ

ベースラインの結果から境界を計算するための係数を指定します。 タイマの平均レスポンス時間はこれらの係数で乗算され、計算値に応じて境界も設定されます。 たとえば、係数が 3 とは、ベースライン テストにおけるタイマの平均レスポンス時間の 3 倍を境界に設定するということです。

ベースライン テストの測定値が 0 の場合は、境界の最小値を指定できます。 ユーザー タイプに関連付けられた負荷テスト スクリプトは、更新され、対応するしきい値が設定されます。

親トピック: ベースラインの表示


パフォーマンス レベル

負荷テストが完了すると、パフォーマンス エンジニアは、通常、テストが成功したかどうかを評価しなければなりません。この評価は、負荷テストを徹底的に分析することによって行われます。

パフォーマンス エンジニアは、ワークベンチや Performance Explorer が提供するさまざまな分析ツールを使用できます。さまざまなレポートを使用して、エラー総数や、レスポンス時間のしきい値など、多くの測定値を分析します。また、負荷テスト実行前に決定したパフォーマンス基準やサービス レベルとレスポンス時間を比較することもできます。

このプロセスは、手動による負荷テスト評価として特徴付けられます。しかし、多くの場合、負荷テストを自動的に評価できると便利です。例：CI 環境で、パフォーマンス基準に満たない場合にのみ通知を受けたいとユーザーは考えます。Silk Performer では、このような場合に、パフォーマンス レベル を使用することができます。パフォーマンス レベルは、能動的と受動的の 2 種類の方法で定義できます。

  • 能動的アプローチ：パフォーマンス エンジニアは、ベースライン テストを実行してから、（ベースライン テストの結果を基にして）パフォーマンス レベルを定義し、パフォーマンス レベルをテストの主要な測定値に割り当てます。そして、エンジニアは、負荷テストを実行します。実行が完了したら、エンジニアは概要レポートを開き、どのパフォーマンス レベルが満たされていないかを確認します。
  • 受動的アプローチ：パフォーマンス エンジニアは、負荷テストをまず実行します。そして、その後でパフォーマンス レベルを定義します。負荷テストの結果は、パフォーマンス レベルを定義するガイドラインとして使用されます。

もちろん、これらのアプローチを組み合わせることもできます。負荷テストの実行前にパフォーマンス レベルを定義すると、要求するステータスがレポートに反映されていない可能性があるため、実行の完了後に修正することが求められる場合に、組み合わせたアプローチが必要になることがあります。

両方のアプローチに対応するため、ワークベンチと Performance Explorer の両方からパフォーマンス レベルのダイアログにアクセスできます。ワークベンチでは、プロジェクト > パフォーマンス レベルの定義、または プロジェクト > パフォーマンス レベルの割り当て をクリックします。Performance Explorer では、レポート タブを選択し、レベルの定義 または レベルの割り当て をクリックします。

  • パフォーマンス レベルの定義と割り当て（能動的アプローチ）
    パフォーマンス レベルを能動的アプローチを使用して設定する方法について説明します。
  • パフォーマンス レベルの定義と割り当て（受動的アプローチ）
    パフォーマンス レベルを受動的アプローチを使用して設定する方法について説明します。
親トピック: ベースラインの表示


パフォーマンス レベルの定義と割り当て（能動的アプローチ）

パフォーマンス レベルを測定値に割り当てるには、負荷テストの後で利用可能なる測定値を Silk Performer がわかっている必要があります。このため、以下で述べる手順を行う前に、ベースライン テストを実行し、ベースラインを設定してください。ベースラインが設定されていないと、パフォーマンス レベルに割り当てる測定値が利用できません。
  1. ワークベンチで、プロジェクト > パフォーマンス レベルの定義 をクリックします。
  2. パフォーマンス レベルの定義 ダイアログが開き、テーブルが表示されます。このテーブルの行は、パフォーマンス レベルを表します。必要に応じてパフォーマンス レベルを追加できます。
  3. 列は、パフォーマンス指標を表します。列ごとに、次のパフォーマンス指標から 1 つを選択します。
    • 平均値： 平均値
    • P50： 中央値
    • P90：90 パーセンタイル
    • P95：95 パーセンタイル
    • P99：99 パーセンタイル
  4. 各レベルに対してパフォーマンス レベルの名前と値を入力します。
  5. パフォーマンス レベルを定義したら、レベルの割り当て をクリックします。
  6. パフォーマンス レベルの割り当て ダイアログが開き、ベースライン テストで収集されたすべての測定値が表示されます。定義したパフォーマンス レベルを各測定値に手動で割り当てることができます。または、ベースラインに基づいて自動的にレベルを設定する をクリックします。また、特定の測定値をすばやく見つけるためにリストにフィルタを指定したり、すべてのレベルを [なし] に設定する をクリックすることができます。作業を終えたら、OK をクリックします。
負荷テストのモデリングを終えたら、実行します。実行が完了すると、概要レポートが開き、パフォーマンス レベルが表示されます。結果は色分けして表示されます。パフォーマンス レベルを満たしているものは緑で、満たさないものは赤で表示されます。これにより、負荷テストが合格したか失敗したかを直感的に判断できます。負荷テストの実行後に設定を微調整する場合は、受動的アプローチに従います。
注: パフォーマンス レベルの定義は、特定のワークロードに対して有効です。複数のワークロードが定義されている場合は、ワークロードごとにパフォーマンス レベルを定義できます。
親トピック: パフォーマンス レベル


パフォーマンス レベルの定義と割り当て（受動的アプローチ）

  1. 負荷テストを作成し、実行します。
  2. 実行が完了すると、 負荷テストの要約 ページが表示されます。負荷テストの分析 をクリックします。 Performance Explorer が開き、HTML 概要レポートが表示されます。
  3. レポート タブを選択し、レベルの定義 をクリックします。
  4. パフォーマンス レベルの定義 ダイアログが開き、テーブルが表示されます。このテーブルの行は、パフォーマンス レベルを表します。必要に応じてパフォーマンス レベルを追加できます。
  5. 列は、パフォーマンス指標を表します。列ごとに、次のパフォーマンス指標から 1 つを選択します。
    • 平均値： 平均値
    • P50： 中央値
    • P90：90 パーセンタイル
    • P95：95 パーセンタイル
    • P99：99 パーセンタイル
  6. 各レベルに対してパフォーマンス レベルの名前と値を入力します。
  7. パフォーマンス レベルを定義したら、レベルの割り当て をクリックします。
  8. パフォーマンス レベルの割り当て ダイアログが開き、負荷テストで収集されたすべての測定値が表示されます。定義したパフォーマンス レベルを各測定値に手動で割り当てることができます。または、ベースラインに基づいて自動的にレベルを設定する をクリックします。また、特定の測定値をすばやく見つけるためにリストにフィルタを指定したり、すべてのレベルを [なし] に設定する をクリックすることができます。作業を終えたら、OK をクリックします。
概要レポートにパフォーマンス レベルが表示されます。結果は色分けして表示されます。パフォーマンス レベルを満たしているものは緑で、満たさないものは赤で表示されます。これにより、負荷テストが合格したか失敗したかを直感的に判断できます。負荷テストの実行前にパフォーマンス レベルを設定する場合は、能動的アプローチに従います。
注: パフォーマンス レベルの定義は、特定のワークロードに対して有効です。複数のワークロードが定義されている場合は、ワークロードごとにパフォーマンス レベルを定義できます。
親トピック: パフォーマンス レベル


ワークロードの調整

ワークロードの設定は、負荷テストを実行するプロセスの一部です。 Silk Performer には、負荷テストの基本として使用するさまざまなワークロード モデルが用意されています。 ワークロードを構成する前に、ニーズに最も適したモデルを選択する必要があります。

複数のワークロード モデルを負荷テスト プロジェクトで定義して、あとで利用するために保存できますが、一度にアクティブにできるワークロード モデルは 1 つだけです。 承認済みのベースラインの結果はワークロード モデルに関連付けられています。 ワークロード モデルをコピーまたは名前変更すると、対応して承認済みのベースラインの結果もコピーまたは名前変更されます。

  • ワークロード モデル
    ワークロード モデルのタイプについて説明します。
  • [ワークロード] タブ
    ワークロード モデル、開始時刻、および監視オプションに関するワークロード プロファイルを構成できます。
  • ワークロード コンテキストでの時間の名前
    ワークロードの選択と調整 および ワークロードの設定 ダイアログで設定できる時間の値について説明します。
  • ワークロード設定の初期化
    複数のユーザー タイプに対して同じワークロード設定を一度に指定する方法について説明します。
親トピック: 負荷テストの管理


増加ワークロードを構成する

  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. 増加 ワークロード モデルを選択します。
  3. ユーザー タイプを選択し、以下の値を設定します。
    1. ランプアップ時間：仮想ユーザーの初期数（開始仮想ユーザー数）、仮想ユーザーの最大数（最大仮想ユーザー数）、および指定した時間間隔で追加される仮想ユーザーの数（追加 [] 間隔 []）を指定します。これらの値に基づき、Silk Performer はランプアップ時間を計算します。
    2. 定常時間：定常時間を指定します。
    3. ランプダウン時間：指定した時間間隔で停止される仮想ユーザーの数（間隔 [] 停止 []）を指定します。
    4. ウォームアップ時間：ウォームアップ時間中、Silk Performer はパフォーマンスを測定しません。測定は、ウォームアップ時間の後に開始されます。測定をただちに開始するには、ゼロを入力します。ウォームアップ時間を使用して、テスト中のアプリケーションに対する実際の負荷テストを準備できます。この準備フェーズ中に測定を行わない場合は、ウォームアップ時間を使用できます。
    5. 測定時間：測定時間を指定します。測定時間を 0 に設定すると、ウォームアップ時間とシミュレーション時間が終わるまでの間に計測されたすべての測定値がレポートに反映されます。
    6. 停止時間：停止時間が開始すると、Silk Performer はパフォーマンスの測定を停止します。測定時間後に負荷テストを正しく停止するには、ウォームアップ時間と測定時間の合計がシミュレーション時間になるように調整してください。停止時間は測定対象外のクリーンアップ フェーズで、テスト対象アプリケーションのシャットダウンやサービスの終了を、測定したくない場合に使用できます。
    注: ランプアップ時間 および 定常時間 の合計は、 ウォームアップ時間、 測定時間 の合計よりも短くすることはできません。
    ヒント: hh:mm:ss の形式で時間を入力するか、1h12m30s などのように入力することができます。Silk Performer により、1h12m30s は自動的に 01:12:30 に変換されます。7m とだけ入力した場合は、00:07:00 に変換されます。
  4. 次へ をクリックします。 ワークフロー - エージェントの割り当て ダイアログ ボックスが表示されます。
親トピック: ワークロード モデル
関連概念
監視を構成する
エージェントを割り当てる


定常状態ワークロードを構成する

  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. 定常状態 ワークロード モデルを選択します。
  3. ユーザー タイプを選択し、以下の値を設定します。
    1. 最大仮想ユーザー数：負荷テスト中に実行される仮想ユーザーの数。
    2. 定常時間：負荷テストの長さを定義します。
    3. ランプダウン時間：指定した時間間隔で停止される仮想ユーザーの数（間隔 [] 停止 []）を指定します。
    4. ウォームアップ時間：ウォームアップ時間中、Silk Performer はパフォーマンスを測定しません。測定は、ウォームアップ時間の後に開始されます。測定をただちに開始するには、ゼロを入力します。ウォームアップ時間を使用して、テスト中のアプリケーションに対する実際の負荷テストを準備できます。この準備フェーズ中に測定を行わない場合は、ウォームアップ時間を使用できます。
    5. 測定時間：測定時間を指定します。測定時間を 0 に設定すると、ウォームアップ時間とシミュレーション時間が終わるまでの間に計測されたすべての測定値がレポートに反映されます。
    6. 停止時間：停止時間が開始すると、Silk Performer はパフォーマンスの測定を停止します。測定時間後に負荷テストを正しく停止するには、ウォームアップ時間と測定時間の合計がシミュレーション時間になるように調整してください。停止時間は測定対象外のクリーンアップ フェーズで、テスト対象アプリケーションのシャットダウンやサービスの終了を、測定したくない場合に使用できます。
    ヒント: hh:mm:ss の形式で時間を入力するか、1h12m30s などのように入力することができます。Silk Performer により、1h12m30s は自動的に 01:12:30 に変換されます。7m とだけ入力した場合は、00:07:00 に変換されます。
  4. 次へ をクリックします。 ワークフロー - エージェントの割り当て ダイアログ ボックスが表示されます。
親トピック: ワークロード モデル
関連概念
監視を構成する
エージェントを割り当てる


動的ワークロードを構成する

  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. 動的 ワークロード モデルを選択します。
  3. ユーザー タイプを選択し、最大仮想ユーザー数 の値を設定します。この値は、 負荷テスト中に実行できる仮想ユーザーの最大数です。これは、その後の仮想ユーザー設定の上限です。
  4. 次へ をクリックします。 ワークフロー - エージェントの割り当て ダイアログ ボックスが表示されます。
親トピック: ワークロード モデル
関連タスク
エージェントをワークロードに割り当てる


終日ワークロードを構成する

  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. 終日 ワークロード モデルを選択します。
  3. ユーザー タイプを選択し、以下の値を設定します。
    1. 最大仮想ユーザー数：負荷テスト中に実行できる仮想ユーザーの最大数。これは、その後の仮想ユーザー設定の上限です。
    2. シミュレーション時間:：負荷テストの長さを定義します。
    ヒント: hh:mm:ss の形式で時間を入力するか、1h12m30s などのように入力することができます。Silk Performer により、1h12m30s は自動的に 01:12:30 に変換されます。7m とだけ入力した場合は、00:07:00 に変換されます。
  4. 次へ をクリックします。 終日ワークロードの設定 ダイアログ ボックスが表示されます。
  5. 左側のリストからユーザー タイプを選択し、右側のグリッドに値を入力することによって間隔を設定します。それぞれの間隔の期間とともに、仮想ユーザーの開始と終了の数を定義します。上部のグラフに設定が表示されます。
    注: 負荷テストの開始後、まだ開始していない間隔の仮想ユーザーの数を引き続き変更できますが、その負荷テストに指定されている仮想ユーザーの最大数を超えて設定することはできません。
  6. OK をクリックします。 ワークフロー - エージェントの割り当て ダイアログ ボックスが表示されます。
親トピック: ワークロード モデル
関連概念
監視を構成する
エージェントを割り当てる


キュー ワークロードを構成する

  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. キュー ワークロード モデルを選択します。
  3. ユーザー タイプを選択し、以下の値を設定します。
    1. 最大仮想ユーザー数：負荷テスト中に実行される仮想ユーザーの数。
    2. 定常時間：定常時間を指定します。
    3. ランプダウン時間：指定した時間間隔で停止される仮想ユーザーの数（間隔 [] 停止 []）を指定します。
    4. ウォームアップ時間：ウォームアップ時間中、Silk Performer はパフォーマンスを測定しません。測定は、ウォームアップ時間の後に開始されます。測定をただちに開始するには、ゼロを入力します。ウォームアップ時間を使用して、テスト中のアプリケーションに対する実際の負荷テストを準備できます。この準備フェーズ中に測定を行わない場合は、ウォームアップ時間を使用できます。
    5. 測定時間：測定時間を指定します。測定時間を 0 に設定すると、ウォームアップ時間とシミュレーション時間が終わるまでの間に計測されたすべての測定値がレポートに反映されます。
    6. 停止時間：停止時間が開始すると、Silk Performer はパフォーマンスの測定を停止します。測定時間後に負荷テストを正しく停止するには、ウォームアップ時間と測定時間の合計がシミュレーション時間になるように調整してください。停止時間は測定対象外のクリーンアップ フェーズで、テスト対象アプリケーションのシャットダウンやサービスの終了を、測定したくない場合に使用できます。
    ヒント: hh:mm:ss の形式で時間を入力するか、1h12m30s などのように入力することができます。Silk Performer により、1h12m30s は自動的に 01:12:30 に変換されます。7m とだけ入力した場合は、00:07:00 に変換されます。
  4. 次へ をクリックします。 ワークフロー - エージェントの割り当て ダイアログ ボックスが表示されます。
親トピック: ワークロード モデル
関連タスク
エージェントをワークロードに割り当てる


検証ワークロードを構成する

  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. 検証 ワークロード モデルを選択します。
  3. ユーザー タイプを選択して、次へ をクリックします。 検証ワークロードの設定 ダイアログ ボックスが表示されます。
  4. リストから プロファイル および スクリプト を選択します。
  5. ユーザー グループ を選択します。
  6. リストから エージェント を選択します。
  7. TrueLog セクションで、以下のいずれかのオプションをクリックします。
    • テスト対象の仮想ユーザー グループの Truelog ファイルを生成するには、 TrueLog を生成する をクリックします。
    • エラーが発生したときにだけ TrueLog ファイルを生成するには、 エラー時に TrueLog を生成する をクリックします。
  8. 省略可能： テスト開始時に自動的に TrueLog Explorer を起動するには、アニメーション チェック ボックスをオンにします。
    注: アニメーション 設定を有効にする場合は、 TrueLog を生成する をクリックしてください。
  9. Web 関数で指定されるか、思考時間関数の呼び出しによって発生する、待ち時間の使用を無効にするには、ストレス テスト チェック ボックスをオンにします。 待機文やトランザクション スケジュールに影響はありません。この機能は、ユーザー操作による遅延のない負荷テストの実行に相当します。
  10. 以下のいずれかのボタンをクリックします。
    • 接続 をクリックして、負荷テストを実際に開始することなくエージェントへの接続を開始します。監視 ページのツールバーで、 すべて開始 をクリックします。
    • 負荷テストを開始するには、 実行 をクリックします。
    • ダイアログ ボックスを閉じて変更を保存するには、 OK をクリックします。
    • ダイアログ ボックスを閉じて変更の保存を中止するには、 キャンセル をクリックします。
親トピック: ワークロード モデル


[ワークロード] タブ

ワークロードの設定 > ワークロード タブを使って、ワークロード モデルや、開始時間、監視オプションに関するワークロード プロファイルを構成できます。

項目 | 説明
増加 | このオプション ボタンを使って、増加ワークロード モデルに切り替えることができます。
定常状態 | このオプション ボタンを使って、定常状態ワークロード モデルに切り替えることができます。
動的 | このオプション ボタンを使って、動的ワークロード モデルに切り替えることができます。
終日 | このオプション ボタンを使って、終日ワークロード モデルに切り替えることができます。このオプションを選択すると、下の 終日ワークロードの設定 ボタンが有効になります。
キュー | このオプション ボタンを使って、キュー ワークロード モデルに切り替えることができます。
時間経過に伴う仮想ユーザー数グラフ | ダイアログ ボックス上部のグラフには、選択したワークロード モデルがグラフィカルに表示されます。ここでは、[ユーザー タイプ] テーブルで選択したユーザー グループに関連付けられたデータが使われます。
[ユーザー タイプ] テーブル | ダイアログのこの部分では、プロジェクトに関連付けられたユーザー タイプの設定を編集できます。オプションは、選択したワークロード モデルによって異なります。(ユーザー タイプの構成の詳細は、個々のワークロード モデルの構成のトピックを参照してください。)
開始時刻 | テストの開始時刻を時間、分、および秒で設定します。
相対 | このオプション ボタンをクリックすると、指定した期間が過ぎた後にテストが開始します。
絶対 | このオプション ボタンをクリックすると、指定した時間にテストが開始します。
自動的に監視を開始する | 監視テンプレートを既に作成していて、テストと一緒に自動的に Performance Explorer が開始/終了するようにしたい場合は、このチェック ボックスをオンにします。
エラー時に TrueLog を生成する | このチェック ボックスをオンにすると、エラーが発生したすべてのトランザクションについて TrueLog Explorer ファイルが生成されます。
リアルタイム測定値を有効にする

このオプションがオンの状態の場合、テスト全体のすべての仮想ユーザーについて、グローバルにリアルタイム測定値データの生成が有効になります。この設定は、あらかじめ設定されているプロファイル設定より優先します。

このオプションがオフの状態場合、リアルタイム測定値データは、テスト全体のすべての仮想ユーザーについてグローバルに無効になります。この設定は、あらかじめ設定されているプロファイル設定より優先します。

このオプションがオンの状態でグレー表示されている場合は、対応するプロファイルでこの設定が有効になっているユーザー タイプについてのみリアルタイム測定値データが生成されます。この場合、ツールチップにリアルタイム測定が有効なユーザー タイプの情報が表示されます。

メモ：仮想ユーザーに対するリアルタイム測定値データに関するプロファイル設定オプションが変更されると、このチェック ボックスの状態は自動的に変わります。

注: この設定は、MeasureSetOption 関数を MEASURE_OPT_REALTIME パラメータを指定して呼び出し、リアルタイム測定を行うように設定された測定値に対してのみ効果があります。
負荷テストの説明 | (省略可能) プロジェクト管理用に、テストの説明をここに入力することができます。
終日ワークロードの設定 | ([終日] ワークロード モデルが選択されている場合のみ有効) 終日ワークロードの設定 ダイアログを開きます。
親トピック: ワークロードの調整
関連概念
ワークロード モデル
ワークロードの調整
関連タスク
終日ワークロードを構成する
動的ワークロードを構成する
増加ワークロードを構成する
キュー ワークロードを構成する
定常状態ワークロードを構成する
検証ワークロードを構成する
関連資料
[エージェントの割り当て] タブ


ワークロード コンテキストでの時間の名前

以下の時間の値は、ワークロードの選択と調整 および ワークロードの設定 ダイアログで設定できます。

測定値 | 説明
ウォームアップ時間 | ウォームアップ時間（省略可能）を指定して、負荷テストを開始できます。ウォームアップ時間中に計測される測定値は、レポートでは使用されません。ウォームアップ時間は、テストのスタートアップ タスク (メモリの割り当てや初期化、キャッシュの構築など) をテストの測定部分から除外するために使用できます。
測定時間 | 測定時間は、ウォームアップ時間（省略可能）と停止時間（省略可能）の間の時間です。測定時間中に測定値が計測され、テストの完了後にレポートで使用されます。多くの場合、測定時間は、シミュレーション時間の終わりまでになります。 測定時間を 0 に設定すると、ウォームアップ時間とシミュレーション時間が終わるまでの間に計測されたすべての測定値がレポートに反映されます。
停止時間 | 負荷テストは、停止時間（省略可能）で終わります。停止時間は、測定時間の終わりから負荷テストの終わりまでの時間です。停止時間中に計測される測定値は、レポートでは使用されません。停止時間は、テストのクリーンアップ タスク (仮想ユーザーの終了など) をテストの測定部分から除外するために使用できます。 指定したシミュレーション時間が、ウォームアップ時間と測定時間の合計よりも長い場合には、停止時間はシミュレーション時間中に開始されます。
測定値 | 説明
シミュレーション時間 | シミュレーション時間は、ランプダウン時間を除いた負荷テストの時間です。ランプアップ時間（ワークロードが増加する時間）と定常時間の合計でもあります。
ランプアップ時間

ランプアップ時間の間に、Silk Performer は、仮想ユーザーの数を徐々に増加させます。

ランプアップ パラメータは、ワークロードの選択と調整 ダイアログ、または ワークロードの設定 ダイアログで設定できます。

たとえば、10 人の仮想ユーザーで負荷テストを開始し（開始仮想ユーザー数）、仮想ユーザーのが最大 20 人に到達するまで（最大仮想ユーザー数）、30 秒ごとに（間隔）、2 人の仮想ユーザーを追加する（追加）ように指定できます。

ランプアップ時間は、増加 ワークロード モデルを使用した場合にのみワークロードに対して指定できます。

定常時間

定常時間中、仮想ユーザーは追加されません。仮想ユーザーの数は、指定した仮想ユーザーの最大数 (最大仮想ユーザー数) に等しく、この時間の間は安定した状態が保たれます。

ランプダウン時間

ランプダウン時間の間に、Silk Performer は、仮想ユーザーの数を徐々に減らしていきます。ランプダウン時間は停止時間中に発生するため、レポートへの影響はありません。

仮想ユーザーに対して終了トランザクションが定義されており、プロファイル設定で 停止された仮想ユーザーに対して終了トランザクションを呼び出す が有効な場合、終了トランザクションがランプダウン時間中に実行されます。ランプダウン時間を指定することによって、実行中の仮想ユーザーが段階的に停止されるため、すべての仮想ユーザーが同時に終了トランザクションを実行する状態を避けることができます。

ランプダウン パラメータは、ワークロードの選択と調整 ダイアログ、または ワークロードの設定 ダイアログで設定できます。たとえば、30 秒ごとに（間隔）、10 人の仮想ユーザーを停止する（停止）ように指定できます。この場合、ワークロードで定義した仮想ユーザーの数に応じてランプダウン時間が計算されます。

ランプダウン時間を 0 に設定し、プロファイル設定で 停止された仮想ユーザーに対して終了トランザクションを呼び出す を有効にすると、すべての関連した仮想ユーザーが同時に終了トランザクションを実行します。終了トランザクションが存在しない場合、仮想ユーザーは直ちに停止します。

親トピック: ワークロードの調整


ワークロード設定の初期化

Silk Performer では、複数のユーザー タイプに対して同じワークロード設定を一度に指定することができます。
  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. 初期化 をクリックします。 ワークロード設定の初期化 ダイアログが表示されます。
  3. リストから ワークロード モデル を選択します。
  4. すべてのユーザー タイプの対して、共通の値を定義する場合には、チェック ボックスを使用します。対応するチェック ボックスをオンにして、値を入力します。個々の値を定義する場合は、テーブルの値を直接編集します。
  5. OK をクリックして、変更を保存します。
注: ワークロード設定の初期化 ダイアログでは、ランプアップ時間 と ランプダウン時間 の期間を定義することもできます。一方、ワークロードの選択と調整 ダイアログでは、時間単位の値の増減を定義することができます。たとえば、期間の場合には、「2 分以内にすべての仮想ユーザーを段階的に停止する」を定義できます。また、減少値の場合には、「10 秒ごとに 2 人の仮想ユーザーを停止する」を定義できます。
ヒント: ワークロード設定の初期化 ダイアログでは、Microsoft Excel のようなスプレッドシート アプリケーションと値をコピー＆ペーストしてやり取りすることができます。この機能は、キーボード ショートカットの Ctrl+C と Ctrl+V を使用して行います。
親トピック: ワークロードの調整


エージェントを割り当てる

個々のエージェントおよびエージェント クラスタを設定し、プロジェクトに割り当てる方法について説明します。

  • エージェントを割り当てる
    負荷 テスト環境で仮想ユーザーの分散を設定し、仮想ユーザーを特定のエージェント、エージェント クラスタ、またはクラウド エージェントに割り当てます。
  • エージェントをワークロードに割り当てる
    ワークロードとエージェントの再生機能を定義したら、そのワークロードを実行するために、特定のエージェントまたはエージェント クラスタを割り当てます。
  • エージェント コンピュータを手動でユーザー タイプに割り当てる
    特定のユーザー タイプについて仮想ユーザーをエージェント コンピュータに手動で割り当てます。
  • 動的ワークロードの割り当て
    負荷テストのリソース管理を使用すると、 Silk Performer プロジェクトへの負荷テストエージェントの動的割り当てが可能となります。
  • Silk Central の負荷テスト エージェント クラスタの一元管理
    Silk Performer のエージェント割り当て機能では、Silk Central と組み合わせた複数の負荷テスト エージェント クラスタの使用がサポートされています。
  • クラウド エージェントにワークロードを割り当てる
    クラウド内で負荷テストを行うときは、使用可能なエージェントを管理し、そのエージェントにワークロードを割り当てます。
  • クラウド エージェントあたりの仮想ユーザー数の定義
    さまざまなアプリケーションのタイプをテストする場合の、コンピュータベースのエージェントで通常サポートされる仮想ユーザー数のガイドラインを使用して、仮想ユーザー数を指定する方法について説明します。
  • エージェント仮想ユーザー容量の評価
    Silk Performer が指定したエージェントの容量を評価する方法について説明します。
親トピック: 負荷テストの管理


[エージェントの割り当て] タブ

ワークロードの設定 > エージェントの割り当て タブでは、必要な負荷を配信するためにワークロード プロファイルにエージェントを割り当てる方法を構成できます。特定のプロジェクト エージェントへの静的または動的割り当てや、Silk Central エージェント クラスタへの動的割り当てが含まれます。

項目 | 説明
エージェント ワークロードの割り当てに対して現在利用できるエージェントが、各機能の種類 (Java、ODBC、SAPGUI など) に対して、各エージェントから実行できる最大仮想ユーザー数とともに、表示されます。

最大仮想ユーザー数は エージェント リソース使用率 設定で決まります。

動的ワークロード割り当てに失敗した場合のエラー処理にこのリストが役に立ちます。Silk Performer ランチャ サービス経由で接続できない、あるいは他の負荷テストで現在ロックされているエージェントが表示されるからです。

クラウドにログインしているとき、このリストには使用可能なクラウド エージェントが他の使用可能なエージェントと並べて表示されます。

割り当ての種類： プロジェクト エージェントに静的に割り当てる | この方法では、静的に特定のエージェント コンピュータ (エージェントのクラスタではなく) をユーザー プロジェクトに割り当てます。 この方法では、エージェントの有効性の検査は実行されず、エージェントのロックは無効です。 クラウドに配置されているエージェントを使用する場合は、この方法を選択します。
割り当ての種類： プロジェクト エージェントに動的に割り当てる | この方法では、実行時にプロジェクト エージェントに対して、動的エージェント割り当てでワークロードが配信されます。 ワークロード配信では、各エージェントの機能に基づいた最適なワークロードのエージェントへの割り当てを作成するように、エージェント機能の仕様が強化されています。 この方法では、実行時のエージェントのロックは有効です。 別のコントローラでその時点で使用されていない応答するエージェントのみが、この方法で使用されます。
割り当ての種類： Silk Central エージェント クラスタに動的に割り当てる | Silk Performer 経由の Silk Central のワークロード配信でも、動的ワークロードのエージェントへの割り当てが使用されます。 Silk Performer 内で、テストのワークロードを配信するエージェント クラスタ名 (ドロップ リストから) を選択します。 Silk Central では、クラスタに割り当てられたエージェント コンピュータのリストが用意されます。 この方法では、実行時に個々のエージェントの機能に基づいて、ワークロードが特定のエージェントに割り当てられます。 Silk Central に接続すると、使用可能なエージェント クラスタの一覧が表示されます。 右端のウィンドウに、選択したエージェント クラスタに現在関連付けられているエージェントが表示されます。 このアプローチでは、Silk Performer プロジェクトを変更することなく、クラスタのエージェントを変更できます。 Silk Central からエージェント クラスタ リストをダウンロードするには、Silk Central のログオン認証情報が必要です。 ユーザーの Silk Performer プロジェクトが既に Silk Central のテスト定義に関連付けられている場合、ログインは必要ありません。 この方法では、実行時のエージェントのロックは有効です。 別のコントローラでその時点で使用されていない応答するエージェントのみが、この方法で使用されます。 プロジェクトが Silk Central のテスト定義に関連付けられていない場合は、Silk Performerのシステム設定の Silk Central 接続パラメータが使用されます。 どちらのアプローチも成功しなかった場合は、Silk Central からエージェント クラスタをダウンロード ダイアログが表示されます。 このダイアログの各項目には、 設定 > システム設定 の Silk Central にある項目の値と、同じ値が表示されます。 適切な接続パラメータを指定して、完了 をクリックします。
ユーザーを均等に分散する | このオプションは、プロジェクト エージェントに静的に割り当てる を選択した場合に有効です。 各エージェントの一般的な再生機能に応じて、既存のすべてのユーザー タイプをすべてのエージェントに均等に分散するには、このオプションを使用します。 たとえば、仮想ユーザーが 50、エージェントが 5 ある場合、各エージェントは 10 仮想ユーザーを実行します。 このオプションが有効にされていない場合、再生機能が許容すれば、最初のエージェントが 50 仮想ユーザーを実行します。 その他のエージェントはアイドル状態になり、1 つのエージェントが再生機能の最大に達した場合にのみワークロードを引き継ぎます。
クラウド エージェントを使用する | このオプションは、プロジェクト エージェントに静的に割り当てる を選択した場合に有効です。 クラウド内で仮想マシンとして動作するエージェントを配置する場合は、このオプションを使用します。 このチェック ボックスをオンにすると、クラウドの ログイン ダイアログ ボックスが開き、ユーザー資格情報の入力を求められます (資格情報の保存 (Save Credentials) をオンにすると、次回からは資格情報の入力を求められません)。 有効な資格情報を入手するには、販売代理店に問い合わせてください。
Cloud Agent Manager | クラウド内のエージェントを管理できる Cloud Agent Manager を起動するには、ここをクリックします。
エージェント リソース使用率 | 各エージェントの再生機能に基づいて、そのエージェントで実行できる仮想ユーザー全体のうち最大何パーセントまで割り当てるか指定するには、エージェント リソース使用率 チェック ボックスをオンにします。 たとえば、SAPGUI 機能があるエージェントが SAPGUI ユーザー タイプの 50 ユーザーを実行できるときに、エージェント リソース使用率 値を [50] % にすると、結果として 25 の SAPGUI 仮想ユーザーがテストで利用できます。 この値は、エージェント テーブルに反映されます。
エージェント間で負荷を分散する 増加ワークロードまたは動的ワークロードの場合は特に、このオプションを有効にすることをお勧めします。 この設定は、実行の瞬間まで有効にならない点に注意してください。
  • この設定を有効にしないと、ユーザーの負荷はエージェント間で順に配分され、次のようになる場合があります。
    • エージェント 1: 仮想ユーザー 1、仮想ユーザー 2、…、仮想ユーザー 17
    • エージェント 2: 仮想ユーザー 18、仮想ユーザー 19、…、仮想ユーザー 34
    • エージェント 3: 仮想ユーザー 35、仮想ユーザー 36、…、仮想ユーザー 50
  • この設定を有効にすると、以下のように、仮想ユーザーがエージェント間で均等に分散されます。
    • エージェント 1: 仮想ユーザー 1、仮想ユーザー 4、仮想ユーザー 7、…
    • エージェント 2: 仮想ユーザー 2、仮想ユーザー 5、仮想ユーザー 8、…
    • エージェント 3: 仮想ユーザー 3、仮想ユーザー 6、仮想ユーザー 9、…
ユーザータイプ/エージェント | タブのこの部分では、プロジェクトに関連付けられたユーザーとエージェントの割り当てを編集できます。 各ユーザー タイプをポイントすると、そのユーザー タイプに必要な機能が表示されます。 この表示は、ワークロードの割り当てが失敗したときのエラー処理に便利です。
ユーザー分散の概要 | ユーザー分散の概要 ボタンをクリックすると、プロジェクトでのユーザーとエージェントの割り当ての要約が表示されます。
親トピック: エージェントをワークロードに割り当てる
関連概念
動的ワークロードの割り当て
ワークロードの調整
関連タスク
エージェントをワークロードに割り当てる
クラウド エージェントにワークロードを割り当てる
関連資料
[ワークロード] タブ


エージェント コンピュータを手動でユーザー タイプに割り当てる

  1. ワークフロー バー の テストの実行 をクリックします。 ワークフロー - ワークロードの設定 ダイアログ ボックスが表示されます。
  2. エージェントの割り当て タブをクリックします。
  3. テストのワークロードを実行するエージェントを定義します。 (エージェントのクラスタではなく) 特定のエージェント コンピュータを静的にプロジェクトに割り当てるには、プロジェクト エージェントに静的に割り当てる オプション ボタンをクリックします。 この方法では、エージェントのロックは無効です。
  4. 自動割り当て 列で、自動割り当て チェック ボックスをオフにします。
  5. エージェント 列の左端にある参照 [...] ボタンをクリックします。 <スクリプト>/<ユーザー タイプ> の手動エージェント割り当て ダイアログ ボックスが開きます。
  6. 割り当てるエージェントを選択し、OK をクリックします。 ユーザー タイプのすべてのユーザーをエージェントに割り当てる必要があります。 選択されたエージェントは、ワークロードの設定 ダイアログ ボックスの エージェント 列に表示されます。
親トピック: エージェントを割り当てる


動的ワークロードの割り当て

Silk Performer の動的ワークロード割り当て機能は、指定した負荷テスト要件と実行時に利用可能なエージェント コンピュータの再生機能を一致させます。 たとえば、負荷テストで SAPGUI クライアントがインストールされたエージェント コンピュータに対してのみ配信可能なワークロードが必要な場合は、動的ワークロード割り当て機能では、テストのワークロードが SAPGUI のインストールされたクライアントがある利用可能なエージェントのみに割り当てられることを保証できます。 さらに、必須ワークロードの比率 (%) を各エージェントに割り当てる必要がある仮想ユーザー数で、構成できます。したがって、負荷機能を超えてエージェントに負荷がかからないことが保証されます。

動的ワークロードの割り当てにより、リソース要件の変動を説明できます。 たとえば、Web 再生インターフェイスで 2,000 の仮想 Web ユーザーのアクセスが必要なリソース量は、SAPGUI 再生インターフェイスで 20 の仮想 SAP ユーザーがアクセスするのに必要な量とほぼ同じです。 再生ごとの最大仮想ユーザー機能の設定に基づいた、動的ワークロード割り当てのアルゴリズムにより、適切なワークロード レベルがエージェントに割り当てられます。 このアプローチでは、結果的に各エージェントで最大のサポート負荷アクセスが継続的に必ずしも発生しません。 クラスタ内の個別エージェントに割り当てる必要がある最大可能ワークロードの比率を定義できます。 たとえば、エージェントから 2,000 Web ユーザーでアクセスできるときに、[エージェント リソース使用率] に [50] % を設定する場合は、1,000 Web ユーザーのみがエージェントに割り当てられます。 残りのワークロードは、同じ Web ユーザー機能がある他のエージェントに割り当てられます。

エージェント クラスタにワークロードを動的に割り当てることの利点は、テストを正常実行するために、静的なテスト実行環境を維持する必要がない点です。 たとえば、エージェント名が変わる、または利用不可になる場合は、Silk Performer は利用できないエージェントのワークロードを、同じクラスタの、必須機能がある利用可能なエージェントに動的に割り当てできます。 このアプローチでは静的テスト環境を維持するために必要な多くの対応策がないので、Silk Performer 負荷テストが Silk Central で事前に定義されたスケジュールに基づき管理、実行されるときに特に有効です。 Silk Central では個別のエージェントではなく、エージェント クラスタに対してテストを実行できます。 各エージェント間でワークロードのバランスをとる方法や個別エージェントの健全性に関わる問題は、Silk Central パースペクティブでは考慮する必要がありません。

テスト実行の瞬間まで、エージェント コンピュータはすべてのワークロードに対して引続き利用可能です。特定の 1 つのワークロードに予約または割り当てられていないためです。 Silk Performer コントローラが、テスト実行に利用可能なエージェントを特定すると、コントローラはすぐにエージェントをロックし、別のコントローラと競合が発生しないようにします。 テストが完了した後、エージェントのロックが解除され、別のテストで利用できるようになります。

  • エージェントの機能を定義する
    プロジェクト エージェント プールにエージェントを追加した後、動的なワークロードの割り当てを最適化するよう各エージェントの機能値を調整します。
  • [エージェント '<エージェント名>' のプロパティ] - [機能] タブ
    再生インターフェイスごとに最大仮想ユーザ数を構成できます。エージェントはこのインターフェイスを使用して動的なワークロードの割り当てを最適化します。
  • 再生機能
    エージェントにタグを付けることのできる再生機能について説明します。
  • 機能の複雑度の設定
    各機能のリソース要件セットの関係を決定するために複雑度の値を使用する方法について説明します。 専用の XML ファイルを作成することによって、これらの値は上書きできます。 さらに、機能に対して仮想ユーザーのデフォルト数を定義する方法についても説明します。
親トピック: エージェントを割り当てる


エージェントの機能を定義する

  1. 設定 > システム を選択します。 システム設定 ダイアログ ボックスが表示されます。
  2. エージェント をクリックします。 エージェント プール タブが表示されます。
  3. 機能を定義するエージェントをクリックします。
  4. プロパティ ボタンをクリックします。
  5. 機能 タブをクリックします。 機能 ページには、インストールされているハードウェアの仕様に基づいて、あらかじめ推奨される再生機能の値が表示されます。
  6. エージェントごとに、必要に応じて機能タイプごとの 仮想ユーザーの 最大数 の値を調整します。 エージェントに対し、適切な最大仮想ユーザー数を設定するのはユーザーの責任です。 指定できる値は、0 から 9999 です。
  7. 設定を保存するには、OK をクリックします。 あるいは、デフォルト ボタンをクリックして機能値をデフォルトに戻すことができます。
親トピック: 動的ワークロードの割り当て


[エージェント '<エージェント名>' のプロパティ] - [機能] タブ

エージェント '<エージェント名>' のプロパティ > 機能 ページを使用すると、再生インターフェイスごとに最大仮想ユーザ数を構成できます。エージェントはこのインターフェイスを使用して動的なワークロードの割り当てを最適化します。

機能 ページには、インストールされているハードウェアの仕様に基づいて、あらかじめ推奨される再生機能の値が表示されます。 エージェントに対し、適切な最大仮想ユーザー数を設定するのはユーザーの責任です。 指定できる値は、0 から 9999 です。
機能 | 仮想ユーザーの 最大数
全般 | エージェントに特定のクライアントをインストールする必要がない再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。 general 機能には、Web プロトコルおよび IIOP などの再生インターフェイスが含まれます。
Browser-driven | ブラウザ駆動型テスト再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
Java | Java ランタイムのインストールを必要とする再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。 Java 機能には、Java フレームワーク、OracleForms、Oracle Applications、Jolt、および Jacada が含まれます。
ODBC | ODBC 再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
Oracle OCI | Oracle OCI7 または Oracle OCI8 再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
SAPGUI | SAPGUI 再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
Citrix | Citrix 再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
Tuxedo | Tuxedo 再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
.Net | .Net Framework 再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
GuiL Test | Gui レベル テスト 再生インターフェイスに対して、そのエージェントが実行できる仮想ユーザーの最大数。
デフォルト ボタン | クリックすると、すべての値を再生機能の推奨値にリセットします。
親トピック: 動的ワークロードの割り当て
関連概念
動的ワークロードの割り当て
関連タスク
エージェントをワークロードに割り当てる
関連資料
再生機能


再生機能

次の再生機能を持つ各エージェントにタグを付けることができます。

  • General – Web や IIOP など、インストールを必要としない任意の再生機能 (ブラウザ駆動を除く)。
  • Browser-driven - インストールを必要としないが、General よりもリソース消費が高い機能を持ちます。
  • Java – Java フレームワーク、Oracle Forms、Oracle Applications、Jacada、および JoltJava のランタイム環境が使用可能です。
  • ODBC – ODBC クライアントがインストールされています。
  • Oracle OCI – Oracle クライアントがインストールされています。
  • SAPGUI – SAPGUI クライアントがインストールされています。
  • Citrix – Citrix クライアントがインストールされています。
  • Tuxedo – Tuxedo クライアントがインストールされています。
  • .Net – .NET Framework がインストールされています。
  • GuiL Test - 端末サービスがインストールされ、このエージェントで実行されています。 Silk Test とテストするシステムがインストールされている必要があります。

各機能について、エージェントが操作できる仮想ユーザーの最大数を指定できます。 機能 タブ ( 設定 > システム > エージェント > エージェント プール > プロパティ > 機能 ) を選択してこの操作を完了します。

注: ホスト マシンのハードウェア リソースに従い、負荷テスト エージェントは、固有の再生インターフェイスのリソース要求に基づくさまざまな数の仮想ユーザーを再生できます。 そのため、エージェントは CPU やメモリなどのハードウェア仕様と、特定の再生インターフェイスに基づいて実行できる仮想ユーザー数によって特徴付けられます。
親トピック: 動的ワークロードの割り当て


機能の複雑度の設定

機能の複雑度

Silk Performer では、抽象値 (複雑度) を使用して、各機能のリソース要件セットの関係を決定します。 機能とは、エージェントで再生できるテクノロジです。

動的ワークロードの割り当てでは、次の処理に対して機能が使用されます。

  1. 機能の複雑度の合計によりエージェントをソートする。 これが使用されるのは、機能の複雑度が最小であるエージェントにユーザー タイプを最初に割り当てるためです。
  2. 関連付けられたスクリプトに対する機能の複雑度の合計によりユーザー タイプをソートする。 これが使用されるのは、機能の複雑度が最大であるユーザー タイプを最初に割り当てるためです。 (前の) 処理 1 と合わせて、結果として複雑度が最高であるユーザー タイプが、必須機能に一番よく適合するエージェントに割り当てられます。
  3. 各機能に対して、エージェントのデフォルト仮想ユーザー数を計算する。 エージェントでは、[General] 機能に対する仮想ユーザー数は CPU 速度、CPU 数および利用可能なメモリを基に計算されます。 この値と機能の複雑度のリストを使用して、他のすべての機能に対する利用可能な仮想ユーザー数が計算されます。

サンプル XML ファイル

機能の複雑度の値を変更するには、XML ファイル CapabilityComplexities.xml を作成し、<public user documents>\Silk Performer 21.0 に保存する必要があります。

XML ファイルの内容は、次のようになります。

<Complexities>
  <Capability name="SAPGUI" complexity="150"/>
  <Capability name="ODBC" complexity="65"/>
</Complexities>

このサンプル XML ファイルでは、SAPGUI 機能と ODBC 機能に対する複雑度値が置き換わります。 他のすべての値は変更されません。 このファイルには任意の数 (0 個を含む) の Capability タグを記載できます。 機能名のリストは前の表に記載されています。

複雑度の値自体はそれほど重要ではないことに注意してください。 重要な点は、それぞれの値の大小関係です。 すべての複雑度に同じ係数をかけた場合に、任意の 2 つの機能の関係が変わらないからです。

仮想ユーザーのデフォルト数の設定

場合により、機能に対する仮想ユーザーのデフォルト数を定義すると便利なことがあります (テスト対象のテクノロジに技術的制限を加えるなど)。 これを実現するには、CapabilityComplexities.xml で定義されている機能を [maxVU] 属性で拡張します。 たとえば、<Complexities> <Capability name="GuiLTest" complexity="200" maxVU="30" /> </Complexities> とします。 [maxVU] 属性に指定した値は、機能の複雑度で計算される値 (指定なしの場合) に優先されます。 [maxVU] の値 [0] ([maxVU] 属性が指定されていないときのデフォルト) では、仮想ユーザーのデフォルト数が機能の複雑度から計算されることを示します。

現状では、次の固定の最大 VUser 値がデフォルトで有効です。

  • SAPGUI アプリケーション - 75 仮想ユーザー
  • Citrix - 30 仮想ユーザー
  • GuiLTest - 30 仮想ユーザー
  • ブラウザ駆動 - 100 仮想ユーザー
注: ブラウザ駆動の仮想ユーザーの最大数は、機能の 5% (最大 100 まで) と計算されます。
親トピック: 動的ワークロードの割り当て


Silk Central の負荷テスト エージェント クラスタの一元管理

個別のエージェントにワークロードを割り当てるオプションがありますが、多くの場合、エージェントのクラスタにワークロードを割り当てることをお勧めします。 クラスタとは、同じ機能 (JDK のインストール、ODBC クライアント、Citrix クライアントなど) を装備するエージェントのグループです。また同じ機能がそろっていないエージェント (異なるチームをサポートできる個別のエージェント グループにラボのコンピュータを分割する場合など) で構成することもできます。 このアプローチでは、テストのワークロードを設定したときに、必須ワークロードを実行できるエージェントのクラスタを選択します。 Silk Performer は特定のエージェントへのワークロードの動的割り当てを処理します。 ワークロードの配信に必要なエージェントだけが実際に使用されます。

エージェント クラスタは Silk Central で一元管理され、負荷テストを開始したときに、Silk Performer により確保されます。ユーザーがエージェント自体の利用を構成する必要はありません。同時にスケジュール設定されている負荷テストの競合は自動的に解決されます。

  • Silk Central エージェント クラスタ ファイルを作成する
    エージェント プール内の使用可能なエージェントの接続プロパティ、機能、およびシステム情報をいったん出力すると、Silk Central エージェント クラスタ XML ファイルを手動で作成する必要があります。
  • エージェント プールをエクスポートする
    Silk Central テスト エージェント クラスタ ファイルを作成する前に、エージェント プール内のエージェントで使用できる接続プロパティ、機能、およびシステム情報を出力する必要があります。
親トピック: エージェントを割り当てる


Silk Central エージェント クラスタ ファイルを作成する

この作業を行う前に、Silk Performer エージェント プール内の各エージェントについて、エージェント プールを XML ファイル (このファイルには、エージェントの接続プロパティ、機能、およびシステム情報が含まれます) として、エクスポートする必要があります。

作成する必要がある Silk Central エージェント クラスタ ファイルは 1 つだけです。ファイルには、1 つ以上のエージェント クラスタを入れる場合があり、それぞれのエージェント クラスタが機能、接続プロパティ、およびシステム情報なども含めて関連エージェントを指定します。作成するファイルの内容は、Silk Central エージェント クラスタに動的に割り当てる オプションがオンになっている場合、ワークロードの設定 ダイアログにあるすべての Silk Performer ユーザーが使用できます。

Silk Central‌ エージェント クラスタ (ワークロードの設定 > エージェントの割り当て タブの ‌Silk Central エージェント クラスタに動的に割り当てる ボタンをクリックして構成) に対してテストを実行する場合、Silk Central エージェント クラスタ ファイルを作成する必要があります。Silk Central エージェント クラスタを使用するワークロードは、Silk Performer Workbench から実行でき、また、Silk Central テストとしてスケジュールすることができます。

  1. ローカル システム上に空の XML ファイルを作成します。 このファイルは、Silk Central からアクセスできることが必要です。Silk Central ディレクトリ構造内のソース管理下に置くことができます。
  2. エクスポートされたエージェント プール ファイルの内容を使って、以下のサンプルの構造に従ってエージェント クラスタ ファイルを作成します。 エクスポートされたエージェント プール ファイルとエージェント クラスタ ファイルの内容はほとんど同じです。そのため、ここでは、典型的な例として、エクスポートされたエージェント プール ファイルの <AgentPool/> 要素を <SctmAgentClusters/> 要素で囲んであります。

手動で作成された Silk Central エージェント クラスタ ファイルの例

手動で作成されたこのエージェント クラスタ ファイルには、ルート要素 SctmAgentClusters があります。ルート要素内には、クラスタ内のエージェント プールごとに AgentPool 要素が 1 つあります。各 AgentPool 要素内には、個々のエージェントの接続プロパティ、機能、およびシステム情報を伝える Agent 要素群があります。

<?xml version='1.0' encoding='UTF-8'?>

<SctmAgentClusters>
 <AgentPool name="cluster_1">
  <Agent id="LAB100">
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="IpAddress">192.168.1.100</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <Capability maxVU="390" name=".Net"></Capability>
                <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="39" name="Citrix"></Capability>
    <Capability maxVU="3900" name="General"></Capability>
    <Capability maxVU="39" name="GuiLTest"></Capability>
    <Capability maxVU="390" name="Java"></Capability>
    <Capability maxVU="390" name="ODBC"></Capability>
    <Capability maxVU="390" name="Oracle OCI"></Capability>
    <Capability maxVU="39" name="SAPGUI"></Capability>
    <Capability maxVU="390" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3332</SysInfo>
    <SysInfo name="Memory">2039 MB</SysInfo>
    <SysInfo name="ProcType"></SysInfo>
    <SysInfo name="ProcessorCount">1</SysInfo>
    <SysInfo name="ProcessorSpeed">3200 MHz</SysInfo>
    <SysInfo name="ServicePack"></SysInfo>
    <SysInfo name="SysVersion">5.0</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
  <Agent id="lab101">
    <ConnProperty name="AuthPassword"></ConnProperty>
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="EncryptionSSL">false</ConnProperty>
    <ConnProperty name="HTTPTunnel">:8080</ConnProperty>
    <ConnProperty name="IpAddress">192.168.1.101</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="SOCKSTunnel">:1080</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <ConnProperty name="UseHttpTunnel">false</ConnProperty>
    <ConnProperty name="UseSocksTunnel">false</ConnProperty>
    <Capability maxVU="380" name=".Net"></Capability>
                <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="38" name="Citrix"></Capability>
    <Capability maxVU="3800" name="General"></Capability>
    <Capability maxVU="38" name="GuiLTest"></Capability>
    <Capability maxVU="380" name="Java"></Capability>
    <Capability maxVU="380" name="ODBC"></Capability>
    <Capability maxVU="380" name="Oracle OCI"></Capability>
    <Capability maxVU="38" name="SAPGUI"></Capability>
    <Capability maxVU="380" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3343</SysInfo>
    <SysInfo name="Memory">1983 MB</SysInfo>
    <SysInfo name="ProcType">Intel Pentium IV</SysInfo>
    <SysInfo name="ProcessorCount">2</SysInfo>
    <SysInfo name="ProcessorSpeed">3200 MHz</SysInfo>
    <SysInfo name="ServicePack">Service Pack 2</SysInfo>
    <SysInfo name="SysVersion">5.2</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
 </AgentPool>
 <AgentPool name="cluster_2">
  <Agent id="LAB200">
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="IpAddress">192.168.2.200</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <Capability maxVU="390" name=".Net"></Capability>
                <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="39" name="Citrix"></Capability>
    <Capability maxVU="3900" name="General"></Capability>
    <Capability maxVU="39" name="GuiLTest"></Capability>
    <Capability maxVU="390" name="Java"></Capability>
    <Capability maxVU="390" name="ODBC"></Capability>
    <Capability maxVU="390" name="Oracle OCI"></Capability>
    <Capability maxVU="39" name="SAPGUI"></Capability>
    <Capability maxVU="390" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3332</SysInfo>
    <SysInfo name="Memory">2039 MB</SysInfo>
    <SysInfo name="ProcType"></SysInfo>
    <SysInfo name="ProcessorCount">1</SysInfo>
    <SysInfo name="ProcessorSpeed">3200 MHz</SysInfo>
    <SysInfo name="ServicePack"></SysInfo>
    <SysInfo name="SysVersion">5.0</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
  <Agent id="lab201">
    <ConnProperty name="AuthPassword"></ConnProperty>
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="EncryptionSSL">false</ConnProperty>
    <ConnProperty name="HTTPTunnel">:8080</ConnProperty>
    <ConnProperty name="IpAddress">192.168.2.201</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="SOCKSTunnel">:1080</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <ConnProperty name="UseHttpTunnel">false</ConnProperty>
    <ConnProperty name="UseSocksTunnel">false</ConnProperty>
    <Capability maxVU="380" name=".Net"></Capability>
                <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="38" name="Citrix"></Capability>
    <Capability maxVU="3800" name="General"></Capability>
    <Capability maxVU="38" name="GuiLTest"></Capability>
    <Capability maxVU="380" name="Java"></Capability>
    <Capability maxVU="380" name="ODBC"></Capability>
    <Capability maxVU="380" name="Oracle OCI"></Capability>
    <Capability maxVU="38" name="SAPGUI"></Capability>
    <Capability maxVU="380" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3343</SysInfo>
    <SysInfo name="Memory">1983 MB</SysInfo>
    <SysInfo name="ProcType">Intel Pentium IV</SysInfo>
    <SysInfo name="ProcessorCount">2</SysInfo>
    <SysInfo name="ProcessorSpeed">3200 MHz</SysInfo>
    <SysInfo name="ServicePack">Service Pack 2</SysInfo>
    <SysInfo name="SysVersion">5.2</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
  <Agent id="lab203">
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="IpAddress">192.168.2.203</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <Capability maxVU="650" name=".Net"></Capability>
                <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="65" name="Citrix"></Capability>
    <Capability maxVU="6500" name="General"></Capability>
    <Capability maxVU="65" name="GuiLTest"></Capability>
    <Capability maxVU="650" name="Java"></Capability>
    <Capability maxVU="650" name="ODBC"></Capability>
    <Capability maxVU="650" name="Oracle OCI"></Capability>
    <Capability maxVU="65" name="SAPGUI"></Capability>
    <Capability maxVU="650" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3371</SysInfo>
    <SysInfo name="Memory">3318 MB</SysInfo>
    <SysInfo name="ProcType"></SysInfo>
    <SysInfo name="ProcessorCount">2</SysInfo>
    <SysInfo name="ProcessorSpeed">3000 MHz</SysInfo>
    <SysInfo name="ServicePack"></SysInfo>
    <SysInfo name="SysVersion">5.2</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
 </AgentPool>
</SctmAgentClusters>

エージェント クラスタ ファイルを作成したら、そのファイルを参照するよう Silk Central を構成する必要があります。Silk Central はファイルを実行サーバーにコピーし、動的にワークロードの割り当てを行う Silk Performer プロジェクトが実行されるときには常に、そのプロジェクトがこのファイルを読み取り、クラスタ内のエージェントにワークロードをどのように割り当てるかを決定します。

親トピック: Silk Central の負荷テスト エージェント クラスタの一元管理


エージェント プールをエクスポートする

Silk Central テスト エージェント クラスタ ファイルを作成する前に、エージェント プール内のエージェントで使用できる接続プロパティ、機能、およびシステム情報を出力する必要があります。

  1. システム > 設定 > エージェント > エージェント プール を選択します。
  2. エージェント プールのエクスポート ボタンをクリックします。
  3. 該当するパスとファイル名を指定し、エージェント プールの内容を XML ファイルとして保存します。

エージェント プール ファイルの例

この XML ファイルには、ルート要素 AgentPool があります。ルート要素内には、エージェント プール内のエージェントごとに Agent 要素が 1 つあります。各 Agent 要素内には、そのエージェントの接続プロパティ、機能、およびシステム情報を伝える要素があります。

<?xml version='1.0' encoding='UTF-8'?>
<AgentPool name="LocalPool">
  <Agent id="LAB108">
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="IpAddress">192.168.1.108</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <Capability maxVU="390" name=".Net"></Capability>
    <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="39" name="Citrix"></Capability>
    <Capability maxVU="3900" name="General"></Capability>
    <Capability maxVU="39" name="GuiLTest"></Capability>
    <Capability maxVU="390" name="Java"></Capability>
    <Capability maxVU="390" name="ODBC"></Capability>
    <Capability maxVU="390" name="Oracle OCI"></Capability>
    <Capability maxVU="39" name="SAPGUI"></Capability>
    <Capability maxVU="390" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3332</SysInfo>
    <SysInfo name="Memory">2039 MB</SysInfo>
    <SysInfo name="ProcType"></SysInfo>
    <SysInfo name="ProcessorCount">1</SysInfo>
    <SysInfo name="ProcessorSpeed">3200 MHz</SysInfo>
    <SysInfo name="ServicePack"></SysInfo>
    <SysInfo name="SysVersion">5.0</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
  <Agent id="lab116">
    <ConnProperty name="AuthPassword"></ConnProperty>
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="EncryptionSSL">false</ConnProperty>
    <ConnProperty name="HTTPTunnel">:8080</ConnProperty>
    <ConnProperty name="IpAddress">192.168.1.116</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="SOCKSTunnel">:1080</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <ConnProperty name="UseHttpTunnel">false</ConnProperty>
    <ConnProperty name="UseSocksTunnel">false</ConnProperty>
    <Capability maxVU="380" name=".Net"></Capability>
    <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="38" name="Citrix"></Capability>
    <Capability maxVU="3800" name="General"></Capability>
    <Capability maxVU="38" name="GuiLTest"></Capability>
    <Capability maxVU="380" name="Java"></Capability>
    <Capability maxVU="380" name="ODBC"></Capability>
    <Capability maxVU="380" name="Oracle OCI"></Capability>
    <Capability maxVU="38" name="SAPGUI"></Capability>
    <Capability maxVU="380" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3343</SysInfo>
    <SysInfo name="Memory">1983 MB</SysInfo>
    <SysInfo name="ProcType">Intel Pentium IV</SysInfo>
    <SysInfo name="ProcessorCount">2</SysInfo>
    <SysInfo name="ProcessorSpeed">3200 MHz</SysInfo>
    <SysInfo name="ServicePack">Service Pack 2</SysInfo>
    <SysInfo name="SysVersion">5.2</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
  <Agent id="lab125">
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="IpAddress">192.168.1.125</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <Capability maxVU="650" name=".Net"></Capability>
                <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="65" name="Citrix"></Capability>
    <Capability maxVU="6500" name="General"></Capability>
    <Capability maxVU="65" name="GuiLTest"></Capability>
    <Capability maxVU="650" name="Java"></Capability>
    <Capability maxVU="650" name="ODBC"></Capability>
    <Capability maxVU="650" name="Oracle OCI"></Capability>
    <Capability maxVU="65" name="SAPGUI"></Capability>
    <Capability maxVU="650" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3371</SysInfo>
    <SysInfo name="Memory">3318 MB</SysInfo>
    <SysInfo name="ProcType"></SysInfo>
    <SysInfo name="ProcessorCount">2</SysInfo>
    <SysInfo name="ProcessorSpeed">3000 MHz</SysInfo>
    <SysInfo name="ServicePack"></SysInfo>
    <SysInfo name="SysVersion">5.2</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
  <Agent id="lab47">
    <ConnProperty name="ConnectPort">19200</ConnProperty>
    <ConnProperty name="ConnectSecurePort">19201</ConnProperty>
    <ConnProperty name="IpAddress">192.168.1.47</ConnProperty>
    <ConnProperty name="LastConnectStatus">5</ConnProperty>
    <ConnProperty name="UseAuthentication">false</ConnProperty>
    <Capability maxVU="180" name=".Net"></Capability>
                <Capability maxVU="100" name="Browser-driven"></Capability>
    <Capability maxVU="18" name="Citrix"></Capability>
    <Capability maxVU="1800" name="General"></Capability>
    <Capability maxVU="18" name="GuiLTest"></Capability>
    <Capability maxVU="180" name="Java"></Capability>
    <Capability maxVU="180" name="ODBC"></Capability>
    <Capability maxVU="180" name="Oracle OCI"></Capability>
    <Capability maxVU="18" name="SAPGUI"></Capability>
    <Capability maxVU="180" name="Tuxedo"></Capability>
    <SysInfo name="AgentRAC">7803300</SysInfo>
    <SysInfo name="AgentVersion">7.8.0.3414</SysInfo>
    <SysInfo name="Memory">1007 MB</SysInfo>
    <SysInfo name="ProcType"></SysInfo>
    <SysInfo name="ProcessorCount">2</SysInfo>
    <SysInfo name="ProcessorSpeed">2593 MHz</SysInfo>
    <SysInfo name="ServicePack"></SysInfo>
    <SysInfo name="SysVersion">5.1</SysInfo>
    <SysInfo name="System">WinNT</SysInfo>
  </Agent>
</AgentPool>

これで、エクスポートされたエージェント プール ファイルにある XML データを使用して、Silk Central テスト エージェント クラスタ ファイルを作成できます。

親トピック: Silk Central の負荷テスト エージェント クラスタの一元管理


クラウド エージェントにワークロードを割り当てる

この操作は、プロジェクト用にワークロードを構成した後にのみ実行できます。

  1. ワークフロー バー の テストの実行 をクリックします。 ワークフロー - ワークロードの設定 ダイアログ ボックスが表示されます。
  2. エージェントの割り当て タブをクリックします。
  3. 割り当ての種類 を選択します。
    • プロジェクト エージェントに静的に割り当てる ：この方法では、静的に特定のエージェント コンピュータ (エージェントのクラスタではなく) をユーザー プロジェクトに割り当てます。 この方法では、エージェントの有効性の検査は実行されず、エージェントのロックは無効です。 クラウドに配置されているエージェントを使用する場合は、この方法を選択します。
  4. テストのワークロードを実行するエージェントを定義します。
    • プロジェクト エージェントに静的に割り当てる を選択した場合は、 ユーザーを均等に分散する チェック ボックスをオンにして、各エージェントの一般的な再生機能に応じて、既存のすべてのユーザー タイプをすべてのエージェントに均等に分散できます。 クラウド内で仮想マシンとして動作するエージェントを使用するには、 クラウド エージェントを使用する チェック ボックスをオンにします。 クラウド内のエージェントを管理するには、 Cloud Agent Manager をクリックします。
    注: Micro Focus CloudBurst サービスにアクセスするには、http://cloud.borland.com で登録するか、または営業担当にお問い合わせください。
  5. 各エージェントの再生機能に基づいて、そのエージェントで実行できる仮想ユーザー全体のうち最大何パーセントまで割り当てるか指定するには、エージェント リソース使用率 チェック ボックスをオンにします。
  6. 複数のエージェントにワークロードを分散させるには、エージェント間で負荷を分散する チェック ボックスをオンにします。
  7. プロジェクト エージェントに静的に割り当てる を選択した場合、エージェントの割り当て ページの下の表を使用して、ユーザー グループのワークロード割り当てを定義します。
    注: 使用可能なオプションは、選択したワークロード モデルによって異なります。
  8. 現在使用可能なエージェント コンピュータに対する仮想ユーザーの割り当てを表示するには、ユーザー分散の概要 をクリックします。確認したら 閉じる をクリックします。
  9. 設定を保存するには、OK をクリックします。
注: クラウド エージェントは、Cloud Agent Manager がそれらのエージェントに接続できない場合、「到達不能」と見なされます。こうしたことが発生するにはいくつか理由があります。
  • ご使用のネットワークに、あるホストまたはポートをブロックするファイアウォールが含まれています。エージェント通信は、ポート 443 を使用したセキュア HTTP トンネルを通じて行われます。
  • ご使用のネットワークで、ある Web サイトまたはポートをブロックするプロキシ サーバーが使用されています。
  • Cloud Agent Manager を実行するマシンに、あるホストまたはポートをブロックするファイアウォールがあります。
親トピック: エージェントを割り当てる
関連資料
[エージェントの割り当て] タブ


クラウド エージェントあたりの仮想ユーザー数の定義

  1. ワークフロー バーの エージェントの割り当て をクリックします。 ワークフロー - エージェントの割り当て ダイアログ ボックスが表示されます。
  2. クラウド エージェントを使用する をクリックします。 ワークフロー - クラウド エージェントの準備 ダイアログ ボックスが表示されます。
  3. スライダーを右にスライドさせて、各クラウド エージェントで実行する仮想ユーザー数を選択します。
    スライダーに沿ったマーカーは、さまざまなタイプのアプリケーションをテストする場合にサポートされている通常の仮想ユーザー数を示しています。 ただし、クラウド エージェントあたりの最大仮想ユーザー数は、アプリケーションに関係なく 1,000 となります。 もちろん、テスト シナリオで実際にサポートされる仮想ユーザー数は、特定のテストの複雑さとリソースの消費量により異なります。 ワークロード テキスト フィールドには、各ユーザー タイプ (ワークフロー - ワークロードの設定 ダイアログ ボックスで定義されている) で定義されている最大仮想ユーザー数が示されます。 地域ごとの割り当て テーブルには、ユーザーの選択に基づく、すべての地理的な地域のエージェントの割り当て結果が示されます。 たとえば、100 仮想ユーザーで 5 つの地理的な地域でエージェントあたり 20 の最大仮想ユーザー数を ワークロード で設定した場合は、それぞれの地域で 20 の仮想ユーザーが実行されます。 エージェントあたりの仮想ユーザー数を増やすと、定められたワークロードをサポートするためにそれぞれの地理的な地域内で必要となるエージェント インスタンスの数が減少します。
  4. 次へ をクリックします。 エージェントの開始 ダイアログ ボックスが表示され、定められたワークロードの処理を開始する、それぞれの地理的な地域内のエージェント インスタンスの数が示されます。
  5. ダイアログ ボックスの 稼働時間 領域で、エージェント インスタンスをアクティブにする時間を指定します。 停止しない を選択するか、特定の 日数 と 時間数 を選択します。 会社の制限 には、ユーザーのライセンス タイプに基づいて開始可能なエージェント インスタンスの残りの数が示されます。
  6. 開始 をクリックして Cloud Agent Manager を開き、指定した数のクラウド エージェント インスタンスを開始します。
親トピック: エージェントを割り当てる
関連資料
パフォーマンスとスケーラビリティ マトリクス


エージェント仮想ユーザー容量の評価

エージェントが処理できる仮想ユーザーの数が不確かな場合、評価を実行することができます。評価の実行を終えると、Silk Performer は指定したエージェントで実行できる仮想ユーザー数の概算値を提示します。
エージェント仮想ユーザー容量の評価 ダイアログで、開始 をクリックします。 Silk Performer は、徐々に仮想ユーザーの数を増やしていきます。そして、次の条件の最低 1 つが真になったときに、実行は自動的に停止します。
  • 応答性が 95% 未満に低下した。
  • CPU 使用量が 95% を超えた。
  • 仮想ユーザーの最大数に到達した。
注: クラウド エージェントの容量を評価する場合は、クラウド アカウントの Micro Focus Credits が必要になります。
親トピック: エージェントを割り当てる


エージェントの試行の要約

エージェントの試行が完了すると、 エージェントの試行の要約 ページが表示されます。結果 ツリーからこのページを開くこともできます。右側にある 次のステップ 領域で、次の操作を実行できます。
  • TrueLog Explorer のエラー (発生した場合) を表示するには エラーの分析 をクリックします。
  • 監視の設定 をクリックすると、ワークフロー バーの次のステップに進みます。
  • 支払情報の表示 をクリックすると、口座から支払われた Micro Focus Credits の総額を表示します。
  • ローカル エージェント または、結果ファイルの分析 領域にあるクラウドの地域からひとつをクリックすると、さまざまなエージェントで実行された実行についての詳細な結果情報が得られます。
注: テストが完了するたびに、要約ページが表示されないようにするには、 監視 ページのツールバーで 要約ページの表示 ボタンを無効にします。
親トピック: エージェントの試行


サーバーの監視

負荷テスト実行中に、ユーザーがライブのサーバー パフォーマンスをグラフィックで表示できる機能が、Silk Performer のサーバーの監視に備わっています。

サーバーの監視で可能なのは、結果分析ステージで他のテスト測定値と関連付けられ、表示できるサーバー側の結果の生成です。 サーバーの監視は、サーバーにボトルネックがあるかどうかを調査し、ある場合はその正確な位置を特定するのに役立ちます。 結果として、監視により、OS とサーバー アプリケーションのパフォーマンスを調査できます。

サーバーの監視のテンプレートをセットアップして、パフォーマンス データを監視します。またはテストしているアプリケーションのタイプに対して一般に既に構成されているデフォルト テンプレートを使用できます。

親トピック: 監視を構成する


サーバー監視のテンプレートをセットアップする

  1. 設定 > アクティブ プロファイルに移動します。 プロファイル設定 ダイアログ ボックスが開きます。
  2. グループ ボックスの 結果 アイコンをクリックします。
  3. 監視 ページをクリックします。
  4. テストを開始したら Silk Performer の監視機能が自動的に起動されるようにするには、監視オプション 領域の 自動的に監視を開始する チェック ボックスをオンにします。
  5. プロジェクトに最適な監視テンプレートを自動的に使用するには、デフォルト監視テンプレートを使用する をクリックします。 たとえば、Web プロジェクトを作成している場合、Web 負荷テストに役立つ測定値をテンプレートで指定します。
  6. カスタム監視テンプレートを使用するには、カスタム監視テンプレートを使用する をクリックし、次のいずれかのステップを実行します。
    • サーバー監視に使用するカスタム テンプレート ファイル (.pew) の名前を入力します。 Silk Performer により、標準監視テンプレートのコピーが作成されます。
    • 名前フィールドのフォルダ アイコンをクリックして、既存の監視テンプレートを選択します。
  7. 省略可能： カスタム監視テンプレートの編集 をクリックして、任意の監視パフォーマンス データを追加または削除します。
    このボタンをクリックすると、Silk Performance Explorer が開きます。 以下の手順を実行します。
    1. 任意の監視パフォーマンス データを追加や削除します。
    2. 変更をテンプレートに適用するには、Silk Performance Explorer ワークスペースを保存します。
  8. Windows のパフォーマンス モニタに表示される追加パフォーマンス測定値のデータを計算するには、パフォーマンス モニタのインテグレーション 領域の オンライン パフォーマンス データを計算する チェック ボックスをオンにします。 このデータを使用すると、同時使用ユーザー、トランザクションのスループット、送信/受信されたデータ、および実行された SQL 文を表示できます。
  9. OK をクリックします。 負荷テストを開始した後に、負荷テストのサーバー監視が自動的に開始し、停止します。
  10. 分析するため監視結果を保存する場合、次のようにしてサーバー監視結果を監視出力ファイルに書き込みます： Performance Explorer の リアルタイム監視 タブの 新規 グループで、監視出力 をクリックします。
親トピック: 監視を構成する
関連タスク
サーバー パフォーマンスの監視にレポートを使用する
監視出力を作成する


負荷テストの実行

Silk Performer 負荷テストの実行のこの処理部分では、完全な負荷テストを実行します。

  • テストを実行する
    負荷テストのために、実行する必要がある手順と、設定する必要があるオプションについて説明します。
  • 負荷テストを実行する
    ターゲット サーバーに対してテスト スクリプトを実行して、複数の仮想ユーザーとワークロードがサーバーのパフォーマンスに与える影響を確認します。
  • 仮想ユーザーの計算
    ワークロードの設定 ダイアログの ペーシング タブでの値の計算方法について説明します。
  • ペーシング
    ペーシングとはなにか、また、それが定義済みの 1 秒当たりのトランザクション (TPS) 数に達するように、どのように使用されるかについて説明します。
  • 負荷テストを監視する
    負荷テストの監視に利用できる方法をすべて列挙します。
  • コマンド ラインから Silk Performer を起動する
    このトピックでは、Silk Performer 負荷 テストをコマンド ライン インターフェイスから直接実行する方法について説明します。さらに、利用可能なコマンド ライン パラメータも一覧します。
親トピック: 負荷テストの管理


テストを実行する

負荷テストでは、負荷がサーバーのパフォーマンスに与える影響を調査するために、テスト スクリプトを利用して、ターゲット サーバーに対して複数の仮想ユーザーが実行されます。 大規模な負荷テストの場合は、ローカル エリア ネットワーク上に適切なテスト環境をセットアップする必要があります。このようなテスト環境には、仮想ユーザーのホストとなるエージェント コンピュータも含まれます。

タスクを完了するには、以下のことが不可欠です。
  • 実行対象のテストに適したタイプのオプションを設定する。
  • 必須のワークロードを正確に定義する。
  • サーバーのパフォーマンスを評価するために、テスト結果の生成を有効にする。

負荷テスト中に結果セット一式のログを有効にするのは避けてください。負荷テスト結果と干渉する場合があります。 ただし、エラー時に TrueLog を生成する ログ オプションを利用すると、エラーが発生した場合に、必要なログ ファイルがディスクに書き込まれます。TrueLog On Error を利用すると、再生エラーをビジュアルに調査できます。

エージェント コンピュータ、仮想ユーザー、トランザクションに関するリアルタイム情報は、負荷テストの実行中に表示されます。 ターゲット サーバーのリアルタイムのパフォーマンス監視は、グラフィック形式で表示されます。

検証実行としてテストが構成されている場合は、以下のオプションが、指定された値に自動的に設定されます。
  • ベースライン レポート ファイルが自動的に作成されます。
  • シミュレーション時間の後で仮想ユーザーを停止する (キューイングのワークロード) チェック ボックスはオフ。
  • 仮想ユーザー ログ ファイル (.log) チェック ボックスはオフ。
  • 仮想ユーザー レポート ファイル (.rpt) チェック ボックスはオン。
  • 仮想ユーザー エラー レポート ファイル (.rpt) チェック ボックスはオン。
  • 時系列データ (.tsd) チェック ボックスはオフ。
親トピック: 負荷テストの実行


仮想ユーザーの計算

ワークロードの設定 ダイアログの ペーシング タブ上で、次のアクションを実行できます。
  • Silk Performer で 最大仮想ユーザー数 を計算
  • Silk Performer で セッション数 [ピーク 1 時間当たり] を計算
  • Silk Performer で 一秒当たりの目標トランザクション数 を計算
  • ペーシングを有効にして独自に指定する 目標セッション時間 を設定
ヒント: ワークロードの設定 グリッドでは、キーボード ショートカット Ctrl + C と Ctrl + V を使用たり、値を右クリックしてコンテキスト メニューのメニュー項目を使用して、値をコピー＆ペーストできます。

セッション ペーシング

セッション は、dcluser セクションでユーザーに対して定義されたトランザクションのグループです。次のサンプルでは、セッションは 4 つのトランザクションで構成されています。begin および end トランザクションは、セッションの一部ではないことにご注意ください。セッション時間 は、正規のトランザクションの実行に費やされる時間 (思考時間を含む) です。

// Workload Section
dcluser
  user
    VirtUser
  transactions
    TInit      : begin;
    TLogin     : 1;
    TAddToCart : 2;
    TCheckout  : 1;
    TEnd       : end;

ベースライン セッション時間 には、ベースライン テストでセッションを実行するために必要な時間が表示されます。

セッション ペーシング では、セッションの終わりに新しいセッションが始まる前に、ペーシング待機時間と呼ばれる、追加の待機時間を Silk Performer が加えます。セッション ペーシングを使うと、目標セッション時間 と呼ばれる指定した固定長のセッションの長さに到達させることができます。

通常、仮想ユーザーの数は、ワークロードの調整 ワークフロー ステップで既に定義されています。この表には、仮想ユーザーが 1 時間の間に実行できるセッションの数を表示できます。これは、セッション数 [ピーク 1 時間当たり] の値が反映されたものとなります。この値を調整すると、Silk Performer によって、セッション数に達するために必要な仮想ユーザーの数が計算されます。また、仮想ユーザーの数を調整すると、Silk Performer によって、仮想ユーザーが実行できるセッションの数が再び計算されます。

「セッション数 [ピーク 1 時間当たり]」の値の計算方法

  • ベースラインが設定されていることを確認してください。「ベースラインを検索する」を参照してください。
  • ある数値に到達するのに必要な仮想ユーザーの数を次に基づいて計算します で、1 時間当たりのセッション数 を選択します。
  • ベースライン セッション時間 [s] 列には、ベースラインの各ユーザー タイプのセッション時間が含まれます。
  • セッション数 [ピーク 1 時間当たり] は、各ユーザー タイプに対して計算されます。

以下に、Silk Performer がどのように値を計算するかについての例を示します。ベースライン テストが 100 秒間実行され、10 仮想ユーザーを設定した場合、これら 10 仮想ユーザーは 1 時間以内に約 360 セッションを実行できます (10 x 3600 秒 / 100 秒)。

Session Per Peak Hour = (Virtual Users x 3600 seconds) / Baseline Session Time

独自に指定する「目標セッション時間」の設定方法

上で概説したように、Silk Performer はベースライン セッション時間を使用して、セッション数 [ピーク 1 時間当たり] と最大仮想ユーザー数を計算します。与えられたベースライン セッション時間を使用せずに、ユーザー タイプのセッションに別の時間を指定したい場合、ペーシング待機時間を設定することで独自の 目標セッション時間 を設定できます。

「セッション ペーシング」の設定方法

  • ある 1 時間当たりのセッション数に到達するのに必要な仮想ユーザー数を計算する場合は、1 時間当たりのセッション数 を選択します。
  • ベースラインが既に設定されている場合、ベースライン セッション時間 [s] 列には、ベースラインの各ユーザー タイプのセッション時間の値が含まれます。以降のステップでの入力値は、ベースラインに対して検証されます。
  • ペーシング 列で、... をクリックして ペーシングの設定 ダイアログを開きます。
  • 待機時間の挿入 をクリックします。
  • 相対的な ペーシング待機時間 または絶対的な 目標セッション時間 を選択し、図の下にあるフィールドに値を指定します。
  • OK をクリックします。目標セッション時間 が表に表示され、最大仮想ユーザー数 の値が調整されます。帯域幅 の値は、ベースラインが設定されている場合は更新されます。

「思考時間の適用」の設定方法

  • ある 1 時間当たりのセッション数に到達するのに必要な仮想ユーザー数を計算する場合は、1 時間当たりのセッション数 を選択します。
  • ベースラインが既に設定されている場合、ベースライン セッション時間 [s] 列には、ベースラインの各ユーザー タイプのセッション時間の値が含まれます。以降のステップでの入力値は、ベースラインに対して検証されます。
  • ペーシング 列で、... をクリックして ペーシングの設定 ダイアログを開きます。
  • 思考時間の適用 をクリックします。
  • 静的 または 動的 を選択します。
    • 静的：目標セッション時間に達するよう、スクリプトの思考時間が定数の静的係数によって乗算されます。
    • 動的：目標セッション時間に達するよう、スクリプトの思考時間が各セッションの実行後に再度計算された動的係数によって乗算されます。
  • 目標セッション時間 を定義して、OK をクリックします。目標セッション時間 が表に表示され、最大仮想ユーザー数 の値が調整されます。帯域幅 は、ベースラインが設定されている場合は更新されます。

トランザクション ペーシング

セッション ペーシング がセッションの終わりにペーシング待機時間を追加する一方で、トランザクション ペーシング は、各個々のトランザクションの終わりにiペーシング待機時間を追加します。

「一秒当たりの目標トランザクション数」の計算方法

  • ある 1 秒当たりのトランザクション数に到達するのに必要な仮想ユーザー数を計算する場合は、1 秒当たりのトランザクション数 を選択します。
  • ベースラインが既に設定されている場合、平均トランザクション時間 [s] 列には、ベースラインの各ユーザー タイプの平均トランザクション時間の値が含まれます。
  • 一秒当たりの目標トランザクション数 列は、各ユーザー タイプの行に対して計算されます。

独自に指定する「一秒当たりの目標トランザクション数」の設定方法

  • ある 1 秒当たりのトランザクション数に到達するのに必要な仮想ユーザー数を計算する場合は、1 秒当たりのトランザクション数 を選択します。
  • ベースラインが既に設定されている場合、平均トランザクション時間 [s] 列には、ベースラインの各ユーザー タイプのトランザクション時間の値が含まれます。
  • ペーシング 列で、... をクリックして ペーシングの設定 ダイアログを開きます。
  • 待機時間の挿入 をクリックします。
  • 相対的な ペーシング待機時間 または絶対的な 平均目標トランザクション時間 を選択し、図の下にあるフィールドに値を指定します。
  • OK をクリックします。目標セッション時間 が表に表示され、最大仮想ユーザー数 の値が調整されます。帯域幅 は、ベースラインが設定されている場合は更新されます。
親トピック: 負荷テストの実行


ペーシング

一般的に使用される負荷テスト モデルは、サーバー システムにすでにどのような負荷がかかっているかに関わらずトランザクション レートを一定に保ちます。Silk Performer では、トランザクション レートまたはセッション レートを基にしてワークロードを定義でき、負荷が高まったためにレスポンス時間が遅くなった場合でさえ、Silk Performer は一定に保とうとします。この結果、サーバー レスポンス時間が遅くなると、Silk Performer は思考時間またはペーシング待機時間を自動的に減らして、セッション時間を一定に保とうとします。

トランザクション レートとセッション レートを定義したレベルに保つために、Silk Performer は 2 つの方法を提供します。

  • 思考時間の適用： あるセッション時間に到達するように、スクリプトの思考時間を変更します。このオプションは、仮想ユーザー スクリプトに最低 1 つの ThinkTime() 関数呼び出しが含まれている場合にのみ適用されます。
  • ペーシング待機時間： あるトランザクション レートまたはセッション レートに到達するように、トランザクションまたはセッションが完了した後に、仮想ユーザーがアイドルになる時間です。

ペーシング オプションを返納するには、ワークフロー バーの テストの実行 をクリックし、ペーシング タブをクリックします。

ペーシングの設定 ダイアログを開くには、ペーシング 列の ... をクリックします。

ペーシングを設定するために、いくつかのオプションがあります。

  • 思考時間の適用：このオプションをクリックすると、目標セッション時間 を決定できます。思考時間は、指定した目標セッション時間に一致するように自動的に調整されます。静的 か 動的 のいずれかを選択できます。思考時間の適用を期待通り動作させるためには、仮想ユーザー スクリプトに最低 1 つの ThinkTime() 関数呼び出しが必要です。
  • 待機時間の挿入：ペーシング待機時間 または 目標セッション時間 のいずれかを指定します。ペーシング待機時間を指定すると、トランザクションの実行時間に追加されます。実行時間とペーシング待機時間の合計が目標セッション時間になります。目標セッション時間を指定すると、ペーシング待機時間は自動的に決定されます。入力値をランダム化するよう設定することもできます。

BDL スクリプトでペーシング待機時間を直接設定するには、BDL 関数 SetPacingTime() および GetPacingTime() を使用します。

Silk Performer は、次のワークロード モデルに対してペーシングを提供します。
  • 増加
  • 定常状態
  • 終日
  • 動的
親トピック: 負荷テストの実行
関連資料
SetPacingTime Function
GetPacingTime Function


負荷テストを監視する

Silk Performer の 負荷テスト実行中に、詳細なリアルタイム情報を利用できます。 クライアント側、サーバー側の両方のアクティビティの報告がグラフィック表示とフルテキストで行われるので、テストの進捗状況をその推移に従って直観的に監視できます。

テストを行うワークベンチから直接、そのテスト中のエージェント コンピュータと仮想ユーザーの総合的な概要情報を参照できます。 表示する情報の詳細レベルは、テスト中のすべてのエージェント コンピュータの進捗状況を概観するレベルから、各仮想ユーザーによって実行されるトランザクションの詳細を網羅して表示するレベルに至るまで制御できます。 各エージェントと各ユーザーの進捗情報は、複数のカテゴリに分けられています。 ユーザーごとのランタイム情報には、トランザクション、タイマ、関数、エラーに関する色分けされた見出し (カスタマイズ可能) が含まれています。

また、ターゲット サーバーのパフォーマンスのリアルタイム監視は、グラフィック形式で利用できます。 現在広く使用されているすべてのオペレーティング システムで動作する各種の Web サーバー、アプリケーション サーバー、およびデータベース サーバーからの最も関連のあるパフォーマンス関連情報がグラフで表示されます。 同時に複数のグラフを表示することもできます。これらのグラフを並べて、最も関連のあるものを比較し、対比させることができます。 メニュー ツリー エディタを利用すると、任意のデータソースから得られる要素をグラフ上で組み合わせることができます。 クライアント アプリケーションから得られるレスポンス時間その他のパフォーマンス情報は、サーバーからのパフォーマンス データと同じグラフに表示できます。 この機能によって、直接ビジュアルな比較が可能になり、サーバーの問題点がクライアントの動作に与える影響を特定することができます。

  • 自動監視
    自動的に監視を開始する が Silk Performer プロファイルで有効な場合の機能について説明します。
  • 負荷テスト中にすべてのエージェント コンピュータを監視する
    すべてのエージェントのパフォーマンス情報を表示します。
  • 負荷テスト中に特定のエージェント コンピュータを監視する
    特定のエージェントのパフォーマンスを監視するのに役立つ情報を示します。
  • 負荷テスト中に特定の仮想ユーザーを監視する
    選択した仮想ユーザーに関する詳細なランタイム情報を表示します。
  • サーバー パフォーマンスの監視にグラフを使用する
    サーバー パフォーマンスのリアルタイムで色分けされたグラフを生成および表示できます。
親トピック: 負荷テストの実行


自動監視

負荷テストの開始時に Silk Performer プロファイルで 自動的に監視を開始する が有効になっている場合、Silk Performer は、プロファイルに割り当てられている監視テンプレートを使って Performance Explorer を起動します。

すべての監視出力が、生成された TSD ファイルの書き込みと保存を負荷テスト ディレクトリに対して開始します。これらの監視ファイルの書き込みは、負荷テストが完了すると自動的に停止します。

生成される TSD ファイルの名前は、r@NAMEOFMONITOR@STARTTIME.tsd という形式になります。ここで、NAMEOFMONITOR は監視レポートの表題です。負荷テストを実行した後は、監視出力ごとに TSD ファイルがワークスペースに定義されています。

親トピック: 負荷テストを監視する


負荷テスト中にすべてのエージェント コンピュータを監視する

監視 ウィンドウを使用して、負荷テスト実行中の進捗状況を表示します。 このウィンドウの上部には、エージェント コンピュータとユーザー グループの進捗情報が表示されます。

数多くの情報オプションの中から、次の情報を参照できます。

  • 特定のエージェントのステータス
  • エージェント上で完了したテストの割合
  • 実行されたトランザクション数
親トピック: 負荷テストを監視する


負荷テスト中に特定のエージェント コンピュータを監視する

監視 ウィンドウの上部で、監視対象の特定のエージェントを選択します。

選択したエージェント上で実行中の仮想ユーザーについて、以下の情報が 監視 ウィンドウの下部に表示されます。

  • ステータス
  • 現在のトランザクション名
  • 完了した作業の割合
  • 実行されたトランザクション数
親トピック: 負荷テストを監視する


負荷テスト中に特定の仮想ユーザーを監視する

監視 ウィンドウの下部で、監視対象の仮想ユーザーを右クリックし、[仮想ユーザー名] の出力を表示 を選択します。
Silk Performer は 仮想ユーザー ウィンドウに、選択したユーザーに関する詳細なランタイム情報 (そのユーザーが実行したトランザクションと関数、そのユーザーがサーバーとの間で送受信したデータなど) を表示します。
ヒント: 仮想ユーザー領域を右クリックして 列の選択 を選択すると、表示する列を選択できます。
親トピック: 負荷テストを監視する


サーバー パフォーマンスの監視にグラフを使用する

  1. ワークフロー バーの ベースラインの確認 をクリックします。 ワークフロー - ベースラインの確認 ダイアログ ボックスが開きます。
  2. 監視オプションの定義 をクリックして、オンライン パフォーマンス データを受信するための設定を行います。 プロファイル - [プロファイル名] - 結果 ダイアログ ボックスが開きます。
  3. プロファイル - [プロファイル名] - 結果 ダイアログ ボックスで、負荷テストの実行中に 自動的に監視を開始する チェック ボックスをオンにし、以下のオプションのいずれかを選択します。
    • デフォルト監視テンプレートを使用する オプション ボタンをクリックします。
    • カスタム監視テンプレートを使用する オプション ボタンをクリックして、カスタム監視テンプレートを作成します。
  4. カスタム監視テンプレートの編集 をクリックします。 Performance Explorer が表示されます。
  5. 現在使用中のすべての監視ウィンドウを閉じます。
  6. Performance Explorer ワークフロー バーの サーバーの監視 をクリックします。 または、メニュー バーから 結果 > サーバーの監視 を選択します。

    データ ソース ウィザード/データ ソースの選択 ダイアログ ボックスが開きます。

  7. 次のいずれか 1 つのステップを行います：
    • サーバーが提供するデータ ソースがわかっている場合、定義済みのデータ ソースから選択する オプション ボタンをクリックして、一覧からあらかじめ定義されているデータ ソースを選択します。
    • サーバーが提供するデータ ソースがはっきりしない場合、データ ソースを検出させる オプション ボタンをクリックして、Performance Explorer がサーバーをスキャンして、利用可能なデータ ソースを検出します。
  8. 次へ をクリックします。 メニュー ツリーで、サーバーとアプリケーションが実行されているオペレーティング システムに対応するフォルダを展開します。
  9. 表示されたリストから、監視するサーバー アプリケーションを選択します。 たとえば、オペレーティング システムを監視するには、System を選択します。
  10. 次へ をクリックします。 接続パラメータ ダイアログ ボックスが開きます。
  11. 接続パラメータ 領域で、該当するサーバー システムのホスト名または IP アドレス、ポート番号、その他のデータなど、データ ソースへの接続に必要な接続パラメータを指定します。 指定するデータは、監視対象のコンピュータで稼働しているオペレーティング システムによって異なります。
  12. 次へ をクリックします。 表示する測定値の選択 ダイアログ ボックスが開きます。
  13. メニュー ツリーを展開して、監視する要素を選択します。
  14. 終了 をクリックします。 監視グラフには、指定した要素のサーバー パフォーマンスがリアルタイムで色分けされて表示されます。 グラフの下には、グラフに含まれている要素のリスト、色分け表示、および各要素のパフォーマンス情報が表示されます。
  • 複数のサーバーのパフォーマンスを監視する
    複数のサーバーのサーバー パフォーマンスをリアルタイムに色分けして表示します。
  • サーバー パフォーマンスの監視にレポートを使用する
    監視した結果を配布可能なレポートにするには、グラフで選択されているものと同じパフォーマンス要素を含む監視レポートを作成します。
親トピック: 負荷テストを監視する
関連タスク
複数のサーバーのパフォーマンスを監視する
SNMP を介してサーバーのパフォーマンスを監視する


複数のサーバーのパフォーマンスを監視する

監視対象のサーバーごとに、グラフを使用してサーバー パフォーマンスを監視するには、次の手順に従います。 サーバーごとに個別のグラフが表示されます。

  1. 表示や比較がしやすいように、グラフをサイズ変更したり移動します。
  2. 1 つのグラフで複数のサーバーの要素を監視するには、メニュー ツリーで該当する要素を見つけて、それらを選択したグラフにドラッグします。
親トピック: サーバー パフォーマンスの監視にグラフを使用する


サーバー パフォーマンスの監視にレポートを使用する

グラフを使用してサーバー パフォーマンスを監視するための手順をすべて実行します。

  1. Performance Explorer メニュー バーから 監視 > 監視レポートの複製 を選択します。 監視レポートには、グラフで選択したパフォーマンス要素が表示されます。 このレポートでは、監視情報は表形式で表示されます。
  2. 結果の検討のため、監視レポートを負荷テストの結果と一緒に保存するには、Performance Explorer メニュー バーから 監視 > 監視データの書き出し を選択します。
  • サーバー監視データを保存する
    特定の期間のサーバー監視データをファイルに保存します。
親トピック: サーバー パフォーマンスの監視にグラフを使用する


サーバー監視データを保存する

監視出力を作成し、そのレポートに関連するパフォーマンス要素を取り込みます。
注: サーバー監視データは、監視出力からは保存できますが、監視グラフからは保存できません。
  1. Performance Explorer の リアルタイム監視 タブの 新規 グループで、監視出力 をクリックします。 レポート ダイアログ ボックスの 監視情報 領域の ファイル セクションに、ファイル名が表示されます。この監視データは、時系列データ (.tsd) ファイルに保存されます。
  2. データをグラフに表示するには、リアルタイム監視 タブの 新規 グループで、監視グラフ をクリックします。 新しい監視グラフが表示されます。
  3. 該当するパフォーマンス要素を監視出力からグラフにドラッグします。 そのデータがグラフ形式で表示されます。
親トピック: サーバー パフォーマンスの監視にレポートを使用する


コマンド ラインから Silk Performer を起動する

コマンドの文法

マンドライン インターフェイスから直接、Silk Performer 負荷テストを実行できます。いくつかの負荷テストを連続して実行するバッチ ファイルを作成する場合、特に有用です。

コマンド ラインから Silk Performer を起動するには、次の構文を使用します。

performer [project file [/Automation [refresh rate] [/WL:workloadname] [/StartMonitor]] [/Resultsdir:directory]]

いくつかのパラメータを指定したコマンドのサンプルを以下に示します。

performer "<my documents>\Silk Performer <version>\Projects\AllDayWorkload\AllDayWorkload.ltp" /Automation 5 /WL:AllDayWorkload10
注: プロジェクト パス内のファイルまたはフォルダにスペースが含まれている場合は、プロジェクト パスを引用符 (") で囲みます。
注: Silk Performer は、コマンド ライン コマンドの実行中にエラー (プロジェクト パスのスペルミス、スクリプト エラー、ワークロードの記述が指定プロジェクト ファイルにない、など) が発生した場合、直ちに終了します。エラーは、オペレーティング システムのイベント ビューアで見つけることができます。

コマンド ライン パラメータ

パラメータ | 説明
project file | 実行する負荷テストを定義したプロジェクト ファイルの名前。
/Automation | 指定されたプロジェクト ファイルで定義されている負荷テストを自動的に開始します。このパラメータを省略した場合、Silk Performer は、指定されたプロジェクトを開きます。
refresh rate | 監視 ウィンドウの更新頻度 (秒)。このパラメータを省略すると、更新は行われません。
/WL:workloadname | 指定されたプロジェクト ファイル内のワークロードの名前。ワークロードを指定すると、それがプロジェクト ファイル内のアクティブ ワークロードに設定されます。
/StartMonitor | テストを実行したときに、Performance Explorer の監視機能を開始します。
/SOA | Silk Performer SOA Workbench を起動します。
/Vision | Silk Performer Monitor Workbench として起動するように指定します。
/eCatt | Silk Performer SAPGUI eCatt Workbench として起動するように指定します。
/Abort | テストの実行を中止します。
/? or -? | Silk Performer コマンド ライン インターフェイスについてのヘルプを表示します。
/Resultsdir:directory | 負荷テストの結果が格納されるディレクトリを指定します。ディレクトリ パスは、絶対パスにすることも、プロジェクト ファイルに対する相対パスにすることもできます。
/ImportStAsset:asset file?project name | Silk Test 資産を Silk Performer にインポートします。Asset file は資産への絶対パスです。Project name は新しいプロジェクトの名前です。この値は省略可能です。省略した場合は、デフォルトのプロジェクト名が使用されます。
親トピック: 負荷テストの実行
親トピック: Silk Performer の CI 環境への統合


テスト結果の検討

通常、Silk Performer 負荷テスト実行の最後のステップは、テスト結果を表示して分析し、テスト対象のアプリケーションおよびサーバーのパフォーマンスを評価することです。

  • 結果の概要
    結果 メニュー ツリーに表示されるアイテムについて説明します。
  • Silk Central インテグレーション
    Silk Performer データと Silk Central とのリンク方法を説明します。
  • 結果を検討する
    テスト結果の表示、レポート、および分析に利用できるアプローチについて説明します。
  • 負荷時の検証
    TrueLog On Error を使用して、負荷時のみに発生するエラーを特定する方法について説明します。
  • Performance Explorer
    Performance Explorer の概要について説明します。
  • レポート
    Silk Performer 、Performance Explorer、および Silk Central で利用可能なレポートの概要について説明します。
  • 生測定値データの収集
    生測定値データの収集を使用するとき、収集がどのように機能するかの詳細、および生測定値データ ファイルが生成される場所について説明します。
親トピック: 負荷テストの管理
関連タスク
Silk Test の結果を検討する


結果の概要

GUI の左下部分にある 結果 タブには、テスト結果に関するすべてのコントロールがあります。 結果 タブを選択すると、TryScript 実行、負荷テスト結果、および Silk Central の結果 (Silk Performer プロジェクトが Silk Central テスト定義にリンクされている場合) など、現在アクティブなプロジェクトのすべてのテスト結果がメニュー ツリーで表示されます。

結果 メニュー ツリーでテストにマウスを移動させると、日付と時刻、 選択したワークロード モデル、エージェント、仮想ユーザー、およびエラー情報など、テストの実行の要約を表示します。

テスト実行に対して設定したログのオプションによって、結果 メニュー ツリーには次のアイテムが表示されます。

  • ベースライン レポート
  • 時系列
  • TrueLog ファイル (各仮想ユーザーの TrueLog ファイルを含む)
  • ユーザーの結果 (仮想ユーザーごとのすべての結果ファイルを一覧するユーザー プロファイルを含む)
  • Silk Central (プロジェクトが Silk Central テスト定義にリンクされている場合、Silk Central から得た結果を表示)
  • 結果ファイルを開く
    テストのステータスを確認するには、テスト結果を表示します。
  • ローカルで保存されている結果ファイルを削除する
    不要になった結果ファイルを削除します。
  • 表示された結果を更新する
    テストが期待どおり実行されたかを判断するため、最新の結果を表示します。
親トピック: テスト結果の検討


結果ファイルを開く

結果ファイルを開くには、次のいずれかの手順を実行します。
  • 結果 メニュー ツリーのファイルをダブルクリックします。
  • 結果ファイルを右クリックして、開く または 検討 をクリックします。
結果ファイルを開くと、それぞれの表示機能が起動されます。
注: 結果 メニュー ツリーで親ノードのアイコンに赤い X 印が付いている場合は、テスト実行中にエラーが発生しています。 (親ノードまたは結果ファイルの) アイコンに青い感嘆符 (!) が付いている場合は、エラー ログ ファイルに情報メッセージ、警告、またはエラーが含まれています。
親トピック: 結果の概要
関連概念
結果を検討する
関連タスク
表示された結果を更新する


ローカルで保存されている結果ファイルを削除する

最上位の結果ノードを右クリックして、結果の削除 をクリックします。
注: この操作は、Silk Central に保存されている結果には影響しません。
親トピック: 結果の概要


表示された結果を更新する

最上位の結果ノードを右クリックし、結果の更新 を選択します。 Silk Performer の外で変更されている場合には、メニュー ツリーに表示される結果は更新されません。
注: 結果 メニュー ツリーで親ノードのアイコンに赤い X 印が付いている場合は、テスト実行中にエラーが発生しています。 (親ノードまたは結果ファイルの) アイコンに青い感嘆符 (!) が付いている場合は、エラー ログ ファイルに情報メッセージ、警告、またはエラーが含まれています。
親トピック: 結果の概要
関連概念
結果を検討する
関連タスク
結果ファイルを開く


Silk Central インテグレーション

Silk Performer は、Silk Central と緊密に統合されています。 Silk Performer プロジェクトが Silk Central とリンクされていると、テスト結果を Silk Central に集めて格納することができ、その結果には Silk Central と Silk Performer の両方からアクセスできます。

Silk Central の結果を表示するには、プロジェクトは Silk Central テスト定義にリンクされていることが必要です。 プロジェクトが Silk Central にリンクされていると、結果 メニュー ツリーで Silk Central の結果を追加するには、ここをクリックします をクリックすることにより、中央に格納されている結果を表示できます。

また、上位レベルの結果ノードを右クリックし、結果を Silk Centralにアップロード を選択すると、結果を Silk Central にアップロードできます。

親トピック: テスト結果の検討
関連概念
Silk Central インテグレーション
Silk Central のパフォーマンス傾向レポート
関連タスク
テスト結果を Silk Central からダウンロードする
テスト結果を Silk Central にアップロードする


結果を検討する

Silk Performer にはテスト結果の表示、レポート、および分析に利用できるアプローチがいくつか用意されています。 定義しておいた測定をテスト中に行い、さまざまなグラフィック形式および表形式で表示することができます。 オプションは、以下のとおりです。
  • Performance Explorer：テスト結果を表示するための主要なツールです。 グラフィック機能を幅広く備えており、いくつでも必要な数の要素を持つ結果を、ユーザー定義によるグラフで表示します。 異なるテストの結果を比較することができます。 サーバー監視のための幅広い機能があります。 ユーザー タイプ統計値を時系列テスト結果情報と組み合わせた包括的な HTML ベースの概要レポートも利用できます。
  • TrueLog On Error：Silk Performer は、さまざまなアプリケーションの種類について、負荷時の視覚的検証機能を提供します。 負荷テスト中に、詳細なコンテンツ検証チェックと完全なエラーの詳細分析と組み合わせることができます。
  • 仮想ユーザー レポート ファイル：有効になっていると、これらのファイルにはユーザーごとのシミュレーション結果が格納されます。 各ユーザーの詳細な測定値が、表形式で表示されます。
  • 仮想ユーザー出力ファイル：有効になっていると、これらのファイルにはテスト スクリプトに使用される write 文の出力が格納されます。
  • ベースライン レポート：XML/XSL ベースの詳細なレポートであり、要約テーブル、トランザクション レスポンス時間の詳細、アクセスされたすべての HTML ページのタイマ、Web フォーム、発生したエラーなどが提供されます。 この情報はベースライン テストに関係のあるすべてのユーザー タイプで利用できます。
  • Silk Central レポート：Silk Performer プロジェクトは、Silk Central (Silk Central) テスト計画に統合され、Silk Central から直接実行されます。 これにより、強力なテスト結果分析とレポート作成が可能になります。 Silk Central レポート作成の詳細については、『 Silk Central ヘルプ』を参照してください。
  • 負荷テストの要約
    負荷テストの要約 ページで、前の負荷テストの結果を解析することができます。
親トピック: テスト結果の検討
関連概念
結果の概要
Silk Central インテグレーション


負荷時の検証

Silk Performer は、Web アプリケーションの種類について、負荷時の視覚的検証機能を提供します。 負荷テスト中に、詳細なコンテンツ検証チェックと完全なエラー詳細分析とを組み合わせることができます。 Silk Performer 検証チェックは、パフォーマンスを大きく損なうことなく、すべての仮想ユーザーから行うことができます。

Silk Performer の革新的 TrueLog 技術により、負荷テストに参加するすべての仮想ユーザーのエラーについて、詳細なデータを収集することができます。 負荷テスト ツールとは切り離された従来の試験用クライアントでは、実際に検証を行うユーザーに対して発生するコンテンツ検証エラーの検出しかできません。 機能テスト ツールでは、限られた数のユーザーしか同時に処理することができないため、そのような機能テストでカバーできるのは Web アプリケーションにアクセスする全ユーザーのごく一部でしかありません。 そのような試験用クライアントでは、その小さなサブセットには属さないユーザーで発生する検証エラーを検出することはできません。 Silk Performer では、負荷テスト ツールを使って行えるテストの種類が定義し直されました。

Silk Performer TrueLog 技術を使用すると、アプリケーションに重い負荷がかかっている場合に、ユーザーのサブセットにのみ通常発生するエラーを見つけ出すことができます。 大半のアプリケーションでは、このような種類の負荷は、アプリケーションが実際に配置されてから経験することになる場合がほとんどです。 典型的なエラーとしては、Web ページのテキストの誤り、計算値や表示値の誤り、「サーブレット エラー」や「サーバーがビジー状態です」 といったアプリケーション関連のメッセージなどがあります。 これらはシステムレベルのエラーではなく、Web ページには、ステータス コード「HTTP 200」で表示されるものです。

TrueLog Explorer には、次の機能を使用した、負荷時の Silk Performer 検証機能のビューが備わっています。
  • ビジュアル コンテンツ検証では、検証するコンテンツを視覚的に定義できます。
  • TrueLog On Error 生成と TrueLog On Error 分析の機能により、エラーを視覚的に分析してその根本原因を特定することができます。
  • TrueLog Explorer でエラーを表示する
    生成されるログ ファイルを表示し、アプリケーション サーバーにより引き起こされたエラーの原因を検証します。
親トピック: テスト結果の検討


TrueLog Explorer でエラーを表示する

分析を始める前に、TrueLog on Error ファイルを生成するオプションをセットアップし、エラーが発生するテストを実行します。

根本原因を完全に視覚化して行う解析の基盤として、Silk Performer は TrueLog で発生したエラーの履歴をすべて保存できます。 大規模な負荷テストでも、TrueLog On Error を生成できます。 TrueLog On Error は、考え得るすべての負荷条件化でのアプリケーションのエラー出力の本当の原因を明らかにするのに役立ちます。

  1. 負荷テスト中にエラーが発生した場合、ワークフロー バーの 結果の検討 ボタンをクリックすると、TrueLog の内容を視覚化して表示することができます。 ワークフロー - 結果の検討 ダイアログが開きます。
  2. Silk TrueLog Explorer リンクをクリックします。 TrueLog Explorer が開き、TrueLog のステップ スルー ダイアログ ボックスがアクティブになります。 エラー を選択します。
  3. エラーのオカレンスを 1 つずつたどっていきます。
    ヒント: エラーの履歴を表示するには、メニュー ツリーから 1 つ前の API ノードをクリックします。
親トピック: 負荷時の検証
関連概念
Performance Explorer
関連タスク
時系列データ オプションを設定する
TrueLog のトラフィック キャプチャのオプションを設定する


Performance Explorer

Performance Explorer では、リアルタイム監視を通じて取得した測定値を参照したり、完了した負荷テストの結果を分析できます。さまざまなツールと機能によって、キャプチャしたすべてのデータに対して包括的な分析、レポート、処理を行うことができます。

  • クラウド ベースの地域要約レポート
    地理的な地域全体でクラウド ベース負荷テスト測定値を分析する方法について説明します。
  • 概要レポート テンプレートをプロジェクトに割り当てる
    Silk Performer プロジェクトに対して概要レポート テンプレートを指定します。テンプレートは、HTML 概要レポートを自動または手動で生成する際に使用されます。
親トピック: テスト結果の検討
関連概念
Performance Explorer の概要


クラウド ベースの地域要約レポート

地域要約レポートでは、地理的な地域全体でクラウド ベース負荷テスト測定値が収集されます。 負荷テストでクラウド ベース エージェントが使用される場合、Silk Performer では、クラウド地域ごとに (および、使用される場合はプロジェクト エージェントについて) 地域固有データがキャプチャされます。 地域要約レポートは、ベースライン レポートに類似しています。 地域要約レポート ファイルのファイル拡張子は .rsr で、結果ディレクトリに保存されます。

地域要約結果ノードを表示するには、結果 タブで負荷テストに続く 地域要約レポート ノードが展開されます。

概要レポート (ベースライン レポートに類似) は、Performance Explorer 検討 タブで地域ノードを選択し、概要レポート をクリックすることによって、すべての個々の地域について作成できます。

親トピック: Performance Explorer


概要レポート テンプレートをプロジェクトに割り当てる

Silk Performer プロジェクトに対して概要レポート テンプレートを指定することができます。自動的に生成されるすべての HTML 概要レポートは、このテンプレートを使用し、手動で HTML 概要レポートを作成するときはテンプレートをあらかじめ選択します。

  1. Silk Performer のメニュー ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。 代替方法：設定 > アクティブ プロファイル を選択します。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。

  3. 左側のショートカット リストで、結果 アイコンをクリックします。
  4. 時系列 タブをクリックします。
  5. 概要レポート テンプレート セクションでテンプレートを参照して、開く をクリックします。
  6. OK をクリックします。
注: Performance Explorer のコマンドライン インターフェイスには、Silk Performer プロジェクトで使用する概要レポート テンプレートを割り当てるための /OVT:<テンプレート> コマンドも用意されています。
親トピック: Performance Explorer
親トピック: HTML 概要レポート


レポート

  • 仮想ユーザー レポート ファイル
    仮想ユーザー レポート ファイルの内容について説明します。
  • 仮想ユーザー出力ファイル
    出力ファイルの内容について説明します。
  • Performance Explorer のレポート
    Performance Explorer で利用可能なレポートの概要について説明します。
  • Silk Central のパフォーマンス傾向レポート
    負荷テストの回帰テストに Silk Central を使用すると、ユーザーの各製品ビルドでパフォーマンス傾向を追跡できます。
親トピック: テスト結果の検討


仮想ユーザー レポート ファイル

レポート ファイルには、仮想ユーザーごとのシミュレーション結果が格納されます。 各ユーザーの詳細な測定値が、表形式で表示されます。 ファイルにはいくつものセクションがあり、トランザクション、タイマ、Web ページ タイマ、およびカウンタに関するレポートが含まれているセクションの他、IIOP、Web フォーム、Tuxedo、SQL 結果に関するセクションもあります。

親トピック: レポート
関連概念
仮想ユーザー出力ファイル
関連資料
概要レポート


仮想ユーザー出力ファイル

この出力ファイルには、テスト スクリプトで使用されている write 文の出力が記録されています。 出力ファイルは、特定のユーザーによって write 文が実行された場合にのみ、そのユーザーに対して生成されます。

しかし、出力ファイルの生成によって、負荷テストの時間測定値が変化します。 そのため、これらのファイルはデバッグのためだけに使用し、完全な負荷テストでは絶対に生成しないでください。

親トピック: レポート
関連概念
仮想ユーザー レポート ファイル
関連資料
概要レポート


Performance Explorer のレポート

  • 概要レポート
    概要レポートの内容について説明します。
  • 組み込みの測定値
    測定値の概要と、測定値および測定値グループのリストについて説明します。
親トピック: レポート


概要レポート

概要レポートは、次のセクションで構成されます。

  • 全般情報

  • 要約テーブル
  • ユーザー タイプ
  • カスタム グラフ
  • カスタム テーブル
  • 詳細グラフ

全般情報

全般情報セクションには、管理情報が表形式で表示され、負荷テストの重要な結果がグラフ形式で表示されます。

管理情報には、プロジェクト名、プロジェクトの説明、負荷テスト番号、負荷テストの説明、負荷テストの日付、負荷テストの期間、使用されたエージェント コンピュータの数、および実行していた仮想ユーザーの数が含まれます。

グラフには、アクティブな仮想ユーザーの数、トランザクションのレスポンス時間の測定値、および負荷テスト中に発生したエラーの数が表示されます。 トランザクションのレスポンス時間は、正常に実行されたトランザクション、失敗したトランザクション、および取り消されたトランザクションについて測定されます。

負荷テストを実行するプロジェクトのタイプと関係のある、要約測定値が、追加のグラフに表示されます。 たとえば、Web アプリケーションをテストしている場合は、Web ページのレスポンス時間測定値がグラフに表示されます。

要約テーブル

このセクションには、要約測定値 (すべての仮想ユーザーの測定値の集約値) が表形式で表示されます。 最初のテーブルには、実行されたトランザクションの数や発生したエラーの数などの、全般情報が表示されます。 それ以降のテーブルには、テストしたアプリケーションの種類に関連する要約情報が含まれます。

ユーザー タイプ

このセクションには、ユーザー グループごとに、詳細な測定値が表形式で表示されます。 測定値には、トランザクションのレスポンス時間、個々のタイマ、カウンタ、およびテストしているアプリケーションのタイプ (Web、データベース、CORBA、または TUXEDO) と関係のあるレスポンス時間とスループットの測定値が含まれます。 また、すべてのユーザー グループのエラーおよび警告が、一覧表示されます。

カスタム グラフ

このセクションには、手動で追加したグラフが表示されます。 いつでもこのセクションに、グラフを追加したり、削除できます。 変更をテンプレートとして保存して、すべての要約レポートで表示できます。

カスタム テーブル

このセクションには、手動で追加したテーブルが表示されます。 いつでもこのセクションに、テーブルを追加したり、削除できます。 変更をテンプレートとして保存して、すべての要約レポートで表示できます。

詳細グラフ

このセクションには、レポートに含まれるグラフを拡大したグラフを提供します。 拡大されたグラフにジャンプするには、縮小されたグラフをクリックします。逆に、縮小されたグラフにジャンプするには、拡大されたグラフをクリックします。

親トピック: Performance Explorer のレポート
関連概念
仮想ユーザー レポート ファイル
仮想ユーザー出力ファイル
関連タスク
概要レポートを表示する
概要レポート テンプレートをプロジェクトに割り当てる


組み込みの測定値

測定値は負荷テスト中、または特定の測定ポイントに対する監視セッション中に収集される値をグループ化した最小のエンティティです。測定値は名前と型を持ちます。測定値に関連して測定された一連の値が時系列データ (.tsd) ファイルに格納されます。

測定値にはタイマーとカウンタがあります。タイマーは、レスポンス時間に関するデータを収集し、カウンタは、スループットおよび負荷テスト イベントに関するデータを収集します。

Performance Explorer には大量の測定値がありグループに分類されています。

  • 要約測定値
    グローバル レベルの要約された測定値を示します。
  • トランザクションの測定値
    トランザクション レベルのレスポンス時間データについて説明します。
  • Web フォーム測定値
    Web フォームに関するスクリプト化された測定値について説明します。
  • Web ページ測定値
    Web ページに関するスクリプト化された測定値について説明します。
  • ブラウザ駆動型の測定値
    ブラウザ駆動型テストで使用する測定値について説明します。
  • CORBA 固有の測定値
    負荷テスト スクリプトの中で呼び出される IIOP 操作に関する測定値タイプについて説明します。
  • SQL データベース固有の測定値
    SQL データベースに固有の測定値について説明します。
  • ミドルウェア固有の測定値
    TUXEDO サービス呼び出しに関する測定値について説明します。
  • Citrix 固有の測定値
    Citrix に関する測定値について説明します。
  • カスタム タイマ測定値
    負荷テストスクリプト内に定義されるタイマについて説明します。
  • カスタム カウンタ測定値
    負荷テスト スクリプト内に定義されるカウンタについて説明します。
  • ストリーミングの測定値
    HTTP ライブ ストリーミングに固有の測定値について説明します。
親トピック: Performance Explorer のレポート
親トピック: Performance Explorer21.0


Silk Central のパフォーマンス傾向レポート

負荷テストの回帰テストに Silk Central を使用すると、ユーザーの各製品ビルドでパフォーマンス傾向を追跡できます。 テスト対象アプリケーションのパフォーマンスが向上する方法を決定するために、各ビルドでのカスタム測定値、トランザクション レスポンス時間、ページ時間の変動を監視します。 製品の新機能が開発中であるとき、アプリケーションの予期しないパフォーマンスに対して、迅速に対応できます。

Silk Central で次のパフォーマンス傾向レポートが利用できます。
平均ページ時間傾向レポート
指定した時間の範囲内で、対象テスト定義に対して実行されたすべてのテストの、ページ当たりのページ時間を示します。
平均トランザクション ビジー時間傾向レポート
指定した時間の範囲内で、対象テスト定義に対して実行されたすべてのテストの、トランザクション当たりのトランザクションのビジー時間を示します。
カスタム測定値-傾向レポート
指定した時間の範囲内で、対象テスト定義に対して実行されたすべてのテストの、定義 (複数) 測定値の平均、最小、最大値を示します。
総ページ時間傾向レポート
指定した時間の範囲内で、対象テスト定義に対して実行されたすべてのテストの、すべてのユーザー タイプで集計された、総ページ時間を示します。
総トランザクション ビジー時間傾向レポート
指定した時間の範囲内で、対象テスト定義に対して実行されたすべてのテストの、すべてのユーザー タイプで集計された、総トランザクションのビジー時間を示します。

詳細については、Silk Central のヘルプを参照してください。

親トピック: レポート
関連概念
Silk Central インテグレーション


生測定値データの収集

生測定値データの収集を使用するとき

負荷テストを実行した後に、Performance Explorerの詳細なレポートで結果を分析できます。より詳細なデータが必要な場合や、他のプログラムで収集したデータを処理したい場合、生測定値データを収集するために Silk Performer を使用して、CSV ファイルに格納することができます。たとえば、その後で生測定値データを表計算ソフトにインポートして、独自のグラフを生成することができます。

Silk Performer が生測定値データを収集する方法

Silk Performer は、3 つのステップで生測定値データを収集します。
  1. 生測定値データが u@... ファイルに収集されます (エージェント上).。
  2. 生測定値データが u@... ファイルから i@... ファイルにマージされます (エージェント上)。
  3. 生測定値データが i@... ファイルから m@... ファイルにマージされます (コントローラ上)。

Silk Performer テストを開始すると、Silk Performer コントローラは、指定したエージェントにテストをデプロイします。各エージェントはいくつかの perfRun.exe プロセスを開始し、そのプロセス内でいくつかの仮想ユーザーがテストを実行します。実行中に Silk Performer は、プロセスごとに 1 つの u@... ファイルを作成します。

生測定値データが i@... ファイルにマージされ、u@... ファイルが削除されます。各 i@... ファイルは、1 つの測定値名/測定値タイプの組み合わせの生測定値データを保持します。ファイルは、RawData フォルダに格納されます：Silk Performer <バージョン番号>/Projects/MyProject/RawData.。

一旦 i@... ファイルがコントローラに転送されると、生測定値データは m@... ファイルにマージされます (RawData フォルダ内)。i@... ファイルは、RawData フォルダに残ります。各 m@... ファイルは、すべてのエージェントの生測定値データの 1 つの名前/タイプの組み合わせを保持します。

生測定値データの収集処理のステップ 1 と 2 は、エージェント上で実行され、ステップ 3 は、コントローラ上で実行されます。

ファイル名の意味について

生測定値データ ファイルの完全名は次のようになります。

  • u@rawdata_processid.csv
  • i@name_type@agent.csv
  • m@name_type@controller.csv

データは CSV ファイル (コンマ区切り値ファイル) で格納されるため、表計算ソフトで生測定値データを簡単に処理することができます。u はユーザー (user) ファイルを、i は中間 (intermediate) ファイルを、m はマージ (merged) ファイルを表します。いくつかの i@... ファイルと m@... ファイルの例を示します。:

i@ShopIt+-+Greetings_131@testingserver.csv
i@ShopIt+-+Greetings_132@testingserver.csv
i@SilkPerformer+Test+Site_131@testingserver.csv
i@SilkPerformer+Test+Site_132@testingserver.csv

m@ShopIt+-+Greetings_131@pc-johndoe.csv
m@ShopIt+-+Greetings_132@pc-johndoe.csv
m@SilkPerformer+Test+Site_131@pc-johndoe.csv
m@SilkPerformer+Test+Site_132@pc-johndoe.csv

この例から以下の点に注意が必要です。

  • この例では、u@... ファイルはありません。これはその内容が i@... ファイルにマージされるときに削除されるためです。それらは一時的なファイルでしかありません。
  • 測定値名は、URL エンコードされます (ShopIt+-+Greetings)。
  • 測定値の種類は数値コードによって識別されます。131 は Page time[s] の数値コードで、132 は Document download time[s] の数値コードです。
  • testingserver は、エージェントのマシン名です。
  • pc-johndoe は、コントローラのマシン名です。

生測定値データ ファイルの例

生測定値データが m@... ファイルでどのようになっているか例を示します。

;MeasureName:;ShopIt - Greetings
;MeasureType:;Page time[s]
C;Timestamp;Value;VUName
;1381231408198;46;VUser
;1381231431291;31;VUser
;1381231433032;31;VUser
;1381231434120;16;VUser
;1381231436307;15;VUser
...

CSV ファイルのデータはタイムスタンプでソートされます (Unix タイムスタンプ)。タイムスタンプは、1970 年 1 月 1 日からの経過（ミリ秒）を表します。時間の測定値は秒単位で記録され、ファイル サイズ値はキロバイト単位で記録されます。

  • 生測定値データ収集を有効にする
    生測定値データ収集を プロファイル ダイアログ ボックスで有効化する方法について説明します。
  • 生測定値データのファイル サイズの統計値
    生測定値データのファイルがどの程度大きくなるのか例をいくつか紹介します。
親トピック: テスト結果の検討


生測定値データ収集を有効にする

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストで、結果 アイコンをクリックします。
  4. 測定値 タブをクリックします。
  5. 生測定値の収集 チェック ボックスをオンにします。

特定の測定値の種類や単一の測定値に対して生測定値データ収集を構成するには、BDL 関数 MeasureCollectRawData を使用します。

親トピック: 生測定値データの収集
関連資料
MeasureCollectRawData Function


生測定値データのファイル サイズの統計値

次の表には、指定した設定で負荷テストを実行したときに、生測定値データ ファイルがどの程度大きくなるかの例をいくつか示します。
注: サイズの値は概算値です。
測定値 | 負荷テストの実行時間 | 仮想ユーザー | 生測定値データ ファイルのサイズ
1 秒あたり 1 測定値 | 1 時間 | 100 | 10 MB
3 秒あたり 1 測定値 | 5 時間 | 100 | 150 MB
10 秒ごとに 1 測定値 | 3 時間 | 100 | 3 MB
負荷テスト | 負荷テストの実行時間 | 仮想ユーザー | すべての生測定値データ ファイルのサイズ | エージェント | 結果のパッケージ化とダウンロード時間*
10 ページ (ページごとに 5 測定値)、1 秒当たり 1 ページ | 1 時間 | 100 | 175 MB | 2 | 30 秒
20 ページ (ページごとに 5 測定値)、3 秒ごとに 1 ページ | 5 時間 | 100 | 290 MB | 2 | 45 秒
20 ページ (ページごとに 5 測定値)、3 秒ごとに 1 ページ | 10 時間 | 400 | 2,25 GB | 4 | 3 分 50 秒
20 ページ (ページごとに 5 測定値)、3 秒ごとに 1 ページ | 10 時間 | 4000 | 23 GB | 40 | 7 分 30 秒

* これらのダウンロード時間を収集するために、Silk Performer CloudBurst エージェントと Silk Performer コントローラとの間で 100 Mbps のインターネット接続が使用されました。データには、エージェント上でのデータ処理および圧縮、そしてコントローラへの転送にかかる時間が含まれます。

注: 負荷テストにクラウド エージェントを使用している場合、クラウド エージェントからコントローラへ大きな生測定値データ ファイルを転送するとかなりの時間がかかる可能性があります。
注: ほとんどの負荷テストのシナリオでは、選択した測定値のセットに対してのみ生測定値データを生成すれば十分です。そのためには、BDL 関数 MeasureCollectRawData を使用します。
親トピック: 生測定値データの収集
関連資料
MeasureCollectRawData Function


特定のアプリケーションの種類に対する負荷テスト

Silk Performer は、多様なコンピュータ環境でのテストをサポートします。このセクションでは、AJAX、SAP eCATT、ターミナル エミュレーション、GUI レベルのテストなどに対する Silk Performer のサポートについて説明します。

  • Flex/AMF3 のサポート
    Silk Performer による Flex/AMF3 アプリケーションのテストのサポートについて説明します。ここでは、技術概要、プロジェクトのセットアップ、Java の構成の問題などを取り上げます。
  • サポートされる Web アプリケーション
    Silk Performer を使用して Web アプリケーションをテストする方法について説明します。
  • モバイル デバイスのアプリをテストする
    Silk Performer でモバイル アプリケーションをテストする方法について説明します。
  • レスポンシブ Web デザインのテスト
    レスポンシブ Web デザインとは何か、および負荷テストの観点からの意味について説明します。
  • BMC Remedy IT Service Management のサポート
    ライセンス、TrueLog、データ表現などの BMC Remedy IT Service Management のテストにおける、Silk Performer によるサポートについて説明します。
  • Citrix XenApp のサポート
    Citrix XenApp セッションおよびアプリケーションの仮想化テクノロジにホストされるアプリケーションをテストするための記録と再生のサポートが、Silk Performer では提供されていることについて説明します。
  • .NET のサポート
    Web サービスのテスト、.NET Remoting オブジェクト、NUnit をはじめとする、Silk Performer での .NET サポートについて説明します。
  • GUI レベルのテストのサポート
    GUI レベルのテストがどのように機能するか、いつ使用するのか、そして、GUI レベルのテスト環境を設定する方法について説明します。
  • Jacada のサポート
    Silk Performer による Jacada アプリケーションのテストのサポートについて、プロジェクトのセットアップや Java 構成に関する問題などを説明します。
  • Java のサポート
    Silk Performer による Java のサポートについて、Enterprise JavaBeans (EJB) のテスト、RMI オブジェクト、JUnit などを説明します。
  • OnWeb のメインフレームと Web 間のテストのサポート
    Silk Performer では、メインフレーム システムとやり取りする Micro Focus OnWeb の Web ベースのアプリケーションのテストをサポートしています。
  • Oracle Forms / Oracle Applications のサポート
    ここに概念についての短い説明を入力します (省略可能)。
  • SAP のサポート
    SAP アプリケーションのテストに対する Silk Performer のサポートについて説明します。
  • Siebel のサポート
    Web ブラウザ内で実行する HTML とアプレットで構成されるフロントエンドを利用した Siebel シンクライアント (Web クライアント) インストールのテストを説明します。
  • Microsoft Silverlight のサポート
    Microsoft Silverlight ブラウザ ベース アプリケーションのテスト用のワークフローは、Web ベース アプリケーションに使用されるワークフローと同じであることを説明します。
  • ターミナル エミュレーションのサポート
    ターミナル エミュレーション アプリケーションに対する Silk Performer のサポートについて説明します。これは、Telnet プロトコル ("緑色の画面" のアプリケーション) に基づいてターミナル エミュレータのトラフィックを記録できるようにします。
  • TCP/IP ベース プロトコルのサポート
    このセクションでは、レガシーまたはカスタム TCP/IP ベース プロトコルを使用したアプリケーションに対して負荷テスト スクリプトを開発する方法を説明します。
  • PeopleSoft の負荷テスト
  • HLS のサポート
    HLS とは何か、およびこのプロトコルを使用してメディア ストリームの記録と再生を Silk Performer がサポートする方法について説明します。
親トピック: Silk Performer Workbench 21.0


Flex/AMF3 のサポート

このセクションでは、Silk Performer による Flex/AMF3 アプリケーションのテストのサポートについて説明します。ここでは、技術概要、プロジェクトのセットアップ、Java の構成の問題などを取り上げます。

  • Flex/AMF3 の概要
    Adobe Flex/AMF3 技術について簡単に説明します。
  • Flex/AMF3 プロジェクトのセットアップとテスト
    Silk Performer で Flex/AMF3 アプリケーションのテストを行う際に必要な、プロジェクトのセットアップ、スクリプトの記録、XML コード例などについて説明します。
  • Flex/AMF3 スクリプトについて
    このセクションでは、スクリプト要素や バイナリ AMF の XML 表現など、Flex/AMF3 プロトコルの特性について説明します。
  • Flex/AMF3 スクリプトをカスタマイズする
    TrueLog Explorer を使用して、Flex/AMF3 スクリプトが最適にカスタマイズされることを説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


Flex/AMF3 の概要

AMF3 (Action Message Format version 3) は、Adobe Systems が開発したバイナリ プロトコルです。 主に、Flex アプリケーションによるリモート プロシージャ呼び出しに使われます。

AMF3 は、転送データをできるだけ小さくすることを主目的に設計されています。 そのため、Silk Performer でプロトコルをカスタマイズするのが困難になっています。 AMF3 プロトコルをカスタマイズしやすい、人が読める形にするために、Silk Performer は、スクリプトの記録時に AMF3 トラフィックを XML に変換し、再生時に XML を AMF3 形式に変換して戻します。 つまり、バイナリ AMF3 データを 16 進文字列形式で読む必要がないということです。 逆に、記録されたスクリプトや TrueLog では、XML 形式のデータしか見ることができません。

AMF0 と AMF3 のサポートは緊密に統合されています (実際に AMF3 は AMF0 のメッセージ構造を使用しています)。 AMF3 メッセージはどれも、AMF0 メッセージとして始まります (データ ストリームの最初の 2 バイトでバージョン "3" が指定されていても同じです)。 どこで AMF0 エンコードが終了し、どこで AMF3 エンコードが開始するかは、特別な AMF0 データ タイプ マーカーによって示されます。

Flex について

アドビ システムズ によると、

"Flex は、すべての主要なブラウザ、デスクトップ、オペレーティング システムに一貫して配置できる対話式で表現力の高い Web アプリケーションを構築するための、無償のオープン ソース フレームワークです。 最新の標準規格準拠の言語と、一般的なデザイン パターンをサポートするプログラミング モデルを備えています。 UI のレイアウトと動作の記述には XML ベースの宣言型言語である MXML を使用し、クライアント ロジックの作成には強力なオブジェクト指向プログラミング言語である ActionScript 3 を使用します。 また、Flex には、RIA 作成のための 100 以上の実績ある拡張可能な UI コンポーネントを含むリッチ コンポーネント ライブラリや、対話式の Flex アプリケーション デバッガも用意されています。

Flex で作成したリッチ インターネット アプリケーションは、ユビキタスな Adobe Flash® Player ソフトウェアを使用してブラウザで実行したり、Adobe AIR™ のデスクトップで実行することができます。 このため、Flex アプリケーションは、すべての主要なブラウザやさまざまなオぺレーティング システム上のデスクトップで、環境を越えて一様に実行することができます。 また、オペレーティング システムをまたがった実行環境である Adobe AIR を使用することにより、デスクトップの Flex アプリケーションからローカル データやシステム リソースにアクセスできるようになっています。

生産性に優れた Eclipse™ ベースの開発環境である Adobe Flex Builder 3 と、Flex 開発で使用できる先進のデータ サービスを集めた Adobe LiveCycle Data Services ES を使用することで、アプリケーション開発を加速することができます。 これら 2 つの製品はお求めいただくことができます。"

先進の Flex データ サービスについて

Adobe によると、

"Adobe LiveCycle™ Data Services ES は、RIA でデータを使用するための包括的なデータ有効化機能を備えています。 そのため、RIA は、より高速かつ効率的なオペレーティング モデルで、バックエンド データやビジネス ロジックにアクセスすることができます。 また、LiveCycle Data Services ES を使用すると、LiveCycle ES のビジネス プロセスとドキュメント サービスをシームレスに統合することができます。

BlazeDS は、すべての開発者に Flex のリモーティングとメッセージングの機能を提供する、無償のオープン ソース プロジェクトです。 Flex のリモーティング機能では、ActionScript Message Format (AMF) と呼ばれるシリアル化されたバイナリ データの転送形式が用意されているため、RIA へのデータ転送を高速かつ効率的に行ってアプリケーションの性能を高めることができます。 また、Flex のリモーティング機能を使用することで、開発者は迅速かつ簡単にバックエンドのビジネス ロジックやビジネス データに接続できます。 Flex のメッセージング機能では、リアルタイムのデータ プッシュ配信とパブリッシュ/サブスクライブが追加されており、この 2 つの強力な機能を簡単に実行できるようになりました。 BlazeDS を使用することで、このような強力な Java サーバー統合機能を無償で使い始め、後から LiveCycle Data Services Community Edition へ登録して認定ビルドやサポートを利用したり、LiveCycle Data Services ES Enterprise エディションにアップグレードしてサーバー ソリューションのすべての機能を利用することができます。"

親トピック: Flex/AMF3 のサポート


Flex/AMF3 プロジェクトのセットアップとテスト

前提条件

Adobe または BlazeDS の実装に基づいた Flex/AMF3 アプリケーションのテストには、Java Development Kit 1.5 以降が必要です。

GraniteDS の実装に基づいた Flex/AMF3 アプリケーションのテストには、Java Development Kit 1.6 以降が必要です。

HTTP ヘッダー Content-Type が "application/x-amf" に設定されている HTTP 要求と応答では変換が有効になっています。別の HTTP コンテンツ タイプ ヘッダーを使用してデータを変換する必要がある場合は、以下のステップを参照してください。カスタム コンテンツの変換 - タイプ を参照してください。

Adobe Flex/AMF3 プロジェクトのセットアップ

Adobe または BlazeDS の実装に基づいた Flex/AMF3 アプリケーションのテストを行う場合は、プロジェクトの概要設定 ダイアログで Flex/AMF3 (Adobe) アプリケーション タイプを選択します。

Flex/AMF3 (Adobe) アプリケーションの種類は AMF0 と AMF3 の両方をサポートしています。アプリケーションの種類で Flex/AMF3 (Adobe) を選択すると、プロファイル > Web (プロトコル レベル) 設定 > 変換 タブでいくつかのプロファイル設定が自動的に構成されます。
  • タイプ ドロップ リストで Flex/AMF3 (Adobe) 変換 DLL が選択されます。
  • HTTP リクエストを変換する が有効化されます。
  • HTTP レスポンスを変換する が有効化されます。
  • Java 仮想マシンの使用を有効にする が有効化されます。外部化可能な特性を Flex/AMF3 で正確に変換するには JVM が動作してる必要があるため、この設定は必要です。また、この設定をすることで、変換後の AMF3 トラフィックを、AMF3 の構文タグをあまり含まない読みやすい XML 表現で表示することが可能になります。

GraniteDS Flex/AMF3 プロジェクトのセットアップ

GraniteDS の実装に基づいた Flex/AMF3 アプリケーションのテストを行う場合は、プロジェクトの概要設定 ダイアログで Flex/AMF3 (GraniteDS) アプリケーション タイプを選択します。

Flex/AMF3 (GraniteDS) アプリケーションの種類は AMF0 と AMF3 の両方をサポートしています。アプリケーションの種類で Flex/AMF3 (GraniteDS) を選択すると、プロファイル > Web (プロトコル レベル) 設定 > 変換 タブでいくつかのプロファイル設定が自動的に構成されます。
  • タイプ ドロップ リストで Flex/AMF3 (GraniteDS) 変換 DLL が選択されます。
  • HTTP リクエストを変換する が有効化されます。
  • HTTP レスポンスを変換する が有効化されます。
  • Java 仮想マシンの使用を有効にする が有効化されます。外部化可能な特性を Flex/AMF3 で正確に変換するには JVM が動作してる必要があるため、この設定は必要です。また、この設定をすることで、変換後の AMF3 トラフィックを、AMF3 の構文タグをあまり含まない読みやすい XML 表現で表示することが可能になります。

カスタマイズされた GraniteDS 構成を設定する

テスト対象のアプリケーションがカスタマイズされた GraniteDS 構成を使用する場合は、例外が Recorder ログまたは仮想ユーザー ログ ファイルにある TrueLog Explorer に記録される場合があります。これらの例外は次のようになります。
WebPagePost(WebEngine: 82 - コンテンツ変換エラー, RESPONSE: AMF3：Java ベースの XML を生成できません
(fallback を使用)、理由: org.granite.messaging.amf.io.AMF3SerializationException
...
Caused by: java.lang.RuntimeException: The ActionScript3 class bound to org.granite.example.addressbook.entity.Person
(ie: [RemoteClass(alias="org.granite.example.addressbook.entity.Person")]) implements flash.utils.IExternalizable but
this Java class neither implements java.io.Externalizable nor is in the scope of a configured externalizer
(please fix your granite-config.xml)
...
Silk Performer がこのカスタム構成を認識し、例外を排除するようにするには、次の手順を実行します。
  1. テスト対象アプリケーションのカスタマイズされた構成を見つけます。これらは通常、アプリケーションのクラスパスにある、granite-config.xml または granite-custom-config.xml で見つかります。
  2. プロジェクト メニュー ツリーにある データ ファイル フォルダで、granite-custom-config.xml ファイルを見つけます。
  3. granite-custom-config.xml をダブルクリックし、エディタで開きます。
  4. ステップ 1 で検出したカスタマイズされた構成を granite-custom-config.xml データ ファイルにコピーおよび貼り付けし、変更を保存します。

スクリプトの作成

JVM を使用するには、正しい XML 表現にシリアル化するために必要なクラスを含む Flex/AMF3 アプリケーション固有のカスタム JAR ファイルを構成する必要があります。そのため、Flex/AMF3 スクリプトを作成するときには、スクリプトの作成 ダイアログに JAR ファイルの追加 ボタンが表示されます。このボタンをクリックして、テスト対象のアプリケーションに固有のカスタム JAR ファイルを、必要なだけ参照して 追加 します。追加した JAR ファイルは、プロジェクト ツリーの データ ファイル ノードに表示されます。

これらの必要な JAR ファイル (または個々の .class ファイル) は、テスト対象のサーバーにあります。これらのファイルは、手動で準備し、サーバーから Silk Performer コントローラ マシンへコピーしておく必要があります。ただし、個々の .class ファイルをアーカイブに配置するだけでよい場合もあります。

注: JAR ファイルは、Project フォルダに置く必要があります。

スクリプトの作成 ダイアログで 設定 をクリックすると、現在のユーザー プロファイルの Java 設定 タブが直接表示されます。このタブで、現在選択されているユーザー プロファイルの Java 設定を変更します。

Apache Flex 2、3、4 および BlazeDS 3.2.0 の基本 JAR ファイルは、C:\Program Files(x86)\Silk\Silk Performer <バージョン>\ClassFiles\Adobe-Flex ディレクトリにインストールされます。この JAR ファイルは、クラスパスに自動的に追加されます。新しいバージョンの flex-messaging-common.jar および flex-messaging-core.jar をディレクトリにコピーすると、これらのファイルを手動で更新できます。

マシン上に GraniteDS のすべての JAR ファイルが存在することを確認し、JAR ファイルをクラスパスに追加します。

注: Java 設定 タブで システム クラスパスを使用する を有効にしないでください。システム クラスパスで設定された JAR ファイルによって、手動で構成した JAR ファイルが無効にされることがあります。

キャプチャ ファイルからのスクリプトの生成

ユーザーの操作を記録する際に、Silk Performer Recorder は、記録したセッションのトラフィック全体を含む Silk Performer キャプチャ ファイルというファイルを作成します。保存後に、キャプチャ ファイルは Workbench で開かれ、続いて分析および処理を行うことができます。キャプチャしたトラフィックからスクリプトを生成する前に、記録ルールや他の設定を変更して、スクリプト生成処理に適用させることができます。

エラーが発生した場合、問題の解決 領域にあるボタンをクリックして問題を解決します。その後、スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。

64 ビット OS では、32 ビット版と 64 ビット版の両方の Java をインストールする必要があります。32 ビット版はスクリプトの再生に、64 ビット版はスクリプトの生成に使用します。64 ビット版をインストールできない場合は、つぎのレジストリ キーを 1 に設定して、スクリプトの生成に 32 ビット プロセスを使うことを Silk Performer に強制することができます：HKEY_LOCAL_MACHINE\SOFTWARE\Silk\SilkPerformer\<version>\Force32BitCaptureAnalyzer。
重要: 32 ビットのスクリプト生成プログラムでは、キャプチャ ファイルのサイズが大きい場合に問題が発生する可能性があります。

スクリプトの再生

Java 構成が正しくなければ (たとえば JAR ファイルが見つからないなど)、XML レスポンス (TrueLog Explorer でのみ表示可能) は読みやすい形式で生成されません。また、[仮想ユーザー] 出力ペインに警告またはエラーが書き込まれます。通常、エラーや警告では、その原因がリクエスト (クライアントからサーバーへ) にあるのかレスポンス (サーバーからクライアントへ) にあるのかが示されます。

AMF3 スクリプトのカスタマイズ

AMF3 スクリプト内部の XML オブジェクトの全体構造を変更しないでください。値の解析や検証関数の挿入は構いませんが、AMF3 XML 要素の削除や移動を行うと呼び出しがうまくいかなくなります。また、配列内の要素の順序も変更しないでください。

コード例

コマンド メッセージの例：

<AmfXml version="3">
  <Msg length="203" operation="null" responseURI="/1">
    <StrictArray nrElems="1">
      <Amf3>
        <JavaObject>
          <flex.messaging.messages.CommandMessage>
            <destination></destination>
            <messageId>3EE7E87A-96E6-3272-30F7-FFEF6B9EFE9E</messageId>
            <timestamp>0</timestamp>
            <timeToLive>0</timeToLive>
            <headers>
              <entry>
                <string>DSId</string>
                <string>nil</string>
              </entry>
            </headers>
            <body class="flex.messaging.io.amf.ASObject" serialization="custom">
              <unserializable-parents></unserializable-parents>
              <map>
                <default>
                  <loadFactor>0.75</loadFactor>
                  <threshold>12</threshold>
                </default>
                <int>16</int>
                <int>0</int>
              </map>
              <flex.messaging.io.amf.ASObject>
                <default>
                  <inHashCode>false</inHashCode>
                  <inToString>false</inToString>
                </default>
              </flex.messaging.io.amf.ASObject>
            </body>
            <correlationId></correlationId>
            <operation>5</operation>
          </flex.messaging.messages.CommandMessage>
        </JavaObject>
      </Amf3>
    </StrictArray>
  </Msg>
</AmfXml>

リモーティング メッセージの例：

<?xml version='1.0' encoding='UTF-8'?>
<AmfXml version="3">
  <Msg length="394" operation="null" responseURI="/4">
    <StrictArray nrElems="1">
      <Amf3>
        <JavaObject>
          <flex.messaging.messages.RemotingMessage>
            <clientId class="string">208F18FC-6F0D-9964-3746-76438D73A6A3</clientId>
            <destination>myextservice</destination>
            <messageId>A98651D4-690D-E530-B744-FFEF866937C7</messageId>
            <timestamp>0</timestamp>
            <timeToLive>0</timeToLive>
            <headers>
              <entry>
                <string>DSId</string>
                <string>208F0A62-A409-8994-08AF-223CD381602C</string>
              </entry>
              <entry>
                <string>DSEndpoint</string>
                <string>my-amf</string>
              </entry>
            </headers>
            <operation>setMyExtClass</operation>
            <parameters>
              <com.borland.silkperformer.flex.samples.MyExt>
                <string>string1</string>
                <string>string2</string>
                <string>string3</string>
                <boolean>true</boolean>
                <date>2009-03-13 14:05:01.545 CET</date>
              </com.borland.silkperformer.flex.samples.MyExt>
            </parameters>
          </flex.messaging.messages.RemotingMessage>
        </JavaObject>
      </Amf3>
    </StrictArray>
  </Msg>
</AmfXml>

確認応答メッセージの例：

<?xml version='1.0' encoding='UTF-8'?>
<AmfXml version="3">
  <Msg operation="/5/onResult" responseURI="">
    <Amf3>
      <JavaObject>
        <flex.messaging.messages.AcknowledgeMessage>
          <clientId class="string">208F18FC-6F0D-9964-3746-76438D73A6A3</clientId>
          <messageId>20903C27-020C-F5E6-68E7-C8175449798D</messageId>
          <timestamp>1236954453026</timestamp>
          <timeToLive>0</timeToLive>
          <body class="com.borland.silkperformer.flex.samples.MyExt">
            <string>some string</string>
            <com.borland.silkperformer.flex.samples.MyExt>
              <string>string1</string>
              <string>string2</string>
              <string>string3</string>
              <boolean>true</boolean>
              <date>2009-03-13 14:04:58.14 CET</date>
            </com.borland.silkperformer.flex.samples.MyExt>
            <string>GET</string>
            <string>string</string>
            <boolean>true</boolean>
            <date>2009-03-13 14:05:01.545 CET</date>
          </body>
          <correlationId>C4BD7297-67CB-84AB-0C1A-FFEF8DEB3A97</correlationId>
        </flex.messaging.messages.AcknowledgeMessage>
      </JavaObject>
    </Amf3>
  </Msg>
</AmfXml>
親トピック: Flex/AMF3 のサポート
関連概念
スクリプトをカスタマイズする
キャプチャ ファイルからスクリプトを生成する


Flex/AMF3 スクリプトについて

このセクションでは、スクリプト要素や バイナリ AMF の XML 表現など、Flex/AMF3 プロトコルの特性について説明します。
  • Flex/AMF パケット指向プロトコル
    AMF パケットを HTTP POST リクエストのボディで送信する方法について説明します。
  • バイナリ AMF の XML 表現
    AmfXml ルート ノードとその version 属性について説明します。
  • 日付値
    バイナリ AMF が 64 ビットの浮動小数点値で日付値を表現する方法について説明します。
  • 使用されなくなった AMF3 データ型
    このトピックは下位互換性のためだけにあります。 Silk Performer によるテストでサポートされている使用されなくなった AMF3 データ型を一覧表示します。
親トピック: Flex/AMF3 のサポート


Flex/AMF パケット指向プロトコル

Flex/AMF は、HTTP POST リクエストで渡されるバイナリの パケット指向プロトコルを使用します。 このパケット形式は、Action Message Format (AMF) と呼ばれます。 Flex/AMF アプリケーションは AMF パケットを HTTP POST リクエストのボディに含めてサーバーに送信します。 サーバーは、AMF パケットを HTTP レスポンスのボディに含めて応答します。 HTTP リクエストとレスポンスの両方には、application/x-amf の値を持つ Content-Type HTTP ヘッダーが格納されます。

AMF パケットによって送信される HTTP リクエストは関数 WebPagePost で記録されます。 使用される URL は関数の最初のパラメータとして記録され、送信される AMF パケットは 2 番目のパラメータとして記録されます。

スクリプト、ログ、TrueLog では、Silk Performer はバイナリ AMF パケットを元のバイナリ形式では表示しません。 その代わりに、XML ベースのテキスト形式の表現が使用されます。 このテキスト形式の表現からバイナリ AMF への変換、およびその反対の変換は、Recorder と再生によって透過的に実行されます。 バイナリ AMF は、適切なログ オプションが有効になっている場合に、テキスト形式のログにのみ記載されます。

これには、AMF パケットが読みやすくなり、理解およびカスタマイズも容易になるという利点があります。 また、AMF パケットは TrueLog Explorer の XML ツリー ビューを使用してレンダリングされ、すべての XML データをカスタマイズするのと同様の方法でカスタマイズすることができます。

親トピック: Flex/AMF3 スクリプトについて


バイナリ AMF の XML 表現

バイナリ AMF の Silk Performer XML 表現のルート ノードは、AmfXml と呼ばれます。 その属性は version 属性だけです。これはバイナリ AMF の version フィールドに対応し、AMF プロトコル仕様のバージョンを表します。 値は常に zero (0) です。

AMF パケットはコンテキスト ヘッダーのリストとメッセージのリストで構成されます。 これらのリストにはゼロ要素が含まれる場合があります。

XML の AMF バケットの基本構造は次のとおりです。

<?xml version='1.0' encoding='UTF-8'?>
<AmfXml version=\"0\">
<CtxHeader length="112" mustUnderstand="true"  name="some_name">
     (contents of context header)
  </CtxHeader>
    (more context headers)
  <Msg length="5" operation="some.operation" responseURI="/1">
     (contents of message)
  </Msg>
    (more messages)
</AmfXml>
  • コンテキスト ヘッダー
    コンテキスト ヘッダーの属性について説明します。
  • メッセージ
    Flex/AMF3 メッセージの属性について説明します。
  • 型付き値
    型付き値は、コンテキスト ヘッダーおよびメッセージに含まれる、シリアル化された ActionScript オブジェクトであることを説明します。
  • 入力された値の例
    Flex/AMF3 トランザクションの例と入力された値を使用するレスポンス コードの例を説明します。
親トピック: Flex/AMF3 スクリプトについて


コンテキスト ヘッダー

コンテキスト ヘッダーには属性 length、mustUnderstand、name があります。

length 属性の値によって、バイナリ AMF パケットにおけるこのコンテキスト ヘッダーに使用されるバイト数が指定されます。 これは情報目的のみに使用されます。XML からバイナリ AMF へのトランザクションは正しい値を自動的に計算するため、XML 表現がカスタマイズされている場合は、調整する必要はありません。

コンテキスト ヘッダーのコンテンツは入力した値そのものになります。

親トピック: バイナリ AMF の XML 表現


メッセージ

メッセージには length、operation、responseURI の属性があります。 length 属性の値は、バイナリ AMF パケットでこのメッセージに使用されるバイト数を指定します。 これは情報目的のみに使用されます。XML からバイナリ AMF へのトランザクションは正しい値を自動的に計算するため、XML 表現がカスタマイズされている場合は、調整する必要はありません。

メッセージのコンテンツは入力した値そのものになります。

親トピック: バイナリ AMF の XML 表現


型付き値

型付き値は、シリアル化された ActionScript オブジェクトです。 各コンテンツ ヘッダーおよび各メッセージには、型付き値が必ず 1 つ含まれます。

型付き値には任意の複雑な階層データ構造を設定することができます。

それぞれの型付き値は、type、value および任意の name で構成されます。

型は XML ノード名で指定します。 オプションの名前は、XML ノードの name 属性で指定します。

単純型では、XML ノードのコンテンツで value が指定されます。 コンテナ型では、XML ノードのサブノードで value が指定されます。

一部の型は追加の属性を持つことがあります。

型付き値は、その値が Object、TypedObject、または ECMAArray の直接のサブノードの場合にのみ、name 属性を持ちます。 StrictArray の最上位の型付き値とサブノードは名前属性を持ちません。

次の表は、利用可能な型およびオプションの属性の概要を表しています。

XML ノード名 | 値の場所 | 追加の属性 (名前を除く。上述を参照のこと)
Number | ノードのコンテンツ | ---
Boolean | ノードのコンテンツ | ---
String | ノードのコンテンツ | ---
Object | サブノード | refId (オプション)
Null | 値なし | ---
Undefined | 値なし | ---
Reference | ノードのコンテンツ | ---
ECMAArray | サブノード | nrElems、refId (オプション)
StrictArray | サブノード | nrElems、refId (オプション)
Date | ノードのコンテンツ | ---
LongString | ノードのコンテンツ | ---
Unsupported | 値なし | ---
XMLObject | ノードのコンテンツ | refId (オプション)
TypedObject | サブノード | type、refId (オプション)

型 Object、ECMAArray、StrictArray、XMLObject、TypedObject のオプションの refId 属性を使用すると、それらの値に属性 ID を割り当てることができます。 それらの ID を使用すると、後で Reference ノードで値を参照することができます。

この技術を使用すると、同一オブジェクトの同じ表現が重複することを避けることができます。 このアプローチでは、オブジェクトは一度表示されるだけで、その後は Reference ノードでのみ参照されます。 これにより、循環参照などを含むような複雑なデータ構造を効率的にシリアル化できます。

親トピック: バイナリ AMF の XML 表現


入力された値の例

<Object>
  <Boolean name="coldfusion">true</Boolean>
  <Boolean name="amfheaders">false</Boolean>
  <Boolean name="amf">false</Boolean>
  <Boolean name="httpheaders">false</Boolean>
  <Boolean name="recordset">true</Boolean>
  <Boolean name="error">true</Boolean>
  <Boolean name="trace">true</Boolean>
  <Boolean name="m_debug">true</Boolean>
</Object>

<ECMAArray nrElems="0">
  <Number name="Time">1080677591838</Number>
  <String name="EventType">Information</String>
  <Date name="Date">2004-03-30 20:13:11.838 TZ:-480 [426F73ACED63C000FE20]</Date>
  <String name="Message">CF_DEBUG_DISABLED</String>
  <String name="Source">Server</String>
</ECMAArray>

サンプル アプリケーションに送信されたリクエストの例

<?xml version='1.0' encoding='UTF-8'?>
<AmfXml version="0">
  <CtxHeader length="82" mustUnderstand="false" name="playerInfo">
    <Object>
      <String name="version">WIN 7,0,19,0</String>
      <String name="manufacturer">Macromedia Windows</String>
      <String name="os">Windows 2000</String>
    </Object>
  </CtxHeader>
  <Msg length="13" operation="petmarket.api.catalogservice.getCategories"
       responseURI="/4">
    <StrictArray nrElems="1">
      <String>en_US</String>
    </StrictArray>
  </Msg>
</AmfXml>

サンプル アプリケーションから受信されるリクエストの例

<?xml version='1.0' encoding='UTF-8'?>
<AmfXml version="0">
  <Msg operation="/4/onResult" responseURI="null">
    <TypedObject type="RecordSet">
      <ECMAArray name="serverinfo" nrElems="0">
        <StrictArray name="initialData" nrElems="5">
          <StrictArray nrElems="4">
            <Number>5</Number>
            <String>birds</String>
            <String>birds</String>
            <String>D7A91E</String>
          </StrictArray>
          <StrictArray nrElems="4">
            <Number>4</Number>
            <String>cats</String>
            <String>cats</String>
            <String>FFA672</String>
          </StrictArray>
          <StrictArray nrElems="4">
            <Number>2</Number>
            <String>dogs</String>
            <String>dogs</String>
            <String>FF876F</String>
          </StrictArray>
          <StrictArray nrElems="4">
            <Number>1</Number>
            <String>fish</String>
            <String>fish</String>
            <String>4F9FDB</String>
          </StrictArray>
          <StrictArray nrElems="4">
            <Number>3</Number>
            <String>reptiles</String>
            <String>reptiles</String>
            <String>97D76B</String>
          </StrictArray>
        </StrictArray>
        <Number name="version">1</Number>
        <Number name="totalCount">5</Number>
        <String name="serviceName">PageableResultSet</String>
        <Number name="cursor">1</Number>
        <StrictArray name="columnNames" nrElems="4">
          <String>CATEGORYOID</String>
          <String>CATEGORYDISPLAYNAME</String>
          <String>CATEGORYNAME</String>
          <String>COLOR</String>
        </StrictArray>
        <Null name="id"></Null>
      </ECMAArray>
    </TypedObject>
  </Msg>
</AmfXml>
親トピック: バイナリ AMF の XML 表現


日付値

バイナリ AMF は日付値を 64 ビット浮動小数点値で表現します。これは 1970 年 1 月 1 日の 0 時 (GMT) から経過したミリ秒数で指定します。また、GMT に相対的なタイムゾーン オフセットを分単位で 16 ビットの符号付き整数値で指定します。

日付値は次の形式の XML で表現されます。YYYY-MM-DD HH:MM:SS.mmm TZ:[+-]tzoffset

YYYY | 4 桁の年を表示します
MM | 2 桁の月を表示します (範囲：01 から 12)
DD | 2 桁の日を表示します (範囲：01 から 31)
HH | 2 桁の時間の値を表示します (範囲：00 から 23)
MM | 2 桁の分の値を表示します (範囲：00 から 59)
SS | 2 桁の秒の値を表示します (範囲：00 から 59)
mmm | 3 桁のミリ秒の値を表示します
tzoffset | GMT に対するタイムゾーン オフセットを分単位で表示します

浮動小数点値は最も近いミリ秒に四捨五入されるため、通常は、これらの文字列表現を正確なバイナリ表現に再現することはできません。 そのため、元のバイナリ表現も 16 進数表現で角括弧内に表示されます。 そのような日付値をカスタマイズしない限り、16 進数表現を使用して、XML をバイナリ AMF に戻すことで元の日付値を正確に再現することができます。

日付値をカスタマイズする場合、16 進数表現を削除することも、そのまま残すこともできます。 XML 表現をバイナリ AMF に変換すると、いずれの場合でもその値は無視されます。

日付値の文字列表現の例：2004-03-30·16:38:38.260·TZ:-300·[426F73945F768000FED4]

親トピック: Flex/AMF3 スクリプトについて


使用されなくなった AMF3 データ型

単純データ型

注: このトピックは下位互換性のためのみにあります。 使用されなくなった XML シリアル化のメソッドについて説明します。 Java 設定が正しく構成され、Silk Performer バージョン 2009 以降を使用している場合は、このトピックに目を通す必要はありません。 JVM を使用するには、Flex/AMF3 アプリケーション固有のカスタム JAR ファイル (コードを正しい XML 表現にシリアル化するのに必要なクラスを含む) を構成する必要があります。 これらの JAR ファイルがないときは、このトピックで説明する XML シリアル化のメソッドを変換 DLL が使用します。

次に示すのは、AMF3 に用意されている 4 種類の単純データ型です。 バイナリのプロトコルでは、それらの各データ型が 1 バイトの型マーカーとして送信されます。 各データ型に対応する XML タグは、括弧で囲んで示します。

  • Undefined (<Undefined></Undefined>)
  • Null (<Null></Null>)
  • False (<False></False>)
  • True (<True></True>)

Integer

AMF3 の整数は、可変長 29 ビット unsigned integer としてシリアル化されます。 可変長形式では、整数はできるだけ小さいスペースを必要なだけ使用します。 XML 形式では、整数は次のようになります。
<Integer>123456</Integer>

整数データ型は 1 バイトの型マーカーとしてエンコードされ、その後に最大 4 バイトの可変長形式を使用する、エンコードされた整数が続きます。 データ型として使用する以外に、可変長整数はプロトコル内の他の場所で使用されます。

Double

Double には、IEEE 754 で定義されている 8 バイトの倍精度浮動小数点値が格納されます。 これは、多くのプログラミング言語で Double と呼ばれているデータ型です。 XML 形式では、Double は次のようになります。
<Double>3.14159</Double>

Double は、バイナリ形式では 1 バイトの型マーカーとしてエンコードされ、その後に 8 バイトの Double 値が続きます。

String

文字列は、UTF-8 エンコードされた文字列データを格納するために使用します。 データ型として使用する以外に、文字列はクラスやメンバ名などの文字列データを指定するためにも使用されます。 AMF3 データ ストリーム内のすべての文字列値は、AMF3 または XML データの解析時に通常生成される参照テーブルに格納されます。

文字列は文字列値または文字列参照のどちらかとしてエンコードされます。 文字列参照は、文字列参照テーブルに以前出現した文字列の数字を参照します。 この機能は、1 つの AMF3 データ ストリーム内に同じ文字列値が複数含まれている場合に、スペースを節約するために使用されます。

XML 形式では、文字列は次のようになります。
<String>Hello, World!</String>
文字列参照を使用すると、参照される文字列には (属性という形で) 参照 ID が付きます。文字列参照はこの参照 ID を参照します。
<String val-refId="#0">This string is referenced</String>
<String val-ref="#0"></String>

XML および XMLDocument

AMF3 には、XML データをエンコードするためのデータ型が 2 種類用意されています。XMLDocument は、Flash の既存のデータ型を表します。XML はそれよりも新しい XML 型です。 両方のデータ型では、XML は文字列でエンコードされます。 違いは、これらの文字列は文字列参照テーブルに登録されることです。 XML または XMLDocument はオブジェクト参照テーブルに登録されます。

注: XML 形式では、実際の XML コンテンツは XML エンコードされる必要があります。 Silk Performer の XML パーサーには制限があるため、現在は次のようなデータを表記するために XML CDATA を使用できません。
<Xml>&lt;Data&gt;some data&lt;/Data&gt;</Xml>
<XmlDoc>&lt;Data&gt;some more data&lt;/Data&gt;</XmlDoc>

スペースを節約するため、XML データは文字列として参照されます。

<Xml refId="data">&lt;Data&gt;foobar&lt;/Data&gt;</Xml>
<Xml ref="data"></Xml>

Date

AMF3 では、日付は UTC タイムゾーンで 1970 年 1 月 1 日 00:00 から経過したミリ秒の数値としてエンコードされます。 ミリ秒の数値は Double としてエンコードされます。 日付では参照もサポートされており、各日付はオブジェクト参照テーブルに登録されます。

<Date>2007-02-18 11:29:00.000</Date>
<Date refId="newmillenium">2000-01-01 00:00:00.000</Date>
<Date ref="newmillenium"></Date>

Array

AMF3 の配列は、次の 2 種類のデータ型をカバーします。標準配列では、各要素をインデックス番号により特定します。連想配列では、各要素をキーにより特定します (AMF3 の場合、これは常に文字列です)。 配列のバイナリ表現では、配列の連想部が最初にリストされます。 その後に区切り文字 (空文字列) が続き、最後に配列の内容部分 (標準配列要素) が続きます。

XML 表現では、連想配列の要素には name 属性が付きます。 一般的に、配列は特定の型にバインドされません。つまり、配列内にはいかなるデータ型でも格納でき、それぞれのデータ型が異なってもかまいません。

    <Array>
        <Integer name="number1">23</Integer>
        <Integer name="number2">42</Integer>
        <String name="username">EMEA\johndoe</String>
        <Date>2008-02-17 13:47:13.000</Date>
        <Undefined></Undefined>
    </Array>

上記の例では、name 属性を持つ 3 つの要素 (つまり、これらは配列の連想部に属しています) と、name 要素を持たない 2 つの要素 (つまり、これらは配列の内容部分に属しています) が配列内にあります。

他のデータ型のように、配列の参照およびそれらの要素の参照は可能です。要素名の参照も可能です。

    <Array>
        <String name="foo" name-refId="#0">bar</String>
        <String val-ref="#0"></String>
    </Array>

この例では、2 つの文字列要素を持つ配列があります。 最初の要素の名前は foo で、値は bar です。 2 番目の要素には名前がないですが、文字列参照テーブル ID が #0 である文字列 (文字列 foo) を参照しています。

配列自体はオブジェクト参照テーブルに登録されています。

Object

オブジェクト型は AMF3 で最も強力なデータ型です。 クラスのいくつかのサブタイプについて、知っておく必要があります。 すべてのオブジェクト型で共通していることは、オブジェクト型にはクラス名があるということです。

オブジェクト トレイト

オブジェクトのトレイトはメンバ名に、オブジェクトが動的であるか外部化可能であるかを示す情報を足したものです。

トレイトを持つオブジェクトに含まれるのはメンバ名のリストと、その後に対応するメンバが続きます。 バイナリ形式では、メンバ名は型マーカーのない文字列としてエンコードされます。 メンバ名の数字はフラグの追加フィールドにエンコードされます。このフィールドには、オブジェクトのサブタイプに関する情報も含まれます。 メンバに続いて、動的メンバ (それぞれの前に対応するメンバ名が付きます) のリストがオプションで追加されます。 動的メンバのリストは、動的フラグが True に設定されていて、空文字列で終了する場合にのみ追加されます。

    <Object classname="testclass">
        <Member>strFirstName</Member>
        <Member>strSurname</Member>
        <String>John</String>
        <String>Doe</String>
    </Object>

    <Object classname="testclass2" dynamic="true">
        <Integer name="answer">42</Integer>
    </Object>

オブジェクト参照

オブジェクトはオブジェクト参照テーブルに登録されているため、オブジェクトの直接参照が可能です。

<Object classname="testclass3" dynamic="true" refId="#0">
    <Integer name="answer">42</Integer>
</Object>
<Object ref="#0"></Object>

トレイト参照

サブタイプが オブジェクト トレイトまたは外部化可能トレイトである各オブジェクトは、オブジェクト参照テーブルに追加されずにトレイト参照テーブルに追加されます。 そしてその他のオブジェクトは、それらのオブジェクトのトレイトを参照します。 つまり、そのようなオブジェクトはメンバのリストおよびそれ自体のオブジェクト フラグを備える必要はなく、実際のメンバのみが必要です。

<Object classname="nameclass" traits-refId="name">
        <Member>userid</Member>
        <Member>firstName</Member>
        <Member>lastName</Member>
        <String>jdoe</String>
        <String>John</String>
        <String>Doe</String>
    </Object>
    <Object traits-ref="name">
        <String>mmustermann</String>
        <String>Max</String>
        <String>Mustermann</String>
    </Object>

外部化可能トレイト

外部化可能トレイトには、オブジェクトのバイナリ表現、不明な形式でシリアル化された不確定なバイト数が含まれます。 形式は、このデータのシリアル化とシリアル化解除を行うクラスによって異なります。 またクラスは、バイト ストリームから何バイトを消費する必要があるかを知る必要があります。

Silk Performer では、次の最も一般的な 3 つのクラスをサポートしています。

  • flex.messaging.io.ArrayCollection
  • flex.messaging.io.ArrayList
  • flex.messaging.io.ObjectProxy

Adobe によると、これらの 3 つが最も一般的なクラスであり、AMF3 としてエンコードされています。 つまり、これらの 3 つのクラスはそれぞれ通常の配列かオブジェクトに解析されます。

これらの 3 つのクラス以外のクラスが見つかった場合、ストリームの最後までのすべてのバイトが拡張化可能トレイトに属すると見なされます。 そのような不明な拡張化可能トレイトの内容は、Base64 エンコードされたデータとして格納されます。

<Object classname="flex.messaging.io.ArrayCollection" externalizable="true">
<Array>
<Integer>1</Integer>
<Integer>2</Integer>
<Integer>3</Integer>
<Integer>4</Integer>
</Array>
</Object>

<Object classname="flex.messaging.io.ArrayList" externalizable="true">
<Array>
<String>hugo</String>
<String>hugo2</String>
</Array>
</Object>

<Object classname="flex.messaging.io.ObjectProxy" externalizable="true">
<Object classname="" dynamic="true">
<String name="ssnum">555-55-5555</String>
<String name="name">Tyler</String>
<Integer name="age">5</Integer>
</Object>
</Object>

    <Object classname="test" externalizable="true">SGVsbG8sIHdvcmxk</Object>

ByteArray

ByteArray には、バイトの配列が保存されます。 XML 表現では、バイナリ データは Base64 形式でエンコードされます。

ByteArray はオブジェクト参照テーブルに登録されます。

<ByteArray>SGVsbG8sIHdvcmxk</ByteArray>

参照

3 つの別個の参照テーブルが使用されます。 次に、どのデータ型がどの参照テーブルに登録されるかに関する概要を示します。

文字列参照テーブル：

  • String
  • クラス名 (実際のデータ型ではない)
  • メンバ名 (実際のデータ型ではない)
  • 配列の連想部の要素の値の名前 (実際のデータ型ではない)

オブジェクト参照テーブル：

  • Object
  • Date
  • Array
  • ByteArray
  • XML
  • XMLDocument

トレイト参照テーブル：

  • オブジェクト トレイト
  • 外部化可能トレイト

参照テーブルに登録されないデータ型：

  • Undefined
  • Null
  • False
  • True
  • Integer
  • Double

参照 ID は AMF3 パーサーによって生成されます。 ただし、手動で記述した XML ドキュメントではカスタムの参照 ID を使用できます。

<String val-refId="username">EMEA\johndoe</String>
<String val-ref="username"></String>
注: AMF3 ジェネレータは参照 ID 文字列を使用して参照テーブルの位置を単に検索し、AMF3 での位置をエンコードするだけであるため、XML ドキュメントが XML から AMF3 に転送されてから XML に戻されると、カスタムの参照 ID は失われます。 そのような生成された AMF3 データ ストリームの解析時には、パーサーにはカスタムの参照 ID に関する情報がありません。 パーサーは、# および文字列参照テーブル内の位置を直接反映する連続番号で始まる参照 ID を生成します。
親トピック: Flex/AMF3 スクリプトについて


Flex/AMF3 スクリプトをカスタマイズする

TrueLog Explorer を使用すると Flex/AMF3 スクリプトを最適にカスタマイズできます。

TrueLog Explorer は、バイナリ AMF3 リクエストおよびレスポンス ボディの XML 表現をツリー ビュー構造で表示します。HTTP リクエスト ボディは リクエスト ビューに表示されます。HTTP レスポンスは レスポンス ビューに表示されます。リクエスト ボディのテキストによる表現は、送信ヘッダー ビューに表示されます。レスポンス ボディのテキストによる表現は、受信ヘッダー ビューに表示されます。

他の XML ベースのアプリケーションと同様に、TrueLog Explorer を使用して、検証および解析機能を視覚的に挿入することができます。

親トピック: Flex/AMF3 のサポート


サポートされる Web アプリケーション

Silk Performer は、ブラウザ駆動型だけでなくプロトコル レベル (HTTP) での Web アプリケーションのテストをサポートしています。

  • Web アプリケーション通信の概要
    3 つの主要な非同期通信モデルを含む、同期/非同期の Web アプリケーション処理フローの概要を提供します。また、自動負荷テストにおける AJAX の影響および DOM 要素を識別する際の XPATH の使用法についても説明します。
  • Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
    今日の最新の Web アプリケーションのテストをプロトコル レベル (HTML/HTTP) で実施する方法について説明します。
  • Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)
    Silk Performer を使用すると、今日の最新の Web アプリケーションのテストをプロトコル レベル (HTTP) で簡単に行えるだけでなく、実際の Web ブラウザ (Internet Explorer、Chrome、Firefox) を使用して負荷を生成することができます。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


Web アプリケーション通信の概要

この節のトピックでは、3 つの主要な非同期通信モデルを含む、同期/非同期の Web アプリケーション処理フローの概要を提供します。また、自動負荷テストにおける AJAX の影響および DOM 要素を識別する際の XPATH の使用法についても説明します。

  1. 同期通信と非同期通信を理解する
    従来の Web ベースのアプリケーションでは、ユーザー入力が多くのリソース要求を引き起こすことについて説明します。リクエストに対する応答がサーバーから一旦なされると、ユーザーが次の入力が行うまで、さらなる通信は行われません。
  2. 非同期通信モデル
    非同期リクエストとレスポンスのシーケンスに主に 3 つの種類があることを説明します。プッシュ、ポール、ロング ポール
  3. プロトコル レベルでの非同期通信のテスト
    ポーリング、ロング ポーリング、プッシュなどの非同期通信パターンを使用する Web アプリケーションのテストについて説明します。
  4. WebSocket 接続をテストする
    WebSocket プロトコルでは、全二重 (双方向) 接続をクライアントとサーバー間で確立することができます。このトピックでは、WebSocket 通信を記録し、WebSocket BDL 関数のスクリプトを記述する方法について説明します。
  5. HTTP/2 のサポート
    HTTP/2 とは何か、その主な特徴と現時点での制限事項、および Silk Performer が HTTP/2 をサポートする方法について説明します。
  6. AJAX アプリケーションのテスト
    クライアント側 (ブラウザ) で対話型 Web アプリケーションの構築に使用する、関連する Web 開発技術である AJAX について説明します。
親トピック: サポートされる Web アプリケーション


同期通信と非同期通信を理解する

従来の Web ベースのアプリケーションでは、ユーザー入力が多くのリソース要求を引き起こします。リクエストに対する応答がサーバーから一旦なされると、ユーザーが次の入力が行うまで、さらなる通信は行われません。このようなクライアントとサーバー間での通信は、同期通信 として知られています。

これは、ブラウザーと Web サーバー間で行われる従来の同期通信の例です。

  1. ユーザーは、ブラウザー ベースの Web アプリケーションで UI コントロールをクリックします。
  2. ブラウザーは、ユーザーのアクションを 1 つ以上の HTTP リクエストに変換し、Web アプリケーション サーバーに渡します。
  3. アプリケーション サーバーは、リクエストしたデータをユーザーに返すことで、ユーザーのリクエストに答えます。この時点で、アプリケーションは更新され、同期更新のループが完了します。新しい同期通信のループは、ユーザーが次にブラウザー上の UI コントロールをクックしたときに始まります。

同期通信は、一定の間隔でユーザーに対してもたらされるアプリケーションの更新に時間の経過があるため、制限があります。同期アプリケーションがアプリケーション サーバーからの情報を定期的に更新するように設計されていたとしても (12 秒ごとなど)、データ更新間隔に一定の遅延時間があります。多くのアプリケーションにとって、管理するデータはそれほど頻繁に変更されないため、このような更新遅延は問題になりません。しかし、株取引アプリケーションのように、アプリケーションの種類によっては、ユーザーに際t期名機能と使いやすさを提供するために、継続的に情報が更新されることが必要なものもあります。

Web 2.0 ベースのアプリケーションは、この問題を 非同期通信 を利用して解決します。非同期アプリケーションは継続的に更新したアプリケーション データをユーザーに配信します。これは、アプリケーションの更新とは別のクライアント リクエストによって行われます。複数の非同期通信がクライアントとサーバーの間で、同時にまたは互いに平行して発生できます。

非同期通信は、多大な恩恵をユーザーにもたらしますが、従来のテスト スクリプトを使ってエミュレートすることが困難であるため、ソフトウェア テスト ツール ベンダーに重大な課題を提示しました。

親トピック: Web アプリケーション通信の概要
次のトピック: 非同期通信モデル


非同期通信モデル

非同期リクエストとレスポンスのシーケンスには、主に 3 つの種類があります： プッシュ、ポール、ロング ポールWeb ベース アプリケーションのテスト スクリプトを構築する際に、どの種類の非同期通信が使用されているかを理解することは重要です。

ポーリング通信モデル

この非同期通信モデルを使用すると、クライアントは一定間隔 (8 秒ごとなど) にアプリケーション サーバーに HTTP リクエストを送信します。サーバーは、ブラウザに更新を返すことによって、断続的頻度で更新されるアプリケーションを保持します。

ロング ポーリング通信モデル

このモデルを使用すると、ブラウザはアプリケーション サーバーに HTTP リクエストを送信します。更新がある場合はつねに、サーバーは HTTP レスポンスを返します。クライアントは、サーバー上の既知のアドレスに HTTP リクエストを生成します。サーバー レスポンスの受信の直後に、ブラウザは他の HTTP リクエストを送信します。この即座にブラウザからレスポンスが発生するところが、標準的なポーリング通信モデルとこのモデルの異なるところです。即時のレスポンスは、サーバー レスポンスに対してサーバー側でより長い時間待機することになります。

プッシュ通信モデル

ポーリング および ロング ポーリング モデルと同様に、プッシュ モデルを使用すると、ブラウザが HTTP リクエストをアプリケーション サーバーに送信することによって、通信が開始されます。しかし、サーバーによって返されるレスポンスは、常にオープンな状態になります。サーバーとの通信を保持しているブラウザで結果が開きます。その後、サーバーは、更新されたときはいつでもオープンな接続上にサブメッセージを送信します。このモデルを使用すると、ブラウザとサーバー間の通信は永遠にオープンなままになります。

サーバーはいつでも通信をクローズすることができ、新しい更新が無い場合でも ping メッセージを送信することによってオープンのままにしておくことができます (タイムアウトにより通信がクローズすることを避ける)。

親トピック: Web アプリケーション通信の概要
前のトピック: 同期通信と非同期通信を理解する
次のトピック: プロトコル レベルでの非同期通信のテスト


プロトコル レベルでの非同期通信のテスト

プロトコル レベルの非同期テスト機能の記録/再生は、ポーリング、ロング ポーリング、プッシュなどの非同期通信パターンを使用する Web アプリケーションに対して設計されています。このようなアプリケーションは、ユーザーとのやり取りなしに、定期的に、またはエベントに基づき、またはサーバーがトリガとなってコンテンツを更新するという特徴があります。プロトコル レベルでの非同期 Web アプリケーションのテストは、リソースをそれほど消費しませんが、BDLT アプローチと比べてスクリプト化するのがより困難です。BDLT はリソースを消費しますが、記録中にプロセス全体のスクリプト化が自動化されています。

非同期通信の記録

Silk Performer は、非同期通信パターンを使用する Web アプリケーションの記録を手助けする専用のプロジェクトの種類 (Web (Async)) を提供します。ユーザーとのやりとりを記録する際に、Silk Performer Recorder は、記録したセッションのトラフィック全体を含む Silk Performer キャプチャ ファイルというファイルを作成します。保存後に、キャプチャ ファイルは Workbench で開かれ、続いて分分析および処理を行うことができます。キャプチャしたトラフィックからスクリプトを生成する前に、記録ルールや他の設定を変更して、スクリプト生成処理に適用させることができます。同じキャプチャ ファイルからいくつかのスクリプトを生成することができます (オプションを変えて)。

非同期 Web 関数

前に述べた非同期通信パターンのそれぞれに対して、Silk Performer は、Web API 関数を提供しており、Web サーバーへの非同期通信チャネルを作成できます。

  • WebAsyncPreparePush
  • WebAsyncPreparePoll
  • WebAsyncPrepareLongPoll

各 WebAsyncPrepare... 関数呼び出しは、その後の Web 関数呼び出しを使って専用の非同期通信チャネルを開始します。

WebAsyncPrepare... 関数は、オプションで BDL コールバック関数をパラメータにとります。コールバック関数は、あるイベントを仮想ユーザーに通知するために呼び出されます。イベントの詳細な説明については、BDL リファレンスを参照してください。

非同期通信チャネルは、通常の仮想ユーザー アクティビティに並列にアクティブになっていますが、コールバック関数は、スクリプト実行中に特定の場面で Web 再生エンジンによって同時に呼び出されます。

コールバックによる仮想ユーザー アクティビティの同期化

仮想ユーザー アクティビティは、コールバック関数を実行して同期化する必要がある場合があります。典型的な例は、非同期通信チャネルによって配信されるサーバーからの情報を仮想ユーザーが待機する必要がある状況です。

情報が必要なときに、仮想ユーザーは関数 UserWaitFor を呼び出します。データが到着すると、関連するコールバック関数が呼び出されます。この関数は、必要な情報を取り出し保管します。この段階で、コールバック関数は、関数 UserSignal を呼び出すことによって、仮想ユーザーにイベントのシグナルを発行します。その後、仮想ユーザーは、コールバック関数によって保管された情報に安全にアクセスできます。

親トピック: Web アプリケーション通信の概要
前のトピック: 非同期通信モデル
次のトピック: WebSocket 接続をテストする
関連概念
キャプチャ ファイルからスクリプトを生成する
関連資料
WebAsyncPreparePush Function
WebAsyncPreparePoll Function
WebAsyncPrepareLongPoll Function


WebSocket 接続をテストする

WebSocket プロトコルは TCP ベースのネットワーク プロトコルで、全二重 (双方向) 接続をクライアントとサーバー間で確立することができます。従来の HTTP 接続は、リクエスト - レスポンスの原則に基づき、各クライアント リクエストによってサーバー レスポンスが引き起こされます。

WebSocket 接続を確立するために、クライアントは、HTTP メッセージに WebSocket アップグレード リクエストを埋め込んで送信します。一旦、サーバーによって承認されると、その開いている接続は、サーバーとクライアントとの間で自由に通信するために使用できます。

WebSocket プロトコルを使用すると、ネットワーク トラフィックとレイテンシは減少します。全二重接続をシミュレートするために使用されるポーリングやロング ポーリングのような通信モデルの代わりになるものです。

それぞれの関数を手動でスクリプトに記述してテスト スクリプトを作成するか、Silk Performer Recorder を使用してスクリプトを記述することができます。WebSocket BDL 関数について学ぶには、『BDL リファレンス』を参照してください。

WebSocket サーバーとの接続を確立するために、2 つの関数があります。WebSocketConnect を使用すると、非同期通信チャネルを確立します。WebSocketConnectSync を使用すると、同期通信チャネルを確立します。

注: Recorder は、常に非同期通信のスクリプト作成モデルに従って、WebSocketConnect 関数や関連したコールバック関数スタブを生成します。

WebSocket プロトコルは、テキスト メッセージとバイナリ メッセージの両方の送受信用に提供されます。従って、Silk Performer は これらのメッセージ タイプをサポートするために、WebSocketSendTextMessage とWebSocketSendBinaryMessage を提供します。

親トピック: Web アプリケーション通信の概要
前のトピック: プロトコル レベルでの非同期通信のテスト
次のトピック: HTTP/2 のサポート
関連概念
Asynchronous Communication Functions


HTTP/2 のサポート

概要

HTTP/2 は、WWW で使用される HTTP の大幅な改定版です。このプロトコルは、Google によって開発された SPDY という名前の試験的なプロトコルをベースにしたもので、2015 年に RFC 7540 として公開されました。

HTTP/2 の策定では、パフォーマンスに重点が置かれました。このため、このプロトコルでは HTTP/1.1 に対する様々な改良がなされています。

  • HTTP/2 では、クライアントとサーバー間では 1 つの接続のみ使用します。単一の接続で、複数の通信ストリームを並列に処理できるようにすることで、クライアントとサーバー間で複数の接続を確立するオーバーヘッドを低減できます。一方、HTTP/1.1 の接続は、単純なリクエスト/レスポンス パターンのみをサポートします。
  • HTTP/2 はバイナリ プロトコルです。HTTP/1.x とは異なり、可読ではありません。
  • HTTP/2 では、HTTP ヘッダー用に特別に設計された圧縮手法を使用します。この圧縮手法では、ほとんど同じヘッダーが繰り返し送信されていることが考慮されています。
  • HTTP/2 では、クライアントからの明示的なリクエスト無しに、HTTP/2 サーバーがクライアントにリソースをプッシュできます。

HTTP/2 の設定

Silk Performer の HTTP/2 サポートは、デフォルトでは無効になっています。プロファイル設定で HTTP/2 を有効にし、設定できます。設定 > アクティブ プロファイル > Web (プロトコル レベル) をクリックします。

制限事項

現在、Silk Performer は HTTP/2 による再生のみをサポートしています。基本的に、HTTP/1.1 を使って記録したスクリプトは、HTTP/2 を使って再生できます。 ただし、クライアントが使用する HTTP のバージョンに応じてサーバーが特別なコンテンツを返す場合を除きます。

Silk Performer Recorder はブラウザに HTTP/2 を使用させないため、HTTP 1.1 が使用されます。ほとんどの場合、このことによる記録トラフィックとコンテンツに影響はありません。しかし、通信に使用する HTTP のバージョンに依存してサーバーが異なるコンテンツを返す場合は、HTTP/2 のコンテンツを記録することはできません。

  • サーバー プッシュのサポート
    HTTP/2 サーバー プッシュの概要と、Silk Performer がサーバー プッシュをサポートする方法について説明します。
  • TrueLog Explorer における HTTP/2
    HTTP/2 接続の使用時に TrueLog Explorer が表示する情報について説明します。
  • HTTP/2 を設定する
    HTTP/2 を有効化/無効化する方法や、サーバー プッシュとフォールバックを有効化する方法について説明します。
親トピック: Web アプリケーション通信の概要
前のトピック: WebSocket 接続をテストする
次のトピック: AJAX アプリケーションのテスト


サーバー プッシュのサポート

HTTP/2 では、サーバーからクライアントにリソースをプッシュすることができます。 これにより、クライアントがメインの HTML 文書を解析して、1 つずつ追加のリソースをリクエストするのを、サーバーが待つ必要がなくなります。HTTP/2 サーバーが、スタイル シートや画像などのファイルをクライアントにプッシュすることが一般的です。クライアントは、ページをレンダリングするためにこれらのリソースが必要です。

プロファイル設定で、サーバー プッシュの有効/無効を切り替えることができます。設定 > アクティブ プロファイル > Web (プロトコル レベル) をクリックします。

  • TrueLog Explorer では、プッシュされたリソースは、ノードが (サーバー プッシュ) で装飾されます。このようなノードでは、送信ヘッダー タブや 送信本文 タブは無効になっています。それ以降のページで同じリソースが必要になると、従来どおりキャッシュ ヒットが発生します。
  • あるページを何度もリクエストすると、サーバーは同じリソースを何度もプッシュしようとします。しかし、Silk Performer はプッシュされたリソースを最初だけ格納し、以降のプッシュが必要ないことをサーバーに通知します。通知を受け取る前にサーバーがリソースのプッシュを開始していた場合、Silk Performer はこれに関連するトラフィックを測定しません。
  • サーバーによってプッシュされたにも関わらず、WebPage* 関数呼び出し時に実際に必要なかったリソースを Silk Performer が検出した場合、仮想ユーザー出力と TrueLog Explorer に警告が表示されます。このような警告は、必要ないリソースをサーバーがプッシュしている、つまりサーバーの設定に誤りがある可能性があります。この動作は、不要なネットワーク トラフィックを生じさせます。

Silk Performer のプッシュ サポートが実際のブラウザの動作と異なる場合があります。正式なプッシュ キャッシュについての仕様が存在しないため、ブラウザによってプッシュ キャッシュの実装が異なることが原因です。

親トピック: HTTP/2 のサポート


TrueLog Explorer における HTTP/2

TrueLog Explorer の 受信ヘッダー タブと 送信ヘッダー タブで、リクエストが HTTP/2 を使用したかどうかを確認できます。リクエストが HTTP/2 を使用した場合、ヘッダー タブに :method、:scheme、:path、:authority、:status などの擬似ヘッダーが表示されます。圧縮したヘッダー情報は可読ではないため、TrueLog Explorer は圧縮を解除したヘッダーを表示します。

統計 タブを調べると、他にも次のような違いが見つかるでしょう。

  • HTTP/2 では、1 つのホストからのすべてのコンテンツのダウンロードを、1 つの TCP 接続で実行します。このため、ホストへの最初のリクエストにのみ、DNS、接続、SSL ハンドシェイク の値が含まれます。同じホストに対するその後のリクエストでは、既存の接続が再利用されます。
  • 多くの埋め込みリソースを持つ API ノードに対する滝グラフを調べてみると、HTTP/2 の場合は TCP 接続がアイドルになるのを待たずに、埋め込みリソースのダウンロードを同時に開始できることがわかります。個々のリクエストの処理時間はわずかに長くなる場合がありますが、HTTP/2 を使ったページ全体のダウンロードは、前のバージョンと比較してかなり速くなります。
  • HTTP/1.1 のトラフィックでは、TrueLog Explorer の TrueLog ツリーの Web ノードそれぞれに、SSL と接続によるオーバーヘッド（数バイトの転送）が表示されます。しかし、HTTP/2 では、1 つのホストへの複数のリクエストが同じ TCP 接続を共有するため、複数のリクエストやレスポンスが単一の SSL フレームに収まる場合もあります。HTTP/1.1 の測定値は HTTP/2 に対して適切であるとは言えませんが、HTTP/1.x と HTTP/2 のトラフィックを比較できるようにするため、TrueLog Explorer では同じ統計情報を表示します。つまり、TrueLog Explorer では SSL オーバーヘッドを対応するリクエストとレスポンス全体に配分することを意味します。特定のリクエスト/ストリームに対応しないトラフィック（HTTP/2 SETTINGS フレームなど）は、その後のリクエスト/レスポンス ペアの統計情報に追加されます。一部の測定値の値が実際より小さく感じることがあります。これは、HTTP/2 のヘッダー圧縮機能に起因します。前のリクエストやレスポンスに多くの同様なヘッダーが含まれている場合は特に、ヘッダーが大部分を占めるリクエストの送信/受信バイト数が減少します。
  • HTTP/2 の特性として、1 フレームに複数のストリームを収めることができるため、TrueLog Explorer は圧縮フレームのサイズを特定のリクエスト/レスポンス ペアに割り振ることができません。このため、圧縮を解除したヘッダーと本文のサイズが、統計 タブの [ページの分析] ビューに表示されます。
親トピック: HTTP/2 のサポート


HTTP/2 を設定する

HTTP/2 設定は、プロファイル設定 で行うことができます。
  1. メニューから、設定 > アクティブ プロファイル > Web (プロトコル レベル) をクリックします。
  2. HTTP/2 は、デフォルトでは無効になっています。有効にするには、優先する HTTP のバージョン を HTTP/2 に設定します。
    注: また、ブラウザ リストから HTTP/2 をサポートするブラウザを選択します。ブラウザがサポートする HTTP のバージョンは、詳細 をクリックして表示されるダイアログの サポートする HTTP のバージョン で確認できます。ほとんどの最近のブラウザは、HTTP/2 をサポートしています。
  3. HTTP/1.1 へのフォールバックを許可する：テスト対象のサーバーが HTTP/2 をサポートしていない場合に、HTTP/1.1 を使って仮想ユーザーがアクセスできるようになります。フォールバックが許可され、実際のテスト中に使用された場合、影響を受けたサーバーごとに情報メッセージが表示されます。フォールバックが許可されていない場合は、エラー メッセージが表示されます。
  4. サーバー プッシュを有効にする：クライアントからの明示的なリクエスト無しに、HTTP/2 サーバーがクライアントにリソースをプッシュできるようになります。サーバー プッシュを許可しても、テスト対象のサーバーがプッシュ機能をサポートしていない場合は、警告メッセージが表示されます。
また、WebSetOption 関数を使って BDL スクリプト内でこれらの設定を行うこともできます。BDL スクリプトで設定を定義すると、プロファイル設定でのオプション定義は上書きされます。
親トピック: HTTP/2 のサポート


AJAX アプリケーションのテスト

注: プロトコル レベルの非同期テスト機能の記録/再生は、少数の専用の非同期通信チャンネルを使用する Web アプリケーションに対して行われます。プロトコル レベルの非同期テストは、それほどリソースを消費しませんが、スクリプト化するがより困難です。ブラウザ駆動型テスト アプローチはリソースを消費しますが、スクリプト化するプロセス全体が記録中に自動的に行われるため、AJAX アプリケーションをテストするのにより簡単な方法として認識されています。

AJAX (Asynchronous JavaScript and XML) は、クライアント側 (ブラウザ) で対話型 Web アプリケーションの構築に使用する、関連する Web 開発技術です。AJAX を使用すると、既存のページの表示および動作に干渉することなく、Web アプリケーションでサーバーからデータをバックグラウンドで非同期に取得できます。通常、データのエンコードには XML 形式または JSON 形式が使用されますが、独自のデータ エンコード形式も使用されます。

多くの場合、Web サイト上の関連ページでは多くの共通コンテンツが共用されます。従来の方法では、ページ リクエストごとにコンテンツを再ロードする必要があります。

AJAX を使用すると、ページの更新に必要なコンテンツのみを Web アプリケーションでリクエストできるため、帯域幅の使用とロード時間が大幅に削減されます。

非同期リクエストを行うと、クライアント Web ブラウザの UI がさらに対話的となり、入力に対してすばやく応答することができます。多くの場合、ページのセクションを個別に再ロードすることもできます。サーバー側におけるアプリケーションの状態が変わらなくても、ユーザーにはこのようなアプリケーションの速度およびレスポンスが向上したように受け取られます。

Web アプリケーションは通常、Ext JS や Ext GWT などの AJAX フレームワークに基づいていますが、これは必須ではありません。

  • AJAX の処理フロー
    Web 2.0 アプリケーションの双方向性を生み出すために、HTTP リクエスト、HTML レスポンス、JavaScript、および他のリソースがやり取りする方法について簡単に説明します。
  • 自動化と負荷テストの影響
    Web 2.0 アプリケーションのテストにおいて自動化ツールおよび負荷テスト ツールが遭遇する主な問題が同期であることについて説明します。
  • ブラウザ駆動型テストで DOM 要素を識別する
    Silk Performer がどのようにオブジェクト識別子、いわゆる ロケーター の概念を、現在の DOM の 1 つ以上の要素を識別するために使用するかを説明します。
親トピック: Web アプリケーション通信の概要
前のトピック: HTTP/2 のサポート


AJAX の処理フロー

Web 2.0 アプリケーションでは、ページ の全体的な概念が不明確になります。Web ページのロードがいつ完了したかを判断するのは困難です。通常、最初の HTTP リクエストは、以降のリクエストでロードされる他のリソースも含む、HTML レスポンスで応答されます。JavaScript の実行時には、XMLHttpRequest 呼び出しを通して追加リクエストが転送されることがあります。このような非同期呼び出しに対するレスポンスは、最初のページの変更/適合によって反映されることがあります。

一部のページは、ユーザー入力なしで頻繁に更新されます。非同期呼び出しのトリガとなる他のイベントには、次のものがあります。

  • マウスオーバー
  • キー ストローク
  • ドラッグ アンド ドロップ操作
  • タイマ
  • ネットワーク イベント (readystatechange 上)
親トピック: AJAX アプリケーションのテスト


自動化と負荷テストの影響

ほとんどの AJAX アプリケーションではページという概念が適用されないため、連続した Web ページ アクションをいつ許可するかを判断するのに困難な場合があります。自動化ツールおよび負荷テスト ツールが遭遇する主な問題は同期です。ページの一部が表示されていても、まだ機能しないことがあります。たとえば、ボタンやリンクをクリックしても、何も処理されなかったり、誤った動作が生じることがあります。このような操作は単に再実行できるため、通常、問題にはなりません。自動化ツールより遅いため、多くの場合、ユーザーがこのような問題に気付くことはありません。

ブラウザ駆動型アプローチでは、Silk Performer は高度な技術を使用して、Web ページでそれ以降のアクションを処理する準備がいつできるかが判断されます。この AJAX モードの同期では、ブラウザがアイドル状態になるまで待機します。これは、AJAX コンポーネントを含む AJAX アプリケーションや AJAX ページに特に効果的です。AJAX モードを使用すると、同期関数のスクリプト (オブジェクトの表示/非表示を待機したり、特定のプロパティ値を待機するなど) を手動で作成する必要がなくなるため、スクリプトの開発プロセスが大幅に簡略化されます。この自動同期は、スクリプトの手動カスタマイズを必要としない記録や再生を正常に行うための基盤にもなります。

トラブルシューティング

AJAX は非同期であるという特性のため、通常、ブラウザが完全にアイドル状態になることはありません。したがって、起動されたメソッド呼び出しが Silk Performer で認識されず、指定のタイムアウト時間が経過した後でタイムアウト エラーが発生する場合があります。

親トピック: AJAX アプリケーションのテスト


ブラウザ駆動型テストで DOM 要素を識別する

ブラウザ内で、Web ページのすべての可視、不可視の要素が、オブジェクトの階層ツリー (ドキュメント オブジェクト モデル (DOM)) として表されます。Web ページの要素とやり取りするために、Silk Performer は、オブジェクト識別子、いわゆる ロケーター と呼ばれる概念を使用します。ロケーターは、現在の DOM の 1 つ以上の要素を識別する XPath クエリ文字列です。XPath に関する追加の情報については、http://www.w3.org/TR/xpath20/ を参照してください。

DOM 要素とやり取りするすべての API 呼び出しは、入力パラメータとしてロケーターを取ります。たとえば、API 呼び出し BrowserLinkSelect(“//a[@href=’www.companyxyz.com’]”) では、ロケーターは //a[@href=’www.companyxyz.com’] であり、その href 属性値として www.companyxyz.com を持つ最初のリンクを識別します (<a href=”www.companyxyz.com”>My Link</a> など)。

次の表に、Silk Performer でサポートされているすべての XPath コンストラクトを示します。

サポートされている XPath コンストラクト | サンプル | 説明
属性 | a[@href='myLink'] | 現在のコンテキストの子である、指定の href 属性を持つすべての DOM リンクを識別します。DOM 属性はすべてサポートされています。
インデックス | a[1] | 現在のコンテキストの子である最初の DOM リンクを識別します。XPath 内でのインデックスは 1 から始まります。
論理演算子： and、or、= | a[(@href='microfocus' or @caption != 'b') and @id='p'] |
. | .//div[@id='menuItem']/. | 「 .」は、現在のコンテキスト (ファイル システムで周知の表記に類似) を示します。例は次と等価です：//div[@id='menuItem']/
.. | //input[@type='button']/../div | オブジェクトの親を示します。たとえば、サンプルは、直接の子としてのボタンを含むすべての div を識別します。
/ | /form | 現在の親の直接の子であるすべてのフォームを検索します。./form は、/ form および form と等価です。
/ | /form/input | フォーム要素の子であるすべての入力要素を識別します。
// | //input[type='checkbox'] | 現在のオブジェクトに関係する階層内のすべてのチェック ボックスを識別します。
// | //div[id='someDiv'//input[type='button'] | コンテキストの直接または間接の子である div の直接または間接の子であるすべてのボタンを識別します。
/ | //div | 現在のコンテキストの直接または間接の子であるすべての div を識別します。

次の表に、Silk Performer でサポートされていない XPath コンストラクトを示します。

サポートされていない XPath コンストラクト | 例
2 つの属性の相互比較 | a[@caption = @href]
右側の属性名はサポートされていません。属性名は左側にある必要があります。 | a['abc' = @caption]
and または or を使用した複数の XPath 表現の結合 | a [@caption = 'abc'] or.//input
複数の属性をかぎ括弧で指定する。 | div[@class = 'abc'] [@id = '123'] （代わりに div[@caption = 'abc' and @id = '123'] を使用）
複数のインデックスをかぎ括弧で指定する。 | a[1][2]
タグ名または属性名に含まれるワイルドカード | */@c?ption='abc'
論理演算子： not、!= | a[@href!='someValue']、not[@href='someValue']
クラスまたはクラスのワイルドカードを明示的に指定しないコンストラクト(ワイルドカードをクラス名の一部として含めるなど)。 | //[@caption = 'abc']

以下のリストに、//[@caption ='abc def'] と一致するワイルドカードの例を示します：

  • //[@caption ='*c def']
  • //[@caption ='??c def']
  • //[@caption ='ab? ?ef']
  • //[@caption ='ab*ef']
  • //[@caption ='abc?def']
  • //[@caption ='abc d??']
  • //[@caption ='abc d*']
  • //[@caption ='ab? *']
  • //[@caption ='?b? d*']
  • //[@caption ='*c d*']
親トピック: AJAX アプリケーションのテスト


Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)

  • Web 負荷テストの概要
    Web アプリケーションをテストするための、Silk Performer の使用方法に関する概要を説明します。
  • Web 負荷テストプロジェクトを定義する
    プロジェクトには、ワークロード、テスト スクリプト、データ ファイルなど、負荷テスト完了に必要なリソースがすべて含まれています。
  • テスト スクリプトを作成する
    Web 負荷テスト スクリプトを作成する方法、およびスクリプト試行の実行によってスクリプトをテストする方法について説明します。
  • テスト スクリプトを分析する
    スクリプトの試行の結果の分析に使用できるオプションについて説明します。
  • テスト スクリプトをカスタマイズする
    入力データをカスタマイズし、ページ コンテンツを検証する方法について説明します。
  • 監視を構成する
    テスト中に Performance Explorer を使用してローカルおよびリモート コンピュータを監視するためのオプションを説明します。
  • ワークロードの調整
    負荷テストのワークロードを定義する方法について説明します。
  • 負荷テストを実行する
    負荷テストの実行に関連するタスクについて説明します。
  • テスト結果の検討
    テスト結果の表示、レポート、および分析に利用できる方法について説明します。
  • Silk Performer Web コンテキスト管理
    詳細なコンテキスト管理 (Silk Performer における状態情報の管理) を行うための概念について説明します。
  • 手動のスクリプト編集
    仮想ユーザーの動作をカスタマイズする効果的な方法は、テスト スクリプトを手動で編集することです。
  • GZIP または ZLIB POST データのカスタマイズ
    スクリプトの記録中に GZIP または ZLIB POST データの解凍がどのように機能するかを説明します。
  • 個別の IP アドレスをセットアップする
    仮想ユーザーに個別の IP アドレスをセットアップします。
  • Web フォーム
    テスト スクリプトでの Web フォームの宣言方法と使用方法について説明します。
  • クッキー
    Web アプリケーションで使用されるクッキーに対する記録と再生が、Silk Performer でサポートされる方法について説明します。
親トピック: サポートされる Web アプリケーション


Web 負荷テストの概要

今日の最新の Web アプリケーションをテストする最も早くて簡単な方法は、プロトコル レベル (HTML/HTTP) でのテストを行うことです。 この方法では、高度な機能が組み込まれた簡単なスクリプトが生成されます。 Web アプリケーションを組み込み AJAX ロジックでテストする際に、プロトコル レベルでのテストが失敗であると判明した場合は、ブラウザ駆動型 Web 負荷テストを使用することをお勧めします。

Silk Performer を使用すると、今日の最新の Web アプリケーションのテストをプロトコル レベル (HTTP) で簡単に行えるだけでなく、実際の Web ブラウザ (Internet Explorer、Firefox、Chrome) を使用して負荷を生成することができます。これにより、Web アプリケーションに組み込まれた AJAX ロジックを利用して、複雑な AJAX 動作をテスト中に正確にシミュレートすることができます。この強力なテスト方法では、レンダリング時間やプロトコル レベルの統計など、エンド ユーザーによる実際のブラウザ動作を反映する結果が提供されます。

  • サンプル Web 2.0 アプリケーション
    Silk Performer には、Web 2.0 アプリケーションのテストを習得するために使用できる最新のサンプル Web アプリケーションが備えられていることについて説明します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
関連概念
ブラウザ駆動型負荷テストの概要


Web 負荷テストプロジェクトを定義する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、Web business transaction (HTML/HTTP) を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
関連概念
プロジェクトの概要設定
関連タスク
テスト スクリプトを記録する


テスト スクリプトを作成する

テスト スクリプトを作成する最も簡単な方法は、Silk Performer Recorder を使用することです。Recorder は、トラフィックを測定して記録し、テスト スクリプトを生成する Silk Performer のエンジンです。

  • テスト スクリプトを記録する
    Silk Performer Recorder を使用して、テスト スクリプトを作成します。Recorder は、トラフィックの取得と記録、およびテスト スクリプトの生成を行う Silk Performer のエンジンです。
  • スクリプトの試行
    スクリプトの試行によって、記録された操作がスクリプトで正確に再現されるかどうかがわかることについて説明します。
  • テスト スクリプトを試行する
    テスト スクリプトを生成したら、スクリプトの試行を行って、スクリプトがエラーなしで動作するかどうかを確認します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
関連概念
スクリプトを作成する


テスト スクリプトを記録する

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 記録に使用するブラウザに応じて、記録プロファイル リストに一覧表示されたブラウザから 1 つを選択します。
  3. URL フィールドに、記録する URL を入力します。
    注: InsuranceWeb サンプル Web 2.0 アプリケーションは、http://demo.borland.com/InsuranceWebExtJS/ から入手できます。 Select a Service or login リストでは、Auto Quote および Agent Lookup サービスをテストに使用することができますが、リストに示されたそれ以外のサービスには機能がありません。
  4. 記録の開始 をクリックします。 [Silk Performer Recorder - [<プロファイル名>]] ダイアログが最小化されて表示され、クライアント アプリケーションが起動されます。
  5. 記録中に発生したアクションのレポートを表示するには、GUI サイズの変更 をクリックして [SilkPerformer Recorder - [<プロファイル名>]] ダイアログを最大化します。 [SilkPerformer Recorder - [<プロファイル名>]] ダイアログが最大化され、アクション ページに表示されます。
  6. クライアント アプリケーションを使用して、テストでシミュレートするターゲット サーバーでの操作などを実行します。この操作を、Recorder が取得して、記録します。 これらのアクションとダウンロードされたデータのレポートが、アクション ページに表示されます。
  7. 記録を終了するには、記録停止 をクリックします。
  8. .bdf ファイルの名前を入力し、保存します。キャプチャ ファイル ページが表示されます。スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。
親トピック: テスト スクリプトを作成する


スクリプトの試行

テスト スクリプトを生成したら、スクリプトの試行を行って、スクリプトがエラーなしで動作するかどうかを確認します。 スクリプトの試行を行うことによって、Recorder で記録された操作がスクリプトで正確に再現されるかどうかがわかります。 また、スクリプトがエラーなしで動作できるようにするために、パラメータ化を必要とするコンテキスト固有のセッション処理がスクリプトに含まれているかどうかもわかります。

スクリプトの試行では、1 人の仮想ユーザーのみが実行され、スクリプト化されたアクション間の思考時間遅延が発生しない ストレス テスト オプションが有効になります。

親トピック: テスト スクリプトを作成する


テスト スクリプトを試行する

  1. Silk Performer のワークフロー バーの スクリプトの試行 をクリックします。 ワークフロー – スクリプトの試行 ダイアログが表示されます。
  2. スクリプト リスト ボックスでスクリプトを選択します。
  3. プロファイル ボックスの一覧には、現在アクティブなプロファイルが選択されています (別のプロファイルを構成したのでなければ、これがデフォルトのプロファイル)。
    1. 選択したプロファイルのシミュレーション設定を構成するには、このリスト ボックスの右側にある 設定 をクリックします。
    2. プロジェクト属性を構成するには、プロジェクト属性 リンクを選択します。
  4. ユーザー グループと仮想ユーザーの ユーザーグループ 一覧から、実行する仮想ユーザーのユーザー グループを選択します。 スクリプトの試行なので、実行される仮想ユーザーは 1 ユーザーのみです。
  5. スクリプトの試行中に Web サーバーからダウンロードされた実際のデータをリアルタイムに表示するには、TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします。 Web アプリケーション以外のテストを実行している場合は、このオプションを無効にしてください。
  6. 実行 をクリックします。 スクリプトの試行が開始されます。
スクリプトの試行の実行中、記録された思考時間はすべて無視されます。 監視 ウィンドウが開き、スクリプトの試行の実行の進行状況について詳細な情報が表示されます。 アニメーション オプションをオンにしている場合は、TrueLog Explorer が開きます。 ここには、スクリプトの試行の実行中にダウンロードされた実際のデータが表示されます。 スクリプトの試行の実行中にエラーが発生した場合は、TrueLog Explorer を利用して、すばやくエラーを検索して、セッション情報をカスタマイズできます。 TrueLog Explorer でスクリプトの評価とカスタマイズを完了すれば、このスクリプトはエラーなしで実行できます。
親トピック: テスト スクリプトを作成する


テスト スクリプトを分析する

Silk Performer には、スクリプトの試行の実行後にテスト スクリプトを評価するための手段がいくつか用意されています。

  • TrueLog Explorer による視覚的分析
    TrueLog Explorer インターフェイスと、そのさまざまなコンポーネントについて説明します。
  • 仮想ユーザー要約レポートを表示する
    スクリプトの試行に関する基本情報やタイミング平均を要約した仮想ユーザー要約レポートについて説明します。
  • TrueLog 内のエラーを検索する
    TrueLog Explorer では、スクリプトの試行の後でエラーをすばやく検索できます。 そして、エラーとなったリクエストを調査して、必要なカスタマイズを行うことができます。
  • ページ統計値を表示する
    負荷のない状態でのアプリケーションのパフォーマンスを分析する方法を説明します。
  • 記録 Truelog と再生 Truelog を比較する
    再生 Truelog とそれに対応する記録 Truelog を比較することによって、記録されたスクリプトでエラーを特定することができます。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


TrueLog Explorer による視覚的分析

TrueLog Explorer の最も強力な機能の 1 つは、テスト中のアプリケーションによって表示された Web コンテンツを視覚的にレンダリングする機能です。実際に、仮想ユーザーがアプリケーションとやり取りをするときに見るものが表示されます。

TrueLog Explorer のインターフェイスは、次のセクションから構成されています。

  • ワークフロー バー は、TrueLog Explorer を扱う際の主要なインターフェイスとなります。ワークフロー バーは、TrueLog Explorer に組み込まれているテスト方法論を元に、5 つの主要な作業をサポートしています。
  • インターフェイスの左側にある API ノード ツリー メニューでは、負荷テスト中にダウンロードされた TrueLog データを展開または縮小できます。ロードされている TrueLog ファイルはそれぞれ、関連するすべての API ノードへのリンクと共に、ここに表示されます。ノードをクリックして、画面 ペインにスクリーンショットを表示し、情報 ビューに履歴詳細を表示することができます。
  • コンテンツ ペインでは、受信したすべてのデータに対して複数のビューを利用できます。
  • 情報 ペインには、テスト スクリプトおよびテスト実行に関するデータが表示されます。読み込まれた TrueLog ファイル、選択された API ノード、 BDL スクリプト、統計に関する一般情報が含まれます。
注: Silk Performer から TrueLog Explorer を起動するには、結果 > TrueLog の検討 を選択します。

  • テスト実行を分析する
    TrueLog Explorer を使用してテスト実行の分析を開始する方法について説明します。
親トピック: テスト スクリプトを分析する
関連概念
UI のツアー


テスト実行を分析する

  1. スクリプト試行によって TrueLog が TrueLog Explorer に読み込まれた状態で、ワークフロー バー の テストの分析 ボタンをクリックします。 テストの分析 ダイアログ ボックスが表示されます。
  2. 次のいずれかのオプションで操作を続行します。
    • 仮想ユーザー要約レポートの表示
    • TrueLog 内のエラーの検索
    • 再生テスト実行と記録テスト実行の比較
親トピック: TrueLog Explorer による視覚的分析


仮想ユーザー要約レポートを表示する

仮想ユーザー要約レポートは、個々のスクリプト試行について要約したレポートで、基本情報とタイミング平均を含みます。 それぞれのレポートは 1 人の仮想ユーザーについて作成されます。 データは表形式で表示されます。
注: 仮想ユーザー要約レポートの処理にはかなりの時間がかかるので、デフォルトでは生成されない設定になっています。

アニメーションを指定したスクリプトの試行が終了したときや、メニュー ツリーで TrueLog ファイルのルート ノードをクリックしたときに、自動的に仮想ユーザーレポートが表示されるようにするには、 設定 > オプション > ワークスペース > レポート で 仮想ユーザー レポートを表示する チェック ボックスをオンにしてください。

仮想ユーザー要約レポートには、以下に関する詳細情報が含まれています。
  • 仮想ユーザー
  • 検出されたエラー
  • テスト スクリプトに定義されているトランザクションごとに追跡したレスポンス時間情報
  • ダウンロードされた Web ページごとのページ タイマの測定値
  • テスト スクリプトで宣言されている各 Web フォームに関連する測定値。POST、GET、および HEAD の各メソッドを使用したフォーム送信に対するレスポンス時間測定値とスループットを含みます。
  • スクリプトで使用された個別のタイマおよびカウンタ (Measure 関数)
  • IIOP、Web フォーム、TUXEDO、SAP などに関連する情報
親トピック: テスト スクリプトを分析する


TrueLog 内のエラーを検索する

TrueLog Explorer では、スクリプトの試行の後でエラーをすばやく検索できます。 そして、エラーとなったリクエストを調査して、必要なカスタマイズを行うことができます。

注: メニュー ツリーでは、再生エラーを含む API ノードは赤い「X」印が付いて表示されます。
  1. 分析または変更したい TrueLog を開きます。
  2. ワークフロー バーの テストの分析 をクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが開きます。
  3. エラーの検索 リンクをクリックします。 TrueLog のステップ スルー ダイアログ ボックスが、エラー オプションが選択された状態で表示されます。
  4. 一度に 1 つのエラーを検索しながら TrueLog 結果ファイル内を移動するには、次を検索 をクリックします。 別の方法で TrueLog 内を移動して、スクリプトが意図どおりに動作したかを視覚的に検証することもできます (ページ全体、HTML ドキュメント、フォーム送信、または API 呼び出し)。
親トピック: テスト スクリプトを分析する


ページ統計値を表示する

テスト実行が正確であることを検証した後、TrueLog Explorer では、情報 ペインの 統計 タブを使って、"負荷のない" 状態でのアプリケーションのパフォーマンスを分析できます。概要 ページには、ページの総レスポンス時間、ドキュメント ダウンロード時間 (サーバー ビジー時間を含む)、埋め込みオブジェクトの受信に要した時間が表示されます。

詳細な Web ページ統計には、個々の Web ページ コンポーネントの正確なレスポンス時間が表示されます。この詳細統計を使って、エラーやページ ダウンロードの遅延の根本原因を突き止めることができます。

Web ページの詳細な分析結果には、ページ コンポーネントごとに以下のデータが記載されています。
時間 | 説明
DNS | ホスト名を IP アドレスに変換する時間。
接続 | サーバーとの接続を確立する時間。
SSL ハンドシェイク | 既存の接続にセキュリティ層を確立する時間。クライアントとサーバーは、証明書を交換し、関連するキーを含む暗号化テクノロジに合意し、データ伝送をセキュリティで保護します。
送信 | Silk Performer からオペレーティング システムにリクエスト データを渡す時間。オペレーティング システムからサーバーにリクエスト データを送信するにかかる時間は、この値には含まれません。
サーバー ビジー | オペレーティング システムからサーバーにリクエスト データを送信する時間、サーバー上でレスポンス データを計算する時間、およびサーバーからクライアントにレスポンス データの最初のバイトを送信する時間（ネットワーク遅延を含む）。
受信 | レスポンス データ全体を受信する時間。
キャッシュ統計値 |
  • 概要ページを表示する
    テスト実行の正確性を検証したら、概要ページで Web ページ統計を利用して、アプリケーションのパフォーマンスを分析できます。
親トピック: テスト スクリプトを分析する


概要ページを表示する

  1. API ノードのツリー メニューから、統計を表示する API ノードを選択します。
  2. 統計 タブをクリックして、統計 ビューを開きます。
  3. 詳細分析およびページの掘り下げを行うには、[URL] 列に一覧されている中から、特定のコンポーネントを選択します。
親トピック: ページ統計値を表示する


記録 Truelog と再生 Truelog を比較する

スクリプトの開発プロセス中に生成された TrueLog と、当初生成された TrueLog を比較することで、テスト スクリプトが正確に実行されたかどうかを確かめることができます。

  1. ワークフロー バーの テストの分析 ボタンをクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが表示されます。
  2. テスト実行の比較 をクリックします。
  3. 対応する記録 TrueLog が比較ビューに開き、TrueLog のステップ スルー ダイアログ ボックスが、 ブラウザ ノード オプションが選択された状態で表示されます。これにより、TrueLog をノードごとに比較することができます。
  4. 次を検索 ボタンをクリックすると、TrueLog 結果ファイル内を 1 ページずつ移動することができます。
    注: 再生時のコンテンツを表示しているウィンドウには、左上隅に緑色の三角マークが付いています。 アプリケーションの記録時に元々表示されていたコンテンツを表示しているウィンドウには、左上隅に赤い三角マークが付いています。
  • 記録 TrueLog と再生 TrueLog を同期させる
    比較モードでは、記録値と再生値の差分を識別できるように、再生 TrueLog と記録 TrueLog の間で対応する API ノードを同期することができます。
親トピック: テスト スクリプトを分析する


記録 TrueLog と再生 TrueLog を同期させる

比較モードでは、記録値と再生値の差分を識別できるように、再生 TrueLog と記録 TrueLog の間で対応する API ノードを同期することができます。

注: この機能は、TrueLog の自動同期が有効になっている場合は無効になります。
  1. 次のいずれかを実行して比較モードを有効にします。
    • 表示 > 比較モード を選択します。
    • ツールバーの 比較モード ボタンをクリックします。
  2. 対応する一組の記録/再生 TrueLog を開きます。
  3. API ノードを右クリックし、TrueLog の同期 を選択します。 TrueLog Explorer は、対応する TrueLog 内で、選択された API ノードと最も相関がある API ノードを見つけます。
親トピック: 記録 Truelog と再生 Truelog を比較する


テスト スクリプトをカスタマイズする

Silk Performer でテスト スクリプトを生成し、スクリプトの試行を実行したら、TrueLog Explorer を使用して次の方法などでスクリプトをカスタマイズすることができます。
  • 入力データのパラメータ化- ユーザー データのカスタマイズでは、記録された静的ユーザー入力データを、トランザクションごとに変化するパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。 このようなデータ駆動型テストを実行するために手動でスクリプトを作成する必要はありません。 この機能は、Web アプリケーション、データベース アプリケーション、XML アプリケーション、Citrix アプリケーション、SAPGUI アプリケーション、ターミナル エミュレーション アプリケーション、Oracle Forms アプリケーションで有効です。
  • テスト スクリプトへの検証の追加- 検証の追加 ツールを使うと、テスト中にダウンロードされたデータの内容を確認することができ、サーバーの送信したコンテンツをクライアントが受信していることを検証できます。 検証は、システム開発後も、稼働中のパフォーマンス管理に役立ちます。 この機能は、Web アプリケーション、データベース アプリケーション、XML アプリケーション、SAPGUI アプリケーション、Citrix アプリケーション、ターミナル エミュレーション アプリケーション、Oracle Forms アプリケーションで有効です。 TrueLog Explorer は、Citrix サーバーをホストとするアプリケーションのビットマップとウィンドウの検証をサポートしています。
  • ユーザー入力データのカスタマイズ
    記録されたユーザー入力データをパラメータ化されたデータに置き換えることによってユーザー入力データのカスタマイズを行い、テスト スクリプトをより現実的なものにする方法について説明します。
  • 検証
    アプリケーション エラーは誤った HTTP レスポンスの原因にならないことが多いため、多くの場合、更なるチェックを行わなければ見過ごされます。
  • 解析関数
    Web サーバーから返された内容を解析し、その値がテスト基準を満たすかどうかを確認する方法を説明します。
  • セッション処理
    一意のセッション ID をテスト スクリプトでカスタマイズする方法を説明します。
  • ユーザー プロファイル
    ブラウザ タイプと帯域幅で仮想ユーザー プロファイルがどう定義されるかを説明します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
関連概念
スクリプトをカスタマイズする


ユーザー入力データのカスタマイズ

ユーザー入力データのカスタマイズを行わないと、シミュレートするトランザクションはすべて同一のものになり、現実の環境でよく見られる変数を再現できません。

たとえば、パラメータ ウィザード を使用すると、テスト中にフォームに入力されるユーザー入力データをカスタマイズできます。パラメータ ウィザード を使用すると、テスト中にフォーム フィールドに入力される値を指定できます。そして、記録されたユーザー入力データをランダムなパラメータ化されたユーザー データに置き換えることによって、テスト スクリプトをより現実的なものにすることができます。

  • 新しいパラメータを使用して HTML ユーザー データをカスタマイズする
    ランダム変数に基づいてパラメータを作成する手順を説明します。
  • AJAX およびスクリプトのカスタマイズ
    Silk Performer が AJAX (Asynchronous JavaScript and XML) リクエストを使用する Web アプリケーションの記録および再生を行う方法について説明します。
親トピック: テスト スクリプトをカスタマイズする


新しいパラメータを使用して HTML ユーザー データをカスタマイズする

読み進める前に、静的なセッション情報がすべてテスト スクリプトから削除されていることと、最も最近のスクリプトの試行で TrueLog Explorer に表示される TrueLog が生成されていることを確認してください。

HTML ベースのアプリケーションでは、ユーザー データのカスタマイズの目標は、フォーム フィールドに送信される値をカスタマイズすることです。

このタスクでは、ランダム変数に基づいてパラメータを作成する手順を説明します。

  1. ワークフロー バーの ユーザー データのカスタマイズ をクリックします。 ワークフロー - ユーザー データのカスタマイズ ダイアログ ボックスが開きます。
  2. HTML フォームにおけるユーザー入力データのカスタマイズ リンクをクリックします。 これにより、TrueLog Explorer で以下のアクションが行われます。
    • メニュー ツリーで、最初の WebPageSubmit API 呼び出しノードを選択します。
    • TrueLog のステップ スルー ダイアログ ボックスを開きます (フォーム送信 オプション ボタンが選択されています)。
    • リクエスト ビューが表示されます。

      リクエスト ビューには、選択されている WebPageSubmit 呼び出しによって送信された HTML フォームが含まれているページが表示されます。カーソルをフォーム コントロールの上に置くと、ツールチップに、そのコントロールの名前、初期値、および送信値が表示されます。オレンジ色の線は、下にある フォーム データ ビュー内の対応する BDL フォーム フィールド宣言を示します。

  3. TrueLog のステップ スルー ダイアログ ボックスの 次を検索 または 前を検索 をクリックすると、TrueLog 内のすべての WebPageSubmit 呼び出しに目を通すことができます (これらは、ユーザー データのカスタマイズの候補となる呼び出しです)。
    注: リクエスト ビューで強調表示されている HTML コントロールは、カスタマイズ可能なフォーム フィールドを表しています。
  4. リクエスト ページで、カスタマイズしたいフォーム コントロールを右クリックし、値のカスタマイズ を選択します。 記録されている値を、さまざまな種類の入力データ（ファイルにあらかじめ定義した値や一般的なランダム値を含む）に置き換えることができます。また、記録された入力データをカスタマイズした値に置き換えるためのコードをテスト スクリプトに生成することもできます。 パラメータ ウィザード が開きます。
    パラメータ ウィザード では、次の 2 つの方法でスクリプトの値を変更できます。
    • スクリプトの dclparam または dclrand のセクションで定義されている既存のパラメータを使用する
    • 新しい定数値、ランダム値、複数列データ ファイル内の値に基づいた、新しいパラメータを作成する

    新しいパラメータを作成すると、そのパラメータは既存パラメータ群に追加され、以降のカスタマイズで利用できるようになります。

  5. パラメータを新規に作成する オプション ボタンをクリックし、それから 次へ をクリックして新しいパラメータを作成します。 パラメータの新規作成 ページが開きます。
  6. ランダム変数からパラメータを作成 オプション ボタンをクリックし、それから 次へ をクリックします。 ランダム変数 ページが開きます。
  7. テスト スクリプトに挿入したいランダム変数の種類をリストボックスから選択し、次へ をクリックします。 選択した変数の種類の簡単な説明が下部のウィンドウに表示されます。 変数の名前と属性の指定 ページが開きます。
  8. 変数の名前を 名前 テキスト ボックスに入力します。
  9. 値を呼び出す順序として ランダム または シーケンシャル を指定します。 ファイルからの文字列 というランダム変数タイプでは、指定されたファイルからランダムに選択または順次選択できるデータ文字列が生成されます。
  10. ファイル グループ ボックスの 名前 リスト ボックスから構成済みのデータ ソースを選択して、次へ をクリックします。
    使用法の選択 ページが表示されます。
  11. 以下の選択肢のいずれかを選択して、新しいランダム変数の使用法を指定します。
    • 毎回
    • トランザクションごと
    • テストごと
  12. 完了 をクリックします。 これで、テスト スクリプトは、そのフォーム フィールドについて、記録された値ではなくランダム変数を使用するようになります。新しいランダム変数関数が BDL ページに追加されます。

テスト スクリプトにランダム変数関数を追加した状態でスクリプトの試行を起動し、スクリプトがエラーなしに動作することを確かめます。

親トピック: ユーザー入力データのカスタマイズ


AJAX およびスクリプトのカスタマイズ

Silk Performer Recorder は、AJAX (Asynchronous JavaScript and XML) リクエストを利用した Web アプリケーションを記録して、それを再生できます。これが可能なのは、HTML レスポンス内の XML や JSON の形式で受信した AJAX 同期リクエスト/レスポンスを Silk Performer が認識しているからです。Silk Performer は、WebPageUrl 呼び出し時に発生する AJAX リクエストを記述します。

Silk Performer および TrueLog Explorer は、AJAX リクエスト内の値へのアクセスをサポートしています。これによって、スクリプト カスタマイズ機能 (入力データのパラメータ化、検証、解析、およびセッション情報のカスタマイズなど) を利用できます。
ヒント: InsuranceWeb デモ アプリケーション (http://demo.borland.com/InsuranceWebExtJS/ で利用可能) には、テスト目的で JSON と XML シリアル化メソッドを切り替える機能が備わっています。Select a Service or login リストから、JSON の場合は Agent Lookup を、XML の場合は Agent Lookup (XML) を選択します。

JSON データと XML データの書式整形

JSON および XML は、AJAX アプリケーションや REST 技術などの環境で一般に使われるデータ構造形式です。Silk Performer は、BDF スクリプト内の XML 形式や JSON 形式のバイト ストリームを、書式整形して表示する機能をサポートしています。レンダリングされた JSON 形式のデータに対して、TrueLog Explorer のカスタマイズ機能を利用して、文字列値のカスタマイズがさらに簡単にできます。

JSON 形式のデータを BDF スクリプトに記録または挿入すると、Silk Performer は JSON バイト ストリームをそのまま表示します。JSON 形式で表示されると、Silk Performer のパラメータ ウィザードを使用して XML のカスタマイズを簡単に行うことができます。

Silk Performer には、JSON データを、書式整形された JSON 用のレンダリング ビューで表示するか、JSON のバイト ストリームをそのまま表示するかを選択するオプションがあります。

JSON の理解

JSON.org (www.json.org) によると、"JSON (JavaScript Object Notation) は、軽量なデータ交換形式です。人にとっては読み書きがしやすく、マシンにとっては解析および生成がしやすくなっています。JSON は、JavaScript プログラミング言語のサブセットに基づいています...""JSON はテキスト形式であり、言語を完全に気にせずに使用できますが、C、C++、C#、Java、JavaScript、Perl、Python などその他多くの C 言語ファミリーのプログラマによく知られている規約を使用します。このような特性により、JSON は理想的なデータ交換言語となります。"

  • TrueLog Explorer で JSON および XML 表示の書式整形を有効化する
    TrueLog Explorer が JSON データや XML データを検出できない場合には、レンダリング ページで JSON および XML を表示する際の書式整形を有効化します。
  • Silk Performer で JSON および XML 表示の書式整形を有効化する
    Silk Performer が AJAX のデータ文字列を拡張された JSON 形式で表示するか、XML をそのまま表示するかを指定できます。
親トピック: ユーザー入力データのカスタマイズ


TrueLog Explorer で JSON および XML 表示の書式整形を有効化する

TrueLog Explorer が JSON データや XML データを検出できない場合には、レスポンス ページで JSON および XML を表示する際の書式整形を有効化します。TrueLog Explorer が JSON データや XML データを検出すると、レスポンス ページは自動的に書式整形されます。

  1. TrueLog メニュー ツリーで JSON 形式または XML 形式のデータを含むノード (HTTP Post コマンド ノードなど) を選択します。
  2. レスポンス タブをクリックします。
  3. JSON データまたは XML データを右クリックし、ファイルの種類を指定してレンダリング > JSON または ファイルの種類を指定してレンダリング > XML を選択してデータを書式整形します。
親トピック: AJAX およびスクリプトのカスタマイズ
親トピック: AJAX 対応 Web アプリケーションでの作業
関連タスク
Silk Performer で JSON および XML 表示の書式整形を有効化する


Silk Performer で JSON および XML 表示の書式整形を有効化する

  1. JSON 形式または XML 形式のデータを含む BDL スクリプト内で、表示する画面データを右クリックします。
  2. コンテキスト メニューから望ましい表示形式を選択します。
    • データを拡張 JSON 形式にするには、 記述形式 > JSON を選択します。
    • データを XML 形式にするには、 記述形式 > XML を選択します。
    コンテキスト メニューから 記述形式 > 自動判定 を選択すると、Silk Performer が画面データの種類に最適な形式を判断するようにできます。 デフォルトでは、JSON および XML データは、BDF スクリプトで書式整形されます。
  3. 書式整形されたデータ文字列を右クリックして、Silk Performer の標準の文字列カスタマイズ コマンドにアクセスします。
    注: 書式整形された JSON データは、Silk Performer コード エディタに統合されるので、JSON 形式は、ツールバーの 元に戻す/やり直し ボタンを使用して取り消し/やり直しできます。
    注: 書式整形された JSON および XML データの表示は、TrueLog Explorer でも利用できます。
親トピック: AJAX およびスクリプトのカスタマイズ
関連タスク
TrueLog Explorer で JSON および XML 表示の書式整形を有効化する


検証

多くの場合、アプリケーション エラーが原因で誤った HTTP レスポンスが発生することはありません。 その代わり、アプリケーションは間違ったデータ値や、HTML コンテンツに組み込まれたエラー メッセージ (A Servlet Exception occurred... や Server Too Busy... など) を返します。 HTTP ステータス コードの簡単なチェックでは、この種のエラーは検出されません。 そのため、アプリケーション チェックをテスト スクリプトに組み込まない場合、アプリケーション エラーはしばしば見過ごされます。 検証関数は、単純な標準 HTTP エラー以外のアプリケーション エラーをチェックするのに役立ちます。

検証をテスト スクリプトに組み込むと、テストは単純な負荷テストから発展して、負荷テストと機能テストが組み合わさったものになります。 大規模な負荷テスト シナリオの際にも、パフォーマンス上の大きな不利益を被らずにこれらのスクリプトを使用することができます。 そのため、これらは新しい種類のアプリケーション エラー、つまり、負荷がかかったときにのみ発生し、付加的な検証チェックを行わない簡単な負荷テスト スクリプトでは見過ごされる可能性が高いエラーを検出できるようになります。

Silk Performer には、テスト スクリプトを検証機能で強化する方法が以下の 3 とおりあります。

  • 記録セッション時に検証関数を自動的に Recorder に生成させます。
  • 検証関数のコードを手動で作成することにより、スクリプトを直接に機能強化します。
  • TrueLog Explorer を通じて検証を視覚的に適用します。BDL コードを 1 行も書く必要はありません。 TrueLog Explorer が検証関数をスクリプト内に自動的に生成します。
    ヒント: 詳細については、TrueLog Explorer のヘルプを参照してください。
  • 記録中に自動的に検証を生成する
    HTML ページ タイトル検証およびレスポンス データのダイジェスト検証が、記録セッション中に自動的に生成されます。
  • タイトル検証
    タイトル検証は、アプリケーションが正しい Web ページを返すかどうかを確かめる簡単かつ自動的な手段になります。
  • ダイジェスト検証
    ダイジェスト検証は、比較的変更がない HTML ページのコンテンツを検証する場合に便利です。
  • 再生中に検証チェックを有効にする
    Silk Performer のプロファイル設定で再生中の検証チェックを有効または無効にします。
  • コンテンツ検証関数を挿入する
    検証関数を使うと、負荷のない状態で、クライアントから受け取ったコンテンツが、サーバーから送信されたものと同じであることを検証できます。
親トピック: テスト スクリプトをカスタマイズする
関連概念
検証を追加する
関連タスク
Storing Output Values in Variables


記録中に自動的に検証を生成する

Silk Performer スクリプトによる記録中に、自動的に検証を生成できるようにするには:

  1. Silk Performer 内から、設定 > アクティブ プロファイル を選択します。 プロファイル - [<プロファイル名>] - シミュレーション ダイアログが表示されます。
  2. ショートカット リストから 記録 > Web を選択し、検証 タブをクリックします。
  3. 記録 セクションで、タイトル検証を記録する および ダイジェスト検証を記録する チェック ボックスをオンにします。
  4. OK をクリックします。
親トピック: 検証
親トピック: 検証チェック


タイトル検証

タイトル検証は、アプリケーションが正しい Web ページを返すかどうかを確かめる簡単かつ自動的な手段になります。HTML ドキュメントを取得する際に、Recorder は、ページ レベルの Web API 呼び出しまたは低レベルの Web API 呼び出しごとにタイトル検証関数を自動的に生成できます。

注: HTML ページ タイトル (<TITLE HTML> タグの内容) が設定されていない場合や共通の名前を共用している場合には、タイトル検証は機能しません。

タイトル検証

transaction TMain
begin
  ...
  WebVerifyHtmlTitle("ShopIt - Greetings", WEB_FLAG_IGNORE_WHITE_SPACE |
    WEB_FLAG_EQUAL | WEB_FLAG_CASE_SENSITIVE, 1,
    SEVERITY_ERROR, bVerifyTitleSuccess1);
  WebPageUrl("http://myHost/shopit");
親トピック: 検証
関連タスク
タイトル検証関数を生成する
関連資料
WebVerifyHtmlTitle Function


ダイジェスト検証

ダイジェスト検証は、比較的変更がない HTML ページのコンテンツを検証する場合に便利です。ダイジェスト検証は、動的な HTML ページ、つまりハイパーリンク、埋め込まれたオブジェクト、または非表示のフォーム フィールドにセッション情報を含んでいるために呼び出しごとに変化する HTML ページには役に立ちません。

この関数は、WebVerifyDataDigest チェックおよび WebVerifyHtmlDigest チェックを呼び出して、Silk Performer が再生中に受け取ったデータと、Recorder が対応する記録セッション中に取得したデータが異なるかどうかを検証します。これらの関数呼び出しによって、Silk Performer はすべての文字の出現に関する情報を含むダイジェストを生成し、それらの結果と Recorder によって生成されたダイジェストを比較します。この関数により、Silk Performer が、記録中に取得したデータと同じデータを再生中に取得するかどうかを検証できます。Recorder は、ダイジェスト検証に指定されたコンテンツ タイプ (デフォルトのコンテンツ タイプは、text/html) のドキュメントを受け取る各ページ レベルの Web API 呼び出しおよび低レベルの Web API 呼び出しに対するダイジェスト検証関数を自動的に生成します。

ダイジェスト検証

const
  gsVerDigest_ShopIt_Greetings := "\h014200000B..."
                                  "\h016000500A..."
                                  "\h030001000A..."
                                  "\h0900410020...";

transaction TMain
begin
  ...
  WebVerifyDataDigest(gsVerDigest_ShopIt_Greetings, 162);
  WebPageUrl("http://myHost/shopit", "ShopIt - Greetings");
  ...
end TMain;
親トピック: 検証
関連タスク
HTML ダイジェスト検証関数を生成する
HTML データ ダイジェスト検証関数を生成する
関連資料
WebVerifyDataDigest Function
WebVerifyHtmlDigest Function


再生中に検証チェックを有効にする

スクリプト再生中に有効または無効にできる検証チェックのリストに対する検証設定オプションを確認します。

ヒント: スクリプトのプロファイル設定は、WebSetOption という BDL 関数を使って上書きできます。
  1. Silk Performer 内から、設定 > アクティブ プロファイル を選択します。 プロファイル - [<プロファイル名>] - シミュレーション ダイアログが表示されます。
  2. ショートカット リストから 再生 > Web を選択し、検証 タブをクリックします。
  3. HTML/XML と データ 領域で、再生中に有効化する検証チェック対象のチェック ボックスをオンにします。
親トピック: 検証
親トピック: 検証チェック
関連資料
WebSetOption Function


コンテンツ検証関数を挿入する

  1. 分析または変更したい TrueLog を開きます。
  2. 検証したいコンテンツ (テキストや画像など) を含む TrueLog API ノードを選択します。
  3. 検証したいコンテンツを ソース ページで選択します。
    注: ページ タイトル検証関数およびページ ダイジェスト検証関数の場合は、このステップは不要です。
  4. ワークフロー バーの 検証の追加 をクリックします。 ワークフロー - 検証の追加 ダイアログ ボックスが開きます。
  5. 有効になっている検証を以下から 1 つ選択します。
    • ページ タイトルの検証
    • 選択したテキストの検証
    • HTML テーブル内で選択したテキストの検証
    • ダイジェストの検証
  6. 表示されるダイアログ ボックスに必要事項を入力します。 検証関数を BDL スクリプトにどう挿入するかを指定します。
    注: [左境界] と [右境界] は、自動的に識別されます。
  7. BDL スクリプトに追加したい検証それぞれについて、この作業を繰り返します。
  8. ワークフロー - 検証の追加 ダイアログ ボックスで はい をクリックします。
    スクリプトの試行が開始します。
  9. 検証が正常に合格したことを確認します。 検証を含む API ノードには、青い "V" 印が表示されます。

親トピック: 検証


解析関数

解析関数は、検証関数と似ていますが、Web サーバーから返された内容を解析し、その値がテスト基準を満たすかどうかを確認するために使用されます。 検証関数が、基本的に指定された入力値の出現をチェックするのとは異なり、解析関数は、サーバー レスポンスの内容を解析し、解析された値を BDL 変数で返します。 通常、解析関数は以下のタスクで使用します。

  • Web アプリケーションの状態情報を管理するために、セッション ID を解析して、スクリプト内の静的なセッション ID を解析された動的なセッション ID に置き換えます。 これは、解析関数の主な適用領域の 1 つです。
  • 解析関数を使用して、検証関数では実現できない機能強化された検証をスクリプトに作成します。 たとえば、HTML テーブルの 3 行目 2 列目の値が、1 行目 2 列目の値と 2 行目 2 列目の値の和に等しいかどうかを検証できます。 スクリプトで解析関数を使用することによって、3 つの値を解析し、それらを比較することによって、この機能強化された検証チェックを作成できます。
  • サーバーから返されたデータに基づいて、テスト スクリプトの一部を条件実行します。 たとえば、HTTP リクエストが、Results: <nnn> items found を含む HTML ページを返すとします。 <nnn> の値に基づいて、異なるアクションを実行します。 たとえば、<nnn> = 0 の場合は、トランザクションを終了し、<nnn> = 1 の場合は、リンク 詳細 に移動し、<nnn> is greater than 0 の場合は、リンク 次へ に移動します。 これを実現するには、 HTML ページの <nnn> の値を解析し、解析した値に基づいたアクションをスクリプトに記述する必要があります。

Silk Performer は、テスト スクリプトを解析機能で拡張するための 2 つの方法を提供します。

  • 検証関数を手動でコーディングすることによって、スクリプトを直接機能強化します。
  • TrueLog Explorer で解析関数を視覚的に適用します。BDL コードは、1 行も記述する必要はありません。 TrueLog Explorer は、スクリプトに解析関数を自動的に生成します。
    ヒント: 詳細については、TrueLog Explorer のヘルプを参照してください。
  • HTML コンテンツの解析
    HTML コンテンツの解析関数は、レンダリングで表示された HTML コンテンツの部分を解析できます。
  • レスポンス データの解析
    データ解析関数は、サーバーから返されたレスポンス データの一部を解析します。
親トピック: テスト スクリプトをカスタマイズする


HTML コンテンツの解析

HTML コンテンツの解析関数は、レンダリングで表示された HTML コンテンツの部分を解析できます。 HTML コンテンツの検証関数と解析関数では、ブラウザで表示されるテキスト コンテンツを検証や解析できます。 TrueLog Explorer の HTML ビュー にある、次の HTML コンテンツの解析関数を適用します。

  • WebParseHtmlBound
  • WebParseHtmlTitle
  • WebParseTable
  • WebParseResponseTag
  • WebParseResponseTagContent
親トピック: 解析関数
関連概念
HTML 検証関数
関連資料
WebParseHtmlBound Function
WebParseHtmlTitle Function
WebParseTable Function
WebParseResponseTag Function
WebParseResponseTagContent Function


レスポンス データの解析

データ解析関数は、サーバーから返されたレスポンス データの一部を解析します。 HTML ドキュメントがサーバーから返された場合、HTML ドキュメントのソース コード全体が解析されます。 TrueLog Explorer の ソース ビュー にデータ検証関数を適用します。これには、以下の関数が含まれます。

  • WebParseDataBound (この関数は、廃止された WebParseResponseData 関数を置き換えます)
  • WebParseResponseHeader
親トピック: 解析関数
関連概念
レスポンス データ検証関数
関連資料
WebParseDataBound Function
WebParseResponseHeader Function


セッション処理

Web アプリケーションは、Web サーバーが以降のクライアントのリクエストを処理できるように、一意の Web セッション ID を多くの場合使用します。

詳細については、TrueLog Explorer のヘルプを参照してください。

  • セッション処理のカスタマイズ
    セッション ID の仕組みと Silk Performer で処理する方法について説明します。
  • カスタマイズしたセッション処理を使用すべき場合
    スクリプト内の WebPageUrl 呼び出しで、クエリ文字列の一部にセッション ID が含まれる URL を使用する場合は、セッション処理をカスタマイズする必要があります。
  • セッション処理のカスタマイズ
    セッション処理のカスタマイズに必要な基本ステップについて説明します。
親トピック: テスト スクリプトをカスタマイズする


セッション処理のカスタマイズ

Web サーバー アプリケーションが、今後のクライアント リクエストを識別するために必要な情報を実行時に生成することがよくあります。 サーバーは、ブラウザへのレスポンスに、一意の文字列 (セッション ID と呼ばれる) を含めます。 この文字列は後続の各リクエストの一部としてブラウザからサーバーに返ります。これによりサーバーはリクエストが一部になっている固有な Web セッションを識別できます。 一般に、セッション ID はメソッドを参照し、Web サーバー アプリケーションは個別のユーザーを識別するために、該当するユーザーに対して以前にアプリケーションが持っていたユーザーのセッション情報の状態とこの ID を関連付けるために使用します。

セッション ID は、さまざまな方法でクライアントに送信されます。 クッキーにセッション ID を含めることはよくあります。またはハイパー リンクで使用される、URL の一部として内部 HTML、または埋め込みオブジェクト、非表示の HTML フォーム フィールドに含まれます。 セッション ID は、クッキー、URL、および HTTP のポスト データでサーバーに送り返されます。

クッキー内のセッション情報

サーバーから:

Set-Cookie: SessionID=LGIJALLCGEBMIBIMFKOEJIMM; path=/

サーバーへ:

Cookie: SessionID=LGIJALLCGEBMIBIMFKOEJIMM

HTML リンクの URL にあるセッション情報

サーバーから:

<html>
  ...
  <a href="/ShopIt/acknowledge.asp?SessionID=LGIJALLCGEBMIBIMFKOEJIMM" >
  Enter Shop
  </a>
 ...
</html>

サーバーへ:

GET /ShopIt/acknowledge.asp? SessionID = LGIJALLCGEBMIBIMFKOEJIMM HTTP/1.1

セッション情報が、非表示のフォーム フィールドに含まれる場合

サーバーから:

<html>
  ...
  <form action="kindofpayment.asp" method="post" >
  Currently we only accept Credit Cards
  <input type="hidden" name="SessionID" value="LGIJALLCGEBMIBIMFKOEJIMM">
  <input type="text" name="name" value="Jack " >
  <input type="submit" name="paymentButton" value="Submit">
  </form>
  ...
</html>

サーバーへ:

POST /ShopIt/kindofpayment.asp HTTP/1.1
...
SessionId=LGIJALLCGEBMIBIMFKOEJIMM&name=Jack&paymentButton=Submit
親トピック: セッション処理


カスタマイズしたセッション処理を使用すべき場合

スクリプト内の WebPageUrl 呼び出しで、クエリ文字列の一部にセッション ID が含まれる URL を使用しているとしましょう。このスクリプトを再生すると、ハードコードされたこの静的なセッション ID がサーバーに送信されます。セッション ID では再生したセッションが正しく識別されないため (それでも記録セッションは識別されます)、再生は正しく機能しません。スクリプト内の静的なセッション ID を実行時に生成された動的な値に置き換えなければ、Web アプリケーションでは通常、We are sorry, your session has expired.Please return to the login screen and try again (セッションが期限切れです。ログイン画面に戻ってやり直してください) などのエラーが発生します。

幸いなことに、Silk Performer ではセッションのカスタマイズが必要になることは多くなく、仮にセッションの手動カスタマイズが必要な場合でも、Silk Performer の TrueLog Explorer の指示に従って手順を進めることができます。

ほとんどの場合、スクリプトを記録する際には、セッション処理をカスタマイズするために必要な変更は何もなく、そのまま動作します。Silk Performerでは、そのため、以下のようにハードコードされたセッション ID をユーザーが手動で処理しないですむように、非常に高度な方法を複数用いています。

  • クッキー管理：サーバーがセッション情報の交換にクッキーを使用する場合、Silk Performer では動的なセッション ID 値を自動的に処理します。Silk Performer はブラウザのクッキー管理を正確にエミュレートしているため、ブラウザがサーバーに送信するのと同じようにクッキーを送信します。状態管理に手動操作は不要です。
  • ページ レベルの Web API：記録の際にページレベル API を使用する (これがデフォルト設定) と、WebPageLink や WebPageSubmit などの、コンテキストのある Web API 関数呼び出しを主に生成するスクリプトが生成されます。コンテキストのある Web API 呼び出しは、HTTP レベルではなく HTML レベルで動作するため、URL をパラメータとして使用しません。コンテキストのあるすべての API 呼び出しでは、セッションの手動カスタマイズは必要ありません。ページレベル API が使用されるのは、ワークフロー - プロジェクトの概要設定 ダイアログでアプリケーションの種類として Web business transaction (HTML/HTTP) を選択した場合です。そのため、低レベルの Web API ではなく Silk Performer のページレベル API を使用することを強くお勧めします。

HTML の動的生成にクライアント側 Java Script を多用した結果、Silk Performer Recorder が HTML コンテキストを見失い、コンテキストのない Web API 呼び出しを記述する場合があります。WebPageUrl や WebPageForm などの、コンテキストのない Web API 呼び出しには、URL がパラメータとして含まれています。これらのまれなケースでは、ハードコードされたセッション ID がスクリプトに含まれていることがあります。それらが書かれている箇所は、Web API 呼び出しの URL パラメータや、スクリプトの dclform セクションに宣言されているフォーム フィールドです。

コンテキストのあるスクリプト (カスタマイズ不要)

transaction TMain
  begin
    WebPageUrl("http://lab38/ShopIt/"); // first call is always context-less
    WebPageLink("Join the experience!");
    WebPageSubmit("Enter", SHOPIT_MAIN_ASP001);
    WebPageLink("Products");
  end TMain;

 dclform
 SHOPIT_MAIN_ASP001:
    "SessionID" := "" <USE_HTML_VAL>, // hidden value:
    "LGIJALLCGEBMIBIMFKOEJIMM"
    // recognized as a hidden form
    // field, the value is taken from
    // the actual HTML form field.
    "name" := "Jack", // changed
    "New-Name-Button" := "" <USE_HTML_VAL> ; //unchanged
    value: "Enter"

コンテキストのない関数を用いたスクリプト (カスタマイズの必要な静的なセッション データが DCLFORM セクションに含まれている)

transaction TMain
  begin
    WebPageUrl("http://lab38/ShopIt/"); // first call is always context-less
    WebPageUrl("http://lab38/ShopIt/main.asp", NULL, SHOPIT_MAIN_ASP001);
    WebPageForm("http://lab38/ShopIt/main.asp", SHOPIT_MAIN_ASP002);
    WebPageUrl("http://lab38/ShopIt/products.asp");
  end TMain;

 dclform
 SHOPIT_MAIN_ASP001:
    "from" := "welcome";

    SHOPIT_MAIN_ASP002:
  "SessionID"       := "LGIJALLCGEBMIBIMFKOEJIMM",
    "name"            := "Jack",
    "New-Name-Button" := "Enter";
親トピック: セッション処理


セッション処理のカスタマイズ

次のステップはセッション処理をカスタマイズするために必要です。

詳細については、TrueLog Explorer のヘルプを参照してください。

  1. カスタマイズするために必要なセッション ID を識別する。
  2. そのセッション ID がサーバーからクライアントへ送信された最初のレスポンス (スクリプト内の Web API 呼び出し) を検索する。
  3. Web API 呼び出しのレスポンスから見つかったセッション ID の解析結果を変数に入力する。
  4. スクリプト内の、ハードコードされているセッション ID の出現箇所すべてをその変数に置換する。
親トピック: セッション処理


ユーザー プロファイル

ブラウザ タイプ

テストで用いられる仮想ユーザーは、幅広い選択肢の中から選んだ任意の Web ブラウザとそこに装備されている任意の機能を使用するようにカスタマイズすることができます。 今日最もよく使用されているブラウザをエミュレートすることができます。 また、デバイス ユーザーにサービスを提供するブラウザなど、あまり有名でないブラウザも使用可能です。 さまざまなバージョンのスレッド処理技術および HTTP を用いて、カスタム ブラウザを定義することができます。

帯域幅

モデムは、ホーム ユーザーがインターネットへのアクセスに通常使用する手段です。 ユーザーのモデムはネットワーク通信チェーンで最も遅いリンクになることがあるため、モデムを負荷テストでシミュレートすることができます。

仮想ユーザーは、今日の消費者の間で広く使用されている主要な接続タイプの帯域幅を使用するようにカスタマイズすることができます。 カスタム設定では、接続が下り方向 (サーバーからクライアントへ) のトラフィックと上り方向 (クライアントからサーバーへ) のトラフィックに異なる帯域幅設定を使用するように定義することができます。

  • プロファイルを追加する
    負荷テスト プロジェクト用の新しいプロジェクト設定プロファイルを作成します。
  • ブラウザ設定を構成する
    同時接続数や HTTP バージョンなど、シミュレートしているネットワーク環境のブラウザ設定を構成します。
  • ブラウザ シミュレーション設定を構成する
    ブラウザ シミュレーション設定を構成し、Web サイトにアクセスする仮想ユーザーの現実的なシミュレーションを作成します。
親トピック: テスト スクリプトをカスタマイズする


プロファイルを追加する

  1. プロジェクト > プロファイルの新規作成 を選択します。 新規のプロファイル ダイアログが開きます。
  2. 新しいプロファイルの名前を入力する に名前を入力して OK をクリックします。 プロジェクト メニュー ツリーで プロファイル フォルダが展開し、新しいプロファイルが利用可能になります。
親トピック: ユーザー プロファイル
関連概念
プロファイルの管理


ブラウザ設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで Web アイコンをクリックします。
  4. ブラウザ タブをクリックします。 ブラウザの種類 領域を使用して、ブラウザ固有の設定を行います。
  5. ブラウザ リスト ボックスから、シミュレーションに使用する Web ブラウザを選択します。 この選択により、HTTP リクエストに含まれるヘッダー情報の形式と、シミュレーションに使用するスレッド モデルが決まります。
    注: モバイル Web アプリケーション テスト (iPhone、iPad、Android、Windows Phone または Blackberry) では、記録に使用するユーザー エージェント文字列を変更できます。
  6. OK をクリックして、設定を保存します。
親トピック: ユーザー プロファイル


ブラウザ シミュレーション設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで Web アイコンをクリックします。
  4. シミュレーション タブをクリックします。 シミュレーション 領域を使用して、Web サイトを訪問するユーザーの現実的なシミュレーションのためのオプションを設定します。
  5. トランザクションのたびに、仮想ユーザーにブラウザ エミュレーションをリセットさせるには、トランザクションごとにユーザーの動作をシミュレートする チェック ボックスをオンにします。 選択した追加オプションに応じて、Silk Performer は、Web サイトを初めて訪問したユーザー、またはそのサイトを再訪問したユーザーのいずれかをシミュレートします。 サイトを初めて訪問したユーザーの場合は、永続クッキーが設定されておらず、ドキュメントもキャッシュされていません。一方、サイトを再訪問したユーザーの場合は、通常、再訪問までの間にブラウザを閉じたとしても、ドキュメントがキャッシュされ、永続クッキーが設定されています。 このオプションを無効にすると、仮想ユーザーは、テストが終了するまで閉じられることのない Web ブラウザをエミュレートします。したがって、複数のトランザクションにわたってキャッシュされた情報が再利用されます。
  6. 初めて Web サイトを訪問したユーザーを実際にシミュレートするには、初めてのユーザー オプション ボタンをクリックします。 トランザクションごとに、永続的な接続は閉じられ、Web ブラウザのエミュレーションがリセットされます。また、ドキュメント キャッシュ、ドキュメント履歴、クッキー データベース、認証データベース、および SSL コンテキスト キャッシュもクリアされます。 このオプションを選択した場合、Silk Performer は、サーバーから全サイト(すべてのファイルを含む)をダウンロードします。
  7. Web サイトを再訪問したユーザーを実際にシミュレートするには、2 回目以降のユーザー オプション ボタンをクリックします。 トランザクションごとに、永続的な接続は閉じられ、ドキュメント履歴、非永続クッキー データベース、認証データベース、および SSL コンテキスト キャッシュがクリアされます。 このオプションを選択した場合、ユーザーはドキュメント キャッシュをクリアしません。 詳細については、『The BDL Function Reference』(英語) のWebSetUserBehavior 関数を参照してください。 ユーザーの許容度をシミュレートするための詳細なオプションを調整するには、ユーザーの許容度 領域を使用します。
  8. OK クリックして、プロファイル - [<プロファイル名>] ダイアログ ボックスの設定を保存します。
親トピック: ユーザー プロファイル


ワークロードの調整

ワークロードの設定は、負荷テストを実行するプロセスの一部です。 Silk Performer には、負荷テストの基本として使用するさまざまなワークロード モデルが用意されています。 ワークロードを構成する前に、ニーズに最も適したモデルを選択する必要があります。

複数のワークロード モデルを負荷テスト プロジェクトで定義して、あとで利用するために保存できますが、一度にアクティブにできるワークロード モデルは 1 つだけです。 承認済みのベースラインの結果はワークロード モデルに関連付けられています。 ワークロード モデルをコピーまたは名前変更すると、対応して承認済みのベースラインの結果もコピーまたは名前変更されます。

  • ワークロード モデル
    使用可能なワークロード モデルについて説明します。
  • ワークロードの定義
    ユーザー タイプごとの同時使用仮想ユーザー数、期間、および関係するエージェントに基づいて、ワークロード モデルを構成します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
関連概念
仮想ユーザーの計算
関連資料
パフォーマンスとスケーラビリティ マトリクス


ワークロード モデル

Silk Performer には、次のワークロード モデルが用意されています。
  • 増加 – 負荷テストの開始時は、Silk Performer は定義されているユーザー総数ではなく、その指定された一部のみをシミュレートします。ワークロードは、ユーザー リストで指定されたすべてのユーザーが実行されるまで段階的に増加します。

    このワークロード モデルは、システムがクラッシュしたりレスポンス時間やエラーしきい値の許容範囲内で応答しなくなる負荷レベルを調べる場合に特に有効です。

  • 定常状態 – このモデルでは、テスト全体を通して同じ数の仮想ユーザーが使用されます。負荷テスト スクリプトで定義されているトランザクションを各仮想ユーザーで実行します。仮想ユーザーは、作業が終了すると再度トランザクションを実行します。トランザクション間の遅延はありません。指定されたシミュレーション時間に達すると、テストは終了します。

    このワークロード モデルは、特定の負荷レベルでのテスト対象システムの動作を調べる場合に特に有効です。

  • 動的 – 仮想ユーザー数をテストの実行中に手動で変更できます。仮想ユーザーの最大数を設定した後は、テスト中いつでもその範囲内で仮想ユーザー数を増減できます。シミュレーション時間は指定されません。テストを手動で終了させる必要があります。

    このワークロード モデルは、さまざまな負荷レベルで実験したり、負荷テスト時に負荷レベルを調節できるようにする場合に特に有効です。

  • 終日 – このワークロード モデルでは、柔軟な方法で負荷の分散を定義できます。負荷テストの任意の期間に、異なる数の仮想ユーザーを割り当てることができます。ユーザー タイプごとに異なる負荷分散を用いることができます。そのため、就業日ワークロードや週単位ワークロードなどの複雑なワークロード シナリオを設計できます。実行が開始されていない期間について、負荷テスト時に負荷レベルを調整することもできます。

    このワークロード モデルは、複雑で持続的なワークロード シナリオをできるだけ現実的な方法でモデル化する場合に特に有効です。

  • キュー – このモデルでは、トランザクションは定められた出現率に従ってスケジューリングされます。この比率は、シミュレーション時間とスクリプトの dcluser セクションで指定したトランザクション数から計算される平均間隔に基づいたランダム値です。すべての仮想ユーザーが定められたタスクを完了すると、負荷テストは終了します。
    注: このモデルでは、出現率はランダムに設定されるため、テストは指定されたシミュレーション時間より長くなる場合があります。たとえば、シミュレーション時間を 3,000 秒に指定して、100 個のトランザクションを実行する場合は、平均のトランザクション出現率は 30 秒になります。

    このワークロード モデルは、キュー メカニズムを用いて複数の同時リクエストを処理するワークロードをシミュレートする場合に特に有効です。エンド ユーザーではなく Web サーバーからリクエストを受け取るアプリケーション サーバー (たとえば、サーブレット エンジンやトランザクション サーバーなど) は通常、このようなキュー モデルを用いて正確にテストすることができます。

  • 検証 – 検証テストの実行は、拡張検証機能と組み合わせた場合に特に役立ちます。この組み合わせは、Web ベース アプリケーションの回帰テストにも用いることができます。検証テストは、個々のユーザー タイプに対して指定した数の実行を行います。

    このワークロードは、Web アプリケーションの検証を自動化する場合や、検証テストをコマンド ライン インターフェイスから開始する場合に特に有効です。

親トピック: ワークロードの調整


ワークロードの定義

負荷テストを実行する前に、使用するワークロード モデルを指定して、ワークロード設定を構成する必要があります。 ワークロード モデルを選択するには、ワークフロー バーで ワークロードの調整 をクリックします。

  1. ワークフロー バーの ワークロードの調整 をクリックします。 ワークフロー - ワークロードの選択と調整 ダイアログ ボックスが表示されます。
  2. 以下のワークロード モデルのいずれかを選択します。
    • 増加
    • 定常状態
    • 動的
    • 終日
    • キュー
    • 検証
  3. 次へ をクリックします。
  4. ヘルプにある手順に基づいて、特定のワークロード タイプを構成します。
親トピック: ワークロードの調整
関連タスク
増加ワークロードを構成する
定常状態ワークロードを構成する
動的ワークロードを構成する
終日ワークロードを構成する
キュー ワークロードを構成する
検証ワークロードを構成する


負荷テストを実行する

負荷テストでは、負荷がサーバーのパフォーマンスに与える影響を調査するために、テスト スクリプトを利用して、ターゲット サーバーに対して複数の仮想ユーザーが実行されます。 大規模な負荷テストの場合は、ローカル エリア ネットワーク上に適切なテスト環境をセットアップする必要があります。このようなテスト環境には、仮想ユーザーのホストとなるエージェント コンピュータも含まれます。

タスクを完了するには、以下のことが不可欠です。
  • 実行対象のテストに適したタイプのオプションを設定する。
  • 必須のワークロードを正確に定義する。
  • サーバーのパフォーマンスを評価するために、テスト結果の生成を有効にする。

負荷テスト中に結果セット一式のログを有効にするのは避けてください。負荷テスト結果と干渉する場合があります。 ただし、エラー時に TrueLog を生成する ログ オプションを利用すると、エラーが発生した場合に、必要なログ ファイルがディスクに書き込まれます。TrueLog On Error を利用すると、再生エラーをビジュアルに調査できます。

  • 負荷テストを実行する
    テスト環境および設定を構成したら、負荷テストを起動する準備が整いました。
  • 負荷テストを監視する
    負荷テスト中のサーバーおよび仮想ユーザーの監視に使用できるオプションについて説明します。
  • サーバー パフォーマンスの監視にグラフを使用する
    サーバー パフォーマンスのリアルタイムで色分けされたグラフを生成および表示できます。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


負荷テストを実行する

  1. ワークフロー バー の テストの実行 をクリックします。 ワークフロー - ワークロードの設定 ダイアログ ボックスが表示されます。
  2. 負荷テストを開始するには、実行 をクリックします。
  3. 結果ファイル サブディレクトリの新規作成 ダイアログ ボックスで OK をクリックします。 (省略可能) 結果サブディレクトリの名前を指定するには、一意なサブディレクトリを自動的に生成する チェック ボックスをオフにし、結果ファイルのサブディレクトリを指定する テキスト ボックスに新しいサブディレクトリの名前を入力します。
Silk Performer の表形式の監視ビューと Performance Explorer のグラフィカルな監視ビューを表示することによって、テストの進行状況とサーバーの活動状況を監視します。
親トピック: 負荷テストを実行する


負荷テストを監視する

Silk Performer の 負荷テスト実行中に、詳細なリアルタイム情報を利用できます。 クライアント側、サーバー側の両方のアクティビティの報告がグラフィック表示とフルテキストで行われるので、テストの進捗状況をその推移に従って直観的に監視できます。

テストを行うワークベンチから直接、そのテスト中のエージェント コンピュータと仮想ユーザーの総合的な概要情報を参照できます。 表示する情報の詳細レベルは、テスト中のすべてのエージェント コンピュータの進捗状況を概観するレベルから、各仮想ユーザーによって実行されるトランザクションの詳細を網羅して表示するレベルに至るまで制御できます。 各エージェントと各ユーザーの進捗情報は、複数のカテゴリに分けられています。 ユーザーごとのランタイム情報には、トランザクション、タイマ、関数、エラーに関する色分けされた見出し (カスタマイズ可能) が含まれています。

また、ターゲット サーバーのパフォーマンスのリアルタイム監視は、グラフィック形式で利用できます。 現在広く使用されているすべてのオペレーティング システムで動作する各種の Web サーバー、アプリケーション サーバー、およびデータベース サーバーからの最も関連のあるパフォーマンス関連情報がグラフで表示されます。 同時に複数のグラフを表示することもできます。これらのグラフを並べて、最も関連のあるものを比較し、対比させることができます。 メニュー ツリー エディタを利用すると、任意のデータソースから得られる要素をグラフ上で組み合わせることができます。 クライアント アプリケーションから得られるレスポンス時間その他のパフォーマンス情報は、サーバーからのパフォーマンス データと同じグラフに表示できます。 この機能によって、直接ビジュアルな比較が可能になり、サーバーの問題点がクライアントの動作に与える影響を特定することができます。

  • 負荷テスト中にエージェントを監視する
    負荷テスト中には、すべてのエージェント コンピュータのサーバー パフォーマンスを監視できます。
  • 負荷テスト中に特定のエージェントを監視する
    負荷テスト中には、特定のエージェントのサーバー パフォーマンス情報を表示することができます。
  • 負荷テスト中に特定の仮想ユーザーを監視する
    特定の仮想ユーザーに関する詳細な実行時情報を監視できます。
親トピック: 負荷テストを実行する
関連タスク
SNMP を介してサーバーのパフォーマンスを監視する


負荷テスト中にエージェントを監視する

監視 ウィンドウを使用して、負荷テスト実行中の進捗状況を表示します。 このウィンドウの上部には、エージェント コンピュータとユーザー グループの進捗情報が表示されます。

数多くの情報オプションの中から、次の情報を参照できます。

  • 特定のエージェントのステータス
  • エージェント上で完了したテストの割合
  • 実行されたトランザクション数
親トピック: 負荷テストを監視する


負荷テスト中に特定のエージェントを監視する

監視 ウィンドウの上部で、監視対象の特定のエージェントを選択します。

選択したエージェント上で実行中の仮想ユーザーについて、以下の情報が 監視 ウィンドウの下部に表示されます。

  • ステータス
  • 現在のトランザクション名
  • 完了した作業の割合
  • 実行されたトランザクション数
親トピック: 負荷テストを監視する


サーバー パフォーマンスの監視にグラフを使用する

  1. ワークフロー バーの ベースラインの確認 をクリックします。 ワークフロー - ベースラインの確認 ダイアログ ボックスが開きます。
  2. 監視オプションの定義 をクリックして、オンライン パフォーマンス データを受信するための設定を行います。 プロファイル - [プロファイル名] - 結果 ダイアログ ボックスが開きます。
  3. プロファイル - [プロファイル名] - 結果 ダイアログ ボックスで、負荷テストの実行中に 自動的に監視を開始する チェック ボックスをオンにし、以下のオプションのいずれかを選択します。
    • デフォルト監視テンプレートを使用する オプション ボタンをクリックします。
    • カスタム監視テンプレートを使用する オプション ボタンをクリックして、カスタム監視テンプレートを作成します。
  4. カスタム監視テンプレートの編集 をクリックします。 Performance Explorer が表示されます。
  5. 現在使用中のすべての監視ウィンドウを閉じます。
  6. Performance Explorer ワークフロー バーの サーバーの監視 をクリックします。 または、メニュー バーから 結果 > サーバーの監視 を選択します。

    データ ソース ウィザード/データ ソースの選択 ダイアログ ボックスが開きます。

  7. 次のいずれか 1 つのステップを行います：
    • サーバーが提供するデータ ソースがわかっている場合、定義済みのデータ ソースから選択する オプション ボタンをクリックして、一覧からあらかじめ定義されているデータ ソースを選択します。
    • サーバーが提供するデータ ソースがはっきりしない場合、データ ソースを検出させる オプション ボタンをクリックして、Performance Explorer がサーバーをスキャンして、利用可能なデータ ソースを検出します。
  8. 次へ をクリックします。 メニュー ツリーで、サーバーとアプリケーションが実行されているオペレーティング システムに対応するフォルダを展開します。
  9. 表示されたリストから、監視するサーバー アプリケーションを選択します。 たとえば、オペレーティング システムを監視するには、System を選択します。
  10. 次へ をクリックします。 接続パラメータ ダイアログ ボックスが開きます。
  11. 接続パラメータ 領域で、該当するサーバー システムのホスト名または IP アドレス、ポート番号、その他のデータなど、データ ソースへの接続に必要な接続パラメータを指定します。 指定するデータは、監視対象のコンピュータで稼働しているオペレーティング システムによって異なります。
  12. 次へ をクリックします。 表示する測定値の選択 ダイアログ ボックスが開きます。
  13. メニュー ツリーを展開して、監視する要素を選択します。
  14. 終了 をクリックします。 監視グラフには、指定した要素のサーバー パフォーマンスがリアルタイムで色分けされて表示されます。 グラフの下には、グラフに含まれている要素のリスト、色分け表示、および各要素のパフォーマンス情報が表示されます。
親トピック: 負荷テストを実行する


テスト結果の検討

Silk Performer にはテスト結果の表示、レポート、および分析に利用できるアプローチがいくつか用意されています。 定義しておいた測定をテスト中に行い、さまざまなグラフィック形式および表形式で表示することができます。 オプションは、以下のとおりです。
  • Performance Explorer：テスト結果を表示するための主要なツールです。 グラフィック機能を幅広く備えており、いくつでも必要な数の要素を持つ結果を、ユーザー定義によるグラフで表示します。 異なるテストの結果を比較することができます。 サーバー監視のための幅広い機能があります。 ユーザー タイプ統計値を時系列テスト結果情報と組み合わせた包括的な HTML ベースの概要レポートも利用できます。
  • TrueLog On Error：Silk Performer は、さまざまなアプリケーションの種類について、負荷時の視覚的検証機能を提供します。 負荷テスト中に、詳細なコンテンツ検証チェックと完全なエラーの詳細分析と組み合わせることができます。
  • 仮想ユーザー レポート ファイル：有効になっていると、これらのファイルにはユーザーごとのシミュレーション結果が格納されます。 各ユーザーの詳細な測定値が、表形式で表示されます。
  • 仮想ユーザー出力ファイル：有効になっていると、これらのファイルにはテスト スクリプトに使用される write 文の出力が格納されます。
  • ベースライン レポート：XML/XSL ベースの詳細なレポートであり、要約テーブル、トランザクション レスポンス時間の詳細、アクセスされたすべての HTML ページのタイマ、Web フォーム、発生したエラーなどが提供されます。 この情報はベースライン テストに関係のあるすべてのユーザー タイプで利用できます。
  • Silk Central レポート：Silk Performer プロジェクトは、Silk Central (Silk Central) テスト計画に統合され、Silk Central から直接実行されます。 これにより、強力なテスト結果分析とレポート作成が可能になります。 Silk Central レポート作成の詳細については、『 Silk Central ヘルプ』を参照してください。
  • TrueLog On Error
    TrueLog On Error を使用して、負荷時のみに発生するエラーを特定する方法について説明します。
  • Performance Explorer の概要
    Performance Explorer の提供するリアルタイム サーバー監視と概要レポートについて説明します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


TrueLog On Error

Silk Performer TrueLog 技術を使用すると、アプリケーションに重い負荷がかかっている場合に、ユーザーのサブセットにのみ通常発生するエラーを見つけ出すことができます。 大半のアプリケーションでは、このような種類の負荷は、アプリケーションが実際に配置されてから経験することになる場合がほとんどです。 典型的なエラーとしては、Web ページのテキストの誤り、計算値や表示値の誤り、「サーブレット エラー」や「サーバーがビジー状態です」 といったアプリケーション関連のメッセージなどがあります。 これらはシステムレベルのエラーではなく、Web ページには、ステータス コード「HTTP 200」で表示されるものです。

TrueLog Explorer には、次の機能を使用した、負荷時の Silk Performer 検証機能のビューが備わっています。
  • ビジュアル コンテンツ検証では、検証するコンテンツを視覚的に定義できます。
  • TrueLog On Error 生成と TrueLog On Error 分析の機能により、エラーを視覚的に分析してその根本原因を特定することができます。
  • TrueLog Explorer でエラーを表示する
    生成されるログ ファイルを表示し、アプリケーション サーバーにより引き起こされたエラーの原因を検証します。
親トピック: テスト結果の検討


TrueLog Explorer でエラーを表示する

  1. 負荷テスト中にエラーが発生した場合、ワークフロー バーの 結果の検討 ボタンをクリックすると、TrueLog の内容を視覚化して表示することができます。 ワークフロー - 結果の検討 ダイアログが開きます。
  2. Silk TrueLog Explorer リンクをクリックします。 TrueLog Explorer が開き、TrueLog のステップ スルー ダイアログ ボックスがアクティブになります。 エラー を選択します。
  3. エラーのオカレンスを 1 つずつたどっていきます。
    ヒント: エラーの履歴を表示するには、メニュー ツリーから 1 つ前の API ノードをクリックします。
親トピック: TrueLog On Error


Performance Explorer の概要

Performance Explorer には 2 種類の主要な機能があります。
  • 結果の分析
  • リアルタイム監視

結果の分析

Performance Explorer の結果の分析機能を使用すると、完了した負荷テストの結果をグラフ、表、レポートを利用して分析できます。グラフを使用すると、負荷テスト中に収集したデータを可視化でき、レポートや表は、重要なデータをまとめたり見つけたりするのに役立ちます。すべてのグラフ、表、レポートの基礎をなすのが .tsd ファイルのデータです。各負荷テスト中に、 Silk Performer は大量のデータをキャプチャし、いくつかの時系列データ (.tsd) ファイルに保存します。負荷テストが完了すると、Performance Explorer でデータ (.tsd ファイル) を読み込み、要求に従って編集できます。すべてのグラフが完全にカスタマイズ可能で、必要な数の測定値を含めることができます。1 つまたは複数のテストからの測定値を使用して、複数のグラフを開き、類似性や差異を表示できます。 Performance Explorer は、グラフ、表、レポートのさまざまなテンプレートを提供します。さらに、クライアントとサーバー パフォーマンスに関する情報を 1 つのグラフに置くことができるので、サーバー パフォーマンスがクライアントの動作に与える影響を直接見ることができます。変更をテンプレートとして保存すれば、個々の設定を再利用できます。

リアルタイム監視

Performance Explorer のリアルタイム監視機能を使用すると、システムのパフォーマンスをリアルタイムに表示するグラフを作成、設定することにより、幅広いシステムを監視できます。同時に複数のグラフを開き、複数のシステム (Web サーバーのパフォーマンスとオペレーティング システムのパフォーマンスなど) のパフォーマンスを同時に監視することができます。グラフに測定値を追加することは、Performance Explorer では直感的で簡単です。追加する測定値 (複数でも可) を、ツリーからグラフにドラックするだけです。

  • 概要レポートの測定値
    概要レポートで詳述される測定値タイプについて説明します。
  • 概要レポートを表示する
    テストの結果を表示および分析して、テストしているアプリケーションとサーバーのパフォーマンスを評価します。
親トピック: テスト結果の検討
関連概念
Performance Explorer のレポート


概要レポートの測定値

概要レポートは、次のセクションで構成されます。

  • 全般情報

  • 要約テーブル
  • ユーザー タイプ
  • カスタム グラフ
  • カスタム テーブル
  • 詳細グラフ

全般情報

全般情報セクションには、管理情報が表形式で表示され、負荷テストの重要な結果がグラフ形式で表示されます。

管理情報には、プロジェクト名、プロジェクトの説明、負荷テスト番号、負荷テストの説明、負荷テストの日付、負荷テストの期間、使用されたエージェント コンピュータの数、および実行していた仮想ユーザーの数が含まれます。

グラフには、アクティブな仮想ユーザーの数、トランザクションのレスポンス時間の測定値、および負荷テスト中に発生したエラーの数が表示されます。 トランザクションのレスポンス時間は、正常に実行されたトランザクション、失敗したトランザクション、および取り消されたトランザクションについて測定されます。

負荷テストを実行するプロジェクトのタイプと関係のある、要約測定値が、追加のグラフに表示されます。 たとえば、Web アプリケーションをテストしている場合は、Web ページのレスポンス時間測定値がグラフに表示されます。

要約テーブル

このセクションには、要約測定値 (すべての仮想ユーザーの測定値の集約値) が表形式で表示されます。 最初のテーブルには、実行されたトランザクションの数や発生したエラーの数などの、全般情報が表示されます。 それ以降のテーブルには、テストしたアプリケーションの種類に関連する要約情報が含まれます。

ユーザー タイプ

このセクションには、ユーザー グループごとに、詳細な測定値が表形式で表示されます。 測定値には、トランザクションのレスポンス時間、個々のタイマ、カウンタ、およびテストしているアプリケーションのタイプ (Web、データベース、CORBA、または TUXEDO) と関係のあるレスポンス時間とスループットの測定値が含まれます。 また、すべてのユーザー グループのエラーおよび警告が、一覧表示されます。

カスタム グラフ

このセクションには、手動で追加したグラフが表示されます。 いつでもこのセクションに、グラフを追加したり、削除できます。 変更をテンプレートとして保存して、すべての要約レポートで表示できます。

カスタム テーブル

このセクションには、手動で追加したテーブルが表示されます。 いつでもこのセクションに、テーブルを追加したり、削除できます。 変更をテンプレートとして保存して、すべての要約レポートで表示できます。

詳細グラフ

このセクションには、レポートに含まれるグラフを拡大したグラフを提供します。 拡大されたグラフにジャンプするには、縮小されたグラフをクリックします。逆に、縮小されたグラフにジャンプするには、拡大されたグラフをクリックします。

親トピック: Performance Explorer の概要


概要レポートを表示する

  1. ワークフロー バーの 結果の検討 ボタンをクリックします。 ワークフロー - 結果の検討 ダイアログが表示されます。
  2. Silk Performance Explorer ボタンまたはリンクをクリックします。 設定 > オプション > レポート作成 ダイアログで 概要レポートを自動的に生成する チェック ボックスをオンにしてある場合、Performance Explorer が開き、最新の負荷テストの概要要約レポートが表示されます。 また、このダイアログでは、概要レポートの生成用に以前格納したテンプレートを使用することも選択できます。 この設定はグローバル設定であり、使用しているワークロード プロジェクトに関係なく Performance Explorer で使用されます。
  3. 概要レポートが自動的に表示されない場合は、ワークフロー バーの 概要レポート ボタンをクリックします。
    1. 作業する負荷テストのディレクトリに移動し、対応する .tsd ファイルを選択し、開く をクリックします。
    2. 次へ をクリックします。
    3. 必要に応じて、テンプレート フィールドで参照 (...) ボタンをクリックし、使用するテンプレート ファイルを探します。
    4. 終了 をクリックします。
    5. 選択した負荷テストによっては、関係のあるすべてのファイルをプロジェクトにロードするのか確認するメッセージが表示される場合があります。
    概要レポートが開きます。
親トピック: Performance Explorer の概要


Silk Performer Web コンテキスト管理

このセクションでは、詳細なコンテキスト管理 (Silk Performer における状態情報の管理) を行うための概念について説明します。 Web 負荷テスト時の自動コンテキスト管理の利点や、コンテキスト情報をブラウザから Web/アプリケーション サーバーに転送するために Web アプリケーションで使用される技術について取り扱います。 また、自動コンテキスト管理を簡略化するために Silk Performer Web API で使用される技術の検討や、状態情報を自動的に管理するスクリプトを生成するための Silk Performer Web Recorder の最適な設定方法についての説明も記載されています。

  • コンテキスト管理の有用性
    状態情報を転送するために Web アプリケーションで使用される技術をいくつか説明します。
  • Silk Performer ページ レベル API
    単一の HTTP リクエストの観点からネットワーク操作を記述する、低レベルの Web API について説明します。
  • コンテキストのない関数
    コンテキストのない関数は前のイベントまたはスクリプト実行中の結果を参照しないことを説明します。
  • コンテキストのある関数
    コンテキストのない関数と対照的に、コンテキストのある関数が前の関数呼び出しの結果を使用するよう設計されていることを説明します。
  • Recorder がコンテキストを失う状況
    詳細なコンテキスト管理技術がないためにコンテキストが失われる状況について説明します。
  • 詳細なコンテキスト管理技術
    Silk Performer ページレベルの API に組み込まれている詳細な技術について説明します。この技術を使用すると、コンテキスト管理問題を自動的に処理する、コンテキストのあるスクリプトを記述することができます。
  • Web コンテキスト管理設定
    URL 解析、リンク解析、あいまいなフォーム検出に使用できるプロファイル設定について説明します。
  • Web コンテキスト管理の制限事項
    自動コンテキスト管理を手動によるコンテキスト管理技術で補う必要が生じる理由を説明します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


コンテキスト管理の有用性

HTTP プロトコルはその性質上、ステートレスとなります。 HTTP は単純なリクエスト/レスポンス パラダイムに従います。 クライアント (サーバーとの通信に HTTP を使用するブラウザまたはアプリケーション/アプレット) はサーバーに対して TCP/IP 通信を開き、リクエストを送信し、サーバーからのレスポンスを受信します。 同一サーバーに対する同一のクライアントからの異なるリクエストは、同じ TCP/IP 接続経由または別の接続経由のいずれの場合も、お互いに関係性を持ちません。

一方、Web アプリケーションの場合は、単一のリクエストを、完全な HTML ページ、Web サーバーで開始されたユーザー セッション、ショッピング カート、登録済みの顧客といったより大きなエンティティに埋め込む必要があります。

そのためには、サーバーからクライアントに状態情報を転送する手段が必要となります。それにより、後続の HTTP リクエストでその情報を返すことができ、サーバーはリクエストを特定のユーザー セッション (登録済みの顧客が使用する仮想ショッピング カートなど) に関連付けて適切に応答することができます。

Web アプリケーションが状態情報の転送に使用する技術は Web ブラウザでも使用することができます。

有用な結果を配信する負荷テスト プロジェクトでは、実際のブラウザを使用した実際のユーザーによる Web サーバーへのアクセスをシミュレートする必要があります。 シミュレートを行わなければ、結果は無意味となります。

状態情報がない場合に発生する問題

結果が無効となる場合がある - コンテキスト管理が不十分な場合、負荷テスト スクリプトで、他の問題が発生する中、各仮想ユーザーが同じセッションにログインし、同じアカウントを使用したり、同じショッピング カートを使用したりする結果になることがあります。 そのような場合、Web/アプリケーション サーバーへの影響は、実際のアプリケーションで発生すると考えられる同程度の負荷とはまったく異なるものになります。 よって、テスト結果は無意味となります。

エラーが気づかれないまま進む - 多くの場合、Web サーバーでは、エラー通知時に、HTTP ステータス コードが適切に使用されないことがあります。 代わりに、成功を示す HTTP ステータス コードが返され、アプリケーション レベルのエラー条件 (「サーバー過負荷」や「セッション タイムアウト」など) は HTML ドキュメント内に記述されます。 スクリプトの次の命令が前の結果を参照しない場合 (たとえば、必要なリンクが存在する場合) 、そのようなアプリケーション レベルのエラーは気づかれないまま進んでいきます。 何千もあるログ ファイルの中の何百万行ものコードをテスト担当者が調べて、そのようなエラーを見つけ出すことは不可能です。

そのため、コンテキスト管理によるサポートは、「自動検証」スクリプトを提供することで、エラー検出の向上に直接貢献しています。

スクリプトが再生できない - 詳細なコンテキスト管理の自動検証関数で見つかる再生エラーは生産的なものもありますが、コンテキスト管理が不適切であると、問題のある再生エラーが発生し、手動による面倒なカスタマイズが必要となったり、スクリプトをデバッグするために QA 要員を動員する必要が生じたりします。

詳細なコンテキスト管理を使用すると、そのような煩わしさが排除され、生産性の向上とテスト コストの削減につながります。

親トピック: Silk Performer Web コンテキスト管理


Silk Performer ページ レベル API

注: Silk Performer の詳細なコンテキスト管理技術を利用するには、ページ レベルの Web API (Silk Performer で新しい Web ビジネス トランザクション Web テスト プロジェクトをセットアップする際のデフォルト オプション) を使用する必要があります。

ページレベルの API の持つ基本的な考え方は、高いレベルの抽象度でユーザー アクションを記述することです。

低レベルの API は、単一の HTTP リクエストの観点からネットワーク操作を記述します。単一の Web ページでは、通常ブラウザは多数の HTTP リクエストをサーバーに送信します。つまり、低レベルのスクリプトは、それぞれの単一の関数がダウンロード元の URL を指定するパラメータを含むことから、長くなる傾向があります。そのため、低レベルのスクリプトは自動コンテキスト管理には不向きです。また、ユーザーの観点からアクションを記述しないため、低レベルのスクリプトは読み取りが難しくなることがあります。

対照的に、高レベルのページ レベルの API は、Web ユーザーにわかりやすい観点でユーザー アクションを記述します。次に例を示します。

  • WebPageUrl - アドレス バーに URL を入力する
  • WebPageLink - リンクをクリックする
  • WebPageSubmit - フォームを送信する
  • WebPageBack - 戻る ボタンをクリックする

低レベルの API と異なるページ レベルの API の主な特徴の 1 つは、HTML ドキュメントを解析し、埋め込みオブジェクト、フレーム、リンク、フォームを見つける HTML パーサーが組み込まれていることです。埋め込みオブジェクトとフレームは自動的にダウンロードされます。リンクとフォームはコンテキストのある関数呼び出しに使用できます。

スクリプトでの単一の関数呼び出しでは、複雑なフレームセットを含む場合でも、完全な HTML ページをダウンロードすることができます。

Web ページの履歴

ページレベルの API を使用するスクリプトは、ちょうどブラウザの 戻る ボタンが有効になるのと同じように、以前にダウンロードしたページを記録することで、履歴をエミュレートします。各仮想ユーザーで追跡できるページの最大数を制限することでシステム リソースを管理できます (デフォルト値は 5)。

ただし、履歴の目的は詳細なコンテキスト管理を簡略化することにあるため、この制限は負荷テストの精度には影響を与えません。ネットワーク トラフィックには関係ありません。

履歴で可能なライフタイムを過ぎてもページを使用する必要がある場合は、WebPageStoreContext 関数を使用してロックすることができます。必要に応じて履歴からページは削除されますが、メモリからは削除されず、WebPageStoreContext 関数の返すハンドラによって参照することができます。ページが不要になった場合は、WebPageDeleteContext 関数を使用してロックを解除します (その後メモリから削除されます)。

親トピック: Silk Performer Web コンテキスト管理


コンテキストのない関数

コンテキストのない関数は前のイベントまたはスクリプト実行中の結果を参照しません。 そのため、前のイベントの情報を必要とせずに動作します。 コンテキストのない関数呼び出しでは、関数を実行するために必要なすべての情報はスクリプトで指定する必要があります。 コンテキストのない関数をスクリプト化して記録する場合、セッションおよびその他の動的情報をいくつかのテスト スクリプトに含める必要があります。

コンテキストのない関数の典型的な特徴は、ダウンロード用の URL を指定するパラメータが含まれることです。

Silk Performer ペーレベルの API のコンテキストのない関数には次のものが含まれます。
  • WebPageUrl
  • WebPageForm
  • WebPagePost、WebPagePostFile
  • WebPageCustomRequest、WebPageCustomRequestBin、WebPageCustomRequestFile

これらの関数のいずれかがテスト スクリプトの dclform セクションのフォームを使用する場合、未変更 (非表示など) の値を取得できる、対応する HTML フォームがないことから、フォームはコンテキストのないアプローチを使用します。 すべてのフォーム値をスクリプトで指定する必要があります。

親トピック: Silk Performer Web コンテキスト管理


コンテキストのある関数

コンテキストのない関数と異なり、コンテキストのある関数は前の関数呼び出しの結果を使用するように作られています。 結果の使用方法は、動的データを組み込まない方法で指定されます。

Silk Performer ページレベルの API のコンテキストのある関数には次のようなものがあります。

  • WebPageLink
  • WebPageSubmit
  • WebPageSubmitBin

WebPageLink 関数は、リンクのターゲット URL をダウンロードします。

サンプル HTML コード：
<a href=http://www4.company.com/store/5423/account>Edit Account</a>

上記リンクには、ターゲット URL の負荷分散情報 (www4) とセッション ID (5423) が含まれています。

ユーザーがこのリンクをクリックすると仮定します。 これは WebPageUrl 関数を使用して BDL でモデル化できます。

WebPageUrl("http://www4.company.com/store/5423/account");

ここでの問題は、URL の動的コンポーネントがスクリプトにハードコードされることです。

代わりに、WebPageLink 関数を使用することができます。WebPageLink("Edit Account");

このソリューションでは、Silk Performer 再生エンジンが、HTML パーサーを使用して、再生中にリンク名 Edit Account に関連付けられた実際の URL を使用するためお勧めです。 リンク名が動的に変更することもありますが、URL の変更よりもその頻度は大幅に低くなります。

WebPageSubmit 関数はフォームを送信します。 それにより、先にダウンロードした HTML ドキュメントのフォーム定義をスクリプトに定義されている BDL と組み合わせます。

<form action="/cgi-bin/nav.jsp"
      name="frmNav"
      method="post"
      target="basketframe">
  <input type=input  name="quantity"
                     value="1">
  <input type=hidden name="BV_SessionID"
            value="@@@@1245417051.1003814911@@@@">
  <input type=hidden name="BV_EngineID"
            value="dadccfjhgjehbemgcfkmcfifdnf.0">
</form>

ここで、ユーザーが量を 1 から 3 に変更し、フォームを送信すると仮定します。

これは、対応するフォーム定義を持つコンテキストのない WebPageForm 関数を使用して、BDL にモデル化することができます。

WebPageForm("http://www4.company.com/cgi-bin/nav.jsp", FORM_BASKET_1);
...
dclform
  FORM_BASKET_1:
    "quantity"    := "3",
    "BV_SessionID" := "@@@@1245417051.1003814911@@@@",
    "BV_EngineID"  := "dadccfjhgjehbemgcfkmcfifdnf.0";

このソリューションの問題は、URL (この場合は負荷分散情報を含む)、フォーム フィールド (セッション情報を保持) などすべてがスクリプトにハードコードされてしまうことです。

より優れたソリューションは、コンテキストのある WebPageSubmit 関数を使用することです。

WebPageSubmit("frmNav", FORM_BASKET_2);
...
dclform
  FORM_BASKET_2:
    "quantity"     := "3",
    "BV_SessionID" := "" <USE_HTML_VAL>,
    "BV_EngineID"  := "" <USE_HTML_VAL>;

WebPageSubmit 関数は、前のサーバー レスポンスの HTML フォームを名前で参照します。 Silk Performer 再生エンジンは、その HTML パーサーを使用し、実際のアクション URL と HTTP メソッド (GET または POST) を自動的に使用してフォームを送信します。 その後再生エンジンは実際の HTML コードの BV_SessionID および BV_EngineID フィールドの値を使用するため、スクリプト内にコードを指定する必要がありません。

BDL のフォーム定義

Silk Performer では、BDL スクリプトのフォーム定義の構文が強化されているため、個々のフィールドがスクリプトに含まれる値を使用するかどうか、HTML コードからの値を使用するかどうか、またはまったく使用しないかどうかを指定することができます。

そのような仕様は、フォーム属性と呼ばれる構文要素を使用して実現されます。 フォーム属性は、フォーム フィールドのエンコーディング タイプの指定にも使用されます。

WebPageSubmit 関数を使用してコンテキストを持たせて使用されるフォームでは、次の使用属性が許可されています。

  • USE_SCRIPT_VAL (デフォルト)
  • USE_HTML_VAL
  • SUPPRESS

USE_SCRIPT_VAL は、スクリプトのフィールド値が送信に使用されることを意味しています。 これはデフォルトの属性であり、省略できます。

USE_HTML_VAL は、HTML フォーム定義のフィールド値が使用されることを意味します。 スクリプトの値は無視され、"" に設定されます。 スクリプトのフォーム フィールドは、HTML フォーム定義のフォーム フィールドと名前で照会されます。

SUPPRESS は、指定した名前を持つフィールドが HTML フォーム定義にある場合でも、フィールドの名前もその値も送信されないことを意味しています。 よって、スクリプトのフィールド値には意味がなく、無視されます。

親トピック: Silk Performer Web コンテキスト管理


Recorder がコンテキストを失う状況

Recorder が「コンテキストを失う」というのは、埋め込みオブジェクト、フレーム、リンクまたはフォーム送信として解釈できない HTTP リクエストを Recorder が受け取ることを意味します。

このセクションでは、Silk Performer が使用する詳細なコンテキスト管理技術がないためにコンテキストが失われる状況について説明します。

  • META Refresh HTML タグ
    HTML で META タグに許可されているメタ情報の指定について説明します。
  • JavaScript および Web コンテキスト管理
    JavaScript には、Silk Performer 再生エンジンを使用して単純に HTML を解析してシミュレートすることができない、Web 開発者向けオプションが多数用意されていることを説明します。
親トピック: Silk Performer Web コンテキスト管理


META Refresh HTML タグ

HTML では META タグにメタ情報を指定することができます。 この技術は一般的に、HTTP ヘッダーに依存するのではなく、HTML コードでリダイレクトまたはページの再読み込みを指定するような場合に使用します (たとえば、リダイレクトのための HTTP 状態コード 302 Document moved)。

サンプル HTML コード：

<html>
  <title>Login</title>
  <META http-equiv=refresh
        content="0; URL=http://www4.company.com/user/6543/login.html">
</html>

この例は、負荷分散およびセッション情報を導入するために、そのような HTTP 以外のリダイレクト (標準の HTTP リダイレクトに似たもの) を使用できることも説明しています。

Silk Performer 再生エンジンではこれをリダイレクトとして処理しないため、作成される HTTP リクエストに対して Recorder が関数呼び出しを生成し、その結果、コンテキストが失われることになります。

この動作はバグではなく、Silk Performer 再生で意図して設定された機能です。 これを自動的にリダイレクトとして処理することの危険性 (不正確な再生という観点から) の理由を理解するために、次の例を考察してください。

<html>
  <head>
    <title>Login</title>
    <META http-equiv=refresh
      content="1; URL=http://www.company.com/no_js_login.html">
  </head>
  <body onload="location='http://www.company.com/js_login.html'>
  </body>
</html>

このサンプル HTML はブラウザの JavaScript 機能を暗黙的にチェックし、ブラウザの JavaScript 機能に基づいて 2 つの異なるログイン ページの一方にリダイレクトします。 Silk Performer 再生エンジンが meta タグに指定された URL を自動的にダウンロードする場合、Web ブラウザとは異なる動作を示すこととなり、不正確になります。

親トピック: Recorder がコンテキストを失う状況


JavaScript および Web コンテキスト管理

JavaScript には、HTML 技術だけでは達成できないことを行うための Web 開発者向けオプションが多数用意されているため、単純に HTML を解析するだけでは Silk Performer 再生エンジンを使用してシミュレートできません。 つまり、JavaScript がコンテキスト喪失の原因となります。

多くの場合、JavaScript のアクションから発生する HTTP リクエストは WebPageLink や WebPageSubmit 関数の観点では説明できないため、Recorder はコンテキストのない関数を生成する必要があります。

このトピックではいくつかの例を示しますが、発生する可能性のあるすべてのシナリオをすべて網羅しているわけではありません。

JavaScript リダイレクトと再ロード

これは、JavaScript を使用して別の URL にリダイレクトし、これにより状態情報 (負荷分散、セッション ID など) が導入される例です。

<html>
  <head>
    <title>Login</title>
  </head>
  <body
    onload="location='http://www4.company.com/usr/6543/login.asp'">
  </body>
</html>

JavaScript によってロードされる埋め込みオブジェクト

この例では、JavaScript を使用して埋め込みオブジェクトをロードする方法について説明します。 Silk Performer HTML パーサーはこれらの URL を埋め込みオブジェクトとして表示しないため、Recorder でスクリプト関数を生成しなければなりません。生成しない場合は、再生エンジンによってイメージがダウンロードされません。

これらの埋め込みオブジェクトの URL は相対的に指定されることにも注意してください。 ブラウザは相対 URL が含まれる HTML ドキュメントの基本 URL を使用して、これらの相対 URL を絶対 URL に解決します。 つまり、その結果生じる URL には動的情報が含まれます (http://www4.company.com/usr/6543/right_arrow.gif など)。

<html>
  <head>
    <title>Login</title>
  </head>
  <body onload="PreLoadImages('right_arrow.gif', 'left_arrow.gif', 'up_arrow.gif', 'down_arrow.gif')">
  </body>
</html>

動的 HTML

document.write(…) JavaScript 関数により、クライアント側で HTML コードを動的に変更できます。 AD サーバーでは一般的にこの技術を使用します。

次に例を示します。

document.write('<script language=javascript
  src="http://ads.com/ad/offer.asp?date=' +
       escape(date) + '"></scr'+'ipt>');

JavaScript によるフォーム送信

JavaScript では、次の操作により、送信前に HTML フォームを変更できます。

  • フォーム フィールド値の変更 (非表示フィールドを含む)
  • フォーム フィールドの追加
  • フォーム フィールドの削除
  • フォーム フィールドの名前の変更 (フォーム フィールドを削除し、別のフィールドを同じ位置に追加するのと同じ操作)
  • アクション URL を変更する

サンプル HTML コード (フォーム フィールド名を変更)：

<form name="tabform"
      action="/cgi-bin/tabgui.asp"
      method="POST"
      target=_self>
  <input type=hidden name="session" value="6543">
  <input type=hidden name="tabevent" value="">
  <input type=hidden name="tabeventparam" value="">
</form>
<a href="JavaScript:selectTab('3')">Stock Watch List</a>

function selectTab(tabIndex)
{
  // change value of field #2
  document.tabform.elements[1].value = "select";
  // change name of field #3, originally "tabeventparam"
  document.tabform.elements[2].name = "TabIndex";
  // change value of field #3, now "TabIndex"
  document.tabform.elements[2].value = tabIndex;
  document.tabform.submit();
}

上記の例は、JavaScript がフォームを送信する方法を表しています。 HTML でのフォーム定義は、送信前に JavaScript が操作する単なるテンプレートです。 2 番目のフィールドの値 (「tabevent」、インデックス 1) は「select」に変更され、3 番目のフィールドの名前 (「tabeventparam」、インデックス 2) は「TabIndex」に変更され、値は「3」に変更されます。

次の例は、JavaScript を使用してフォームのアクション URL を変更する方法を表しています。

function SubmitSearch(linkUrl)
{
  document.searchForm.action = linkUrl;
  document.searchForm.submit();
}
..
<form name="searchForm"
      method="POST"
      target=_self>
  <input type=input name="searchString" value="">
  <input type=hidden name="BV_SessionID"
                     value="@@@@1245417051.1003814911@@@@">
</form>
<a href="JavaScript:SubmitSearch('http://my.server.com/search.asp')">
   Search this site</a>
<a href="JavaScript:SubmitSearch('http://my.mirror.com/search.asp')">
   Search mirror site</a>
親トピック: Recorder がコンテキストを失う状況


詳細なコンテキスト管理技術

Silk Performer ページレベルの API には、詳細な技術が組み込まれており、この技術を使用すると、コンテキスト管理問題を自動的に処理する、コンテキストのあるスクリプトを記述することができます。 Silk Performer Recorder はこの作業を自動的に処理します。

このセクションは、ページレベルの API が提供する機能、および Recorder がその機能を使用して、コンテキスト管理のための手動カスタマイズがいらないコンテキストのあるスクリプトを生成する方法について説明することを目的としています。

このセクションは Silk Performer の詳細なコンテキスト管理の設定について言及しています。これらは、Silk Performer の 設定 > アクティブ プロファイル > Web > 記録 タブで設定できます。

  • WebPageAddURL
    WebPageAddUrl 関数の目的は、次のページ レベル API 呼び出しでダウンロードされる追加のファイルを指定することです。
  • 解析された URL
    Silk Performer には、解析された URL を検出する拡張可能な HTML パーサーが用意されていることを説明します。
  • フォーム送信時に変更されるアクション URL
    JavaScript を使用してフォームのアクション URL を変更する方法について説明します。
  • 変更されたフォーム
    JavaScript では、HTML で定義されているフォームを送信前に変更できることについて説明します。
  • フォームデータのエンコーディング
    Web API が BDL の dclform セクションにあるフォーム定義を使用して、送信されるフォーム データおよび URL に付加されるクエリ文字列を指定する方法について説明します。
親トピック: Silk Performer Web コンテキスト管理


WebPageAddURL

WebPageAddUrl 関数の目的は、次のページ レベル API 呼び出しでダウンロードされる追加のファイルを指定することです。

JavaScript または Silk Performer HTML パーサーでカバーされていない他の技術で埋め込みオブジェクトをダウンロードする場合は、追加のファイルを指定する必要があります。

ダウンロードの URL は、後続のページ レベル API 呼び出しでダウンロードされるドキュメントの基本 URL への相対パスで指定できます。

例：

WebPageAddUrl("http://www4.company.com/images/mastercard.gif");
WebPageAddUrl("http://www4.company.com/images/visa.gif");
WebPageLink("Choose payment");
The same script in SilkPerformer, assuming the WebPageLink call downloads the URL http://www4.company.com/user/6543/payment.asp:
WebPageAddUrl("/images/mastercard.gif");
WebPageAddUrl("/images/visa.gif");
WebPageLink("Choose payment");

WebPageAddUrl はコンテキストのない関数ですが、相対 URL を使用すると URL パラメータに状態情報が含まれるリスクを最小限に抑えることができます。

注: 可能な場合はいつでも、Silk Performer Recorder は WebPageAddUrl 呼び出しと WebPageAddUrl 呼び出しの相対 URL を生成します。
親トピック: 詳細なコンテキスト管理技術


解析された URL

Silk Performer には、解析された URL (カスタム URL とも呼ばれる) を検出する HTML パーサーがあります。埋め込みオブジェクト、フレーム、リンク、フォームに加え、解析された URL も HTML パーサーによって検出される HTML 要素のカテゴリの 1 つです。

HTML パーサーを拡張する：WebPageParseURL

HTML パーサーによるカスタム URL の解析を有効にするには、ページレベルのカスタム URL 解析関数の前に、解析ルールを指定する必要があります。この目的に使用する API 関数は WebPageParseUrl です。WebPageParseUrl は WebParseDataBound 関数と同様の動作をします。

解析された URL は名前を取得します (これはリンクの名前に対応します)。名前は WebPageParseUrl の最初のパラメータで指定します。2 番目および 3 番目のパラメータは左側および右側の境界線です。4 番目のパラメータはオプションです (境界を解析する際に空白スペースを無視するなど)。

最初の URL が見つかった後にも解析は停止されないため、単一のカスタム URL 解析の仕様でも複数の URL を解析することができます。ページレベルの API 呼び出しの前には複数の WebPageParseUrl 文を配置でき、その結果、ページのダウンロード中には複数の解析ルールを同時に適用することになります。

相対 URL を解析する

カスタム URL の解析で HTML パーサーは、リンクとフレームの相対 URL の解決に有効なルールと同じルールを適用します。これは、たとえば、ファイル名のみについて解析を行うことで、完全な絶対 URL を受け取ることができるということになります。

例：次の HTML ドキュメントはログイン フォームを送信することで生成されました。基本 URL は http://www4.company.com/user/6543/navigation.asp となります。

<a href="JavaScript:window.open('account.asp')">Edit Account</a>

ユーザーがリンクをクリックすると、ブラウザが新しいブラウザ ウィンドウで URL http://www4.company.com/user/6543/account.asp を開きます。

これは、Silk Performer で次のようにモデル化できます。

WebPageParseUrl("Javascript window open", "open('", "'");
WebPageSubmit("login", FORM_LOGIN, "LoginPageTimer");
// now the parsed URL is available under
// the name "Javascript window open" and can be used.

一度解析されたカスタム URL はさまざまな用途に使用できます。

解析された URL と WebPageLink

WEB_FLAG_PARSE_LINK フラグを使用して解析された URL は、リンクが使用されている任意の場所で使用することができます (たとえば、WebPageLink または WebPageQueryLink 関数)。WEB_FLAG_PARSE_LINK および WEB_FLAG_PARSE_URL フラグを指定しない場合は、両方のフラグがデフォルトで有効になります。

これで前述の例を完了することができます。

WebPageParseUrl("Javascript window open", "open('", "'");
WebPageSubmit("login", FORM_LOGIN, "LoginPageTimer");
WebPageLink("Javascript window open");
注:

Silk Performer Recorder は WebPageParseUrl 呼び出しを生成し、解析された URL を WebPageLink 呼び出しに使用できます。コンテキストのない関数呼び出しを回避するために、可能な場合は常に Recorder で自動的にこの処理が行われます。

この機能を有効にするには、設定 > アクティブ プロファイル > Web > 記録 タブの コンテキスト管理の詳細設定 ダイアログ ボックスで 動的なリンク解析 チェックボックスをオンにします。

解析された URL とコンテキストのない関数：WebPageQueryParsedUrl

解析された URL は、WebPageQueryParsedUrl 関数を使用して取得し、文字列変数に保存することができます。

そのような文字列変数は、URL パラメータを必要とするすべてのページ レベルまたは低レベルの関数のパラメータとして使用したり、別の目的に使用したりできます (診断出力や StrSearchDelimited など)。

次のサンプル HTML ドキュメントはログイン フォームの送信の結果作成されたものです。基本 URL は http://www4.company.com/user/6543/navigation.asp となります。
<!--
function ShowContent(url, category, vendor)
{
  top.frames["content"].location.href=
    url + "?cat=" + category + "&vendor=" + vendor;
}
// end of script -->
…
<a href="JavaScript:ShowContent('products.asp', 'HD', 'IBM')">
   hard discs by IBM</a>
<a href="JavaScript:ShowContent('products.asp', 'HD', 'WD')">
   hard discs by Western Digital</a>
<a href="JavaScript:ShowContent('products.asp', 'Mon', 'Sony')">
   Monitors by Sony</a>

このページへの API 呼び出しは次のようになると仮定します。

WebPageSubmit("login", FORM_LOGIN, "LoginPageTimer");

ここで、ユーザーが 2 番目のリンクをクリックすると、ブラウザによって URL http://www4.company.com/user/6543/products.asp?cat=HD&vendor=WD が content という名前のフレームに読み込まれます。解析された URL と WebPageLink アプローチは、BDL でこれをモデル化する場合には機能しません。このアプローチには、次の文字列のいずれかで境界の解析が見つかる必要があります。

  • http://www4.company.com/user/6543/products.asp?cat=HD&vendor=WD
  • /user/6543/products.asp?cat=HD&vendor=WD
  • products.asp?cat=HD&vendor=WD

しかし、これらの文字列はいずれも HTML コード内にはありません。URL の解析は不可能に思われます。以下を検討してみます。

WebPageSubmit("login", FORM_LOGIN, "LoginPageTimer");
WebPageUrl(
  "http://www4.company.com/user/6543/products.asp",
  "ProductTimer", FORM_PRODUCT_SELECT);
...
dclform
  FORM_PRODUCT_SELECT:
    "cat"    := "HD",
    "vendor" := "WD";

取得するのはコンテキストのない関数であり、この例では、URL に動的データが組み込まれています。しかしこれは改良可能です。http://www4.company.com/user/6543/products.asp?cat=HD&vendor=WD は解析できませんが、より短い URL http://www4.company.com/user/6543/products.asp がスクリプト内にあり、これは WebPageUrl 関数のパラメータとして使用できます。この URL は境界 "ShowContent('" と "'" を使用して解析できます。これにより文字列 products.asp が解析され、相対 URL を解決した後で、必要な URL を取得できます。解析されたこの URL は文字列変数にコピーでき、スクリプトにハードコートされた URL パラメータではなく、その変数を使用できます。その結果、次のスクリプトが生成されます。

var
  sParsedUrl : string;
..
WebPageParseUrl("ShowContent", "ShowContent('", "'");
WebPageSubmit("login", FORM_LOGIN, "LoginPageTimer");
WebPageQueryParsedUrl(sParsedUrl, sizeof(sParsedUrl),
                  "ShowContent");
WebPageUrl(sParsedUrl, "ProductTimer", FORM_PRODUCT_SELECT);
..
dclform
  FORM_PRODUCT_SELECT:
    "cat"    := "HD",
    "vendor" := "WD";

ここでのメリットは、「半分だけコンテキストを持つ」と言えるコンテキストのない関数呼び出しが行われるということです。クエリ文字列には依然としてコンテキストはありませんが、URL が解析されるため、URL の動的データを適切に処理することができます。

別の例では、URL が動的ではなくても、クエリ文字列には動的データが含まれることも考えられます。そのような場合は、ここで紹介した手法ではコンテキスト管理を改善できません。

注: Silk Performer Recorder では WebPageParseUrl 呼び出しを自動的に生成し、コンテキストのない関数呼び出しで使用するための解析済み URL を照会することができます。コンテキストのないページレベルの API 関数呼び出しとこの手法を連動させることができる場合は常に、Recorder ではこの処理が行われます。この機能を有効にするには、設定 > アクティブ プロファイル > Web > 記録 タブの コンテキスト管理の詳細設定 ダイアログ ボックスで 動的なリンク解析 チェックボックスをオンにします。
親トピック: 詳細なコンテキスト管理技術


フォーム送信時に変更されるアクション URL

JavaScript を使用するとフォームのアクション URL を変更できます。

function SubmitSearch(linkUrl)
{
  document.searchForm.action = linkUrl;
  document.searchForm.submit();
}
...
<form name="searchForm"
      method="POST"
      target=_self>
  <input type=input name="searchString" value="">
  <input type=hidden name="BV_SessionID"
                     value="@@@@1245417051.1003814911@@@@">
</form>
<a href="JavaScript:SubmitSearch('http://my.server.com/search.asp')">
   Search this site</a>
<a href="JavaScript:SubmitSearch('http://my.mirror.com/search.asp')">
   Search mirror site</a>

別の絶対アクション URL を指定する

このページが関数呼び出しによってダウンロードされたと仮定します。

WebPageLink("Advanced Search");

スクリプト内に値を持たない非表示のフィールド BV_SessionID を自動的に処理するため、Silk Performer のコンテキストのある WebPageSubmit 関数の使用をお勧めします。

これを簡略化するために、Silk Performer には別のアクション URL を指定して WebPageSubmit 関数で使用するためのオプションが用意されています。

これを行うために使用される関数は WebPageSetActionUrlAbs です。 WebPageSubmit を呼び出す前にこの関数が呼び出されると、HTML コードで指定したアクション URL ではなく WebPageSetActionUrlAbs 関数で指定した URL が使用されます。

この関数を使用する場合、前述の BDL コードを次のように書き直します。

WebPageLink("Advanced Search");
WebPageSetActionUrlAbs("http://my.mirror.com/search.asp");
WebPageSubmit("searchForm", FORM_SEARCH);
...
dclform
  FORM_SEARCH:
    "searchString"   := "discount",
    "BV_SessionID"   := "" <USE_HTML_VAL>;
注: WebPageSetActionUrlAbs を使用すると、コンテキストのない WebPageForm 関数ではなくコンテキストのある WebPageSubmit 関数を使用することができ、コンテキストのある方法で FORM_SEARCH フォームを使用することができます。

関数 WebPageSubmit の生成が許可されている場合、Silk Performer Recorder はコンテキストのない関数ではなく WebPageSetActionUrlAbs 関数を自動的に生成します。

この機能を有効にするには、設定 > アクティブ プロファイル > Web > 記録 タブの コンテキスト管理の詳細設定 ダイアログ ボックスで 変更されたアクション URL を許可する チェックボックスをオンにします。

別の解析済みアクション URL を指定する

別の絶対アクション URL の指定では、コンテキストのあるフォームを使用できるという利点がありますが、URL はコンテキストがないままで、スクリプトにハードコードされます。

アクション URL に状態情報も含まれている場合、アクション URL はコンテキストありで指定する必要があります。

これは WebPageSetActionUrl 関数を使用して実行できます。 WebPageSetActionUrlAbs 関数と異なり、WebPageSetActionUrl 関数は完全 URL ではなく解析済み URL の名前を受け取ります。

WebPageSetActionUrl 関数での使用のためにカスタム URL を解析することができます。 上記例を次のように書き直すとサンプルが表示されます。

WebPageParseUrl("Form Action", "SubmitSearch('", "'");
WebPageLink("Advanced Search");
WebPageSetActionUrl("Form Action", 2);
WebPageSubmit("searchForm", FORM_SEARCH);
...
dclform
  FORM_SEARCH:
    "searchString"   := "discount",
    "BV_SessionID"   := "" <USE_HTML_VAL>;

この例では、2 回目に出現した解析済み URL Form Action を使用してアクション URL を http://my.mirror.com/search.asp に設定します。 スクリプトでは、アクション URL に含まれることのある状態情報を処理することができます。

Silk Performer Recorder は WebPageSetActionUrl 関数への呼び出しを自動的に生成し、WebPageSetActionUrlAbs を呼び出すのではなく、WebPageParseUrl に対応する呼び出しを生成することができます。

この機能を有効にするには、設定 > アクティブ プロファイル > Web > 記録 タブの コンテキスト管理の詳細設定 ダイアログ ボックスで 動的なアクション URL 解析 チェックボックスをオンにします。

親トピック: 詳細なコンテキスト管理技術


変更されたフォーム

JavaScript では、HTML で定義されているフォームを、送信前に変更できます。 個々のフォーム フィールドを削除したり、名前を変更すると、問題が生じる可能性があります。

そのような状況では、フォーム フィールドの使用属性によりコンテキスト管理を改善できます。

フォームの使用属性がない場合、次の例ではコンテキストのない方法でのモデル化が必要です。 ただし、フォーム使用属性を使用すると、次に示すようにコンテキストのあるモデル化が可能となります。

<form name="tabform"
      action="/cgi-bin/tabgui.asp"
      method="POST"
      target=_self>
  <input type=hidden name="session" value="6543">
  <input type=hidden name="tabevent" value="">
  <input type=hidden name="tabeventparam" value="">
</form>
<a href="JavaScript:selectTab('3')>Stock Watch List</a>

function selectTab(tabIndex)
{
  // change value of field #2
  document.tabform.elements[1].value = "select";
  // change name of field #3, originally "tabeventparam"
  document.tabform.elements[2].name = "TabIndex";
  // change value of field #3, now "TabIndex"
  document.tabform.elements[2].value = tabIndex;
  document.tabform.submit();
}

この HTML コードが含まれるページは、次の関数呼び出しに対するレスポンスであると仮定します。

WebPageLink("My portfolio");

また、このページには基本 URL http://www4.company.com/cgi-bin/portfolio.asp があるとします。

ユーザーが Stock Watch List のリンクをクリックします。 フォーム使用属性がない場合は、対応する BDL スクリプトは次のようになります。

WebPageLink("My portfolio");
WebPageForm("http://www4.company.com/cgi-bin/tabgui.asp", FORM_001);
...
dclform
  FORM_001:
    "session"   := "6543",
    "tabevent"  := "select",
    "TabIndex"  := "3";

このスクリプトは、コンテキストのない WebPageForm 関数を使用しています。 絶対 URL がスクリプトに記載され、状態情報が組み込まれることもあります。 フォーム FORM_001 はコンテキストを持たないため、状態情報がスクリプトに追加されます。

フォーム使用属性を使用すると、tabeventparam の名前を持つフィールを送信せず、TabIndex の名前を持つ追加のフィールドを送信するように指定できます。 そのため、WebPageSubmit 関数を使用して、フォーム tabform をコンテキストのある方法で送信することができます。

次は対応する BDL コードです。

WebPageLink("My portfolio");
WebPageSubmit("tabform", FORM_001);
...
dclform
  FORM_001:
    "session"       := "" <USE_HTML_VAL>, // unchanged
    "tabevent"      := "select",   // changed
    "tabeventparam" := "" <SUPPRESS>, // suppressed
    "TabIndex"      := "3";           // added

このバージョンでは、スクリプトから状態情報が排除されるため、自動でコンテキストが管理されます。

Silk Performer Recorder は、送信されたフォーム データに一致しない HTML フォームを使用して WebPageSubmit 呼び出しを自動的に生成し、スクリプト内のそれらのフォーム フィールドに最適な使用属性を生成します。 Recorder では、コンテキストのない関数呼び出しではなく、コンテキストのある WebPageSubmit 呼び出しの生成が許可されている場合にこの処理が行われます。

この機能を有効にするには、コンテキスト管理の詳細設定 ダイアログ ボックスの あいまいなフォーム検出 オプションをオンにします (設定 > アクティブ プロファイル > Web > 記録タブ > 設定の表示)。

親トピック: 詳細なコンテキスト管理技術


フォームデータのエンコーディング

Silk Performer Web API は BDL の dclform セクションにあるフォーム定義を使用して、送信されるフォーム データおよび URL に付加されるクエリ文字列を指定します。

安全でない文字は、クエリ文字列および HTTP リクエスト ボディ内にエンコードする必要があります。 異なる状況の異なるブラウザで使用されるさまざまなエンコード方針に対応するために、Silk Performer ではフォーム フィールドのエンコーディング タイプを指定できます。

これを行うため、BDL 内のフォーム定義の構文が強化されました。この構文を使用すると、フォームとフォーム フィールドの属性を指定できます。

エンコーディング タイプ

エンコーディング タイプ ENCODE_FORM では、MIME タイプ application/x-www-form-url-encoded に応じて、安全でない文字がエンコードされます。 空白スペースは + 記号でエンコードされ、安全でない文字はそれぞれの 16 進形式の前に % 記号を付けてエンコードされます。

すべての一般的なブラウザは、URL クエリ文字列 (HTTP メソッド GET) および HTTP リクエスト ボディ (HTTP メソッド POST) の両方で、フォームの送信にこのエンコーディング タイプを使用しています。

エンコーディング タイプ ENCODE_FORM は、スクリプトで他のエンコーディング タイプが指定されていないときのデフォルトであるため、明示的に指定する必要はありません。

エンコーディング タイプ ENCODE_ESCAPE では、escape JavaScript 関数に応じて、安全でない文字がエンコードされます。 このエンコーディング タイプは ENCODE_FORM と同様です。 主な違いは、空白スペースが + ではなく %20 でエンコードされることです。

エンコーディング タイプ ENCODE_BLANKS では、空白スペースが %20 でエンコードされます。 他の安全でない文字はエンコードされません。 大部分の一般的なブラウザでは、リンクのターゲット URL にこのエンコーディング タイプを使用します。

エンコーディング タイプ ENCODE_NONE では文字がエンコーディングされません。 このエンコーディング タイプは、通常、JavaScript が escape 関数を使用せずに HTTP リクエストを発行する際に使用されます。

使用例

dclform
  AD_SERVER_PARAMS <ENCODE_NONE>:
    "~userpref"     := "12|34|56",
    "~requesttime"  := "01/01/2002";
  FORM_REDIR_LOGIN <ENCODE_NONE> :
    "~language"     := "EN",
    "~logingroup"   := "GUEST",
    "~transaction"  := "TEST",
    "~exitUrl"      := "http://www.myserver.com/goodbye.html";
  LOGIN_FORM_001:
    "username"      := "testuser",
    "password"      := "testpassword",
    "hash"          := "%u2e34!\"" <ENCODE_NONE>,
    "platform"      := "OS: Win2000, Browser: IE5.5" <ENCODE_BLANKS>;
  DOWNLOAD_WHITEPAPER <ENCODE_BLANKS>:
    "filename"      := "Context management.pdf",
    "version"       := "V99";
注: Silk Performer Recorder は最適なエンコーディング タイプを自動的に決定し、それに応じてスクリプトを生成します。 スクリプトをより読みやすくするために、Recorder ではエンコーディング タイプ ENCODE_FORM (デフォルト) が省略されます。
親トピック: 詳細なコンテキスト管理技術


Web コンテキスト管理設定

一般的なプロファイル管理

一般的な Silk Performer Web コンテキスト管理のプロファイル設定は、設定 > アクティブ プロファイル > Web > 記録 タブで設定できます。

ページ レベルの Web API (HTML / HTTP) を選択し、ページ レベルの API スクリプトを生成するよう Recorder に指示します。

URL パラメータの一部であるクエリ文字列をコンテキストのない関数呼び出しに変換するには、URL クエリ文字列をフォームに変換する を選択します。ほとんどの場合で 動的な URL 解析 設定が適用可能となるため、このオプションを選択することをお勧めします。このオプションが選択されていないと、クエリ文字列がフォームに変換されず、URL の一部として保持されます。

詳細な設定

詳細な Web コンテキスト管理設定を行うには、設定 > アクティブ プロファイル > Web > 記録 タブ > 設定の表示 ボタン をクリックします。

あいまいなフォーム検出 - このオプションを選択すると、必要に応じて、使用属性 SUPPRESS を使用するフォームを生成するよう Recorder に指示します。こうすることで、コンテキストのない WebPageForm (HTTP POST リクエスト用) 関数や WebPageUrl (HTTP GET リクエスト用) 関数ではなく、コンテキストのある WebPageSubmit 関数を Recorder で生成できます。

注: あいまいなフォーム検出 を有効にすることをお勧めします。テスト対象のサイトで、フォームの変更に JavaScript が使用されている場合、このオプションを使用することでよりよいコンテキスト管理が可能となります。サイトで JavaScript が使用されていない場合でも、このオプションにより不具合が生じることはありません。

変更されたアクション URL を許可する - このオプションをオンにすると、必要に応じて Recorder で WebPageSetActionUrlAbs 関数が生成されます。こうすることで、コンテキストのない WebPageForm (HTTP POST リクエスト用) 関数や WebPageUrl (HTTP GET リクエスト用) 関数ではなく、コンテキストのある WebPageSubmit 関数を Recorder で生成できます。

注: 変更されたアクション URL を許可する を有効にすることをお勧めします。テスト対象のサイトで、フォームの変更に JavaScript が使用されている場合、このオプションを使用することでよりよいコンテキスト管理が可能となります。サイトで JavaScript が使用されていない場合でも、このオプションにより不具合が生じることはありません。

動的なアクション URL 解析 - このオプションを選択すると、必要な URL の WebPageParseUrl 関数を生成できる場合に、WebPageSetActionUrlAbs ではなく WebPageSetActionUrl 関数を生成するよう Recorder に指示します。

注: 動的なアクション URL 解析 を有効にすることをお勧めします。テスト対象のサイトで、フォームの変更に JavaScript が使用されている場合、このオプションを使用することでよりよいコンテキスト管理が可能となります。サイトで JavaScript が使用されていない場合でも、このオプションにより不具合が生じることはありません。

動的なリンク解析 - このオプションをオンにすると、必要な URL に WebPageParseUrl 関数を生成できる場合に、コンテキストのない関数ではなく、標準の HTML リンクに対応しない HTTP GET リクエストの WebPageLink 関数を生成するよう Recorder に指示します。

注: 動的なリンク解析 を有効にすることをお勧めします。テスト対象のサイトで、フォームの変更に JavaScript が使用されている場合、このオプションを使用することでよりよいコンテキスト管理が可能となります。また、このオプションを使用すると、HTML タグ <meta http-equiv=refresh …> が使用されている場合にも、適切なコンテキスト管理を行うことができます。

動的な URL 解析 - このオプションをオンにすると、可能な場合に WebPageParseUrl および WebPageQueryParsedUrl 関数を生成するよう Recorder に指示し、コンテキストのないページ レベル API 関数に、解析済み URL をパラメータとして渡します。

注: これら 4 つの詳細なコンテキスト管理オプションを選択すると、コンテキストのない API 関数を生成する必要性は大幅に減ります。

記録されたスクリプトにコンテキストのない API 関数がある場合は、他のすべての詳細なコンテキスト管理のオプションが選択され、状態情報が組み込まれていると思われる URL をコンテキストのない関数が使用している場合でも、動的な URL 解析 を有効にします。

定義済みの設定

詳細なコンテキスト管理 設定ドロップボックスのコンボ ボックス (設定 > アクティブ プロファイル > Web > 記録 タブ > 詳細なコンテキスト管理) には、詳細なコンテキスト管理の定義済みの設定が用意されています。定義済みの設定を選択することもできますし、独自のカスタム設定を選択することもできます。

定義済みの設定 レベル 2 は、Web business transaction (HTML/HTTP) テスト プロジェクトのデフォルトです。

その他の定義済みの設定の詳細は、次の表のとおりです。

 | 無効 | レベル 1 | レベル 2 (デフォルト) | レベル 3 | カスタム
あいまいなフォーム検出 | - | 可 | 可 | 可 | 選択可
変更されたアクション URL を許可する | - | 可 | 可 | 可 | 選択可
動的なアクション URL 解析 | - | - | 可 | 可 | 選択可
動的なリンク解析 | - | - | 可 | 可 | 選択可
動的な URL 解析 | - | - | - | 可 | 選択可
親トピック: Silk Performer Web コンテキスト管理


Web コンテキスト管理の制限事項

高度なコンテキスト管理技術を使っても、完全かつ自動でのコンテキスト管理を行えない状況が生じることがあります。 一般には次のような理由があります。

  • WebPageParseUrl では URL を解析できない。 これは、JavaScript が文字列の連結表現を使用して URL を構築する場合に発生することがあります。
  • リンク名、フォーム名、フォーム フィールド名が動的に変化する。

そのような状況では、TrueLog Explorer を使用してコンテキスト管理をカスタマイズします。 TrueLog Explorer では、ポイント アンド クリック インターフェイスを使用したコンテキスト管理のカスタマイズがサポートされています。

親トピック: Silk Performer Web コンテキスト管理


手動のスクリプト編集

Silk Performer のテスト スクリプトは、このプログラム独自のスクリプト言語で記述します。これは Benchmark Description Language (BDL) という、Pascal に似た高級言語です。 スクリプトを手動で編集するには、BDL をよく理解して、ユーザー リクエストのプロトタイプを作成できる必要があります。 また、モジュール、関数、ワークロード定義、トランザクション、Web フォームなど、テスト スクリプトの代表的なコンポーネントを定義できる必要もあります。

検証および解析関数

すべての解析関数と検証関数は、解析や検証対象のレスポンス データを提供する Web API を呼び出す前に指定する必要があります。 Web API を呼び出す前に複数の解析/検証関数を指定できます。 解析関数や検証関数の順序は関係ありません (例外:WebParseDataBound フラグを使用した WebVerifyDataBound と WEB_FLAG_SYNCHRON)。

WebVerifyHtml("Proper equipment leads to a successful trip", 1, ...);
WebPageLink("ShopIt");
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


GZIP または ZLIB POST データのカスタマイズ

リクエストでの GZIP または ZLIB データ

GZIP または ZLIB データが記録したリクエストで検出されると、WebSetEncoding 関数と適切なパラメータがスクリプトに記録されます。

レスポンスでの GZIP または ZLIB データ

レスポンスのコンテンツ エンコード ヘッダーが gzip に設定されている場合、レスポンスは GZIP アルゴリズムを使って自動的に解凍されます。コンテンツ エンコード ヘッダーが deflate に設定されている場合、レスポンスは HTTP 1.1 互換 ZLIB アルゴリズム (RFC1950) を、または生のデフレート (raw deflate) (RFC1951) を使って自動的に解凍されます。

従来の GZIP 変換

後方互換性を保つために、GZIP 変換 DLL もまだサポートされています。GZIP 変換を有効にする方法については、「GZIP POST データのカスタマイズを有効にする」を参照してください。

  • GZIP POST データのカスタマイズを有効にする
    スクリプトの記録中に GZIP 圧縮 POST ボディの透過的な解凍を有効にするための GZIP 変換機能の有効化方法について説明します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


GZIP POST データのカスタマイズを有効にする

Silk Performer の GZIP 変換機能は、スクリプトの記録中に GZIP 圧縮 POST ボディの透過的な解凍を有効にします。 POST ボディは再生時に再び GZIP 形式に圧縮されます。 この機能がないと、Web アプリケーションから http の POST メソッド データ経由で送信された GZIP 圧縮データは Silk Performer Recorder によりバイナリ形式でスクリプトが記録されます。これではほとんどデータをカスタマイズできません。 ただしデータ カスタマイズが Silk Performer の GZIP 変換機能に備わっています。

HTTP ヘッダー Content-Encoding が gzip に設定されている HTTP 要求と応答では変換が有効になっています。 別の HTTP コンテンツ エンコーディング ヘッダーを使用してデータを変換する必要がある場合は、以下のステップを参照してください。

GZIP 変換を有効にするには、次の手順を順に実行します。

  1. 設定 > アクティブ プロファイル > 記録 > Web > 変換 に移動します。
  2. タイプ ドロップ リストから [GZIP Transformation] を選択します。
  3. HTTP リクエストを変換する チェック ボックスがオンであることを確認します。
  4. HTTP レスポンスを変換する チェック ボックスがオフであることを確認します。
  5. 別の HTTP コンテンツ エンコーディング ヘッダーを使用してデータを変換する必要がある場合は、追加パラメータ フィールドに AdditionalContentEncodings=<mycustomgzip> と入力します。 <mycustomgzip> は、テスト中のアプリケーションのコンテンツ エンコーディング ヘッダーとなります。
  6. 設定 > アクティブ プロファイル > 記録 > Web > 変換 に移動します。
  7. 追加 HTTP ヘッダーを記録する 領域の 追加 をクリックします。
  8. [コンテンツのエンコーディング] を 追加 HTTP ヘッダーを記録する ダイアログに入力し、OK をクリックします。 これは GZIP でエンコードされたリクエスト ボディの正確な圧縮と解凍に必要です。
  9. プロファイル ダイアログに戻り OK をクリックします。
親トピック: GZIP または ZLIB POST データのカスタマイズ


個別の IP アドレスをセットアップする

アプリケーションがロード バランサを使用する場合、System Configuration Manager を使用することによって、ユーザーに個別の IP アドレスを付与できます。

  1. Silk Performer メニュー バーの ツール > System Configuration Manager を選択します。 System Configuration Manager ダイアログ ボックスが表示されます。
  2. IP アドレス マネージャ タブをクリックします。 アダプタ リスト ボックスから、IP アドレスを構成するネットワーク アダプタを選択します。 このリストには、使用しているコンピュータで IP がバインドされるすべてのネットワーク アダプタが含まれています。
  3. ネットワーク アダプタの現在の構成に関する情報を確認する場合、およびアダプタの IP アドレスをセットアップする場合は、IP アドレス 領域を使用します。
  4. ネットワーク アダプタの構成に新しい IP アドレスを追加するには、追加 ボタンをクリックします。 IP アドレスの追加 ダイアログが開きます。
  5. IP アドレスの追加 ダイアログで、以下の情報を指定します。
    1. 接続元 IP アドレス フィールドに、ネットワーク アダプタの構成に追加する IP アドレスを入力します。 複数のアドレスを追加するように指定した場合、System Configuration Manager は、このアドレスから始まる連続した IP アドレスを生成します。
    2. サブネット マスク フィールドに、IP アドレスのサブネット マスク値を入力します。
      注: この数値と IP アドレスの組み合わせによって、コンピュータが属するネットワークが識別されます。

      複数の IP アドレスを追加するには、数値 オプションを選択して追加するアドレスの数を入力するか、接続先 IP アドレス オプションを選択します。

      後者の場合、ネットワーク アダプタの構成に追加する最も大きな番号の IP アドレスを指定します。 System Configuration Manager は、接続元 IP アドレス フィールドに入力したアドレスから始まり、このアドレスで終わる連続した IP アドレスを生成します。

    3. 競合が発生しない IP アドレスのみをネットワーク アダプタの構成に追加するには、競合するアドレスを追加しない オプションを選択します。
    4. CIDR アドレスを許可する チェック ボックスをオンにすると、IP アドレスとサブネット マスクのペアの検証が無効になります。 CIDR (Classless Inter-Domain Routing) は、インターネットの規模の問題に対するソリューションとして採用されています。 CIDR は、"通常" の IP ルーティングよりも制限されません。
    5. OK をクリックします。
    ヒント: 選択した IP アドレスを編集するには、編集 ボタンをクリックします。
  6. ネットワーク アダプタの構成をファイルに保存するには、保存 ボタンをクリックします。 デフォルトでは、ファイルは、System Configuration Manager のホーム ディレクトリに保存されます。 ネットワーク アダプタの構成をファイルからロードするには、ロード ボタンをクリックして該当するファイルを選択します。
  7. IP アドレスを削除するには、削除 ボタンをクリックします。
    注意:
    複数の IP アドレスを一度に削除する場合は注意する必要があります。
    IP アドレスの削除 ダイアログが表示されます。
  8. IP アドレスの削除 ダイアログで、以下の情報を指定します。
    1. 接続元 IP アドレス フィールドに、ネットワーク アダプタの構成から削除する IP アドレスを入力します。 複数のアドレスを削除するように選択した場合、System Configuration Manager は、このアドレスから始まる後続のすべての IP アドレスを削除します。
    2. サブネット マスク フィールドに、削除する IP アドレスのサブネット マスク値を入力します。
    3. 複数の IP アドレスを削除するには、数値 または 接続先 IP アドレス オプションを選択します。 ネットワーク アダプタの構成から削除する IP アドレスの数を指定するには、数値 オプションを選択して、フィールドにアドレスの数を入力します。 System Configuration Manager は、接続元 IP アドレス フィールドに入力されたアドレスから始まる指定された数の後続の IP アドレスを削除します。 接続先 IP アドレス オプションを選択して、ネットワーク アダプタの構成から削除する最も大きな番号の IP アドレスを入力します。 System Configuration Manager は、接続元 IP アドレス フィールドに入力したアドレスからこのアドレスまでの連続したすべての IP アドレスを削除します。
    4. OK をクリックします。
  9. 指定されたコンピュータへの IP ルーティングが、構成したすべての IP アドレスに関して有効であることを確認するには、ネットワーク 領域の ホスト名または IP アドレス フィールドにコンピュータの名前または IP アドレスを入力して、チェック をクリックします。 このチェックのレポートが、ダイアログの下部に表示されます。
  10. OK をクリックすると、ダイアログを終了し、変更を保存します。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


Web フォーム

Web フォームは、テスト スクリプトの dclform セクションに定義されます。

Web フォーム宣言の構文

フォーム宣言はフォーム名 (たとえば FORM_NAME) で指定されます。このフォーム名は任意の有効な識別子文字列で、その後にコロンを付ける必要があります。 左辺の文字列はフィールドまたはパラメータの名前を指定します。 イメージ マップ座標などの無名 URL パラメータには、空の文字列を使用できます。 右辺の値はフィールドまたはパラメータのデータ値を指定します。 これらは、グローバル定数、グローバル変数、ランダム変数のいずれでもかまいません。

以下の例は Web フォーム宣言の必須構文を示します。

dclform
  FORM_NAME:
  "field-name" := R-Value;

Web フォーム文字列のエンコーディング

フォーム宣言で使用される文字列はすべて、サーバーに送信される際に URL エンコードされます。 つまり、安全でない文字は 16 進数の列 (%xx) に自動的に変換されます。 URL に直接付加されたパラメータはエンコードされません (たとえば WebUrl("http://host/cgi-bin/doit?MyUnSafeMessage&-?%?-?", 0.0) )。 これにより、アプリケーションで非標準の URL パラメータを使用できるようになります。

Web フォーム スクリプトの例

以下の例は、フォーム送信をシミュレートする Silk Performer スクリプトの一部を示しています。 ランダム変数 rsEmail および rsPlatform が 2 つの異なるランダム関数 (RndFile および RndInd) でランダム変数セクションに定義されています。 その後は WebFormPost や WebFormGet を呼び出すたびに、これらのランダム変数が更新され、その中に新しいランダム値が格納されます。 これらのランダム値は、リクエストに付けて Web サーバーに自動的に送信される URL エンコードされたフォーム文字列を生成するのに使用されます。 WebFormPost がフォーム内容の文字列を HTTP ヘッダーの末尾に付加するのに対して、WebFormGet は URL の末尾に "?" で区切って付加します。

dclrand
  rsEmail : RndFile
  ("elname.rnd", 20);
  rsPlatform : RndInd("Windows NT" = 0.3;
  "Windows 2000" = 0.6;
  "other" = 0.1);

dcltrans
  transaction TWebFormPost
  begin
    WebFormPost("http://www.comp.com/cgi/FormMail.pl", CGI_CUST_SUPPORT, nWait);
    WebFormGet("http://www.comp.com/cgi/form", CGI_CUST_SUPPORT, nWait);
  end TWebFormPost;

dclform
  CGI_CUST_SUPPORT:
  "email" := rsEmail,
  "sitetype" := "business",
  "sitelang1" := "english",
  "platform" := rsPlatform;
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)


クッキー

Silk Performer は Web アプリケーションで使用されるクッキーの記録と再生をサポートします。

概要

クッキーにより Web サーバーはクライアント コンピュータに状態情報を格納し取得できます。 サーバーは、HTTP オブジェクトを送信するとき、指定した時間、クライアントに格納される状態オブジェクト "クッキー" を送信することもあります。 クッキーには、有効である対象の URL の範囲を定義する記述が含まれます。 URL のこの範囲内から次にクライアントが再接続するとき、リクエストに加えて、クッキーの内容がサーバーに送信されます。 クッキーには永続と非永続があります。 永続クッキーはクライアント コンピュータのクッキー データベースに格納され、指定した有効期限が切れたときにだけ削除されます。 非永続クッキーは Web ブラウザの単一のセッション中にだけ維持され、クライアントの Web アプリケーションを終了したときに削除されます。 できる限り現実的なシミュレーションを作成するために、Internet Recorder で永続クッキーのみが記録 (そして再生) されます。

クッキー データベース関数

クッキー データベース関数の詳細については、「クッキー関数」を参照してください。 これらの関数を使用する前に、クッキーについて (http://www.w3.org/Protocols/rfc2109/rfc2109 で概要を説明) 理解する必要があります。

重要事項

Silk Performer でクッキーを使うときに次の事項に留意してください。

  • Silk Performer クッキー データベースは非永続的で、したがって、テストを実行中にだけ存在します。
  • 各仮想ユーザーには個別のクッキー データベースがあり、したがってクッキー データベースの内容は、仮想ユーザーごとに異なります。
  • クッキーはサーバー側で一般に作成されますが、WebCookieSet 関数を使用して、既に存在するクッキーをシミュレートできます。
親トピック: Web 2.0 アプリケーションの負荷テスト (プロトコル レベル)
関連概念
Cookie Database Functions Overview


Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)

Silk Performer を使用すると、今日の最新の Web アプリケーションのテストをプロトコル レベル (HTTP) で簡単に行えるだけでなく、実際の Web ブラウザ (Internet Explorer、Chrome、Firefox) を使用して負荷を生成することができます。
ブラウザ駆動型負荷テストを利用するには、2 種類のアプローチがあります。
  • Silk Test で作成した機能テストの再利用。サポートするブラウザを使って機能テストを自動化した Silk Test キーワード テスト資産が既に存在する場合に最適なアプローチです。このような資産を Silk Performer にインポートすると、BDL スタブ スクリプトにラップされ、負荷テストとして実行できるようになります。詳細については、「GUI レベルのテストのサポート」の「単一セッションの GUI レベルのテスト」を参照してください。
  • Silk Performer を使ってブラウザ駆動型負荷テスト スクリプトを一から作成。このアプローチでは、BDL スクリプト言語を使ってユーザーの操作をモデル化します。この場合は、Silk Test をインストールする必要はありません。ユーザーの操作は、Browser Application という名前の専用のツールを使って記録します。このアプリケーションには Internet Explorer コンポーネントを使用した記録機能があり、検証の追加、操作開始時間要素の定義、ビジュアル デバックなども行うことができます。
    注: 現時点では、Chrome や Firefox を使って記録することはできません。ただし、Browser Application を使って記録したスクリプトを、Chrome や Firefox で再生することは可能です。
注: ライセンスの観点からは、これらに違いはありません。どちらのブラウザ駆動負荷テストの場合でも、必要なライセンス タイプは SilkPerformerWebVU になります。
  • ブラウザ駆動型負荷テストの概要
    Web 2.0 アプリケーションをテストするために、Silk Performer を使用する方法についての概要を説明します。
  • Web ブラウザの構成設定
    安定したテスト実行を維持するために一部の Internet Explorer 設定を変更する理由について説明します。
  • テスト スクリプトを作成する
    ブラウザ駆動型の Web 負荷テスト スクリプトを作成する方法、およびスクリプト試行の実行によってスクリプトをテストする方法について説明します。
  • テスト スクリプトを分析する
    Browser Application でスクリプト試行を行う利点について説明します。
  • プロジェクトのプロファイル設定を構成する
    Silk Performer で使用できるブラウザ駆動型 Web 負荷テストのプロファイル設定について説明します。
  • ブラウザ駆動型テストの高度な概念
    ブラウザ駆動型負荷テストの高度な概念について説明します。
  • ブラウザ駆動型の負荷テストのトラブルシューティング
    実際のユーザー アカウントを使用した perfrun 処理の開始方法、クライアント証明書の処理方法、および AJAX 同期からの特定の URL の除外方法について説明します。
親トピック: サポートされる Web アプリケーション


ブラウザ駆動型負荷テストの概要

Silk Performer を使用すると、今日の最新の Web アプリケーションのテストをプロトコル レベル (HTTP) で簡単に行えるだけでなく、実際の Web ブラウザ (Internet Explorer、Firefox、Chrome) を使用して負荷を生成することができます。これにより、Web アプリケーションに組み込まれた AJAX ロジックを利用して、複雑な AJAX 動作をテスト中に正確にシミュレートすることができます。この強力なテスト方法では、レンダリング時間やプロトコル レベルの統計など、エンド ユーザーによる実際のブラウザ動作を反映する結果が提供されます。

特定の AJAX フレームワークのみ (およびコントロールの特定のバージョンまたはサブセットのみ) をサポートする他の負荷テストソリューションと異なり、Silk Performer では、Internet Explorer、Firefox、Chrome 用に開発され、テストされた広範囲にわたる Web アプリケーションがサポートされています。

Silk Performer では、ブラウザ駆動型負荷テストでサポートするすべてのブラウザに対して、同じ機能と動作を実現することを目指しています。このため、Internet Explorer ベースの Browser Application でスクリプトを記録し、Firefox と Chrome で再生できるようにしています。

しかし、ごくまれに、ブラウザ固有の差異によりこの前提が崩れる場合があります。たとえば、Browser Application で生成したロケータを Chrome や Firefox では解決できない場合があります。詳細については、「各種ブラウザを使った再生時の制限事項」を参照してください。

ほとんどのブラウザでは、頻繁に自動的にアップデートが行われます。しかし、負荷テスト環境では、結果の一貫性に影響を与えるため理想的とは言えません。さらに、Silk Performer の最新のリリース後に、ブラウザの新しいバージョンがリリースされた場合など、そのブラウザが Silk Performer で動作確認されていない可能性もあります。一般的な規則として、この問題を避けるには、リリース ノートの「テスト済みソフトウェア」セクションに記載されたテスト済みブラウザのバージョンを利用し、最新のホットフィックスをインストールしてください。

  1. ポップアップ ウィンドウのサポート
    Silk Performer のブラウザ駆動型テストでは、ポップアップ ウィンドウを利用するサイトがサポートされています。
  2. サンプル Web 2.0 アプリケーション
    Silk Performer には、Web 2.0 アプリケーションのテストを習得するために使用できる最新のサンプル Web アプリケーションが備えられていることについて説明します。
  3. サンプル アプリケーションのポップアップ ウィンドウ
    サンプルの Web 2.0 アプリケーションに、複数のブラウザ ウィンドウの Silk Performer サポートを試すために使用できるポップアップ ウィンドウ機能が含まれていることを説明します。
  4. HTML ダイアログ ボックスのサポート
    ブラウザ駆動型 Web 負荷テスト中に Silk Performer が認識するダイアログ タイプをリストします。
  5. ネイティブ再生
    ブラウザ駆動型のスクリプト再生で、JavaScript イベントの代わりに Windows API レベルのイベントを使用して信頼性を保証する方法について説明します。
親トピック: Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)
関連概念
Web 負荷テストの概要
関連資料
BrowserSetIEMode Function


ポップアップ ウィンドウのサポート

Silk Performer のブラウザ駆動型テストでは、ポップアップ ウィンドウ (ログイン ダイアログ ボックスなど) を利用するサイトがサポートされています。ポップアップ ブラウザ ウィンドウには、メイン ページに戻される値をユーザーが入力する入力フィールドが含まれることがよくあります (ユーザー名やパスワード文字列など)。複数ブラウザ ウィンドウのサポートは、Web ブラウザ駆動型 (AJAX) タイプの Silk Performer プロジェクトを作成するときにデフォルトで使用できます。

アプリケーションの記録中にポップアップ ウィンドウが生成されるたびに、新しいタブが Browser Application に作成されます。発生した各ポップアップ ウィンドウが、Browser Application に作成されるタブになります。記録中に Browser Application のタブをクリックするたびに、BrowserActivateWindow 関数が自動的にスクリプト化されます。

注: 記録中、手動で (メニュー バー、コンテキスト メニュー、またはキーボードのショートカット経由で) ウィンドウまたはタブを開くことはできません。
親トピック: ブラウザ駆動型負荷テストの概要
次のトピック: サンプル Web 2.0 アプリケーション


サンプル アプリケーションのポップアップ ウィンドウ

サンプルの Web 2.0 アプリケーションには、複数のブラウザ ウィンドウの Silk Performer サポートを試すために使用できるポップアップ ウィンドウ機能が含まれています。
  1. ポップアップ ウィンドウを生成するには、サンプルの Web 2.0 アプリケーション http://demo.borland.com/InsuranceWebExtJS/ にアクセスします。
  2. Select a Service or Log in ドロップリストから Agent Lookup を選択します。
  3. Find an Insurance Co. Agent ページの下部にある Open in new window リンクをクリックします。 Find an Insurance Co. Agent ページが、Browser Application の新しいタブに表示されます。

ページ下部にある Close Window リンクをクリックして、タブを閉じます。

親トピック: ブラウザ駆動型負荷テストの概要
前のトピック: サンプル Web 2.0 アプリケーション
次のトピック: HTML ダイアログ ボックスのサポート


HTML ダイアログ ボックスのサポート

Silk Performer では次のダイアログ タイプが認識されます。
JavaScript ダイアログ | すべてのブラウザでサポート
印刷ダイアログ | サポート対象外
ファイルの保存/開くダイアログ | Internet Explorer でサポート
モーダル ウィンドウとモードレス ウィンドウ（HTML ダイアログ）* | Internet Explorer でサポート

* HTML ダイアログはウィンドウとして表示されます。モーダル/モードレス ウィンドウは、Internet Explorer 固有の機能であるため、Internet Explorer でのみサポートされます。

親トピック: ブラウザ駆動型負荷テストの概要
前のトピック: サンプル アプリケーションのポップアップ ウィンドウ
次のトピック: ネイティブ再生


ネイティブ再生

本トピックは、Internet Explorer にのみ該当します。他のブラウザに対しては、Silk Performer はネイティブ再生機能を提供していません。

ネイティブ再生 の概念により、スクリプトの再生の信頼性を高めることができます。これは、頻繁に使用される関数に対して JavaScript イベントの代わりに Windows API レベルのイベントを使用して実現します。

ネイティブ再生のコンテキストでは、2 つの特別な用語、ネイティブ再生 と 従来の入力モード を使用します。ネイティブ再生は、従来の入力モードの対極にあります。従来の入力モードをオンにすると、ネイティブ再生は自動的にオフになります。逆も同様です。この観点から、ネイティブ関数 と 従来の関数 を分類することもできます。

  • ネイティブ関数は、Windows API レベルのイベントを使用します。
  • 従来の関数は、JavaScript イベントを使用します。
次の関数は従来の関数の呼び出しで、それにはすべて同等なネイティブ関数があります。これらの従来の関数の 1 つが再生時に検出されると、
  • BrowserClick は BrowserNativeClick のように再生されます
  • BrowserDoubleClick は BrowserNativeDoubleClick のように再生されます
  • BrowserSetText は BrowserTypeKeys のように再生されます
  • BrowserSetPassword は BrowserTypeKeys のように再生されます
  • BrowserMouseMove は BrowserNativeMouseMove のように再生されます

従来の関数の代わりにネイティブ関数を実行することができない場合には、従来の関数が使用され、警告メッセージがログに記録されます。たとえば、要素をクリックするマウスの位置が決定できない場合などがこれに該当します。

ネイティブ再生は、デフォルトで有効になっています。プロファイル設定で無効にすることができます。設定 > アクティブ プロファイル > Web (ブラウザ駆動) をクリックします。全般 タブで、従来の入力モード をオンにします。または、スクリプトに BrowserSetOption(BROWSER_OPT_LEGACY_INPUT_MODE, true) 関数を挿入して無効にすることもできます。

従来の入力モードは、Silk Performer バージョン 9.0 以前を使用して作成されたすべてのプロジェクト プロファイルに対してデフォルトでオンになっています。

親トピック: ブラウザ駆動型負荷テストの概要
前のトピック: HTML ダイアログ ボックスのサポート
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


Web ブラウザの構成設定

安定したテスト実行を維持するには、いくつかのブラウザ設定が重要です。設定を変更しなくても Silk Performer は動作しますが、Internet Explorer のブラウザ設定を変更するにはいくつかの理由があります。

  • 再生速度を向上させる
    • ロード速度の遅い Web ページではなく、about:blank をホーム ページとして使用する
  • 予期しないブラウザの動作を回避する
    • ポップアップ ウィンドウおよび警告ダイアログ ボックスを無効にする
    • オートコンプリート機能を無効にする
    • パスワード ウィザードを無効にする
    • Silk Performer を Windows Server オペレーティング システムで実行している場合、Internet Explorer Enhanced Security Configuration (IE ESC) を無効にします。
  • ブラウザの誤動作を回避する
    • サードパーティのプラグインを無効にする

次の表に、Internet Explorer GUI 内でこれらの設定を確認できる場所を示します。

注: ブラウザ設定は、ツール > インターネット オプション にあります。
タブ名 | オプション | 構成 | コメント
全般 ホーム ページ

about:blank に設定する

 新しいタブの開始時間を最小限に抑えます。
全般 タブ
  • 複数のタブを閉じるときの警告を無効にする
  • 新しいタブの作成時における新しいタブへの移動を有効にする
  • 予期しないダイアログ ボックスの表示を回避します。
  • このようにしないと、新しいタブを開くリンクが正しく再生されない可能性があります。
プライバシー | ポップアップ ブロック | ポップアップ ブロックを無効にする | Web サイトを新しいウィンドウで確実に開くことができます。
コンテンツ オートコンプリート オフにする
  • 予期しないダイアログ ボックスの表示を回避します。
  • 入力中に予期しないデータ入力を回避します。
プログラム アドオンの管理 必要なアドオンのみを有効にする
  • サードパーティのアドオンには不具合が含まれることがあります。
  • サードパーティのアドオンに互換性のない場合があります。
詳細設定 設定
  • Internet Explorer の更新について自動的に確認する を無効にする
  • スクリプトのデバッグを使用しない (Internet Explorer) を有効にする
  • スクリプトのデバッグを使用しない (その他) を有効にする
  • スクリプト エラーごとに通知を表示する を無効にする
  • すべての ...警告する 設定を無効にする
 予期しないダイアログ ボックスの表示を回避します。
注: ご使用のブラウザのバージョンによっては、利用できない設定もあります。
  1. 複数の仮想ユーザーを実行する
    Silk Performer で、初めてのユーザーおよび 2 回目以降のユーザーの両方の動作をシミュレートできることについて説明します。
親トピック: Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)


複数の仮想ユーザーを実行する

複数のブラウザ セッションを並列に実行するとき、セッションが互いに独立して動作することを Silk Performer は補償しなければなりません。現実のユーザー負荷をシミュレートするには、キャッシュ、Cookie データベース、履歴は特に、仮想ユーザー間で共有することはできません。ブラウザ単位で仮想ユーザーを分離することは、ブラウザ サンドボックスと呼ばれており、仮想ユーザーごとに固有の環境でブラウザを実行します。

サンドボックス モードでブラウザを実行するために、Silk Performer はブラウザごとに異なる技術を使用します。

Internet Explorer

パフォーマンスとリソースの観点から、Silk Performer は仮想ユーザーのシミュレートに Internet Explorer ブラウザの完全なインスタンスではなく、Internet Explorer ActiveX コントロールを使用します。Internet Explorer コントロールのデフォルトの動作では、1 Windows ユーザーが開始したすべてのブラウザ インスタンスに対して 1 つの Cookie データベース、キャッシュ、履歴が保持されます。しかし、負荷テストでは、仮想ユーザーごとに 1 つの Cookie データベース、キャッシュ、履歴を保持するように、Silk Performer が Internet Explorer コントロールを再構成します。

仮想ユーザーごとに固有の独立した Internet Explorer サンドボックスがあるため、プロトコル ベースの Web シミュレーションで使用される方法と同じように、初めてのユーザーおよび 2 回目以降のユーザーの動作を正確にシミュレートすることができます。

Chrome と Firefox

これらのブラウザには、個々のブラウザ セッションの独立性を保つ独自のメカニズムが備わっています。Silk Performer は、対応する WebDriver インスタンスをドライバ エンジンとして使用し、負荷テストで実行できるようにするためにカスタマイズしています。

親トピック: Web ブラウザの構成設定


テスト スクリプトを作成する

テスト スクリプトを作成する最も簡単な方法は、Silk Performer Recorder を使用することです。Recorder は、トラフィックを測定して記録し、テスト スクリプトを生成する Silk Performer のエンジンです。

Silk Performer Recorder は、テスト対象のクライアント アプリケーションとサーバー間で移動するトラフィックをキャプチャして記録します。 記録が終了すると、Silk Performer Recorder は、記録されたトラフィックに基づいてテスト スクリプトを自動生成します。 スクリプトは、Silk Performer のスクリプト言語である Benchmark Description Language (BDL) で記述されます。

  1. ブラウザ駆動型の Web 負荷テスト プロジェクトを定義する
    プロジェクトには、ワークロード、テスト スクリプト、データ ファイルなど、負荷テスト完了に必要なリソースがすべて含まれています。
  2. テスト スクリプトを記録する
    Silk Performer Recorder を使用して、テスト スクリプトを作成します。Recorder は、トラフィックの取得と記録、およびテスト スクリプトの生成を行う Silk Performer のエンジンです。
  3. Browser Application と Locator Spy の使用方法
    簡単に記録/再生できるようにするため、Silk Performer には独自の Browser Application が備えられています。
  4. Browser Application でのロケータの検証
    Browser Application に、再生 ウィンドウでのロケータ情報の分析と操作を簡単にするコマンドが用意されていることを説明します。
  5. マウス移動の挿入
    要素上にマウスで移動しても記録されず、別の UI 要素を検出できないために発生するスクリプト内のエラーを修正する方法について説明します。
  6. 検証関数を挿入する
    Browser Application を使用して、ブラウザ駆動型のスクリプト記録時に検証関数を視覚的に挿入できます。
  7. TTI に要素を含める
    記録時に要素を TTI 関連要素としてタグ付ける方法について説明します。
  8. スクリプトの試行
    スクリプトの試行によって、記録された操作がスクリプトで正確に再現されるかどうかがわかることについて説明します。
  9. テスト スクリプトを試行する
    テスト スクリプトを生成したら、スクリプトの試行を行って、スクリプトがエラーなしで動作するかどうかを確認します。
  10. スクリプトの試行のステップ再生
    スクリプトの試行 ダイアログで ステップ実行 を有効にすると、スクリプトの試行の再生を 1 ステップずつ進めることができます。
  11. 一般的な再生エラー
    スクリプトが正しく再生されずカスタマイズを必要とする一般的な理由を示します。
親トピック: Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)


ブラウザ駆動型の Web 負荷テスト プロジェクトを定義する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、Web browser-driven (AJAX) を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: テスト スクリプトを作成する
次のトピック: テスト スクリプトを記録する
関連タスク
テスト スクリプトを記録する


テスト スクリプトを記録する

ブラウザ駆動型スクリプトの記録は、Internet Explorer でのみ利用可能です。

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. Browser Application を 記録プロファイル リストから選択します。
  3. URL フィールドに、記録する URL を入力します。
    注: InsuranceWeb サンプル Web 2.0 アプリケーションは、http://demo.borland.com/InsuranceWebExtJS/ から入手できます。 Select a Service or login リストでは、Auto Quote および Agent Lookup サービスをテストに使用することができますが、リストに示されたそれ以外のサービスには機能がありません。
  4. 記録の開始 をクリックします。 Silk Performer Browser Application（Internet Explorer）と共に、Silk Performer Recorder が最小化されて開きます。
    注: 記録時のブラウザ ウィンドウのサイズを指定するには、表示 > ブラウザ ウィンドウのサイズ変更 に移動し、幅 および 高さ にピクセル値を定義します。
    記録中に発生したアクションのレポートを表示するには、Recorder ツールバーの [image] をクリックして Recorder ダイアログ ボックスを最大化します。
  5. Browser Application Recorder を使用して、テスト中に仮想ユーザーが行う操作 (リンクのクリック、フィールドへのデータ入力、データ送信、ポップアップ ウィンドウを開くなど) と同じ方法でサンプル アプリケーションとやり取りします。アクションは、Browser Application Recorder によってキャプチャされ、記録されます。
    • 記録を一時的に停止し、再開するには、 [image] (記録の一時停止/再開) をクリックします。
    • スクリプトの記録を終了し、スクリプトを保存するには、 [image] (記録停止) をクリックします。
  6. 作業が完了したら、ブラウザ ウィンドウを閉じ、記録停止 をクリックします。 名前を付けて保存 ダイアログ ボックスが表示されます。
  7. スクリプトに意味のある名前を入力し、保存 をクリックします。

    実行したユーザー アクションに基づいた BDL テスト スクリプトが、スクリプト ウィンドウに表示されます。

親トピック: テスト スクリプトを作成する
前のトピック: ブラウザ駆動型の Web 負荷テスト プロジェクトを定義する
次のトピック: Browser Application と Locator Spy の使用方法


Browser Application と Locator Spy の使用方法

簡単に記録/再生できるようにするため、Silk Performer には独自の Browser Application が備えられています。アプリケーションには、次の主要な機能があります。

  • ブラウザ ウィンドウ（Internet Explorer コントロール）
  • Locator Spy
  • 記録/再生ウィンドウ

Browser Application の最も重要な要素を以下に示します。

注: DOM オブジェクトを選択する前に、UI 要素の追跡が有効になっている必要があります。追跡が有効になっている場合、UI 要素の上にカーソルを置くと、要素が緑色の矩形で囲まれます。追跡が有効になっていない場合は 追跡の有効化 をクリックします。

記録/再生ウィンドウ

このウィンドウには、記録時と再生時のログ情報が表示されます。記録の開始/停止と一時停止/再開 (記録モード)、および再生の一時停止/再開 (再生モード) を行うことができます。

ブラウザ ナビゲーション バー

このバーを使って、標準のブラウザ ナビゲーションが可能になります。

強調表示された DOM 要素

マウスを Web ページ上で動かすと、カーソルの下にある DOM 要素が緑色の矩形で強調表示されます。これにより、Web ページのアーキテクチャと DOM 階層の雰囲気をつかむことができます。

検査された DOM 要素

Pause/Break キーを押すと、次のアクションが起動されます。

  • 強調表示された DOM 要素が、検査された DOM 要素になります。
  • 検査された DOM 要素の位置が、青色の強調表示で示されます。
  • 現在のページの DOM 階層ツリーが決まり、Locator Spy に DOM 要素の HTML タグで表示されます。
  • 検査された DOM 要素のパスが展開され、検査された DOM 要素が選択されます。
  • 検査された DOM 要素の属性が表示されます。
  • 検査された DOM 要素のロケータが決まり、ロケータ フィールド に表示されます。

Locator Spy 内を検索するには、キーボードの Ctrl+F を押下します。または、アクション > DOM ツリー内の検索 を選択します。タグ、プロパティ名、または プロパティ値 内の文字列を検索できます。

検査された DOM 要素を変更するには、強調表示された DOM 要素で Pause/Break キーを押すか、DOM 階層ツリー内で別の DOM 要素を選択します。

DOM 階層ツリーで他の DOM 要素を選択すると、DOM 要素のロケータが決まり、HTML タグの横に表示されます。ロケータ フィールドが更新され、DOM 要素が青色の矩形で強調表示されます。

Pause/Break キーを押した後で、新しく選択した DOM 要素が見つからないためにページの DOM が無効になると、ロケータ フィールドの枠が赤色で表示されます。Pause/Break を押すと、階層ツリーが更新され、現在の DOM オブジェクトが強調表示されます。DOM 階層ツリー内のロケータ文字列も無効になるため、削除されます。

ロケータ フィールド

ロケータ フィールドには、現在検査中の DOM 要素のロケータ文字列が表示されます。検査された DOM 要素が変更されるたびに、ロケータ文字列が更新されます。

ロケータ フィールドでは、ロケータ文字列を他の場所（BDL スクリプトなど）にコピーすることができます。また、ロケータ文字列を手動で編集することもできます。ロケータを編集すると、自動的に検証されます。ロケータが無効な場合は、赤色で強調表示されます。ロケータが有効になると、緑色で強調表示されます。

スクリプトの試行中に検証を追加する場合は、再生を一時停止して 検証の追加 をクリックします。スクリプトの試行中における検証の追加は、記録中と完全に同じように機能します。

Locator Spy の右側のウィンドウで、プロパティを右クリックしてプロパティ名、プロパティ値、またはそれら両方をクリップボードにコピーできます。両方をコピーした場合は、文字列が @name='value' の形式で保存されます。実世界の例として、@hideFocus='false' があります。この機能を使って、ロケータ フィールドのプロパティを簡単に書き換えることができます。

検査された DOM 要素の属性

これは、現在検査中の DOM 要素に属する属性 (名前/値のペア) のリストです。現在のロケータ文字列が要件を満たしていない場合は、リストに示される属性を使って、ロケータ文字列を手動で指定できます。

親トピック: テスト スクリプトを作成する
前のトピック: テスト スクリプトを記録する
次のトピック: Browser Application でのロケータの検証


Browser Application でのロケータの検証

Browser Application には、再生 ウィンドウでのロケータ情報の分析と操作を簡単にするコマンドが用意されています。 再生 ウィンドウの任意の API 呼び出しを右クリックして、呼び出しのロケータ情報のコピー、情報 列のコンテンツのコピー、および Locator Spy DOM 階層ツリーの呼び出しのロケータの表示を行うための状況依存のコマンドにアクセスします。

このようなコマンドは、たとえばロケータの検証または API 呼び出しに失敗したときに使うと便利です。 API 呼び出しのロケータを使用して、Locator Spy で呼び出しを探したり、問題をトラブルシューティングしたり、それに応じてスクリプトを編集できます。 また、コピー コマンドを使用して、API の詳細をコピーして、電子メールや問題レポートに貼り付けることができます。

親トピック: テスト スクリプトを作成する
前のトピック: Browser Application と Locator Spy の使用方法
次のトピック: マウス移動の挿入


マウス移動の挿入

特定の要素 (ボタンやメニュー項目など) 上にマウスを使用して移動する場合のみ項目が表示される Web サイトをテストすると、スクリプトの再生中にエラーが発生します。 ホバーリング（マウス移動）イベントは記録されないため、 Silk Performer は項目を検出できません。 このようなケースの例として、JavaScript で作成されたメニューがあります。 ただし、 Silk Performer では、スクリプトの再生中にこの問題を修正することができます。

エラーが発生した場合は、 Browser Application の 問題の解決 ボタンをクリックし、リストから マウスの移動の挿入 を選択してマウスを UI 要素の上に移動して、キーボードの Pause/Break を押し、 挿入 をクリックして スクリプトの再実行 をクリックします。 これでスクリプトがエラーなしで実行されるようになります。

親トピック: テスト スクリプトを作成する
前のトピック: Browser Application でのロケータの検証
次のトピック: 検証関数を挿入する


検証関数を挿入する

  1. Browser Application を使用したブラウザ駆動型のスクリプト記録時に、後でスクリプト再生時に検証する値が含まれる DOM オブジェクトを選択します (キーボードの Pause/Break キーを押して DOM オブジェクトを選択します)。
    注: DOM オブジェクトを選択する前に、UI 要素の追跡が有効になっている必要があります。追跡が有効になっている場合、UI 要素の上にカーソルを置くと、要素が緑色の矩形で囲まれます。追跡が有効になっていない場合は 追跡の有効化 をクリックします。
    選択した UI オブジェクトのロケータが ロケータ テキスト ボックスに表示され、DOM 階層がツリー メニューに表示されます。
  2. 検証の追加 をクリックします。 検証の追加 ボタンは、ロケータ フィールドにロケータの値が表示されたときに有効になります。 ロケータ フィールドにロケータの値が事前にロードされた状態で 検証関数の追加 ダイアログ ボックスが表示されます。
  3. DOM の プロパティ名 を選択します (たとえば href、class、onmousedown、または textContents)。 意味のある検証関数にするためには、選択するプロパティ名に、検証可能な プロパティ値 が必要です。たとえば、プロパティ名 href は、プロパティ値が特定の URL である必要があります。
  4. OK をクリックして、選択した DOM 要素の BrowserVerifyProperty 検証関数と、対応するプロパティ名と値のペアをスクリプトに挿入します。

検証アクションが 記録ウィンドウ に記録され、検証関数が BDL スクリプトに挿入されます。

親トピック: テスト スクリプトを作成する
前のトピック: マウス移動の挿入
次のトピック: TTI に要素を含める


TTI に要素を含める

  1. ファイル > プロジェクトの新規作成 をクリックして、新しいブラウザ駆動型プロジェクトを作成します。既存のプロジェクトを使用する場合は、ワークフロー バーから スクリプトの作成 をクリックして、ステップ 3 に移ります。
  2. Web browser-driven (AJAX) をツリーから選択し、名前 と 説明 を入力して 次へ をクリックします。
  3. 記録するアプリケーションの URL を入力して 記録の開始 をクリックします。 Browser Application が起動します。
  4. アプリケーションを操作して記録します。要素を TTI 関連要素としてタグ付けするには、要素上にマウスを移動して Pause/Break を押し、TTI に含める をクリックします。必要な要素をいくつでも含めることができます。 Silk Performer は、BrowserTtiIncludeElement() 関数をスクリプトに追加します。
    重要: 含める前に要素をクリックしないように注意してください。このような場合、BrowserTtiIncludeElement() 関数が Click 関数と結び付けられ、再生時に問題が発生する場合があります。
  5. Browser Application 閉じて記録を停止し、スクリプトを保存します。
親トピック: テスト スクリプトを作成する
前のトピック: 検証関数を挿入する
次のトピック: スクリプトの試行
関連概念
操作開始時間
関連資料
ブラウザ駆動型の測定値
BrowserTtiIncludeElement Function


スクリプトの試行

テスト スクリプトを生成したら、スクリプトの試行を行って、スクリプトがエラーなしで動作するかどうかを確認します。 スクリプトの試行を行うことによって、Browser Application ベースの Recorder によって記録された操作がスクリプトで正確に再現されるかどうかがわかります。 また、スクリプトがエラーなしで動作できるようにするために、パラメータ化を必要とするコンテキスト固有のセッション処理がスクリプトに含まれているかどうかもわかります。

スクリプトの試行では、1 人の仮想ユーザーのみが実行され、トランザクション間の思考時間遅延が発生しない ストレス テスト オプションが有効になります。

注: ブラウザ駆動型のスクリプトの試行のデフォルト オプション設定には、ログ ファイルとレポート ファイルの作成および Browser Application の 再生ウィンドウ 内での再生は含まれますが、テスト時にダウンロードされたコンテンツのリアルタイム表示 (TrueLog Explorer 経由) は含まれません。
親トピック: テスト スクリプトを作成する
前のトピック: TTI に要素を含める
次のトピック: テスト スクリプトを試行する


テスト スクリプトを試行する

  1. ワークフロー バーで、スクリプトの試行 をクリックします。 作成したスクリプトが スクリプト リストで選択され、アクティブ プロファイルが プロファイル リストで選択されている状態で、スクリプトの試行 ダイアログ ボックスが表示されます。[VUser] という仮想ユーザー グループが、ユーザー グループ グループ ボックスで選択されています。
  2. 設定を次のように構成します。
    1. リストから ブラウザ を選択します（Internet Explorer、Mozilla Firefox、Chrome）。
    2. ブラウザの 再生ウィンドウ に Web ページのコンテンツが表示されるようにするため、クライアントの表示 オプションを有効にします。 アプリケーション状態のスクリーンショットは、各 API 関数呼び出しの前に作成されます。
      注: シミュレーション設定は、ブラウザでスクリプトを再生する場合には適用されません。
    3. スクリプトをステップごとに実行するため、ステップ実行 オプションを有効にします。このオプションは、Internet Explorer の場合にのみ使用できます。
  3. 実行 をクリックします。
    注: ここでは、実際の負荷テストではなく、スクリプトのデバッグが必要かどうかを確認するために、1 人の仮想ユーザーを使用したテスト実行のみを行います。
    スクリプトの試行が開始されます。監視 ウィンドウが開き、実行の進捗についての詳細な情報が表示されます。
親トピック: テスト スクリプトを作成する
前のトピック: スクリプトの試行
次のトピック: スクリプトの試行のステップ再生


スクリプトの試行のステップ再生

スクリプトの試行 ダイアログで ステップ実行 を有効にすると、スクリプトの試行の再生を 1 ステップずつ進めることができます。このオプションは、Internet Explorer の場合にのみ使用できます。

  1. 上記の説明に従って [スクリプトの試行] を実行します。 スクリプトの試行 ダイアログで ステップ実行 オプションを有効にします。
  2. 再生ウィンドウ のボタンを使用して再生を制御します。
    • 現在の API 呼び出しを実行するには、 [image] (ステップ再生) をクリックします。
    • 残りの API 呼び出しを続けて実行するには、 [image] (再生の実行) をクリックします。
    • スクリプトの試行を終了するには、 [image] (再生の停止) をクリックします。
親トピック: テスト スクリプトを作成する
前のトピック: テスト スクリプトを試行する
次のトピック: 一般的な再生エラー


一般的な再生エラー

以下に、記録後にスクリプトが正しく再生されない一般的な理由を示します。 このような場合には、テスト スクリプトをカスタマイズする必要があります。

  • ステートフルなスクリプト：記録されたスクリプトは、テストするアプリケーションが再生時とスクリプトの記録時で同じ状態である場合にのみ動作します。 たとえば、ユーザー ログインを含むスクリプトは、アプリケーションがログアウト状態である場合にのみ正しく実行できます。 この問題を解決するには、ロジックをスクリプトに手動で追加してアプリケーションの状態を設定するか、記録したスクリプトによってアプリケーションの状態が変更されないことを最初に確認します (たとえば、スクリプトの記録中にユーザーのログアウトを含めることができます)。
  • 一時的に生成される DOM 属性: 一部の AJAX フレームワークでは、ページがロードされるたびに変更する属性 (ext の x-auto の値など) が生成されます。 ロケータがこのような属性に依存していると、スクリプトの再生に失敗します。 無視する属性リストに属性を追加して、属性が今後記録されないようにする必要があります。
  • マウス移動の欠落：特定の要素 (たとえば、ボタンまたはメニュー項目など) の上にマウスを移動した場合のみ表示される項目がある Web サイトをテストする場合は、スクリプトの再生中にエラーが発生します。 要素の上にマウスを移動する動作は記録されないため、Silk Performer は項目を検出できません。 このようなケースの例として、JavaScript で作成されたメニューがあります。 ただし、Silk Performer では、スクリプトの再生中にこの問題を修正することができます。 エラーが発生した場合は、 Browser Application の 問題の解決 ボタンをクリックし、リストから マウスの移動の挿入 を選択してマウスを UI 要素の上に移動して、キーボードの Pause/Break を押し、 挿入 をクリックして スクリプトの再実行 をクリックします。 これでスクリプトがエラーなしで実行されるようになります。
  • 同期タイムアウトに遭遇する呼び出し：AJAX 組み込み同期では、ブラウザがアイドル状態になるまで待機してから API 呼び出しが返されます。 これは、AJAX ベースのアプリケーションで信頼できるテストを行ううえで重要な要因となります。 ただし、アイドル状態がない場合もあります (ページでポーリングを使用したり、サーバープッシュ イベント用に接続を開いたままにする場合など)。 このような場合には、タイムアウトが発生するまで同期が待機します。 この問題は、同期モードの設定を一時的に HTML に戻すことによって解決できます。
親トピック: テスト スクリプトを作成する
前のトピック: スクリプトの試行のステップ再生
関連タスク
ブラウザ駆動型の再生設定を構成する


テスト スクリプトを分析する

Web プロトコルによる負荷テストの方法と異なり、ブラウザ駆動型の Web 負荷テストでは、スクリプトの検証にブラウザ自身を使用します。

ブラウザで [スクリプトの試行] を実行するメリットは、次のとおりです。

  • アプリケーションの状態がリアルタイムでブラウザに表示されます。
  • Locator Spy 機能を使用して、スクリプトの変更と適用ができます（Internet Explorer のみサポート）。
  • ステップ モードでスクリプトを実行できます（Internet Explorer のみサポート）。
  • 各ブラウザ API 呼び出しの前にスクリーンショットがキャプチャされ、以降の分析用に TrueLog に保存されます。

Browser Application で [スクリプトの試行] が正常に実行できたら、[スクリプトの試行] の結果を TrueLog Explorer を使って分析できます。TrueLog Explorer を使ったテスト スクリプトの分析では、次の作業を実行できます。

  • 仮想ユーザー要約レポートを表示する
  • エラーの検索
  • 再生テスト実行と記録テスト実行の比較
  1. TrueLog Explorer による視覚的分析
    TrueLog Explorer インターフェイスと、そのさまざまなコンポーネントについて説明します。
  2. テスト実行を分析する
    TrueLog Explorer を使用してテスト実行の分析を開始する方法について説明します。
  3. 要約レポートを表示する
    仮想ユーザー要約レポートは、個々のスクリプト試行について要約したレポートで、基本情報とタイミング平均を含むことについて説明します。
  4. 仮想ユーザー要約レポートを表示する
    テスト実行の仮想ユーザー要約レポートを表示して、テスト結果を分析することができます。
  5. 要約レポートを有効にする
    仮想ユーザー要約レポートの処理にはかなりのリソースを必要とするので、デフォルトでは生成されない設定になっていることについて説明します。
  6. TrueLog 内のエラーを検索する
    TrueLog Explorer では、スクリプトの試行の後でエラーをすばやく検索できます。 エラーとなったリクエストを調査して、必要なカスタマイズを行うことができます。
  7. ページ統計値を表示する
    概要ページで使用できるさまざまなタイプの Web ページ統計値について詳しく説明します。
  8. 概要ページを表示する
    テスト実行の正確性を検証したら、概要ページで Web ページ統計を利用して、アプリケーションのパフォーマンスを分析できます。
  9. 記録 Truelog と再生 Truelog を比較する
    再生 Truelog とそれに対応する記録 Truelog を比較することによって、記録されたスクリプトでエラーを特定することができます。
親トピック: Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)


TrueLog Explorer による視覚的分析

TrueLog Explorer の最も強力な機能の 1 つは、テスト中のアプリケーションによって表示された Web コンテンツを視覚的にレンダリングする機能です。実際に、仮想ユーザーがアプリケーションとやり取りをするときに見るものが表示されます。

TrueLog Explorer のインターフェイスは、次のセクションから構成されています。

  • ワークフロー バー は、TrueLog Explorer を扱う際の主要なインターフェイスとなります。ワークフロー バーは、TrueLog Explorer に組み込まれているテスト方法論を元に、5 つの主要な作業をサポートしています。
  • インターフェイスの左側にある API ノード ツリー メニューでは、負荷テスト中にダウンロードされた TrueLog データを展開または縮小できます。ロードされている TrueLog ファイルはそれぞれ、関連するすべての API ノードへのリンクと共に、ここに表示されます。ノードをクリックして、画面 ペインにスクリーンショットを表示し、情報 ビューに履歴詳細を表示することができます。
  • コンテンツ ペインでは、受信したすべてのデータに対して複数のビューを利用できます。
  • 情報 ペインには、テスト スクリプトおよびテスト実行に関するデータが表示されます。読み込まれた TrueLog ファイル、選択された API ノード、 BDL スクリプト、統計に関する一般情報が含まれます。
注: Silk Performer から TrueLog Explorer を起動するには、結果 > TrueLog の検討 を選択します。

親トピック: テスト スクリプトを分析する
次のトピック: テスト実行を分析する


テスト実行を分析する

  1. スクリプト試行によって TrueLog が TrueLog Explorer に読み込まれた状態で、ワークフロー バー の テストの分析 ボタンをクリックします。 テストの分析 ダイアログ ボックスが表示されます。
  2. 次のいずれかのオプションで操作を続行します。
    • 仮想ユーザー要約レポートの表示
    • TrueLog 内のエラーの検索
    • 再生テスト実行と記録テスト実行の比較
親トピック: テスト スクリプトを分析する
前のトピック: TrueLog Explorer による視覚的分析
次のトピック: 要約レポートを表示する


要約レポートを表示する

仮想ユーザー要約レポートは、個々のスクリプト試行について要約したレポートで、基本情報とタイミング平均を含みます。 それぞれのレポートは、仮想ユーザーごとに記録されており、表形式でデータが表示されます。

仮想ユーザー要約レポートには、以下に関する詳細情報が含まれています。

  • 仮想ユーザー
  • 検出されたエラー
  • テスト スクリプトに定義されているトランザクションごとに追跡したレスポンス時間情報
  • ダウンロードされた Web ページごとのページ タイマの測定値
  • スクリプトで使用された個別のタイマおよびカウンタ (Measure 関数)
親トピック: テスト スクリプトを分析する
前のトピック: テスト実行を分析する
次のトピック: 仮想ユーザー要約レポートを表示する


仮想ユーザー要約レポートを表示する

  1. スクリプトの試行によって生成された TrueLog が TrueLog Explorer に読み込まれた状態で、テストの分析 ボタンをクリックします。
  2. 仮想ユーザー要約レポートの表示 リンクをクリックします。
親トピック: テスト スクリプトを分析する
前のトピック: 要約レポートを表示する
次のトピック: 要約レポートを有効にする


要約レポートを有効にする

仮想ユーザー要約レポートの処理にはかなりのリソースを必要とするので、デフォルトでは生成されない設定になっています。 アニメーションを指定したスクリプトの試行が終了したとき (または API ノード ツリー メニューで TrueLog ファイルのルート ノードをクリックしたとき) に、自動的に仮想ユーザー レポートが表示されるようにするには、仮想ユーザー レポートを表示する オプション ( 設定 > ワークスペース > レポート ) を有効にします。

注: 仮想ユーザー レポートは、Silk Performer 内でも表示させることができます。仮想ユーザー名を右クリックし、仮想ユーザー レポート ファイルの表示 を選択します。
親トピック: テスト スクリプトを分析する
前のトピック: 仮想ユーザー要約レポートを表示する
次のトピック: TrueLog 内のエラーを検索する


TrueLog 内のエラーを検索する

TrueLog Explorer では、スクリプトの試行の後でエラーをすばやく検索できます。 エラーとなったリクエストを調査して、TrueLog Explorerで必要なカスタマイズを行うことができます。

注: API ノード ツリー メニューで表示すると、再生エラーを含む API ノードには、赤い「X」印が付いています。
  1. スクリプトの試行によって生成された TrueLog が TrueLog Explorer に読み込まれた状態で、テストの分析 ボタンをクリックします。
  2. エラーの検索 リンクをクリックします。 TrueLog のステップ スルー ダイアログが エラー オプションの選択された状態で開きます。
  3. 一度に 1 つのエラーを検索しながら TrueLog 結果ファイル内を移動するには、次を検索 をクリックします。
親トピック: テスト スクリプトを分析する
前のトピック: 要約レポートを有効にする
次のトピック: ページ統計値を表示する


ページ統計値を表示する

テスト実行の正確性を検証したら、ページ統計を利用して、「負荷のない」状態のアプリケーションのパフォーマンスを分析できます。

概要ページの詳細：

  • アクション時間：ページの総レスポンス時間。ブラウザでの処理およびレンダリングの時間が含まれます。
  • ドキュメント時間：ドキュメント ダウンロード時間 (サーバーのビジー時間を含む)、および埋め込みオブジェクトの受信に要した時間が表示されます。

アクションの詳細な統計値には、個々の Web ページ コンポーネントの正確なレスポンス時間が表示されるため、エラーや、ページのダウンロードが遅くなる根本原因を簡単に突き止めることができます。

スクリプトの試行には、思考時間が含まれないため、TryScript による測定結果は、実世界のパフォーマンスを予測するためには利用できません。

アクションの詳細な統計値には、各ページ コンポーネントの次のデータが含まれます。

  • DNS 検索時間
  • 接続時間
  • ラウンドトリップ時間
  • キャッシュ統計値
注: プロトコル ベースの方法と比較すると、ブラウザ駆動型のテスト統計には、特定の低レベル/プロトコル関連の指標は含まれません。
親トピック: テスト スクリプトを分析する
前のトピック: TrueLog 内のエラーを検索する
次のトピック: 概要ページを表示する


概要ページを表示する

  1. API ノードのツリー メニューから、統計を表示する API ノードを選択します。
  2. TrueLog のステップ スルー ダイアログ ボックスで、ブラウザ ノード を選択します。
  3. 統計 タブをクリックして、統計 ビューを開きます。
  4. 詳細分析およびページの掘り下げを行うには、[URL] 列に一覧されている中から、特定のコンポーネントを選択します。
親トピック: テスト スクリプトを分析する
前のトピック: ページ統計値を表示する
次のトピック: 記録 Truelog と再生 Truelog を比較する


記録 Truelog と再生 Truelog を比較する

Web アプリケーションのテストの場合、TrueLog Explorer には、テスト時に受信された実際の Web ページが表示されます。 TrueLog Explorer のアニメーション モードでは、ダウンロードされたデータをリアルタイムで監視することができます。 テスト中に受信されたとおりにデータが表示されます。

スクリプトの開発プロセス中に生成された TrueLog と、当初生成された TrueLog を比較することで、テスト スクリプトが正確に実行されたかどうかを確かめることができます。

  1. ワークフロー バーの テストの分析 ボタンをクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが表示されます。
  2. テスト実行の比較 をクリックします。
  3. 対応する記録 TrueLog が比較ビューに開き、TrueLog のステップ スルー ダイアログ ボックスが、 ブラウザ ノード オプションが選択された状態で表示されます。これにより、TrueLog をノードごとに比較することができます。
  4. 次を検索 ボタンをクリックすると、TrueLog 結果ファイル内を 1 ページずつ移動することができます。
    注: 再生時のコンテンツを表示しているウィンドウには、左上隅に緑色の三角マークが付いています。 アプリケーションの記録時に元々表示されていたコンテンツを表示しているウィンドウには、左上隅に赤い三角マークが付いています。
親トピック: テスト スクリプトを分析する
前のトピック: 概要ページを表示する


プロジェクトのプロファイル設定を構成する

Silk Performer には、ブラウザ駆動型 Web 負荷テストの多様なプロファイル設定が備えられています。 Web (ブラウザ駆動) プロファイル設定は、同期およびオブジェクト ロケータ生成に関係するプロジェクト固有の設定です。 設定内容は、プロジェクトごとに指定されます。

注: このチュートリアルでは、デフォルト設定を変更する必要はありません。
  1. ブラウザ駆動型の記録設定を構成する
    記録を開始する前に、アクティブ プロファイルの設定を構成する必要があります。
  2. ブラウザ駆動型の再生設定を構成する
    スクロールを記録する前に、アクティブ プロファイルの同期設定とシミュレーション設定を構成する必要があります。
親トピック: Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)


ブラウザ駆動型の記録設定を構成する

  1. プロジェクト ツリー メニューで プロファイル ノードを右クリックして、アクティブ プロファイルの編集 を選択します。 シミュレーション タブ (再生 カテゴリ) に プロファイル - [Profile1] - シミュレーション ダイアログ ボックスが表示されます。
  2. 記録 をクリックします。
  3. Web (ブラウザ駆動) までスクロールして選択します。
  4. 記録 タブを選択します。
  5. 無視する DOM 属性名：このフィールドには、記録時に無視する DOM 属性名を入力します。複数の名前を指定する場合にはカンマで区切ります。 無視する DOM 属性名 フィールドのどのパターンにも一致する属性名が、記録時に無視されます。
  6. 無視する DOM 属性値：このフィールドには、記録時に無視する DOM 属性値を入力します。複数の値を指定する場合にはカンマで区切ります。 無視する DOM 属性値 フィールドのどのパターンにも一致する属性値が、記録時に無視されます。
  7. 優先する DOM 属性名：このフィールドには、記録するカスタム属性名を指定します。
  8. DOM 属性値の最大長：このフィールドには、属性値の最大長を指定します。指定した値より長い場合は、切り捨てられます。切り捨てられた部分は、アスタリスク（*）で置換されます。 たとえば、最大長が 10 に設定されている場合、textContent の値が Some long text content であれば、最大長を超える部分が切り捨てられ、ロケーターは @textContents='Some long *' になります。
  9. OK をクリックします。
親トピック: プロジェクトのプロファイル設定を構成する
次のトピック: ブラウザ駆動型の再生設定を構成する
関連概念
Web (プロトコル レベル) 設定


ブラウザ駆動型の再生設定を構成する

  1. プロジェクト ツリー メニューで プロファイル ノードを右クリックして、アクティブ プロファイルの編集 を選択します。 シミュレーション タブに プロファイル - [Profile1] - シミュレーション ダイアログ ボックスが表示されます。
  2. 再生 カテゴリ ボタンをクリックします。
  3. Web (ブラウザ駆動) までスクロールして選択します。 Web (ブラウザ駆動) / 全般 タブが表示されます。
  4. この設定プロファイルで使用するブラウザをリストから選択します。
  5. シミュレーション グループ ボックスを使用して、Web サイトを訪問するユーザーの現実的なシミュレーションのためのオプションを設定します。

    • 初めて Web サイトを訪問したユーザーを実際にシミュレートするには、初めてのユーザー オプション ボタンをクリックします。

      トランザクションごとに、永続的な接続は閉じられ、Web ブラウザのエミュレーションがリセットされます。また、ドキュメント キャッシュ、ドキュメント履歴、Cookie データベース、認証データベース、および SSL コンテキスト キャッシュもクリアされます。このオプションを選択した場合、Silk Performer は、サーバーから全サイト（すべてのファイルを含む）をダウンロードします。

    • Web サイトを再訪問したユーザーを実際にシミュレートするには、2 回目以降のユーザー オプション ボタンをクリックします。トランザクションごとに、非永続的なセッションは閉じられますが、ドキュメント履歴、永続 Cookie データベース、およびコンテキスト キャッシュはクリアされません。このような場合、ドキュメント キャッシュにあるページはダウンロードされません。

    • ユーザーの Web ブラウザで自動再生を表示するときに Internet Explorer (IE) が使用するレンダリング モードを定義するには、IE 互換モード を選択します。デフォルト 値は、ユーザーの Internet Explorer ブラウザ バージョンによって異なります。
    注: シミュレーション設定は、Browser Application でスクリプトを再生する場合には適用されません。ただし、Internet Explorer のインターネット オプション内で構成するすべてのキャッシュ設定は、データ駆動型テストに適用されます。
  6. 再生互換性を選択して、ロケーターが生成される方法を定義します。このオプションを設定すると、互換性の問題を避けることができるため、新しいバージョンの Silk Performer で古いスクリプトを問題なく再生できます。BrowserReplayCompatibility 関数を手動でスクリプトに記述することによって、すべての単一のスクリプトに対して再生時の動作を定義することもできます。
  7. 従来の入力モード 設定が無効になっていることを確認します。
  8. 同期 タブを選択します。
  9. 必要に応じて、同期 設定を構成します。
    • 同期モード オプションは、ブラウザの起動呼び出しの準備状態を待機するために使用されるアルゴリズムを構成します (呼び出しの前後)。
    • 同期タイムアウト オプションは、オブジェクトが準備完了になるまで待機する最大時間 (ミリ秒単位) を構成します (呼び出しの前後)。
    • 同期から除外する URL テキスト ボックスに、除外するサービスまたは Web ページの URL 全体あるいは URL の一部を入力します。AJAX フレームワークやブラウザによっては、サーバーから非同期にデータを取得するために、特殊な HTTP 要求を継続して出し続けるものがあります。これらの要求により、指定した同期タイムアウトの期限が切れるまで同期がハングすることがあります。この状態を回避するには、HTML 同期モードを使用するか、問題が発生する要求の URL をここで指定します。複数のエントリをカンマで区切って指定します。
    • オブジェクト解決タイムアウト オプションは、再生中にオブジェクトが解決されるまで待機する最大時間 (ミリ秒単位) を構成します。
    • オブジェクト解決再試行間隔 オプションは、解決されないオブジェクトの後で別の再生が試行するまでの時間 (ミリ秒単位) を構成します。
  10. OK をクリックします。
親トピック: プロジェクトのプロファイル設定を構成する
前のトピック: ブラウザ駆動型の記録設定を構成する
関連概念
Web (プロトコル レベル) 設定


ブラウザ駆動型テストの高度な概念

  • 記録時のブラウザ ウィンドウのサイズを定義する
    記録時の特定のブラウザ ウィンドウのサイズを定義すると、TrueLog の分析時に再生スクリーンショットと並べて比較しやすいサイズにスクリーンショットを記録できるようになることを説明します。
  • システム コードページ以外の文字を使用した Web サイトのテスト
    Silk Performer は、表示可能でない文字を使用した Web サイトのブラウザ駆動負荷テストを有効にするために、このような文字を変換する方法について説明します。
  • 操作開始時間
    AJAX Web サイトのユーザー エクスペリエンスを測定することは、いくつからの理由から困難になります。このため、Silk Performer では 操作開始時間 を提供します。
親トピック: Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)


記録時のブラウザ ウィンドウのサイズを定義する

ブラウザ駆動型負荷テストで使用される Browser Application を起動します。

注: ブラウザのサイズは、スクリプトの記録時にのみ定義できます。
  1. 記録時の特定のブラウザ ウィンドウのサイズを定義するには、表示 > ブラウザ ウィンドウのサイズ変更 に移動します。 ブラウザ ウィンドウのサイズ変更 ダイアログ ボックスが表示されます。
  2. 幅 にピクセル値を指定します。
  3. 高さ にピクセル値を指定します。
  4. OK をクリックします。
親トピック: ブラウザ駆動型テストの高度な概念


システム コードページ以外の文字を使用した Web サイトのテスト

Silk Performer は、マルチバイト文字セット (MBCS) ベースのアプリケーションです。ブラウザ駆動型負荷テストを使用する際に、正しいシステム コードページを設定しなければなりません。これによって、Web サイトで表示される文字が正しく処理されることを保障します。

表示可能でない文字を使用した Web サイトの 負荷テストをサポートするために、Silk Performerは、これらの文字を変換します。例：次の文字列は、数値のセットに変換されます。

数値は、各文字の Unicode 値を 16 進表記で表します。スクリプトを再生すると、Silk Performer は、文字列を逆変換し、ブラウザを操作する際にそれを使用します。

注: Silk Performer は、ブラウザ駆動型 API 呼び出しにのみ、変換を適用します。他の API 呼び出しに表示可能でない文字を使用しないでください。
親トピック: ブラウザ駆動型テストの高度な概念


操作開始時間

AJAX Web サイトのテストの課題

ブラウザーが提供するタイミングで AJAX Web サイトのユーザー エクスペリエンスを測定することは、非常に困難になります。ユーザーが Web ページが準備できていると感じたときでも、バックグラウンドでまだ処理が完了していない場合もあります。また、処理が完了しても、その時点では Web ページがユーザーに対してまだ準備ができていないこともあります。重要なページ要素が onLoad 関数（onLoad Function） フェーズの後や 非同期アプリケーション ロジック（Asynchronous Application Logic） フェーズに非同期にロードされることがあります。このような場合、Web ページの感覚的なロード時間が、測定したロード時間とかなり異なる場合があります。このような理由から、Silk Performer ではいわゆる 操作開始時間（TTI： Time to Interact）を導入しました。

操作開始時間

Silk Performer の用語では、操作開始時間 を、ユーザーの操作（URL への移動やリンクのクリックなど）からユーザがページを操作するのに必要なすべての関連要素が準備完了になるまでの時間（ページのロードがまだ完了していない場合でも）として定義します。ページの関連要素の識別は、ユースケースやその要素が関連していると感じる観点に強く依存するもので、単純に自動化できません。たとえば、ある Web ショップでは、運営会社側の観点と、顧客側の観点という、異なる観点から Web サイトをテストできます。運営会社側の観点では、おすすめ商品を提示する要素を関連していると感じるかもしれません。しかし、顧客側の観点では、単に検索フィールドだけを関連要素であると感じるかもしれません。

このため、パフォーマンス エンジニアは、記録時にすべての TTI 関連要素にタグ付けする必要があります。Recorder は、すべてのタグ付けされた要素に対して BrowserTtiIncludeElement() 関数を生成します。再生時に Silk Performer は TTI 関連要素のそれぞれのロードにかかる時間を測定し、その最大値を 操作開始時間 としてレポートします。

ブラウザ駆動型の測定値

ブラウザ駆動型テストでは、Silk Performer は次の測定値を提供します。

測定値 | 説明
DOM インタラクティブ（DOM Interactive） | リクエストからブラウザがすべての HTML 要素を解析し、DOM を構築するまでの期間を表します。
DOM 完了（DOM Complete） | リクエストからブラウザがすべてのリソース（画像、スタイルシート、スクリプトなど）をダウンロードし、処理を完了するまでの期間を表します。
ロード終了（Load End） | リクエストからブラウザが onLoad 関数の実行を完了するまでの期間を表します。すべてのページのロード処理の最後のステップとして、ブラウザーは onLoad 関数をトリガーする onLoad エベントを送信します。onLoad 関数が実行されると、さらにアプリケーションのロジックが実行される場合があります。
描画開始（First Paint） | リクエストからページの表示が始まるまでの期間を表します。この測定値は、Internet Explorer の場合にのみ使用できます。
操作開始時間（Time to Interact） | リクエストからすべての TTI 関連要素がページ上で利用可能になるまでの期間を表します。この時点で、ユーザーは Web ページを操作できるようになります。
アクション時間（Action Time） | リクエストからブラウザがすべてのリソースをダウンロードし、処理を完了するまでの期間を表します。この期間の終了は、定義された同期モードによって異なります。同期モードが HTML の場合、onLoad 関数の完了時にアクション時間が終了します。同期モードが AJAX の場合、非同期アプリケーション ロジック フェーズ中にアクション時間が終了します。
注: DOM インタラクティブ、DOM 完了、ロード終了 は連続したイベントになります。これらのイベントはすべて、処理（Processing） フェーズ中にに終了します。一方、描画開始 と 操作開始時間 は完全に Web サイトに依存しており、HTTP レスポンス（HTTP Response） フェーズ、処理 フェーズ、非同期アプリケーション ロジック フェーズのどこかで終了します。
重要: TTI 機能を使用すると、ここに挙げた測定値以外のものは、利用できなくなったり、正しくない値が表示されることがあります。
親トピック: ブラウザ駆動型テストの高度な概念
関連タスク
TTI に要素を含める
関連資料
ブラウザ駆動型の測定値
BrowserTtiIncludeElement Function


ブラウザ駆動型の負荷テストのトラブルシューティング

実際のユーザー アカウントを使用した perfrun 処理の開始方法、クライアント証明書の処理方法、および AJAX 同期からの特定の URL の除外方法について説明します。
注: ブラウザ駆動型の負荷テストは、Internet Explorer 11 でサポートされています。
  • リモート エージェント上のブラウザ駆動の仮想ユーザー
    システム アカウントではなく実際のユーザー アカウントを使用して perfrun 処理を開始すると、記録されたトラフィックが生成されたトラフィックと異なる問題を回避することができます。
  • エージェント上の Internet Explorer の推奨設定
    Internet Explorer を使ってブラウザ駆動型テストを実行する場合、このトピックで説明するように、エージェント上に Internet Explorer がインストールされている必要があります。
  • クライアント証明書を処理する
    ブラウザ駆動型負荷テストのためのクライアント証明書の処理方法を説明します。
  • 証明書エラーの除去
    ブラウザ駆動の Web サイトを記録する前に、証明書エラーの解決が必要です。
  • AJAX 同期から URL を除外する
    AJAX ベースの Web アプリケーションのテストが容易になるよう、特定の URL をブラウザの同期から除外できます。
  • 各種ブラウザを使った再生時の制限事項
    ブラウザ駆動型スクリプトを各種ブラウザで再生したときに発生する可能性のある問題について説明します。ここに述べる制限事項の多くは、特殊なケースで、ほとんど発生することはありません。
親トピック: Web 2.0 アプリケーションの負荷テスト (ブラウザ駆動型)


リモート エージェント上のブラウザ駆動の仮想ユーザー

システム アカウントではなく実際のユーザー アカウントでリモート エージェントを開始すると (デフォルト)、ブラウザ駆動の仮想ユーザーに大きな違いが生じます。 各仮想ユーザーは、自分の Internet Explorer インスタンスを使用しますが、このインスタンスには Microsoft Windows ユーザーのプロファイルに保存されている設定が読み込まれます。

システム アカウントの元では、Internet Explorer にはユーザー アカウントの場合とは異なる設定が読み込まれます。 通常、Internet Explorer では、ユーザー アカウントの場合よりも数が少ない別のヘッダーが使用されます。 記録されたトラフィックが生成されたトラフィックと異なる問題を回避するには、リモート エージェントをユーザー アカウントで実行することをお勧めします。

注: 指定されたユーザー アカウントが、リモート エージェントで Remote Desktop Users Windows グループのメンバになっていることを確認します。

必要なアカウント設定は、アプリケーション タブの System Configuration Manager で設定でき、すべてのリモート エージェントを同一のユーザー アカウントで実行する場合のユーザー アカウントは システム設定 > エージェント > の 詳細設定 タブで設定できます。

親トピック: ブラウザ駆動型の負荷テストのトラブルシューティング
関連タスク
すべてのエージェントに特定のユーザー アカウントを使用する
単一のエージェントに特定のユーザー アカウントを使用する


エージェント上の Internet Explorer の推奨設定

Internet Explorer を使ってブラウザ駆動型テストを実行する場合、以下で説明するように、エージェント上に Internet Explorer がインストールされている必要があります。インストールされていないと、再生時に問題が発生します。

  • Internet Explorer で、インターネット オプション を開き、ホーム ページとして about:blank を設定します。
  • インターネット オプション の 詳細設定 タブを開き、セキュリティ セクションで以下の設定を行います。
    • 発行元証明書の取り消しを確認する をオフにします
    • サーバーの証明書失効を確認する をオフにします
    • 証明書のアドレスの不一致について警告する をオフにします
  • インターネット オプション の セキュリティ タブを開き、各ゾーン（インターネット、ローカル イントラネット、信頼済みサイト、制限付きサイト）それぞれに対して以下の設定を行います。
    • 保護モードを有効にする をオフにします
    • セキュリティのレベルを可能な限り低く設定します
  • Internet Explorer の 互換表示設定 で以下の設定を行います。
    • イントラネット サイトを互換表示で表示する をオフにします
    • Microsoft 互換性リストの使用 をオフにします
    • 追加した Web サイトをすべて削除します
  • Windows Server オペレーティング システムの場合は、サーバー マネージャー を開き、IE セキュリティ強化の構成（IE ESC）をオフにします。
親トピック: ブラウザ駆動型の負荷テストのトラブルシューティング


クライアント証明書を処理する

以下の説明は、Internet Explorer を使用する場合にのみ適用できます。

スクリプトの記録中にクライアント証明書を選択できます。クライアント証明書によって、特定の Web サイトに対する認証が容易になります。Microsoft の証明書ストアから入手した証明書をインポートしたり削除するための API が利用できるようになりました。この API は、Internet Explorer および Silk Performer のブラウザ駆動型負荷テスト機能で使用されます。

証明書 API は、Microsoft Windows 7 以降または Microsoft Windows Server 2008 R2 以降、かつ Internet Explorer 8 以降で利用できます。

ブラウザベースの Web 負荷テストでの証明書の処理は、プロトコルベースの Web テストでの証明書の処理とは無関係に行われます。そのため、証明書は手動で Internet Explorer の インターネット オプション メニュー エントリ（または管理コンソールの snap-in certmgr.msc）からインポートする必要があります。認証が Internet Explorer 8 で機能する場合は、ブラウザベースの負荷テストでも機能します。

  1. 次の手順に従って、証明書をインポートするときに、強力な秘密キーの保護を無効にします。
    1. 証明書のインポート ウィザードの パスワード ページで、秘密キーの保護を強力にする チェックボックスをオフにします。
  2. サーバー証明書の失効を無効にします。
    1. Internet Explorer の ツール メニューから インターネット オプション を選択します。
      インターネット オプション オプション ダイアログが開きます。
    2. 詳細設定 タブをクリックします。
    3. サーバー証明書の取り消しを確認する* チェックボックスをオフにします。
    4. OK をクリックします。
  3. 次の手順に従って、クライアント証明書の選択ダイアログ ボックスを有効にします。
    1. Internet Explorer の ツール メニューから インターネット オプション を選択します。
      インターネット オプション オプション ダイアログが開きます。
    2. セキュリティ タブをクリックします。
    3. レベルのカスタマイズ... をクリックします。 セキュリティの設定 ページが開きます。
    4. 既存のクライアント証明書が 1 つ、または存在しない場合の証明書の選択 までスクロール ダウンし、無効にする オプション ボックスを選択します。
    5. OK をクリックします。
    6. Internet Explorer を再起動します。
親トピック: ブラウザ駆動型の負荷テストのトラブルシューティング
関連タスク
単一のエージェントに特定のユーザー アカウントを使用する


証明書エラーの除去

以下の説明は、Internet Explorer を使用する場合にのみ適用できます。

記録中に、Web ページに この Web サイトのセキュリティ証明には問題があります という内容のメッセージが表示される場合があります。また、このサイトの閲覧を続行する (推奨されません)。 リンクが機能しなくなります。証明書エラーにはいくつかの原因が考えられ、ブラウザ駆動の Web サイトを記録可能にする前に、証明書エラーを解決する必要があります。証明書エラーに関する詳細は、証明書エラーについて を参照してください。

非常によくある問題の 1 つはアドレスの不一致です。アドレス不一致の警告を無効にするには、以下を行います。

  1. Internet Explorer の ツール メニューから インターネット オプション を選択します。
    インターネット オプション オプション ダイアログが開きます。
  2. 詳細設定 タブをクリックします。
  3. 証明書のアドレスの不一致について警告する* チェックボックスをオフにします。
  4. OK をクリックします。
  5. Internet Explorer を再起動します。
親トピック: ブラウザ駆動型の負荷テストのトラブルシューティング


AJAX 同期から URL を除外する

AJAX ベースの Web アプリケーションのテストが容易になるよう、特定の URL をブラウザの同期から除外できます。

この価値を理解するには、サーバーからデータをポーリングすることでアプリケーションにサーバー時間を表示することを想像してみてください。このサービスを利用するには、クライアントとサーバーの間のトラフィックのストリームが一定である必要があります。この機能拡張は、アプリケーションがアイドル状態に一切ならないため、AJAX 同期への挑戦といえます。同期からこのサービスを除外することで、別のサービスを使用する他のアプリケーションの処理を正確にテストできるようになります。

  1. プロジェクト メニュー ツリーでプロファイルを右クリックして、プロファイルの編集 を選択します。 プロファイル - シミュレーション ウィンドウが開きます。
  2. 再生 グループ ボックスで下向き矢印をクリックして、画面をスクロールします。Web (ブラウザ駆動型) をクリックします。
  3. 同期 タブを選択します。
  4. 除外する URL を 同期から除外する URL テキスト フィールドに入力します。
  5. OK をクリックします。
注: 単一のサービス内で複数の処理が実行されているために URL の除外が実行できない場合は、AJAX 同期を無効にし、HTML モードに切り替える必要があります。
親トピック: ブラウザ駆動型の負荷テストのトラブルシューティング


各種ブラウザを使った再生時の制限事項

Silk Performer は、ブラウザ駆動型スクリプトの記録に Internet Explorer を使用します。スクリプトの再生には、Internet Explorer、Firefox、Chrome を使用できます。

これらのブラウザは基本的にほとんど同じですが、状況に応じてまったく異なる動作をすることがあります。このような場合、同じスクリプトをそれぞれのブラウザで再生すると、結果として動作が異なることにもなります。

以下に、動作が異なる可能性のある、または問題が発生する可能性のある事象について説明します。ここに述べる問題の多くは、特殊なケースで、ほとんど発生することはありません。また、制限事項は、特定のユースケース、テスト対象アプリケーション、および使用しているフレームワークに強く依存するものです。よって、すべての潜在する制限事項を詳細に説明することはできません。特定の制限事項に遭遇し、詳細な情報が必要な場合には、カスタマーケアにお問い合わせください。

マウスのクリック

スクリプトの再生時、マウスのクリックはブラウザによって処理が異なります。言い換えると、テスト対象アプリケーションは、使用するブラウザに応じて異なるクリック イベントを受信します。たとえば、ダブルクリックを再生すると、Internet Explorer と Firefox ではクリック イベントとダブルクリック イベントが発生します。 これがデフォルトの動作です。しかし、Chrome でダブルクリックを再生すると、ダブルクリック イベントだけが発生します。

別の例を示します。Chrome でスクリプトの再生時、クリックした要素の中央が表示されていないと、右クリック イベントが失敗します。しかし、Internet Explorer と Firefox では、クリックした要素の中央が重なって表示されていない場合でも、右クリック イベントは問題なく機能します。

キー ストローク

ブラウザ内でのキー ストロークもブラウザによって結果が異なります。たとえば、Internet Explorer のテキスト フィールドにカーソルがあるときに Esc キーを押すと、それまで入力した内容が消去されます。他のブラウザで Esc キーを押しても何も変わりません。別の例を示します。 Firefox と Chrome では Return キーとテンキーの Enter キーに違いはありませんが、Internet Explorer では異なります。

ロケーター

ブラウザによっては、他のブラウザでは使用されていない要素の属性を使用する場合があります。たとえば、Internet Explorer では、spellcheck をすべての要素に存在する汎用属性として使用しますが、Chrome と Firefox では明示的に使用されたときだけこの属性を使用します。スクリプトの記録時に Internet Explorer が使用されるため、Chrome や Firefox でスクリプトを再生するとエラーになります。

新しいウィンドウ

テスト対象アプリケーションがすぐに閉じられるポップアップ ウィンドウを開くと、結果が安定しないことがあります。この問題を起こす可能性のある実際の例を示します。ポップアップ ウィンドウを開くリンクをクリックするとします。そして、このウィンドウは他のウィンドウを開き、すぐに閉じます。このアプリケーションの再生に Firefox や Chrome を使うと、ウィンドウが見つからない場合があります。この問題は、BrowserAPI.bdh で定義されたカスタム関数 BrowserWaitForNewWindowWithLocator を使って回避できます。

無効な URL

無効な URL に移動すると、Internet Explorer ではエラーが発生しますが、Chrome と Firefox では発生しません。このことは、URL を監視するときに問題になります。URL が到達不能であっても、監視でエラーは発生しません。このような場合は、スクリプトに検証関数を追加すると有用です。

測定値

テスト対象アプリケーションの多様な使用技術やアーキテクチャの違いが原因で、一部の測定値が測定されない可能性があります。たとえば、テスト対象アプリケーションでリダイレクトや iframe が使用されると、一部のトラフィックが対象にならない場合があります。

アラート処理

スクリプトの再生に Firefox や Chrome を使った場合、JavaScript アラートとプロンプトだけを処理できます。ネイティブ ダイアログ（ファイルの保存やファイルを開くためのダイアログなど）はサポートされません。

互換モード

Silk Performer 18.5 以前のバージョンで作成されたスクリプトは、再生互換モード が異なります。互換モードは、プロファイル設定か BDL 関数 BrowserReplayCompatibility を使って設定できます。

以前のバージョンでは、サポートするブラウザは Internet Explorer のみであったため、専用に調整したロケータが使用されていました。つまり、以前のスクリプトで使用されているロケータは、再生時に問題を起こす可能性があります。

親トピック: ブラウザ駆動型の負荷テストのトラブルシューティング


モバイル デバイスのアプリをテストする

  • モバイルアプリの概要
    Silk Performer のモバイル アプリケーション テストのサポートに関する概要について説明します。
  • モバイル デバイスを使用してモバイル アプリを記録する
    設定可能なプロキシがモバイル デバイスでサポートされている場合、モバイル デバイスを使って直接アプリを記録します。
  • ブラウザでモバイルアプリを記録する
    Silk Performer が、モバイル アプリケーションを記録して自動的にテスト スクリプトを作成するようにします。
  • モバイル エミュレータでモバイル アプリを記録する
    Silk Performer のモバイル エミュレータでモバイル アプリケーション を記録して自動的にテスト スクリプトを作成するようにします。
  • モバイル デバイスのアプリを再生する
    トランザクションを仮想モバイル デバイス ユーザーとしてシミュレートして、モバイル デバイスのアプリケーションをテストします。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


モバイルアプリの概要

モバイル デバイスでは、スクリーン サイズが小さかったり、入力方式が異なるため (タッチ スクリーンなど)、多くの Web アプリケーションは、PC 上でブラウザで読み込む場合と、モバイル デバイス上で読み込む場合では、その表示は異なります。 負荷テストの観点では、たとえバックエンドで同じコンポーネントを共有していようとも、このようなアプリケーションは 2 つの異なるアプリケーションとして扱われるべきです。

Silk Performer は、モバイル Web アプリおよびネイティブ アプリのパフォーマンス テストを完全にサポートしています。 SilkPerformer は、iPhone、iPad、Android、Windows Phone、Blackberry デバイスのようなさまざまなモバイル デバイスをシミュレーションする機能を提供していますが、他のモバイル ブラウザも、カスタム プロファイルを使用してシミュレートできます。

モバイルアプリテストに役立つ重要なシミュレーション パラメータは帯域幅制限です。 このオプションは、PC 上の通常の Web テストでは、高速 (ブロードバンド) のインターネット接続が使用されるため、あまり意味がありません。しかし、モバイル デバイスの世界をシミュレートする場合には、帯域幅を特定の値に制限することによって、現実に近づけることができます。 Silk Performer では、EDGE、HSDPA、LTE などのモバイル業界で使用される多くの標準帯域幅制限を提供します。

親トピック: モバイル デバイスのアプリをテストする


モバイル デバイスを使用してモバイル アプリを記録する

モバイル デバイスで記録する際に考慮すべき事項：
  • モバイル デバイスのブラウザのセキュリティ警告を無効にする
  • モバイル デバイスのブラウザの「文字列の補完」を無効にする。無効にしないと、キーを押すたびに Web 呼び出しがスクリプト化されます。
  • スクリプトを記録する前に、ブラウザのクッキーを削除する
  • 特定のデバイスに関するオペレーティング システム固有の手順は、お使いの検索エンジンを使用してインターネットで簡単に検索できます
モバイル デバイス アプリをテストする場合、設定可能なプロキシがモバイル デバイスでサポートされている場合は、モバイル デバイスを使って直接アプリを記録することを推奨します。
  1. ワークフロー バーの ここから開始する をクリックします。 プロジェクトの概要設定 ダイアログ ボックスが表示されます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、Web Browser > Mobile Devices を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
  6. ワークフロー - スクリプトの作成 ダイアログ ボックス ダイアログ ボックスで、モバイル デバイスによる記録 クリックします。 モバイル デバイスによる記録 ダイアログ ボックスが表示されます。
  7. モバイル デバイスで、プロキシとして Silk Performer がインストールされているマシンの IP アドレスおよびポートを使用するようにブラウザを設定します。モバイル デバイスによる記録 ダイアログ ボックスに表示されている情報を入力します。
    注: モバイル デバイスのブラウザ プロキシ設定の構成方法は、使用しているデバイスおよびオペレーティング システムによって異なります。特定のデバイスに関する手順は、お使いの検索エンジンを使用してインターネットで簡単に検索できます。
  8. モバイル デバイスのブラウザ プロキシ設定の構成が終わり、既に証明書が設定してある場合や、セキュアな接続で記録する必要がない場合は、記録の開始 をクリックし、次の手順はスキップします。セキュアな接続で記録する場合で、Micro Focus CA (認証機関) 証明書またはテスト対象のシステムの証明書がまだ設定されていない場合は、ワークフロー - スクリプトの作成 ダイアログ ボックスで セキュリティで保護された接続を使用して記録 をクリックし、次の手順に進みます。
  9. セキュリティで保護された記録の設定 ダイアログ ボックスで、Micro Focus CA (認証機関) 証明書を使用するか、テスト対象のシステムの証明書を使用するかを選択します。どちらのアプローチを使用していいかわからない場合は、「セキュアな接続と証明書」を参照してください。
    Micro Focus 証明書の設定 を選択した場合：
    1. Silk Performer Recorder ダイアログが最小化され、Micro Focus CA 証明書を使用したセキュリティで保護された接続の記録 ダイアログ ボックスが表示されます。
    2. QR コードをスキャンし、モバイル デバイスに証明書をインストールします。
    3. 完了したら、Micro Focus CA 証明書を使用したセキュリティで保護された接続の記録 ダイアログ ボックスの OK をクリックします。
    サーバー証明書の設定 を選択した場合：
    1. サーバー証明書 フィールドで、使用する証明書を指定します。
    2. Recorder が使用するサーバー証明書がパス フレーズで保護されている場合は、パス フレーズ フィールドに使用するパス フレーズを入力します。
    3. 省略可能：SSL ハンドシェークの間に Recorder がルート CA 証明書を送信する場合は、SSL ハンドシェークの間にルート CA を送信する チェック ボックスをオンにします。Recorder サーバー証明書に署名した認証機関を認証するために、クライアントがルート CA 証明書をリクエストする場合があります。
    4. 省略可能：ルート CA 証明書 フィールドで、使用するルート CA 証明書を指定します。
    5. サーバー証明書の設定が完了したら、記録の開始 をクリックします。
  10. 次に、モバイル デバイスの Web ブラウザやネイティブ アプリを操作して、スクリプトを記録します。
  11. 記録が終わったら、Silk Performer Recorder の 記録停止 をクリックして、記録したスクリプトを保存します。
親トピック: モバイル デバイスのアプリをテストする


ブラウザでモバイルアプリを記録する

  1. ワークフロー バーの ここから開始する をクリックします。 プロジェクトの概要設定 ダイアログ ボックスが表示されます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、Web Browser > Mobile Devices を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
  6. ワークフロー - スクリプトの作成 ダイアログ ボックスで、URL テキスト ボックスにテスト対象アプリケーションの URL を入力します。省略可能：Web アプリケーションのビジュアル ブレークポイントを見つける場合は、Web ページの分析 をクリックします。
  7. テスト対象アプリケーションの証明書を使用する場合は、証明書... をクリックします。どちらのアプローチを使用していいかわからない場合は、「セキュアな接続と証明書」を参照してください。
  8. カスタマイズしたブラウザを使用して記録 をクリックします。 カスタマイズしたブラウザを使用してアプリケーションを記録 ダイアログ ボックスが表示されます。
  9. シミュレーション ブラウザ を選択します。 ブラウザ ベースのアプリケーションの基盤となっている多数のテクノロジにより、さまざまな記録タイプを選択できます。
    注: Silk Performer プロファイル設定で記録に使用する記録プロファイルを変更するには、設定 をクリックします (設定 > システム > Recorder > 記録プロファイル)。
  10. あらかじめ定義されているモバイル デバイスを選択するか、解像度をカスタマイズして 記録の開始 をクリックします。
  11. クライアント アプリケーションを使用して、テストでシミュレートするターゲット サーバーでの操作などを実行します。この操作を、Recorder が取得して、記録します。 これらのアクションとダウンロードされたデータのレポートが、アクション ページに表示されます。
  12. 記録を終了するには、記録停止 をクリックします。
  13. .bdf ファイルの名前を入力し、保存します。キャプチャ ファイル ページが表示されます。スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。
親トピック: モバイル デバイスのアプリをテストする


モバイル エミュレータでモバイル アプリを記録する

エミュレータでモバイル アプリを記録する場合、標準的なワークフローに従いますが、テストを記録するコンピュータ上でシステム固有のエミュレータをセットアップして設定する必要があります。 コミュニティの Wiki に、この手順のサンプルがあります:
  • Recording Mobile Apps on the Android Emulator with Silk Performer（Silk Performer を使用して Android エミュレータ上のモバイル アプリを記録する）
  • Mobile App Recording with Silk Performer and the Windows Phone Emulator（Silk Performer と Windows Phone エミュレータを使用してモバイル アプリを記録する）
親トピック: モバイル デバイスのアプリをテストする


モバイル デバイスのアプリを再生する

トランザクションを仮想モバイル デバイス ユーザーとしてシミュレートして、モバイル デバイスのアプリケーションをテストします。
  1. メニュー バーで、 設定 > アクティブ プロファイル の順にクリックします。 プロファイル ダイアログ ボックスが表示されます。
  2. 再生 および インターネット をクリックします。 帯域幅シミュレーション セクションで、必要な帯域幅設定を定義します。 モバイル トラフィック シミュレーションの場合、次の帯域幅のうちのいずれか 1 つを選択するとよいでしょう。
    • GPRS
    • EDGE
    • UMTS
    • HSDPA
    • HSPA+
    • LTE
  3. Web をクリックしてモバイル デバイスを選択します。 次のモバイル デバイスの設定が選択できます。
    • iPhone
    • iPad
    • Android
    • Windows Phone
    • Blackberry
    注: ほかのモバイル ブラウザの種類が必要な場合は、 Custom オプションを使用してブラウザのパラメータを指定することができます。
  4. 残りのワークフローのステップに従い、 ワークロードを定義し、 テストを実行します。
親トピック: モバイル デバイスのアプリをテストする


レスポンシブ Web デザインのテスト

レスポンシブ Web デザイン（RWD）は、Web アプリケーションのデザイン パラダイムであり、エンド ユーザーのデバイスの物理的条件にユーザー インターフェイスを動的に適用できます。

言い換えると、Web アプリケーションは、ブラウザのビューポートに応じて、その UI をさまざまな形式で表示されます。たとえば、デスクトップ モニタ上では、3 列のレイアウトで表示される Web ページが、タブレットでは 2 列のレイアウトで、モバイル携帯では 1 列のレイアウトに変化します。あるいは、縦向きでは 1 列のレイアウトで表示されていたアプリケーションが、横向きにすると 2 列のレイアウトに変化します。

RWD パターンをうまく適用すると、リソースの観点からも Web ページを最適化できます。低解像度のビューポートでは、低解像度の画像を表示するようにし、高解像度の画面に対しては、同じアプリケーションでも高解像度版の埋め込み画像を表示します。

負荷テストでは、RWB は複数のエンド ユーザーの視点からアプリケーションをテストすることが必要になることを意味します。さまざまなユーザー グループ、さまざまなブラウザ、そしてさまざまなネットワークの状況を考慮するだけでなく、エンド ユーザーのデバイスやビューポートも考慮する必要があり、テストの組み合わせの次元がさらに増すことになります。

親トピック: 特定のアプリケーションの種類に対する負荷テスト


BMC Remedy IT Service Management のサポート

Silk Performer を用いた BMC Remedy IT Service Management のテストのワークフローは、Web ベースのアプリケーションのテストのワークフローと同じですが、次の例外があります。

  • ワークフロー - プロジェクトの概要設定 ダイアログ ボックスで、テスト対象の [Remedy] バージョンを選択する必要があります (これらの設定は、ERP/CRM ノードにグループ化されています)。
  • ワークフロー - スクリプトの作成 ダイアログ ボックスで、テスト対象の Remedy インストールへのコマンドライン パスを入力します。
  • 記録されたスクリプトには、WebPagePost 呼び出しと WebPageUrl 呼び出しを編集した WebRemedy 関数の数が含まれます。
  • テスト スクリプトの Forms セクションには、各 Web フォームの、ブラウザによって生成された Remedy トラフィックを視覚化した XML フラグメントがあります。 このようにブラウザ トラフィックを XML で視覚化すると、実際の Remedy トラフィックよりも読みやすくなります。 また、Silk Performer スクリプトのカスタマイズが簡単になります。 各 Web フォームの XML フラグメントの最後に、実際の、元々記録された Remedy トラフィックがコメントアウトされています。

BMC チュートリアル

BMC は優れたチュートリアルを作成しました。このチュートリアルは、BMC Remedy Action Request System (AR System) を使用する BMC Remedy IT Service Management (ITSM) アプリケーション テストをロードする方法について説明します。 チュートリアルを入手するには、BMC に問い合わせて次のホワイト ペーパーを請求します。『Performance Benchmarking Kit: Using Incident Management with Silk Performer 』。

ライセンス

Silk Performer を用いて Remedy をテストするには、プレミアム仮想ユーザー ライセンスが必要です。

TrueLog サポート

TrueLog 機能は、Remedy のテストではサポートされていません。

Silk Performer でのデータ表現

Remedy はクライアントからサーバーに送信するデータに独自仕様の形式を使用します。 この形式には length prefix が付いていて、これによってカスタマイズが困難になります。

例：

157/GetTableEntryList/11/smi-web-00126/
SMI:TEL35:SHR:AgentConsole12/Windows_View9/53687098211/
smi-web-00127/SMI:TEL35:SYS:IncomingEmail0/
1/01/02/0/0/2/0/2/0/2/0/

このようなデータは HTTP リクエストに含まれて URL http://<ホスト名>/arsys/BackChannel に送信されます。

Remedy versions 6.3 パッチ レベル 2 以前では、このようなデータは HTTP POST リクエストのボディに含めて送信されます。 Versions 6.3 以降では、このようなデータは HTTP GET リクエストのクエリ文字列に含めて送信されます。

Silk Performer の Remedy アドオンの主な利点は、このデータの独自仕様の形式が、length prefix を削除して、個々のデータ項目に名前を付けた XML ベースの表現に変換されることです。 こうすることでスクリプトが理解しやすくなり、カスタマイズが容易になります。 この XML ベースの形式は、スクリプトの再生時にユーザーが気付かないうちに元の形式に変換されます。

この逆変換は、WebRemedyBackChannelUrl 関数と WebRemedyBackChannelPost により行われます。

WebRemedyBackChannelUrl は、WebPageUrl に代わる関数です。WebRemedyBackChannelPost は、WebPagePost に代わる関数です。

たとえば、Remedy アドオンを使用しない場合、以下の API 呼び出しは次のように記録されます。

WebPagePost("http://213.131.176.85/arsys/BackChannel",
    "157/GetTableEntryList/11/smi-web-00126/
SMI:TEL35:SHR:AgentConsole12/W"
    "indows_View9/53687098211/smi-web-00127/
SMI:TEL35:SYS:IncomingEmail0/1"
    "/01/02/0/0/2/0/2/0/2/0/",
    STRING_COMPLETE,
    "text/plain; charset=UTF-8",
    "arsys/BackChannel");

Remedy アドオンを使用する場合、API 呼び出しは次のように記録されます。

WebRemedyBackChannelPost("http://213.131.176.85/arsys/BackChannel",
"<?xml version='1.0'?>\r\n"
"<SegueRemedyXml
operation=\"GetTableEntryList\">\r\n"
"  <string name=\"table_server\">smi-web-001</string>\r\n"
"  <string name=\"table_schema\">SMI:TEL35:SHR:AgentConsole</string>\r\n"
"  <string name=\"table_vui_name\">Windows_View</string>\r\n"
"  <long name=\"table_field_id\">536870982</long>\r\n"
      "  <string name=\"server\">smi-web-001</string>\r\n"
"  <string name=\"schema\">SMI:TEL35:SYS:IncomingEmail</string>\r\n"
      "  <string name=\"app_name\"></string>\r\n"
      "  <long name=\"start_row\">0</long>\r\n"
      "  <long name=\"num_rows\">0</long>\r\n"
"  <Array name=\"sort_order\"></Array>\r\n"
      "  <string name=\"qualification\"></string>\r\n"
"  <Array name=\"qual_field_ids\"></Array>\r\n"
      "  <Array name=\"qual_field_values\"></Array>\r\n"
      "  <Array name=\"qual_field_types\"></Array>\r\n"
"</SegueRemedyXml>",
      STRING_COMPLETE,
"text/plain; charset=UTF-8",
      "BackChannel - GetTableEntryList");

主な相違点は、次のとおりです。

  • WebRemedyBackChannelPost の代わりに WebPagePost を使用します。
  • データは、元の形式ではなく XML 形式です。
  • XML 形式には length prefix が含まれていません。含まれている場合は、スクリプトのカスタマイズ時に考慮する必要があります。
  • XML 形式では、各データ項目のデータ型と意味のある名前が指定されています。

その他の Remedy アドオンの利点

データ表現がさまざまであるだけでなく、Remedy アドオンを使用する利点は他にもあります。

  • Remedy.bdh: WebRemedyBackChannelPost 関数、WebRemedyBackChannelUrl 関数、および WebRemedyInit 関数を実装します。
  • レコーダは、WebRemedyInit() 関数への呼び出しを TInit トランザクションに配置します。
  • WebRemedyInit() 関数は、アプリケーションレベルのエラーを捕捉するための検証をインストールします。
  • レコーダは、すべてのタイムスタンプ (スクリプトにハード コードされていることがあります) を検出し、代わりに GetTimeStamp() 関数を記録します。
  • レコーダは新たに作成されたエンティティの ID を解析する関数、および解析された変数を使用するスクリプトでこれらの ID が使用された場合に、そのすべてについて適切な値を記録します。

Remedy SilkEssential

Remedy アプリケーションの種類は、SilkEssential パッケージを介してトリガされます。 これには記録規則および remedy.bdh が含まれます。 remedy.bdh は、WebPageCalls をラップします。

// wrapper function for WebPagePost
// param nDataLength will be ignored
function WebRemedyBackChannelPost(sUrl        : string;
                                  sData       : string;
                                  nDataLength : number optional;
                                  sContent    : string optional;
                                  sTimer      : string optional;
                                  formUrl     : form optional) : boolean <API_FUNCTION>
  begin
    WebRemedyBackChannelPost := WebPagePost(sUrl, RemedyBackChannelData(sData),
    STRING_COMPLETE, sContent, sTimer, formUrl);
  end WebRemedyBackChannelPost;

および

// wrapper function for WebPageUrl for use with BackChannel requests
  function WebRemedyBackChannelUrl(sUrl :    string;
                                   sTimer :  string optional;
formUrl : form optional) : boolean <API_FUNCTION>
  var
sXmlData : string(100000);
sDummy   : string;
begin
WebFormExpand(formUrl, sDummy, 1, true);
WebFormValueGet(formUrl, sXmlData, sizeof(sXmlData), "param");
WebFormValueSet(ARSYS_BACKCHANNEL_INTERNAL_HELPER, "param", RemedyBackChannelData(sXmlData));
WebRemedyBackChannelUrl := WebPageUrl(sUrl, sTimer, ARSYS_BACKCHANNEL_INTERNAL_HELPER);
end WebRemedyBackChannelUrl;
dclform
ARSYS_BACKCHANNEL_INTERNAL_HELPER <ENCODE_URICOMPONENT> :
    "param"                     := "";

プロトコル検出と変換

Remedy プロトコル検出は、デフォルトでは利用できません。 ただし、既に Silk Performer Recorder に組み込まれているので、新規プロジェクトの作成時に適切な Remedy アプリケーションの種類を選択することで有効になります。

Remedy での XML へのデータ変換および XML からの変換は、記録のために ProxyEngine に実装されています。そして Remedy.bdh によって perfRun にロードされる perfRemedy.dll にも実装されています。

親トピック: 特定のアプリケーションの種類に対する負荷テスト
関連概念
スクリプトを作成する
関連タスク
プロジェクトの概要を設定する


Citrix XenApp のサポート

Silk Performer では、Citrix XenApp セッションおよびアプリケーションの仮想化テクノロジを介してホストされるアプリケーションをテストするための、記録と再生のサポートを提供しています。

Citrix を使用すると、ネットワークおよびインターネットで共有アプリケーションへのリアルタイム アクセスを簡単に行うことができます。 Citrix 対応アプリケーションへのリモート アクセスは、DSL、T1、ISDN、またはダイヤルアップで行うことができます。 Citrix を使用すると、複数のユーザーが共有アプリケーションを同時に実行できます。 Citrix プラグイン (クライアント) とサーバー間の通信では、ユーザー入力 (キーボード/マウス) とスクリーンショットがやりとりされます。

Silk Performer では、Citrix サーバーの記録と Citrix にホストされるアプリケーションの記録の両方がサポートされます。 Citrix プラグインにより、特定のアプリケーションおよび複数のデスクトップ ウィンドウへのアクセスが可能になります。

Citrix Web インターフェイスを使用すると、ユーザーは、ホスト コンピュータに直接接続しなくても、ホストされている XenApp アプリケーションおよび XenDesktop 仮想デスクトップにアクセスできます。 ユーザーは、Web ブラウザまたは Citrix オンライン プラグインのいずれかを介してこれらのリソースにアクセスします。

Silk Performer では、以下の 2 つの Citrix プロジェクト タイプを提供しています。

  • Citrix。Citrix プラグイン (クライアント) を介してアクセスする、ホストされているアプリケーションのテストに使用
  • Citrix Web インターフェイス。Citrix Web インターフェイスを介して公開されている Citrix 対応アプリケーションのテストに使用。
PDF 形式の Citrix XenApp チュートリアルでは、Citrix 対応アプリケーションのテストの全過程をたどります。 このチュートリアルは、 スタート > すべてのプログラム > Silk > Silk Performer 21.0 > ドキュメント > チュートリアル > Citrix XenApp の Silk Performer から利用できます。
注: Silk Performer のヘルプには、Citrix XenApp チュートリアルに含まれているすべてのコンテンツが含まれています。

Citrix Program Neighborhood

以前のバージョンの Citrix は、アプリケーションの配布で Web インターフェイスに依存する代わりに Windows ベースの Citrix Program Neighborhood を使用します。 Citrix Program Neighborhood を使用すると、ユーザーは Citrix XenApp オンデマンドのアプリケーション配信サーバーによる、利用可能なすべてのアプリケーションのリストを表示できます。 Citrix ブラウザ サービスを経由して Citrix Program Neighborhood を起動するたびに、利用可能なリソースが自動的に列挙されます。
重要: Citrix Program Neighborhood 経由で配布されるアプリケーションの場合、システム上でこれを起動するには Citrix 公開アプリケーションの記録サービスを設定する必要があります。これを行わないと、Citrix Program Neighborhood でアプリケーション リストが更新されません。
  • プロジェクトを定義する
    新規のCitrix負荷テスト プロジェクトを作成し、前提となる XenApp サーバーの構成を実施する方法について説明します。
  • 画面の同期と検証
    画面の同期は、(入力値ではなく) ウィンドウと画面領域の表示の検証を可能にし、スクリプトの記録中に挿入されます。
  • 生成したスクリプトの試行
    テスト スクリプトを生成したら、TryScript を実行して、スクリプトがエラーなしで動作するかどうかを確認する必要があります。 TryScript を行うことによって、記録した操作がスクリプトで正確に再現されるかどうかがわかります。
  • ユーザー データをカスタマイズする
    ユーザー データのカスタマイズでは、記録された静的ユーザー入力データを、トランザクションごとに変更されるパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できるということについて、説明します。
  • プロジェクトとシステムの設定
    Citrix プロファイル設定は、Citrix の同期、ログ、仮想ユーザー シミュレーション、クライアントのオプションに関連する、プロジェクト固有の設定であることについて説明します。
  • テストのベスト プラクティス
    このセクションでは、GUI ベースのテストに関係のある多くの課題について説明します。
  • トラブルシューティング
    Silk Performer には、記録/再生オプションとテスト スクリプトの手動コーディング オプションの両方が備えられています。 各アプローチには、長所と短所があります。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


プロジェクトを定義する

Citrix の負荷テストを実施する際の最初のステップは、Silk Performer プロジェクトの基本設定を定義することです。 その後で、前提となる XenApp サーバーの構成を実施する必要があります。

  • Citrix クライアント ソフトウェアの構成
    Citrix プロジェクトを定義する前に、Citrix クライアント ソフトウェア (Citrix Receiver) をインストールし、Citrix サーバーがタイムアウトを処理する方法を構成する必要があります。
  • Citrix XenApp プロジェクトを定義する
    Silk Performer プロジェクトの名前、説明、およびアプリケーションの種類を指定する必要があります。
  • Citrix プラグイン テスト スクリプトを作成する
    直接 Citrix XenApp サーバーに接続してユーザー アクションに基づきテスト スクリプトを生成する Citrix XenApp プラグイン (クライアント) を介したユーザー アクションを記録する方法について説明します。
  • Citrix Web インターフェイス セッション (NFuse)
    Citrix Web インターフェイスにより、アプリケーションは Web ブラウザ インターフェイスからアクセス可能になることについて説明します。
  • Citrix スクリプト関数
    一部の役立つ Silk Performer Citrix 関数について簡単な説明が含まれています。
親トピック: Citrix XenApp のサポート


Citrix クライアント ソフトウェアの構成

Citrix プロジェクトを定義する前に、Citrix クライアント ソフトウェア (Citrix Receiver) をインストールし、Citrix サーバーがタイムアウトを処理する方法を構成する必要があります。Citrix クライアント ソフトウェアをダウンロードするには、http://www.citrix.com に移動します。

Citrix サーバーの構成は、ご使用のバージョンによります。以下は Citrix Server 4.0 の構成手順です。

注: Citrix サーバー バージョン 4.5 以降を構成するには、スタート > プログラム > 管理ツール > ターミナル サービス構成 に移動し、ica-tcp オプションをダブルクリックします。
  1. スタート > プログラム > Citrix > 管理ツール に移動し、Citrix コネクション構成ツール を開始します。
  2. ica-tcp 接続をダブルクリックします。
  3. 以下のダイアログ ボックスで、詳細設定 をクリックします。 コネクションの詳細設定 ダイアログ ボックスが表示されます。
  4. 切断タイムアウト 制限を設定します。 推奨のタイムアウトは 1 分です。
  5. アイドル タイムアウト 制限を設定します。 推奨のタイムアウトは 5 分です。
  6. 接続が切断またはタイムアウトしたときの処理 ドロップ リストで リセット を選択します。 このオプションを選択しないと、接続の切断またはタイムアウトにより、セッションは再生停止後も開いたままとなります。これにより、前のセッションで停止した箇所からスクリプトが継続するため、ユーザーがセッションに次にログインするときに再生上の問題が生じます。そのような場合は、セッションを手動で終了する必要があります。
親トピック: プロジェクトを定義する


Citrix XenApp プロジェクトを定義する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、ターミナル サービス > Citrix または ターミナル サービス > Citrix Web インターフェイス を選択します。 Citrix のアプリケーションの種類は Silk Performer Citrix Recorder を使用して、Citrix オンラインまたはオフライン プラグインからアクセスする Citrix 対応アプリケーションの配信をテストします。 Citrix Web インターフェイス のアプリケーションの種類は、Citrix Web インターフェイスからアクセスする Citrix 対応アプリケーションの配信のテストに使用されます。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: プロジェクトを定義する
関連タスク
Citrix プラグイン テスト スクリプトを作成する


Citrix プラグイン テスト スクリプトを作成する

直接 Citrix XenApp サーバーに接続してテスト スクリプトを作成する Citrix XenApp プラグイン (クライアント) を介したユーザー アクションを記録するための最も簡単な方法は、Silk Performer Recorder を使用することです。この Recorder は、トラフィックの取得と記録、およびテスト スクリプトの生成に使用される Silk Performer のエンジンです。

Silk Performer Recorder は、テスト対象の Citrix XenApp プラグインとサーバーの間のトラフィックを取得して記録します。記録が終了すると、Silk Performer Recorder は、記録されたトラフィックに基づいてテスト スクリプトを自動生成します。スクリプトは、Silk Performer のスクリプト言語である Benchmark Description Language (BDL) で記述されます。

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 記録プロファイル リストで Silk Performer Citrix Recorder を選択し、Silk Performer Citrix Recorder アプリケーションを介して Citrix XenApp 対応アプリケーションを記録します。 この記録プロファイルは、直接 Citrix XenApp サーバーに接続する Citrix プラグインのテストに適しています。
  3. 省略可能：サーバー接続パラメータを定義する ICA ファイルがある場合は、コマンド ライン フィールドに ICA ファイルのフルパスを入力します。
  4. 記録の開始 をクリックします。
  5. 次に Silk Performer Citrix Recorder と共に、Silk Performer Recorder が最小化されて開きます。 起動時に正しいログイン資格情報が使用不可の場合は、接続 ダイアログが開きます。接続 ダイアログには、Silk Performer Citrix Recorder の左上隅にある 接続 ボタンからもアクセスできます。
    注: サーバー接続パラメータを定義する ICA ファイルがある場合は、ICA ファイル を選択し、ICA ファイルを参照して ログイン フィールドをすべてスキップします。
  6. サーバー フィールドの 接続 ダイアログで、記録する Citrix XenApp サーバーの名前を入力します。
  7. テスト対象のサーバーの ユーザー名 フィールド、パスワード フィールド、および ドメイン フィールドに入力します。
  8. アプリケーション フィールドに、ホストされるアプリケーションの名前を入力します。
  9. クライアント名 フィールドを使用して、セッションのクライアント名を指定することができます。Citrix Recorder のデフォルトのクライアント名は、SP_Recorder です (Citrix Player のデフォルトのクライアント名は、SP_User_x です)。記録用に異なるクライアント名を指定すると、CitrixSetClientName 関数がスクリプトに挿入されます。この場合、クライアント名の値をカスタマイズする必要があります。カスタマイズしないと、すべてのユーザーが同じクライアント名を使用することとなり、再生の問題が発生する場合があります。
  10. 記録に必要な 色の解像度 を選択します。
  11. 記録に必要な画面の 解像度 を選択します。
    注: スクリプトの記録後は、この解像度を変更しないでください。異なる解像度設定で再生すると、位置変更された要素上でマウスが動作しなくなることがあるためです。
  12. 接続 をクリックして Citrix XenApp セッションを開始します。
  13. テスト中に仮想ユーザーが行う操作と同じ方法で、Citrix Recorder で共有デスクトップとやり取りします。たとえば、リンクをクリックしたり、アプリケーションを開いたり、データを入力したりすることができます。アクションは、Citrix Recorder によってキャプチャされ、記録されます。 Citrix Recorder ではセッション共有がサポートされ、既存のセッションで追加の公開アプリケーションを (Citrix Recorder ツールバーで アプリケーションの実行 をクリックして) 起動できます。ウィンドウの選択 をクリックしてアプリケーションを切り替えます。 次の Citrix XenApp セッションの例には、Excel の起動、新しいデータ値の入力、AutoSum 式の挿入、画面領域の選択、AutoSum 式の編集、および Excel の終了にマウスとキーボードを使用する、単純な Excel の計算が含まれています。
  14. Citrix XenApp セッションの記録が終了したら、Silk Performer Citrix Recorder の 停止 をクリックします。 スクリプトの生成 進捗状況ウィンドウが開き、その後で 名前を付けて保存 ダイアログが開きます。
  15. スクリプトを意味のある名前で保存します。
  16. 記録された操作に基づいて新しく生成されたテスト スクリプトが、Silk Performer のスクリプト エディタ ウィンドウに表示されます。
親トピック: プロジェクトを定義する


Citrix Web インターフェイス セッション (NFuse)

Citrix Web インターフェイス ソフトウェア (以前の NFuse) では、Citrix アプリケーション サーバー ソフトウェアがホストしている Java、UNIX、Windows のアプリケーションへのアクセスを提供します。 Citrix では、ホストされているアプリケーションのサーバー側のコントロールが提供されている一方、アプリケーションが Citrix Web インターフェイスにより、Web ブラウザ インターフェイス (Internet Explorer、バージョン 5.5. 以降) から アクセス可能になります。

Citrix Web インターフェイスに関する技術サポートおよび質問は、http://support.citrix.com を参照してください。

  1. Citrix Web インターフェイス プロジェクトを定義する
    Citrix Web インターフェイス プロジェクトを作成する基本的な手順について説明します。
  2. Citrix Web インターフェイス テスト スクリプトを作成する
    Citrix Web インターフェイスを介したユーザー アクションを記録し、それらに基づきテスト スクリプトを生成する方法について説明します。
親トピック: プロジェクトを定義する


Citrix Web インターフェイス プロジェクトを定義する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、ターミナル サービス > Citrix Web インターフェイス を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: Citrix Web インターフェイス セッション (NFuse)
次のトピック: Citrix Web インターフェイス テスト スクリプトを作成する


Citrix Web インターフェイス テスト スクリプトを作成する

Citrix Web インターフェイス セッションのテスト スクリプトを作成する最も簡単な方法は、Silk Performer Recorder を使用することです。この Recorder は、トラフィックを取得して記録し、テスト スクリプトを生成する Silk Performer のエンジンです。

Silk Performer Recorder は、テスト対象の Citrix Web インターフェイス クライアント アプリケーション (Internet Explorer、バージョン 5.5 以上) とサーバーの間のトラフィックを取得して記録します。記録が終了すると、Silk Performer Recorder は、記録されたトラフィックに基づいてテスト スクリプトを自動生成します。スクリプトは、Silk Performer のスクリプト言語である Benchmark Description Language (BDL) で記述されます。

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 記録プロファイル リスト から、Citrix Web インターフェイス を選択します。 Citrix Web インターフェイス 記録プロファイルは、Citrix Web インターフェイス/NFuse セッションのテストにのみ適しています。
  3. 記録の開始 をクリックします。
  4. Internet Explorer と共に、Silk Performer Recorder が最小化されて開きます。Internet Explorer アドレス フィールドに Citrix サーバーの名前を入力し、Enter をクリックします。記録中に発生したアクションのレポートを表示するには、Recorder ツールバーの GUI サイズの変更 をクリックして Silk Performer Recorder ダイアログを最大化します。
  5. Citrix Web インターフェイスにログインするには、Citrix Web インターフェイス ログイン画面で ユーザー名、パスワード、および ドメイン を入力します。これらの情報がない場合は、システム管理者に問い合わせてください。
  6. ログイン をクリックします。
  7. アプリケーション ポータルが表示されます。このポータルには、共有用に公開されているアプリケーションがあります。記録対象のホストされているアプリケーションを選択します。
  8. ホストされているアプリケーションが Silk Performer Citrix Recorder に表示されます。テスト中に仮想ユーザーが行う操作と同じ方法で、Citrix Recorder で共有アプリケーションとやり取りします。操作は、Citrix Recorder によってキャプチャされ、BDL スクリプト内に生成されます。
  9. アプリケーションを終了すると、Citrix セッションの接続が解除され、記録されたスクリプトを保存できます。
記録された Citrix Web インターフェイス セッションの BDL スクリプトは、少数の Silk Performer Web 関数を含むマルチプロトコル スクリプトです。
親トピック: Citrix Web インターフェイス セッション (NFuse)
前のトピック: Citrix Web インターフェイス プロジェクトを定義する


Citrix スクリプト関数

  • 画面の同期に使用される CitrixWaitForWindowCreation は、最も重要な Citrix 関数です。

    同期で考慮される最初のパラメータは、ウィンドウ キャプションです。 再生中にウィンドウ キャプションが、再生中に記録されたウィンドウのキャプションと一致すると返された場合、検証は成功です。

    注: ワイルドカード (*) は、ウィンドウ キャプションの最初または最後に指定できます。

    2 番目に考慮されるパラメータは、一致パラメータです。 通常これは、ウィンドウ キャプション文字列の正確で大文字と小文字まで区別する比較を行います。

    3 番目のパラメータはウィンドウのスタイルです。 ウィンドウ キャプションの名前が使用できない場合、ウィンドウの特定にはスタイル名の一部が使用されます。 スタイルは、記録中にウィンドウが最大化されたか、されていないかを反映します。

    考慮する 4 番目のパラメータは、ウィンドウの位置です。 これは、最大化されたウィンドウが -4, -4 の位置にあるため、負の数となります。 このパラメータは、ウィンドウの位置を強制する プロファイル設定によって制御できます。 このプロファイル設定が有効にされると、ウィンドウは自動的に記録中と同一の位置に移動します。

    5 番目のパラメータはウィンドウ サイズです。 再生中、ウィンドウを記録中と同じサイズに変更する必要があります。

  • CitrixWaitForLogon は、Citrix クライアントがログオンに成功、または指定したタイムアウト期間が終了するまで待機します。
  • CitrixWaitForScreen は画面領域をキャプチャし、指定した条件 (通常は記録時に取得されたハッシュ値) を参照して確認します 。 条件が一致せず、タイムアウト期間が終了すると、関数呼び出しは失敗します。 CitrixWaitForScreen 関数はまた、画面表示を使用して、後続のユーザー アクションを同期します。 提供されたパラメータに基づいて、この関数は、指定した画面領域のイメージが変更されて、記録時に取得されたハッシュ値と一致または不一致となるまで、待機します。
  • CitrixGetScreen は選択した領域のスクリーンショットを取得し、結果ディレクトリのファイルにスクリーンショットを書き込みます。 ファイル名は、省略された場合、ユーザー ID およびイメージのハッシュ値によって自動的に生成されます。
  • CitrixGetScreenHash は、選択した画面のハッシュ値を取得します。
  • CitrixSetOption により、ネットワーク プロトコル仕様、SpeedScreen 待機時間の短縮、データ圧縮、イメージ キャッシュ、マウス/キーボードのタイミングおよびイベントのキュー、 クライアントの切断、同期タイムアウト、思考時間、TrueLog キャプチャ、ウィンドウ位置の強制など、特定のオプションが設定されます。
  • CitrixWaitForWindow は、指定したウィンドウ イベント (nEvent パラメータで指定) が発生するまで待機します。 そのようなイベントには、指定したウィンドウの有効化、破棄、キャプション変更があります。 選択したイベントがキャプション変更である場合、指定したウィンドウのキャプション変更が一致すると、関数が満たされます。 キャプションは、sCaption パラメータと nMatch パラメータを使用して明示的に指定できます。
  • CitrixKeyString は、印刷可能な文字の入力のための標準的な関数です。
  • CitrixMouseClick によりマウスが指定した位置に移動し、指定したボタンが押されます。 必要に応じて、マウスは、ボタンが押されている間に移動するように指定することもできます。 キー修飾子 (Ctrl および Alt など) を使用できます。
親トピック: プロジェクトを定義する


画面の同期と検証

Silk Performer は、Citrix XenApp サーバーをホストとするアプリケーションのビットマップとウィンドウの検証をサポートしています。 画面の同期は、再生された Citrix コンテンツを検証するための手段を提供します。 画面の同期は、標準的なスクリプトの検証とは異なり、入力値ではなく、ウィンドウと画面領域の表示の検証が行えます。 また、画面の同期は、後で行われるスクリプトのカスタマイズの時ではなく、スクリプトの記録中に挿入されます。 画面の同期は、ブラウザや類似のインターフェイスで表示される後続のユーザー入力の同期で、特に有用です (たとえば、Citrix アプリケーション ウィンドウ)。そのようなアプリケーションでは、ユーザー入力やテキスト表示などのウィンドウ イベントでの自動的な同期がサポートされていないためです。

注: レスポンス データの検証は、Citrix テストではサポートされていません。

Silk Performer は、ハッシュ値に依存して、記録されたビットマップに対して再生されたビットマップを検証します。 ハッシュ値は、サイズ、位置、解像度、色の解像度などのビットマップ仕様を反映する、コンピュータで読み込み可能な値です。

注: 記録時に取得されたハッシュ値に対して再生画面領域を検証するためには、記録時に使用した色の解像度と同じ色の解像度を、再生中も使用することが必要です。 1 ピクセルの変更でもハッシュ値の変更となり、再生コンテンツの表示が記録したコンテンツと異なる結果となる可能性があるため、仕様が維持されないと、スクリプトが失敗します。
注: 記録時にウィンドウを最大化していた場合、再生時も最大化しておく必要があります。 これは、再生がウィンドウの状態を変更できないためです (ウィンドウのサイズ変更と移動のみできます)。 そのため、ウィンドウの状態が変わっていると (たとえば、最大化されていた ものが 元に戻されていた 場合)、スクリプトのユーザー入力の一部が変わってしまう可能性があります (たとえば、元に戻す ボタンがクリックされた場合)。 再生では、ユーザーは画面の同じ位置をクリックしますが (このときは 最大化 ボタンになっているため)、 結果として異なる操作が実行され、その後の CitrixWaitForWindowRestore 関数が失敗します。
  • テキストと画面の同期
    アプリケーションで追加のユーザー入力の準備が整うまでスクリプトが待機するように、スクリプトとアプリケーションを同期します。 同期を使用しないと、スクリプトがアプリケーションでオーバーランすることがあります。
  • 記録中の画面領域の同期を生成する
    画面領域の同期では、再生ビットマップと記録ビットマップを比較して、それらが同一かどうかを判別します。
  • OCR による検証と解析
    Silk Performer の光学文字認識 (OCR) サポートを利用すると、キャプチャされたアプリケーション状態のスクリーンショット内のテキスト値が認識されるため、セッションに依存する検証や解析が容易になることについて説明します。
親トピック: Citrix XenApp のサポート


テキストと画面の同期

CitrixWaitForWindow() および CitrixWaitForWindowCreation() などのウィンドウ同期は、アプリケーションとの同期に非常に適しています。 アプリケーションで追加のユーザー入力の準備が整うまでスクリプトが待機するようにするには、アプリケーションと同期することが重要です。 同期を使用しないと、スクリプトがアプリケーションでオーバーランすることがあります。 また、同期をタスクが完了した時点の基準とすることによって、レスポンス時間を効果的に測定することができます。

テキストの同期

アプリケーション上で実行される多くのタスクは、ウィンドウの表示/非表示や作成/破棄をせずに、単純に画面の一部を変更するだけです。 そのような場合、Silk Performer のテキスト同期機能を使用します。

スクリプトの記録後、TrueLog Explorer テキストの同期 オプションにより、テキストの同期点を視覚的に追加できます。 テキストの同期は、組み込み OCR によって動作します。

画面の同期

Silk Performer では、2 種類の画面同期が用意されています。内容の変化を待つ および 内容の一致を待つ です。 この形式の同期は、ウィンドウの参照および 2 セットの x/y 座標を必要とします。 ただし、予期しないイベントによりウィンドウの座標が移動してしまう可能性があるため、できる限りテキストの同期を使用し、画面の同期は、比較するテキストがない場合にのみ使用する必要があります。

内容の変化を待つは、画面の選択した部分が変更されるまで待機するのに対し、内容の一致を待つは、画面の選択した部分が記録中に定義された事項に一致するまで待機します。

注: 画面の同期点は、テストケースの記録中に挿入する必要があるのに対し、テキストの同期点は、TrueLog Explorer によって後で挿入できます。
親トピック: 画面の同期と検証


記録中の画面領域の同期を生成する

画面の同期は、CitrixWaitForScreen 関数で行うことができますが、これは Recorder では自動的にスクリプト化されません。 これらの関数は、記録時に 画面領域 ダイアログ ボックスによって挿入されます。 CitrixWaitForScreen 関数では、再生ビットマップと記録ビットマップを比較して、それらが同一かどうかを判別します。 ハッシュ値は、実際のビットマップとは異なり、イメージを比較するために使用されます。 これにより、再生中のリソース消費が抑えられます。

注: 画面領域の同期は、Silk Performer Citrix Recorder によってのみ可能です。
  1. Citrix セッションを記録してテスト スクリプトを作成します。
  2. 記録中に Silk Performer Citrix Recorder で 領域の選択 をクリックします。
  3. クリックしてカーソルをドラッグし、ビットマップ同期を生成する画面領域を選択します。
    注: 1 ピクセルの違いでも同期処理の失敗につながることがあるため、テキスト検証では、必要とする画面領域を最小限にして選択することをお勧めします。 最小限にしないと、予期しない画面の相違 (たとえば、ツールバーの無効化) が発生して、検証結果に影響を及ぼす場合があります。
  4. 選択 ダイアログ ボックスが開きます。 画面領域の座標を記述する方法を指定します (絶対座標をスクリプト記述する、ウィンドウに対する相対座標をスクリプト記述する、または 座標ではなくフル ウィンドウを使用する)。 ウィンドウが最大化されている場合、絶対座標と相対座標の間に事実上違いはありません。 ウィンドウが最大化されていない場合、相対座標は Citrix Recorder ウィンドウの左上隅から測定し、絶対座標は固定された x/y 座標を使用します。
  5. Citrix XenApp Player が再生中に待機する必要のある 内容の照合 タイプ を指定します (内容の一致、内容の不一致、または 内容の変化)。
  6. OK をクリックして、同期をテスト Citrix XenApp スクリプトに追加します。
親トピック: 画面の同期と検証


OCR による検証と解析

Silk Performer の光学文字認識 (OCR) サポートを利用すると、キャプチャされたアプリケーション状態のスクリーンショット内のテキスト値が認識されるため、セッションに依存する検証や解析が容易になります。

検証関数と解析関数が、スクリプト記録後に TrueLog Explorer により追加されます。

ウィンドウの位置と状態

ウィンドウの位置と状態 (最大化/最小化) は、正確な再生を保証するために非常に重要です。TrueLog Explorer では、選択されているテキストが、個々のウィンドウではなくデスクトップに対する相対座標から読み取られるように画面座標がスクリプト記述されるからです。従って、再生時に、記録時と異なる位置にウィンドウが表示されると、指定したテキストを OCR 操作で見つけることができません。絶対位置を指定できない場合は、ウィンドウに対する相対座標を使用して、手動でスクリプトを更新する必要があります。

OCR 検証関数を追加する

OCR サポートを利用すると、Silk Performer は認識可能なテキスト値を変数に格納できるようになり、Citrix テストでのセッション依存の検証が容易になります。

  • 概要
    OCR による文字列検証は、スクリプトのカスタマイズ中に TrueLog Explorer によって挿入される関数を使用して実施されるという点について、説明します。CitrixVerifyText 関数は、再生ビットマップ内のテキスト文字列を比較して、それらが同じかどうかを判別します。
  • OCR 検証関数の生成
    OCR に依存する検証関数を挿入し、記録されたテキスト ベースのコンテンツと再生されたテキスト ベースのコンテンツの間の違いを認識します。
  • OCR 解析関数を生成する
    解析関数を生成して、記録および再生したテキスト ベースのコンテンツの比較と検証に使用可能なパラメータの作成を支援します。
親トピック: 画面の同期と検証


概要

OCR による文字列検証は、CitrixVerifyText API 呼び出しを使用して実現されます。これらの関数は、スクリプトのカスタマイズ時に TrueLog Explorer によって挿入されます。CitrixVerifyText 関数は、再生ビットマップ内のテキスト文字列を比較して、それらが同じかどうかを判別します。

CitrixParseText 関数は、テキストを解析するために使用できます。これらの API 呼び出しは、その他の Silk Performer 解析関数と同様に動作します。

OCR では、さまざまなフォントやテキスト スタイルを認識するためにパターン データベースが使用されます。フォント データベースは、OCR を実行する前に生成しておく必要があります。

Citrix TrueLogs では、検証と解析の API 呼び出しがツリー ビューで表示されます。

注: 頻繁に変えられる画面イメージに対する作業では、再生のタイミングが重要であるため、OCR 操作は、安定したコンテンツに対して実行する必要があります。ウィンドウ イベントでの同期を行うと、画面の更新がわずかに遅れることがあります。これによって、タイミングに依存した結果が生じます。したがって、各 OCR 検証/解析関数の前に、待機または CitrixWaitForScreen 関数の呼び出しのいずれかのスクリプトを記述することをお勧めします。

以下の 2 つの画面例は、TryScript の実行後の検証関数と解析関数の出力を示しています。

親トピック: OCR による検証と解析


OCR 検証関数の生成

  1. Silk Performer から Citrix セッションを記録します。
  2. TryScript ダイアログ ボックスの アニメーション チェックボックスをオンにして TryScript を実行します。 TrueLog Explorer が開きます。
  3. TryScript の実行が完了したら、テキスト検証の対象となるページのビットマップ画面キャプチャを含む CitrixSynchronization API ノード (または子ノード) を選択します。
  4. 画面上でクリックしてカーソルをドラッグし、検証に使用するテキストが含まれているページ領域を選択します。
  5. 選択した領域で右クリックし、コンテキスト メニューから 選択したテキストの検証 を選択します。
  6. テキスト検証関数の挿入 ダイアログ ボックスが開きます。 選択されたテキストが 定数値編集ボックスにプリロードされ、定数値ラジオ ボタンがデフォルトで選択されます。 定数値に対する検証だけでなく、既存または新規のパラメータと照らして検証することもできます。 パラメータを検証するには、パラメータ ラジオ ボタンを選択します。 パラメータが既に存在する場合は、[...] をクリックすると、そのパラメータを参照して選択できます。 パラメータが存在しない場合は、[...] をクリックすると、新規パラメータの作成に使用できる パラメータ ウィザード が起動されます。
  7. 選択した四角形内のテキストが以下に ドロップ リストから 等しい または 等しくない を選択します。
  8. 検証が、大文字/小文字を区別する かどうか、空白を無視する かどうかを指定します。
  9. ダイアログ ボックスの 深刻度 エリアで、検証が否定的な結果を返した場合に発生させる深刻度を指定します([エラー]、[警告]、[情報]、または [カスタム])。
  10. OK をクリックします。
  11. 確認のためのダイアログ ボックスが表示されます。 OK をクリックして、Citrix テスト スクリプトに OCR 検証関数を追加します。
親トピック: OCR による検証と解析


OCR 解析関数を生成する

  1. Silk Performer から Citrix セッションを記録します。
  2. TryScript ダイアログ ボックスの アニメーション チェックボックスをオンにして TryScript を実行します。 TrueLog Explorer が開きます。
  3. TryScript の実行が完了したら、テキスト解析の対象となるページのビットマップ 画面キャプチャを含む CitrixSynchronization API ノード (または子ノード) を選択します。
  4. クリックしてカーソルをドラッグし、解析するテキストを含むページ領域を選択します。
  5. 選択した領域で右クリックし、選択したテキストを変数に変換 を選択します。
  6. 解析関数の挿入 ダイアログ ボックスには、解析関数を構成するためのパラメータがあります。 デフォルトの設定で適切な場合がほとんどですが、以下の設定を調整できます。 パラメータ名 - 解析関数の結果を受け取るパラメータの名前を入力します。 スクリプトに出力文を挿入 - Web ページ呼び出しの後に通知のための Print 文をスクリプトに挿入するには、Print 文 を選択します。 これによって、解析関数の結果が Silk Performer の 仮想ユーザー出力 ウィンドウに出力されます。

    (Print 文によって 仮想ユーザー出力 ウィンドウに値を書き込むだけでなく) デバッグに役立つように解析結果の値を出力ファイルに書き込むには、Writeln 文 ("write line" 文) を選択します。 出力ファイルの生成によってテストの測定値が変化するので、これらのファイルはデバッグのためだけに使用し、完全なテストでは生成しないでください。

  7. OK をクリックします。
  8. 確認のためのダイアログ ボックスが表示されます。 OK をクリックして、Citrix テスト スクリプトに OCR 解析関数を追加します。
親トピック: OCR による検証と解析


生成したスクリプトの試行

TryScript では、1 人の仮想ユーザーのみが実行され、トランザクション間の思考時間または遅延が発生しないように、ストレス テスト オプションが有効になります。

注: Citrix TrueLog にはテスト (TrueLog Explorer による) の間にダウンロードしたデータの実況表示は含まれませんが、Citrix Web インターフェイス TrueLog には含まれます。 両方の TrueLog タイプには、ログ ファイル、レポート ファイルの作成、および Silk Performer Citrix Player 内での再生が含まれます。

Citrix OCR サポートに基づいて解析関数または検証関数を構成した場合、TryScript を実行する前に、OCR フォント データベースを生成する必要があります。生成しないと、これらの関数が正しく動作しないことがあります。

  1. Silk Performer ワークフロー バーで、スクリプトの試行 をクリックします。 スクリプトの試行 ダイアログ ボックスが開きます。
  2. 再生中に TrueLog Explorer 内でページ コンテンツの実況表示を参照するには (Citrix Web インターフェイス TrueLog のみ)、TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします。 表示された Citrix クライアント オプション (Citrix TrueLog のみ。Citrix Web インターフェイス TrueLog では使用不可) により、TryScript の実行中に Silk Performer Citrix Player で視覚的に再生することができます。
  3. 実行 をクリックします。
    注: ここでは、実際の負荷テストではなく、スクリプトのデバッグが必要かどうかを確認するためのテスト実行のみを実行します。
  4. TryScript の実行が開始されます。 Silk Performer 監視ウィンドウが開き、実行の進捗について詳細情報が表示されます。
  • Citrix TrueLog
    Citrix TryScript の実行時に Silk Performer CitrixPlayer が、Citrix Web インターフェイスの TryScript の実行時に TrueLog Explorer が開くことを説明します。
  • Silk Performer Citrix Player
    Silk Performer Citrix Player は、マウス移動を含め、記録されたすべてのアクションを完全なアニメーションで再生します。
親トピック: Citrix XenApp のサポート
関連タスク
OCR 用のシステム設定を構成する


Citrix TrueLog

Silk Performer Citrix Player が Citrix TryScript の実行時に開きます。 TrueLog Explorer が Citrix Web インターフェイスの TryScript の実行時 ([TryScript] ダイアログ ボックスの アニメーション チェックボックスがオンになっているとき) に開きます。 TrueLog Explorer は、TryScript の実行中に実際にダウンロードされたデータを表示します。

上位の同期ノードを選択すると、最後の同期関数の後に表示されていた、再生中にキャプチャされたウィンドウのビットマップが表示されます。

ウィンドウ同期関数は、カラーの枠線で視覚化されます。 ウィンドウの作成は、緑色の枠線で示され、 ウィンドウのアクティブ化は、青色の枠線で示されます。 ウィンドウの破棄は、黄色の枠線で示されます。

TrueLog は、画面の状態を視覚化することによって、Silk Performer Citrix Player を補完します。 たとえば、Silk Performer Citrix Player のログ ウィンドウに表示されている特定のウィンドウ ID で示されるウィンドウが不明な場合、それに対応する TrueLog 内の対応する同期関数を見つることによって、問題のウィンドウを示すビットマップにアクセスできます。

ユーザー入力ノード (CitrixUserInput とそれに関連する関数) には、キーボード入力とマウス入力が反映されます。 CitrixMouseClick 関数には、2 つの追跡ベクトル パラメータ (X 座標と Y 座標) があります。 赤色のひし形は、マウスをクリックした始点を示し、 赤色の十字は、マウスを解放した点を示します。 始点と終点の間の赤色の線は、マウスの経路を示します。 ボタンが押されている間に移動がなかった場合は、赤色の十字だけが表示されます。 オンスクリーン ツール チップには、補足情報 (たとえば、右クリック、左クリック、ダブルクリック) が表示されます。

値の文字列 (キーボード入力) は、対象のウィンドウ キャプションが (後続のノードで) 特定されるまで、赤色のフローティング テキストとして画面に視覚化され、文字列が入力される位置を示します。

親トピック: 生成したスクリプトの試行


Silk Performer Citrix Player

Silk Performer Citrix Player は、TryScript の実行が開始されたときに開き、記録されたすべてのアクションを完全なアニメーションで再生します。 マウスの移動や操作は、アニメーションのマウス アイコンでシミュレートされます。

注: Silk Performer Citrix Player は、Citrix のアプリケーションの種類でのみ開き、Citrix Web Interface のアプリケーションの種類では開きません。

Player の右上隅の ログ ウィンドウの表示/非表示 をクリックすると、ログ ウィンドウが開きます。 ログ ウィンドウには、TryScript の実行のさまざまな側面を詳細に示す、以下の 3 つのペインがあります。

  • スクリプト - このペインには、実行されたすべての BDL スクリプト関数および現在実行中の BDL 関数が一覧表示されます。
  • ウィンドウ - このペインには、ウィンドウのキャプション、スタイル、サイズ、および位置など、現在のセッション中のすべてのクライアント ウィンドウのスタックが表示されます。 最上位のウィンドウは、ウィンドウ アイコンで示されており、サブウィンドウの上部に表示されます。
  • ログ - このペインには、実行された BDL 関数やウィンドウの作成、アクティブ化、破棄を含む、すべての情報メッセージとイベントが一覧表示されます。

アクティブな関数とウィンドウは、すべてのペインで、青い矢印アイコンで示されます。

  • ステップ再生
    ステップ再生モードにより、一度に 1 つの関数の再生を進めることができます。 これは、綿密な分析とデバッグに役立ちます。
  • タイムアウトのスキップ
    再生中に スキップ をクリックして、タイムアウトの待機を回避できることについて説明します。
親トピック: 生成したスクリプトの試行


ステップ再生

  1. Citrix TryScript の実行中、Silk Performer Citrix Player の右上隅にある ログ ウィンドウの表示/非表示 ボタンをクリックすると、ログ ウィンドウが開きます。
  2. ステップ ボタンをクリックします。 再生がアクティブな関数で停止します。 青色の矢印アイコンが、スクリプトの次の関数を示します。
  3. ステップ をクリックすると、次の関数を実行します。
  4. ステップ のクリックを続けて、スクリプト内を移動します。
    注: また、TryScript ダイアログ ボックスの ステップ実行 チェックボックスをオンにして、ステップ実行を有効にすることもできます。
  5. 実行 をクリックして、連続的なスクリプト処理を再開します。
親トピック: Silk Performer Citrix Player


タイムアウトのスキップ

Silk Performer Citrix Player は、再生中に生じたすべてのタイムアウトを待機します。 タイムアウト (デフォルトのタイムアウトは 60 秒) の待機を回避するために、スキップ をクリックして、待機せずに先に進みます。

注: スキップ クリックすると、スクリプトにユーザーによる中断のエラーが生成されます。
  1. Citrix TryScript の実行中、Silk Performer Citrix Player の右上隅にある ログ ウィンドウの表示/非表示 ボタンをクリックすると、ログ ウィンドウが開きます。
  2. 再生でタイムアウトが生じたら、スキップ をクリックして次の関数に進めます。
親トピック: Silk Performer Citrix Player


ユーザー データをカスタマイズする

ユーザー データのカスタマイズでは、記録された静的ユーザー入力データを、トランザクションごとに変更されるパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。 このようなデータ駆動型テストの作成では、手動でのスクリプト記述は必要ありません。

Citrix ターミナル サービスによりホストされるアプリケーションに入力されるユーザー入力は、テスト中に以下の 2 つの方法でカスタマイズできます。

  • パラメータ ウィザード によって、キーボード イベントで入力される値を指定できます。また、記録されたユーザー入力データをランダムなパラメータ化されたユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。
  • 視覚的なカスタマイズによって、クリック、ドラッグ、リリースなどのマウス イベントをカスタマイズできます。
  • パラメータ ウィザードの使用
    パラメータ ウィザードを使用して、Citrix テスト スクリプトへのユーザー入力データをカスタマイズします。
  • マウス イベントをカスタマイズする
    記録されたマウス移動の始点と終点を編集できます。
  • テキストの同期
    TrueLog Explorer には、指定したテキストやテキスト パターンが、指定した場所に表示されるまで Citrix 関数の実行を一時停止する、同期関数が用意されていることについて説明します。
親トピック: Citrix XenApp のサポート


パラメータ ウィザードの使用

  1. ユーザー データ入力を表す API ノードを選択します (たとえば、キーボードのデータ文字列を表す CitrixKeyString ノードを選択します)。
  2. 入力データ文字列 (赤色のフローティング テキスト) を右クリックし、コンテキスト メニューから ユーザー入力のカスタマイズ を選択します。
  3. パラメータ ウィザード が開きます。 パラメータを新規作成する を選択し、次へ をクリックします。
  4. パラメータ ウィザード では、次の 2 つの方法のうち 1 つを使用して、スクリプトの値を変更できます。 スクリプトの dclparam または dclrand セクションで定義された既存のパラメータを使用するか、新しいパラメータ (新しい定数値、ランダム変数、または複数列データ ファイルの値のいずれかに基づく) を作成することができます 。 新しいパラメータを作成すると、そのパラメータは既存パラメータ群に追加され、以降のカスタマイズで利用できるようになります。
    注: このタスクでは、新しいランダム変数に基づいてパラメータを作成する手順についてのみ説明します。
  5. パラメータの新規作成 ダイアログが表示されます。 ランダム変数からパラメータを作成 ラジオ ボタンを選択し、次へ をクリックします。
  6. ランダム変数ウィザード が表示されます。 テスト スクリプトに挿入するランダム変数の種類 (たとえば、ファイルからの文字列) を、ドロップ リストから選択します。 選択した変数の種類の簡単な説明が下部のウィンドウに表示されます。
  7. 次へ をクリックします。
  8. 変数の名前と属性の指定 ページが表示されます。 ファイルからの文字列 というランダム変数タイプでは、指定されたファイルからランダムに選択または順次選択できるデータ文字列が生成されます。 変数の名前を 名前 フィールドに入力します。 値を呼び出す順序として ランダム または シーケンシャル を指定します。 ファイル/名前 ドロップ リストから、構成済みのデータソース (たとえば、姓を定義する Elname) を選択します。
  9. 次へ をクリックします。
  10. 使用法の選択 ページが表示されます。 新しいランダム変数を [毎回]、[トランザクションごと]、[テストごと] のどのタイミングで使用するかを指定します。
  11. 完了 をクリックして、記録された値の代わりに、指定のフォーム フィールドにランダム変数を使用するように、テスト スクリプトの BDL フォーム宣言を変更します。 新しいランダム変数関数が [BDL] ビューの下部に表示されます。
  12. テスト スクリプトにランダム変数関数を追加した状態で TryScript を起動し、スクリプトがエラーなしに動作することを確かめます。
親トピック: ユーザー データをカスタマイズする


マウス イベントをカスタマイズする

  1. マウス アクティビティを含む CitrixMouseClick ノードを選択します。 赤色のひし形は、マウスをクリックした始点を示し、 赤色の十字は、マウスを解放した点を示します。 始点と終点の間の赤色の線は、マウスの経路を示します。 オンスクリーン ツールチップには、補足情報 (たとえば、右クリック、左クリック、ダブルクリック) が表示されます。
  2. 画面上の任意の場所をクリックし、コンテキスト メニューから ユーザー入力のカスタマイズ を選択します。 マウス イベントのカスタマイズ ダイアログ ボックスが表示されます。
  3. カスタマイズしたマウス移動の始点にしたい画面上の位置をクリックします。
  4. カスタマイズしたマウス移動の終点にしたい画面上の位置をクリックします。
  5. カスタマイズ ボタンをクリックしてカスタマイズを受け入れ、BDL スクリプトを変更します。 マウス イベントのカスタマイズ結果が、記録 TrueLog のビットマップに緑色で示されます。 マウスのカスタマイズ結果は、BDL スクリプトでも緑色のテキストで示されます。 CitrixMouseClick 関数には、2 つの追跡ベクトル パラメータ (X 座標と Y 座標) があります。 このスクリプトが次回実行されたとき、ここで指定した新しい画面座標が使用されます。
親トピック: ユーザー データをカスタマイズする


テキストの同期

TrueLog Explorer には、指定したテキストやテキスト パターンが、指定した場所に表示されるまで Citrix 関数の実行を一時停止する、同期関数が用意されています。 このような同期は、検証関数を正確に実行するために重要です。

親トピック: ユーザー データをカスタマイズする


プロジェクトとシステムの設定

Citrix プロファイル設定は、Citrix の同期、ログ、仮想ユーザー シミュレーション、クライアントのオプションに関連する、プロジェクト固有の設定です。 Citrix 設定内容は、プロジェクトごとに指定されます。

このセクションでは、Citrix 再生設定に焦点をあてます。 Citrix 記録オプションは、ネットワークプロトコル、暗号化レベル、各ユーザー アクションの前に画面を記録する 設定、および RAM ディスクを使用する 設定に限られます。

  • Citrix XenApp オプションの構成
    Citrix テストをセットアップするために、ウィンドウの位置、マウスの速度、思考時間などのオプションを含め、Citrix 設定を構成します。
  • 全般設定を構成する
    ウィンドウの位置、ログ、タイムアウトなどに関する基本的なプロジェクト オプションを構成する方法について説明します。
  • シミュレーション設定を構成する
    Citrix シミュレーション設定を使用すると、キーボード/マウス入力や思考時間などの Citrix 仮想ユーザーの動作を構成できます。
  • クライアント設定を構成する
    Citrix クライアント設定を使用すると、ネットワーク プロトコル、ディスク キャッシュ、データ圧縮、マウス移動のキュー、SpeedScreen 待機時間の短縮、および暗号化レベルなどのクライアント オプションを構成できます。
  • エージェントで Citrix 再生を有効にする
    エージェント ワークステーションで Citrix 再生を有効にするには、ユーザー アカウントの指定、ネットワーク プロトコルの定義、および ICA ファイルの変更が必要です。
  • OCR のシステム設定
    OCR は、ビットマップ内のフォントやテキスト スタイルを認識するために、フォント データベースを使用します。
親トピック: Citrix XenApp のサポート


全般設定を構成する

  1. SilkPerformer のメイン ウィンドウのツリー ビュー領域にある [プロジェクト] タブで、[プロファイル] ノードを右クリックし、[アクティブ プロファイルの編集] を選択します。
  2. [シミュレーション] タブ (再生カテゴリ) に [プロファイル - [Profile1] - シミュレーション] ダイアログが開きます。
  3. 下にスクロールして Citrix アイコンを選択します。Citrix の [全般] 設定タブが開きます。
  4. 全般 タブの オプション セクションにある 同期タイムアウト フィールドでタイムアウト値を指定します。Citrix サーバーが遅いときは、この値を大きくすることが必要な場合があります。
  5. ウィンドウの位置を強制する オプション (デフォルトでは有効) は、再生したウィンドウを CitrixWaitForWindowCreation 関数で指定された座標に自動的に移動します。
  6. トランザクションが終了したら切断する オプション (デフォルトでは無効) は、Init トランザクションも含め各トランザクションの後、クライアントへの接続を解除します。
  7. 全般 タブの ログ セクションにある 各ユーザー アクションの前に画面を記録する オプション (デフォルトでは有効) では、値が画面に実際に入力される前にユーザー入力 (データ文字列値) のオンスクリーン ディスプレイが可能になります (たとえば、ユーザーはスプレッドシートのセルに文字列の値を入力します。値は、ユーザーが Enter を押すまで実際には入力されません。このオプションを有効にすると、Enter キーのクリックのすぐ直前のノードで、文字列値が赤色のフローティング テキストとして画面に表示されます)。このオプションは、各ユーザーアクションで画面キャプチャが生成されるように指示するため、かなりの処理時間とディスク ストレージが必要です。このオプションを無効にすると、ユーザー入力の更新すべては表示されなくなります。
  8. 画面の同期に失敗したらウィンドウ領域をダンプする オプションは、失敗した画面の同期すべてについて画面キャプチャが生成されるように指定します。これらのビットマップは、Silk Performer のインストールの現在の結果ディレクトリ (たとえば、RecentTryScript) にキャプチャおよび保存されている場合、対応する記録済みの同期と比較できるためデバッグ作業に役立ちます。たとえば、1 ピクセルの違いでも、画面の同期エラーの原因に十分になりえます。このような相違は、記録された画面キャプチャと同期エラーが発生した際に取得された画面キャプチャを比較することで、視覚的に最も効果的に検出できます。
  9. TrueLog の画面キャプチャの取得、読み込み、圧縮および書き込みにはかなりの処理リソースが必要となり、再生が遅くなる場合があります。RAM ディスクを使用する オプション (デフォルトでは無効) を使用すると、RAM ディスクや SSD (ソリッド ステート ドライブ) を利用できるため、従来のハード ディスクにファイルを書き込むよりも TrueLog の再生が速くなります。ドロップ ダウン リストから、読み書きの速度の速いドライブ文字を選択します。このオプションは RAM ディスクをインストールするわけではなく、選択した RAM ディスクを使用するためのものであることにご注意ください。
  10. OK をクリックして変更を保存するか、デフォルト をクリックしてデフォルト設定に戻します。
親トピック: プロジェクトとシステムの設定


シミュレーション設定を構成する

  1. プロジェクト メニュー ツリーで プロファイル ノードを右クリックして、アクティブ プロファイルの編集 を選択します。
  2. シミュレーション タブ (再生カテゴリ) に プロファイル - [Profile1] - シミュレーション ダイアログが開きます。
  3. 下にスクロールして Citrix アイコンを選択します。
  4. シミュレーション タブを選択します。
  5. シミュレーション タブの マウス セクションで、マウスがクリックされた状態を維持する時間、ダブル クリックのクリック間の時間、マウスの速度など、仮想ユーザーのマウス動作 (ミリ秒単位) を指定します。 シミュレートしているマウス イベントは一定の速度で移動します。 画面をジャンプして移動することはありません。
  6. シミュレーション タブの キーボード セクションで、キーが押された状態を維持する時間、文字列を入力するときのキーストローク間の時間 (たとえば CitrixKeyString 関数)、キー反復時間 (CitrixKeyString 関数の irepeat パラメータ) など、仮想ユーザーのキーボード動作 (ミリ秒単位) を指定します。
  7. シミュレーション タブの 思考時間 セクションで、同期に成功した後の遅延、および各ユーザー アクションの後の遅延について、仮想ユーザーの思考時間動作 (ミリ秒単位) を指定します。 これはユーザー反応時間の仮想シミュレーションであり、安定した再生に役立ちます。
  8. OK をクリックして変更を保存するか、デフォルト をクリックしてデフォルト設定に戻します。
親トピック: プロジェクトとシステムの設定


クライアント設定を構成する

  1. プロジェクト メニュー ツリーで プロファイル ノードを右クリックして、アクティブ プロファイルの編集 を選択します。
  2. シミュレーション タブ ([再生] カテゴリ) に プロファイル - [Profile1] - シミュレーション ダイアログ ボックスが表示されます。
  3. 下にスクロールして Citrix アイコンを選択します。
  4. Citrix クライアント タブを選択します。
  5. クライアントが動作するネットワーク プロトコル (TCP/IP または TCP/IP + HTTP) を選択します。 TCP/IP + HTTP を指定すると、ポスト コマンドを使用して HTTP プロトコルの負荷分散が行われます。 TCP/IP を指定すると、UDP が使用されます。 他のネットワーク プロトコルはサポートされません。
  6. データ圧縮を使用する チェックボックスをオンにして、データ圧縮を有効にします (デフォルトでは有効)。
  7. ビットマップにディスク キャッシュを使用する チェックボックスをオンにして、ハード ディスク上でのビットマップのキャッシングを有効にします (デフォルトでは無効)。
  8. マウスの移動とキーストロークをキューに入れる チェックボックスをオンにすると、マウスの移動とキーストロークがサーバーに送信される前に、指定された時間、キューに入るようにします (デフォルトでは無効)。
  9. SpeedScreen 待機時間の短縮 を使用すると、マウス操作とキーボード操作のローカル エコーが可能になります (デフォルトでは無効)。 ローカル エコー とは、サーバーへのラウンド トリップを待たずに入力結果を確認できることを意味します。 オフ、オン、または 自動 を指定します。
  10. クライアントの 暗号化レベル を指定します。 オプションには、サーバー デフォルトを使用する、基本、128 ビット - ログオンのみ、40 ビット、56 ビット、および 128 ビット があります。
  11. OK をクリックして変更を保存するか、デフォルト をクリックしてデフォルト設定に戻します。
親トピック: プロジェクトとシステムの設定


エージェントで Citrix 再生を有効にする

  1. Silk Performer メニュー バーの ツール > System Configuration Manager を選択します。 System Configuration Manager ダイアログ ボックスが表示されます。
  2. (すべての Citrix XenApp クライアントのバージョンに適用) アプリケーション タブをクリックします。 Silk Performer アイコンをクリックします。 Citrix セッションを実行する権限のあるエージェント ワークステーションのユーザー アカウントに アカウント および パスワード 資格情報を入力します。
  3. Citrix Recorder の 接続 ダイアログ ボックスで定義される設定を使用してアクセスされる Citrix 公開アプリケーションを記録するためには、以下を実行します。
    1. プロジェクト メニュー ツリーで プロファイル ノードを展開し、アクティブ プロファイルを右クリックします。 プロファイルの編集 を選択します。
    2. 下にスクロールして Citrix をクリックします。
    3. Citrix クライアント タブをクリックします。
    4. ネットワーク プロトコル リスト ボックスから、TCP/IP + HTTP を選択します。
    ICA ファイルを利用する Citrix 公開アプリケーションを記録するには、ICA ファイルの [WFClient] セクションで、TcpBrowserAddress= を HttpBrowserAddress= に変更します。
親トピック: プロジェクトとシステムの設定


OCR のシステム設定

TrueLog Explorer で、解析関数や検証関数用の OCR を有効にするには、 Silk Performer のシステム設定を使用して、フォント データベースを生成する必要があります。

OCR は、ビットマップ内のフォントやテキスト スタイルを認識するために、フォント (またはパターン) データベースを使用します。 デフォルトのフォント セットでほとんどのシナリオはカバーできますが、状況によっては、ほかのフォントやフォント スタイルの追加が必要になることがあります。 新しいフォントを追加したり、システムからフォントを削除したときは、毎回、新しいデータベースを生成する必要があります。

データベース内のフォントが多すぎると、処理が遅くなったり、読み取り間違いをする場合があります。このため、テキスト文字列の取得対象となるビットマップで使用されるフォントのみを含めることをお勧めします。

  • OCR 用のシステム設定を構成する
    フォント サイズ/スタイルの特性を指定する方法および新しいフォント データベースを生成する方法について説明します。
親トピック: プロジェクトとシステムの設定


OCR 用のシステム設定を構成する

  1. Silk Performer 内で 設定 > システム... に移動して Citrix アイコンを選択します。
  2. OCR タブで、追加 >> または すべて追加 ボタンを使用して、OCR で使用するフォントを システム フォント リスト ボックスから 選択済みのフォント リスト ボックスに移動します。
  3. 選択済みのフォント リスト ボックスから不要なフォントを削除するには、すべて削除 または << 削除 ボタンを使用します。
  4. サイズ フィールドで、使用するフォント サイズの範囲を指定します (たとえば、8-20)。
  5. イタリック、太字、および 下線 の各チェック ボックスをオンにして、含めるフォント スタイルを定義します。メニュー エントリを検証する場合は、下線 チェック ボックスがオンになっていることを確認します。
  6. フォント データベースの生成 をクリックします。
  7. フォント ベースの構築 ダイアログ ボックスが開きます。OK をクリックして、既存のフォント データベースを新しいデータベースで置き換えることを確認します。
    注: フォント データベースの作成中に問題が発生した場合は、データ実行防止の問題である可能性があります。この問題を解決するには、以下のステップを実行します。
  8. Silk Performer の [システム設定] ダイアログ ボックスで、OK をクリックして、変更を受け入れます。
親トピック: OCR のシステム設定


テストのベスト プラクティス

GUI ベースのテストは多くの課題がありますが、現実のユーザー体験を綿密にシミュレートする機会となるため有益です。 Silk Performer による GUI ベースのテストでは、ターミナル サービス プロトコルをシミュレートしてアプリケーションに負荷をかけます。

Citrix テストを実行するには、少なくとも 2 つの物理コンピュータ (ターミナル サービス環境とテスト対象のアプリケーション (AUT) を実行するコンピュータ、および Silk Performer と Citrix クライアント ソフトウェアを実行するコンピュータ) を使用する必要があります。

負荷生成コンピュータは、ターミナル サービス ネットワーク プロトコルを大量に作成して、多くのユーザーをシミュレートします。 ターミナル サービス サーバー (テスト対象のシステム) は、MS Windows ベースの複数のデスクトップ セッションを同時にシミュレートします。 このサーバーは、高い負荷のかかっている GUI アプリケーションもホストします。

負荷生成コンピュータとテスト対象のシステムの間に、切り離したネットワーク (LAN) を配置することをお勧めします。 これにより、ネットワークのスループット分析が可能になります。 また、切り離したネットワークは外的影響を受けにくいため、エラーおよびネットワークの紛らわしいスループット結果が減少します。

  • テスト準備
    GUI ベースの 負荷 テストを実施する前に、よくある問題を回避するために、標準のテスト準備を行うことをお勧めします。
  • ユース ケースを作成する
    ユース ケースの作成では、多くの検討すべき要素があります。
  • 安定した環境を確保する
    テスト スクリプトの記録後にテスト対象のアプリケーションの UI が変更されると、スクリプトが使用できなくなる可能性があります。
親トピック: Citrix XenApp のサポート


テスト準備

  • ユーザー インターフェイス (UI) 設計 - アプリケーションの UI 設計に影響を及ぼすことのできる機会があれば、うまく利用しましょう。UI を一貫性のある確かなものにすれば、再利用可能なサブルーチンを作成しやすくなります。それによりテスト コードの作成を減らすことができ、その結果、維持する必要のあるコードが少なくなります。

  • テスト計画 - 十分に検討されたテスト計画は、GUI ベースの 負荷 テストの成功の前提条件です。テスト計画では、目標、目的、テストの実行、重要な指標などを定義する必要があります。

  • ユース ケース - ユース ケースは、テストを計画する、ステップ by ステップのシナリオです。ユース ケースは、たとえば、アプリケーションの起動、プロジェクトを開く、設定の編集など、典型的なユーザー-アプリケーション間の対話を表します。ユース ケースに従って、記録プロセスを進めます。

  • アプリケーションのエキスパート - 十分に文書化されたユース ケースがあっても、アプリケーションのワークフローのすべてを理解できないこともあります。テスト対象のアプリケーションに関して、問い合わせられる専門知識を持つ担当者 (たとえばビジネス プロセス オーナー) がいると助けとなります。

  • 画面解像度 - 画面解像度が高ければ高いほど、各ターミナル セッションに対するシステム要件は厳しくなります。記録と再生には、画面解像度を 800x600 以下にすることをお勧めします。このアプローチは、古いコンピュータとの互換性があり、負荷 テストに含めることもできます。

  • リモート ユーザー - リモート ユーザーがアプリケーションを利用できるようにする場合、一部の 負荷 テスト中に低速のネットワークのシミュレーションを行うことを検討します。低速のネットワーク接続はアプリケーションのパフォーマンスに大きく影響するため、ネットワークが混雑した状態をシミュレーションして行う追加テストは、テスト結果の向上に役立ちます。これを行うには、Silk Performer のネットワーク エミュレーション機能を使用します。

目標の定義

負荷 テストの計画で最初にすべきことは、目標を定義することです。テスト担当者はよく、目標はすべての関係者にとって明確であると考えますが、多くの場合そうではありません。品質保証チームと管理者が同じ目標に取り組むことが重要です。

目標を記述する際は、まず、次のような最も高いレベルの目標を検討します。

  1. アプリケーションのベースライン パフォーマンスを特定する
  2. アプリケーションを最適化/調整する
  3. テスト対象のアプリケーションが本稼働の準備ができているかどうかを判断する

高レベルの目標を設定した後、それらの目標を、どのように目標を達成および測定するか、どのような結果が許容されるかなどの問題をカバーする、明確で測定可能な目的に細分化する必要があります。

以下では、テスト目標をどのように細分化するかについて例示します。

目標 1：アプリケーションのベースライン パフォーマンスを特定して文書化する

  • Silk Performer を使用して、重要なアプリケーション関数のレスポンス時間を測定します。
  • ウィンドウ/画面の同期にタイマ関数を設定します (WaitFor イベント)。これらの測定値は、最終レポートに表示されます。

重要なタイマ：

  • ログイン ウィンドウで OK ボタンをクリックした時点から、ようこそ ウィンドウが表示されるまでにかかった時間を測定します。
  • クエリ結果 ボタンをクリックした時点から、入力したリストが表示されるまでにかかった時間を測定します。

目標 2：アプリケーションを最適化/調整する

  • アプリケーションの最適化/調整を 5 日間行います。
  • すべての変更内容と、テスト対象のアプリケーションのパフォーマンスへのそれらの影響を文書化します。

目標 3：テスト対象のアプリケーションが本稼働の準備ができているかどうかを判断する

  • すべてのレスポンス時間が 5 秒を下回るという条件が満たされたら、アプリケーションは本稼働が可能です (Silk Performer では、各ウィンドウと画面の同期に関して指標を提供しています) 。

測定可能な目的のリストに従い、テスト結果は、アプリケーションが本稼働できる明確な時点を定義します。定義した目標へのアプリケーションの調整が適切であれば、これにより、アプリケーションを際限なく最適化するというリスクも排除されます。

親トピック: テストのベスト プラクティス


ユース ケースを作成する

ユース ケースとは、テスト対象のアプリケーションで作業する場合にユーザーが行う標準的なタスクです。 ユース ケースは、テストを必要とするアプリケーションの機能を使用する必要があります。 適切に動作している重要な機能のみをテストすることが不可欠です。 この時点で、機能テストはすでに完了しているべきであり、実施しません。 テストのプロセスは長く、ユース ケースが長ければ長いほど、テストにかかる時間も長くなります。

ユース ケースを段階的に実行する場合には、重要な画面イベントをすべて書き出します。 たとえば、Microsoft Excel で式を入力する場合、式の処理のためにセルの変更を文書化する必要があります。 このようなイベントは、スクリプトの開発中に重要となる画面の同期に置き換えられます。 テキスト同期は、テキスト ベースの画面の同期に使用できます。

ユース ケースを詳細レベルまで文書化します。 すべてのマウス クリック、キー ストローク、および予想結果を文書化する必要があります。 これは最初は面倒かもしれませんが、テストケースの記録の開始時に作業が容易になります。

たとえば、単に Microsoft Word の既存のインスタンスの場所を特定したり、ドキュメントを開いたりするテストでは、ユース ケースにあるべき詳細レベルが表示されます。 角括弧 ("[ ]") はイベントを示します。

In the “Microsoft Word” window, navigate to the File menu and select Open….
[The “Open” dialog box opens]
Select ‘Test.doc.’
Click Open.
[The “Open” dialog box closes]
[The “Microsoft Word” window has focus once again]

上記の例では、ウィンドウのタイトルがそのまま文書化されます。 このような情報は、スクリプトをアプリケーションと同期した状態に維持するうえで必要なため、以降のスクリプトの開発時に重要となります。 ユース ケースが十分に文書化されていると、アプリケーションのスクリプト化が容易です。

ユース ケースの記述には、いくつかの方法があります。 使い慣れた XML 表記、番号の付けられた表記、または他の形式を使用できます。

XML ユース ケースの例

<Task Name=”Open a document”>
  In the “Microsoft Word” window, navigate to the File menu  	  and select Open….
  [The “Open” dialog box displays]
  Select ‘Test.doc.’
  Click Open.
  [The “Open” dialog box closes]
  [The “Microsoft Word” window has focus once again]
</Task>

番号の付けられたユース ケースの例

100.01 – Open a document
  In the “Microsoft Word” window, navigate to the File menu  	  and select Open….
  [The “Open” dialog box displays]
  Select ‘Test.doc.’
  Click Open.
  [The “Open” dialog box closes]
  [The “Microsoft Word” window has focus once again]
100.02
    …
親トピック: テストのベスト プラクティス


安定した環境を確保する

記録を開始する前に、テスト対象のアプリケーションの UI が、少なくともテストが完了するまで追加変更されないことを確認してください。 このためには、開発チームと十分に連絡を取り合う必要があります。 テスト スクリプトの記録後に UI が変更されると、スクリプトが使用できなくなる可能性があります。

また、テストで使用するデータベースをバック アップして復元できるようにしてください。 データベース コンテンツへの変更は多くの場合、UI コンテンツにおける違い (たとえば、リストの項目の数が多いまたは異なる、クエリ結果が異なるなど) につながるため、各テスト サイクルの開始前にデータベースをベースライン状態に戻す必要があります。

親トピック: テストのベスト プラクティス


トラブルシューティング

ユース ケースを文書化すると、テスト スクリプトの記録またはコーディングは相対的に単純なタスクとなります。 Silk Performer には、記録/再生オプションとテスト スクリプトの手動コーディング オプションの両方が備えられています。 各アプローチには、長所と短所があります。 Silk Performer でテスト スクリプトを作成する最も効率的な方法は、次のように、2 つのアプローチを組み合わせることです。

  1. Silk Performer を使用して、ユース ケースの説明で示したシナリオを記録します。
  2. TrueLog Explorer を使用して、スクリプトを視覚的にカスタマイズします (ここで、“テキスト同期” 機能が 動作します)。
  3. より複雑なスクリプト作成については、生成された BDL スクリプトを手動で編集します。 手動でのスクリプト編集は、ユース ケースのコンテンツをテスト スクリプトに挿入 (コメントの形式で) する際の最良のオプションでもあります。 以下の例を参照してください。この例では、番号の付けられた表記形式を使用しています。
    100.001 In the “Microsoft Word” window, navigate the menu to File, Open….
100.002 [The “Open” dialog window shows]
100.003 Select Test.doc.
100.004 Click Open.
100.005 [The “Open” dialog window goes away]
100.006[The “Microsoft Word” window has focus again]
  4. 次のように、これらのコンテンツを BDL スクリプトにコピー/貼り付けできるようになりました。
    // 100.001 In “Microsoft Word" window,
    hwndWordMainWindow := CitrixSearchWindow(“*Microsoft
    Word”, MATCH_Wildcard);
    CitrixWindowBringToTop(hwndWordMainWindow);

// navigate the menu to File, Open….
    CitrixKey(KEY_Alt);
    CitrixKeyString("f");
    CitrixKeyString("o");

// 100.002 [The “Open” dialog window shows]
    hwndOpenDialog := CitrixWaitForWindowCreation(“Open”,
    Match_Exact);

// 100.003 Select Test.doc.
    CitrixMouseClick(150, 100, hwndOpenDialog, MOUSE_
    ButtonLeft);

// 100.004 Click Open
    CitrixMouseClick(300, 200, hwndOpenDialog, MOUSE_
    ButtonLeft);

// 100.005 [The “Open” dialog window goes away]
    CitrixWaitForWindow(hwndOpenDialog, EVENT_Destroy);

// 100.006 [The “Microsoft Word” window has focus again]
    CitrixWaitForWindow(hwndWordMainWindow, EVENT_Activate);
    スクリプトが失敗した場合、ユース ケースに関してどこでスクリプトが失敗したのかを判別する際に、これらのコメントが役立ちます。
  • 記録のヒント
    ここでは、再生エラーを探して修正するという作業を行わなくてすむようにする、全般的なヒントを提供します。
  • スクリプトのデバッグ
    記録中にキャプチャされた値と異なる値が再生中に検出されたことから、ウィンドウがアクティブにならなかったり、後の画面の同期に失敗したりする場合の考慮事項について説明します。
  • トラブルシューティング スクリプト
    ここでは、タイムアウトおよびその他の実行失敗を回避、検索、修正するためのヒントを提供します。
  • Citrix ダイアログ ボックスを処理する
    情報ダイアログ ボックスの処理に関する提案を示します。
親トピック: Citrix XenApp のサポート


記録のヒント

ターミナル サービス スクリプトを記録する際は、再生中の対象のウィンドウの位置とサイズが予定外のイベントにより変更され、テストの実行が失敗する可能性があることを認識する必要があります。 ここでは、そのような再生エラーを探して修正するという作業を行わなくてすむようにする、全般的なヒントを提供します。

Windows の ファイル名を指定して実行 コマンドで、アプリケーションを起動します。 デスクトップ アイコンから、またはマウスをクリックしても、アプリケーションを起動できますが、アプリケーションを異なるサーバーに移動する場合、または GUI がユーザー間で異なる場合は、デスクトップ アイコンは別の場所に表示される可能性があることを考慮してください。 このため、Windows の ファイル名を指定して実行 コマンド ウィンドウで、アプリケーションの EXE ファイルへのパスを入力することをお勧めします。

キーボードのショートカット

マウス クリックでは、x/y 座標、ウィンドウのリファレンスが必要となり、対象のウィンドウには、フォーカスがあてられている必要があります。 マウス クリック追跡のための GUI テストのテクノロジは信頼性が高まりましたが、その一方で、Windows は動的に変化する環境のままです。このため、小さな不整合を許容できるスクリプトを構築する必要があります。 このための方法の 1 つは、キーボードのショートカットを使用することです。 ショートカットでの唯一の要件はウィンドウのフォーカスです。

注: Citrix Recorder からフォーカスがはずれてしまうため、Windows ロゴ キーはサポートされていません。

Windows アプリケーションのほとんどすべてのメニュー システムで、Alt キーの組み合わせを使用して特定のコマンドを開始することができます。 Alt キーのショートカットの使用を記録するには、まずアプリケーションにフォーカスをあて、次に Alt キーを押します。これにより、メニュー システムがフォーカスされます。 メニュー項目の多くには、下線付きの文字が 1 つ付与されています。 これは、Alt キー コマンドが特定のメニュー項目に利用可能であることを示しています。 適切な文字キーを押してサブメニューにアクセスし、開始するメニュー項目まで移動します。 メニュー項目自体にキーの組み合わせがある場合もあります。 たとえば、Microsoft Word で文書を開くには、Ctrl+O の組み合わせを使用します。 このショートカットでは、メニューがフォーカスされている必要はありません。

ウィンドウを最大化する

キーボードのショートカットが利用できず、マウスを使わなくてはならない場合は、作業中のウィンドウを最大化することで、不正なマウス クリックをする可能性を軽減できます。 これにより、毎回ウィンドウが決まった位置に固定され、マウス クリックはより正確になります。 原則として、ウィンドウの最大化が可能な場合は最大化することをお勧めします。

注: Alt-Space、X が、アクティブなウィンドウを最大化する WIndows のキーボードの組み合わせです。

セッションの記録中、ウィンドウを最大化できない場合は、クリックするまえにウィンドウをデスクトップの左上隅に移動します。 記録時に、Recorder がフォアグラウンドにあるウィンドウのハンドルをつかめないことがあります。そのため、座標をデスクトップに対する相対座標にすることが必要です。

システムをクリーンに維持する

ターミナル サービス セッション中に予期しないイベントが起こらないようにするために、Windows のデスクトップをできる限り整理した状態を維持してください。 たとえば、スクリプトの再生中に Windows ネットワークのメッセージが表示されるとします。 その後のマウス クリックが、意図したアプリケーション ウィンドウではなく、Windows ネットワークのメッセージ ウィンドウに対して行われると、スクリプトが動作しなくなります。

適切なフォーカスを設定する

ウィンドウをクリックする前に、クリックするウィンドウが存在し、フォーカスが設定されているか確認します。 以下は、このプロセスの自動化を支援するサンプルの BDL 関数です。

function MyCitrixWaitForWindowCreationAndActivation(sCaption:string;
                nMatch    : number optional;
                nStyle    : number optional;
                nX        : number optional;
                nY        : number optional;
                nWidth    : number optional;
                nHeight   : number optional
                ) : number
var
    hwndNewWindow  : number;  // hwnd of the new window created
    nRTT:number;
begin
    //
    // Check if window exists
    //
        hwndNewWindow := CitrixSearchWindow(sCaption, nMatch);
          hwndNewWindow := 0;
    //
    // If window doesn’t exist, wait for creation
    //
        if (hwndNewWindow < 1) then
            hwndNewWindow := CitrixWaitForWindowCreation(sCaption, nMatch,
            nStyle, nX, nY, nWidth, nHeight);
        end;
    //
    // Check if window is already active, wait if it’s not active
    //
        MyCitrixWaitForWindowActivate(hwndNewWindow);
        MyCitrixWaitForWindowCreationAndActivation:=hwndNewWindow;

end MyCitrixWaitForWindowCreationAndActivation;

パラメータを使用する

2 度以上同じ情報を入力すると、テスト対象のシステムは、同じ作業を繰り返すのではなく、 データをメモリにキャッシュします。 このため、作業ができるだけ現実的なものとなるように、入力/リクエスト データを変更することが重要です。 たとえば、異なるデータ範囲を有する異なるユーザー アカウントを使用します。 これは、テストに CSV (コンマ区切り値) ファイルを入力として使用することで実現できます。

検証を追加する

検証とは、サーバーから受信されたレスポンスが正しいかどうかを確認するためにコードに追加されるチェックです。 GUI ベースのテストを実施する場合、検証はウィンドウの同期により自動的にスクリプトに追加されますが、コードに検証をさらに追加することをお勧めします。

タイマを追加する

カスタム タイマは、アプリケーションのレスポンス時間の追跡のために非常に重要です。 カスタム タイマがないと、アプリケーションに対する総合的なエンド ユーザー体験を判断することができません。 指標は、アプリケーションのどの点がよく実行されており、どの点がそうでないのかを判断する際に役立ちます。

テストスクリプトにカスタム タイマを追加する前に、アプリケーションの重要な領域を特定して、MeasureStartおよび MeasureStop 呼び出しを行う場所を決定します。 この作業については、TrueLog Explorer のログが参考になります。

以下は、Silk Performer のスクリプトでタイマを使用している例です。

//
// Submit a work order.
//
CitrixMouseClick(27, 31, hwndWorkOrder, MOUSE_ButtonLeft);

//
// Start the response time clock.
//
MeasureStart("202.01: Work Order Submission.");

//
// Wait for the "Order Submission Complete" dialog box.
//
MyCitrixWaitForWindowCreationAndActivation(
    "Order Submission Complete",
    MATCH_Exact
    );

//
// Stop the response time clock.
//
MeasureStop("202.01: Work Order Submission ");
親トピック: トラブルシューティング


スクリプトのデバッグ

Silk Performer Citrix での再生中に、記録中にキャプチャされた値と異なる値が検出されると、ウィンドウがアクティブにならなかったり、画面の同期に失敗することがあります。 同期に関する問題の原因は、常に明白とは限りません。 画面の位置が 1 ピクセルだけ変化したことが原因の場合もあります。

画面の同期の失敗よりもよくあるのは、再生中にウィンドウがアクティブにならないことです。 このような場合は、それに対応するユーザー アクションに関連するスクリーンショットが失敗の原因を究明する手がかりになることがあります。

注: ユーザー エラーがないのに、ウィンドウがたまにしかアクティブにならないこともあります。 このような場合は、関連する CitrixWaitForWindow 関数を削除する必要があります。

Silk Performer Citrix の再生では、エラーが発生すると画面をキャプチャし (デフォルトの設定)、そのビットマップをディスクに書き込みます。 デフォルトでは、スクリーンショットはレコーダによってプロジェクト ディレクトリ内のスクリーンショット ディレクトリに書き込まれます。 再生では、現在使用されている結果ディレクトリにスクリーンショットが保存されます。 ビットマップ表示プログラムを使用して、記録画面と再生画面を視覚的に比較できます。

ビットマップをキャプチャして保存するには、Silk Performer の 画面の同期に失敗したらウィンドウ領域をダンプする Citrix オプションをアクティブにする必要があります (デフォルト)。

親トピック: トラブルシューティング


トラブルシューティング スクリプト

負荷テストの実行時に、タイムアウト エラーやその他の実行失敗が発生することがあります。 ここでは、そのようなエラーを回避、検索、修正するヒントを提供します。

TrueLog Explorer を使用する

テスト実行が予期しないダイアログ ボックスが表示されることで失敗し、それが原因でスクリプトが作業中のウィンドウへのフォーカスを失うことがしばしばあります。 そのため、テストを実行する前に Silk Performer の TrueLog On Error 機能を有効にしておくことをお勧めします。 そうすると、エラーが発生した場合に、TrueLog Explorer で視覚的に割り出すことができます。

ターミナル サーバー セッションをクリアする

テスト実行が失敗し後は、テストを再開する前にすべてのターミナル サーバー セッションをリセットしてください。リセットしない場合はスクリプトが失敗します。

アプリケーション エラーを処理する

テスト中、生成された負荷が原因で、アプリケーションによってエラーが呼び出されることがあります。 エラーの処理および報告を行うイベント ハンドラーをスクリプトに追加しておくと便利です。

ここでは、Program Error Intercepted という名前のウィンドウを継続的に監視し、そのようなウィンドウが表示された場合に ALT-C を実行してウィンドウを閉じるイベント ハンドラーの例を示します。 またそのようなエラーが発生すると、イベント ハンドラーはエラー メッセージを生成します。

dclevent
  handler Handler1 <EVENT_CITRIXINTERRUPT>
  var
    nInterrupt, nWindow : number;
    nStyle              : number;
    sWindowCaption      : string;
    begin
      CitrixGetActInterrupt(nInterrupt, nWindow);
      ErrorAdd(FACILITY_CITRIXENGINE, 47, SEVERITY_INFORMATIONAL);
      print(string(nWindow));
      CitrixGetWindowCaption(nWindow, sWindowCaption);
      if sWindowCaption = "Program Error Intercepted" then
        CitrixKey(67, MOD_Alt); // 'c'
      end;
      ErrorRemove(FACILITY_CITRIXENGINE, 47);
    end Handler1;

思考時間を回避する

テスト対象のアプリケーションのスクリプトがオーバーランするのを回避するために Wait() 文または ThinkTime 文を使用しているかもしれませんが、以下の 2 つの理由からこの方法はお勧めできません。

  • 負荷の生成が増加すると、アプリケーションの処理速度が著しく遅くなる場合がある。 結果的に待機文が短すぎ、アプリケーションのオーバーランの問題自体が再度発生することがある。
  • ウィンドウ、テキスト、画面の同期のレスポンス時間を計測する場合は、Wait() 文の時間によってレスポンス時間が不自然に長くなってしまうことがあります。

これを解決するには、同期を使用します。

スクリプトの一部を記録し直す

アプリケーションの動作を変更すると、記録したスクリプトの一部が使用できなくなることがあります。 ユース ケースの一部を記録し直すというのも 1 つの手段ですが、レコーダが既存のウィンドウのハンドルを追跡できず、結果としてウィンドウの処理番号が間違ってしまうということあるため注意が必要です。 こういった問題のせいで、新しく記録したスクリプトと元のスクリプトの統合が極めて煩雑になってしまうことも考えられます。 ユース ケースが小さい場合は、ユース ケース全体を記録し直すことをお勧めします。 記録し直さない場合は、以下に概説されている処理に従って、新しいスクリプトと古くなったスクリプトを統合してください。

  1. 記録し直すコードのセクションをコメントアウトします。
  2. 置換が必要なコード セクションの場所と、ユース ケース内の対応するセクションを一致させます。
  3. ターミナル サービス セッションを、ユース ケース内の対応するポイントまで移動させます。
  4. オープン ターミナル サービス セッションの記録を開始します。
  5. 置換が必要なユース ケースのアクションを実行します。
  6. レコーダを停止します (その後記録のスクリプトが作成されます)。
  7. 新たに記録されたスクリプトのウィンドウ ハンドル変数を、それぞれ元のスクリプトのハンドルと置き換えます。 CitrixSearchWindow() などの関数を使用すると、正しいウィンドウ ハンドルを特定できます。
  8. 編集したコードを元のスクリプトにコピーします。
親トピック: トラブルシューティング


Citrix ダイアログ ボックスを処理する

Citrix ターミナル サービス セッションへの接続方法およびライセンス セットアップにより、次のダイアログボックスの両方またはいずれかが表示されます。

  • ICA シームレス ホスト エージェント
  • Citrix ライセンスの警告

これらのダイアログ ボックスは情報であり、最初にターミナル サービス セッションにログインしたときに表示される場合と表示されない場合があります。これらのダイアログ ボックスの処理方法には、次の 2 つがあります。

Citrix ダイアログ ボックスを処理する (解決策 1)

この解決策では、ダイアログ ボックスが表示された場合にそのダイアログ ボックスを処理する割り込みを作成します。

transaction TMain
  var
  begin
    CitrixInit(800, 600);
    CitrixAddInterrupt(INTERRUPT_WindowCreate, "ICA Seamless Host Agent", MATCH_Exact);
    CitrixConnect("lab74", "labadmin", "labpass", "testlab1", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 572, 804, 30);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(36, 17, hWnd4, MOUSE_ButtonLeft, MOD_None, -1, 0);
    hWnd11 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 313, 163, 263);
    CitrixMouseClick(62, 247, hWnd11, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd11, EVENT_Destroy);
    hWnd12 := CitrixWaitForWindowCreation("Shut Down Windows", MATCH_Exact, 0x94C808CC, 191, 136, 417, 192);
    CitrixWaitForWindow(hWnd12, EVENT_Activate);
    CitrixMouseClick(203, 170, hWnd12, MOUSE_ButtonLeft);
    CitrixWaitForDisconnect();
  end TMain;

dclevent
  handler Handler1 <EVENT_CITRIXINTERRUPT>
  var
    nInterrupt, nWindow : number;
    nStyle              : number;
  begin
    CitrixGetActInterrupt(nInterrupt, nWindow);

    ErrorAdd(FACILITY_CITRIXENGINE, 47, SEVERITY_INFORMATIONAL);
    print(string(nWindow));
    if CitrixGetWindowStyle(nWindow, nStyle) and (nStyle <> 0xB4000000) then
      CitrixWaitForWindow(nWindow, EVENT_Activate);
      CitrixMouseClick(201, 202, nWindow, MOUSE_ButtonLeft);
      CitrixWaitForWindow(nWindow, EVENT_Destroy);
    end;
    ErrorRemove(FACILITY_CITRIXENGINE, 47);

  end Handler1;

Citrix ダイアログ ボックスを処理する (解決策 2)

このサンプル コードは、Citrix ダイアログ ボックスが表示されるまで 30 秒間ループします。ダイアログ ボックスが表示されると、このコードによりダイアログ ボックスが閉じられます。

function MyCitrixStartup(nMaxWait: number optional): boolean
    var
        hwndICAHandle              : number;
        hwndFoundLicenseWarning    : number;
        nCount                     : number;
    begin
        hwndICAHandle:=-1;
        hwndFoundLicenseWarning:=-1;
        nCount:=0;

        if (nMaxWait = 0) then
            nMaxWait:=10;
        // if no wait time was passed,
        // use 10 tries (seconds) as a default
        end;

        MeasureStart("MyCitrixStartup");

    //
    // loop until we've handled the conditions or we've tried
    //

        while ((nCount < nMaxWait) and ((hwndICAHandle <=0) or
            (hwndFoundLicenseWarning <=0))) do

    //
    // Just a little feedback, every 10 tries
    //
            if ((nCount MOD 10) =0) then
                print(string(nCount) + ")MyCitrixStartup "
                + " vUser:" + string(GetUserId())
                + " hwndICAHandle=" + string(hwndICAHandle)
                + " hwndFoundLicenseWarning="
                + string(hwndFoundLicenseWarning),
                OPT_DISPLAY_ERRORS , TEXT_GREEN );
            end;
    //
    // if we haven't handled this window yet
    //
            if (hwndICAHandle  <=0) then
                hwndICAHandle := CitrixWaitForWindowCreation
                ("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4,
                0, 0, 0, 0, false, 1, true);

                if (hwndICAHandle > 0) then
                    if (CitrixWindowBringToTop(hwndICAHandle)) then
                        CitrixKey(KEY_ENTER); // press ok to close the dialog
                        CitrixWaitForWindow(hwndICAHandle, EVENT_Destroy);
                        // wait for the close
                    end; // end waiting for window to top
                end; // end if we have a valid handle
            end; // if window has not been found yet

            if (hwndFoundLicenseWarning  <=0) then
                hwndFoundLicenseWarning := CitrixWaitForWindowCreation
                ("Citrix License Warning Notice", MATCH_Exact, 0x94C800C4,
                0, 0, 0, 0, false, 1, true);

                if (hwndFoundLicenseWarning > 0) then
                    if (CitrixWindowBringToTop(hwndFoundLicenseWarning)) then
                        CitrixKey(KEY_ENTER);  // Press ok
                        CitrixWaitForWindow(hwndFoundLicenseWarning,
                            EVENT_Destroy);
                        // wait for it to go away
                    end; // end waiting for window to top
                end; // end if we have a valid handle
            end; // if window has not been found yet

            nCount :=nCount+1;
            Wait 1.0;
        end; // while nCount

        MeasureStop("MyCitrixStartup");
        //
        // return true if we handled any one of these conditions
        //

        MyCitrixStartup2 := (hwndFoundLicenseWarning > 0)
            or (hwndICAHandle > 0) ;

          print("MyCitrixStartup "
            + " vUser:" + string(GetUserId())
            + " Waited " + string(nCount) + " of " + string(nMaxWait)
            + " hwndICAHandle=" + string(hwndICAHandle)
            + " hwndFoundLicenseWarning=" + string(hwndFoundLicenseWarning),
            OPT_DISPLAY_ERRORS , TEXT_GREEN );

end MyCitrixStartup;
親トピック: トラブルシューティング


.NET のサポート

Silk Performer での .NET サポートには、Web サービスのテスト、.NET Remoting オブジェクト、NUnit などが含まれます。

  • .NET Framework のサポート
    Silk Performer には、Web サービスや .NET コンポーネントをテストできる .NET Framework が付属しています。
  • .NET 内で .NET Framework 関数を使用する
    Silk Performer で .NET テスト コードを使用して最適な結果を得るには、.NET コード内から BDL 関数を呼び出します。
  • .NET 構成ファイル
    .NET ランタイム環境に影響を及ぼす構成ファイルの設定 (アセンブリのバインドや .NET Remoting の設定など) の概要を示します。
  • .NET Framework で Web Services および .NET Remoting オブジェクトをテストする
    .NET Framework および Silk Performer の Visual Studio .NET Add-Onを使用すると、Web サービスおよび .NET Remoting オブジェクトを簡単にテストすることができます。
  • .NET 用の SOAP Web サービスをテストする
    SOAP ベース Web サービスの基本および .NET でのテスト方法についての詳細を説明します。
  • Silk Performer .NET プロジェクトをセットアップする
    Silk Performer .NET プロジェクトをセットアップして、 Visual Studio .NET Add-On が提供する機能をサポートする Microsoft Visual Studio プロジェクトを生成します。
  • Microsoft Visual Studio で Silk Performer .NET プロジェクトを作成する
    Microsoft Visual Studio で .NET プロジェクトを正しく作成する方法に関する情報を提供します。
  • .NET でのメモリ使用量
    .NET CLR をホストしたり、.NET オブジェクトをロードする場合は、仮想ユーザー プロセス (コンテナ) に使用される追加のメモリが必要となります。
  • .NET のエラー メッセージ
    負荷テスト中に発生する可能性のあるエラー メッセージおよびその解決策を示します。
  • NUnit インテグレーション
    NUnit のテスト スクリプトを Silk Performer に統合する際の概要について説明します。
  • Silk Performer .NET Explorer
    Silk Performer .NET Explorer の概要について説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


.NET Framework のサポート

Silk Performer には、Web サービスや .NET コンポーネントをテストできる .NET Framework が付属しています。 このフレームワークには、一連の BDL (Benchmark Description Language) API 関数と Visual Studio .NET アドオンが含まれています。

Silk Performer .NET Framework のサポートの詳細については、『Silk Performer .NET Framework 開発者ガイド』を参照してください。

親トピック: .NET のサポート


.NET 内で .NET Framework 関数を使用する

Silk Performer で .NET テスト コードを使用して最適な結果を得るには、.NET コード内から BDL 関数を呼び出します。 .NET アセンブリ perfdotnetfw.dll は Silk Performer に付属しており、Silk Performer .Bdl クラスを実装します。ほとんどの BDL 関数が実装されています。
  1. .NET プロジェクトで、perfdotnetfw.dll への参照を追加します。 この DLL は、Silk Performer インストール ディレクトリにあります。
  2. Silk Performer の名前空間をインポートします (実装言語に応じて、以下の必要なコードを参照してください)。
    using Silk Performer; // C#
imports Silk Performer // VB.NET
  3. .NET コードで静的関数を使用します。

    例：

    Bdl.Print("This is a message from within a .NET Assembly");
    BDL クラスによって定義される関数は、.NET アセンブリを仮想ユーザーで実行する場合にのみ使用できます。 これは、perfrun.exe 関数 (仮想ユーザー プロセス) が呼び出されるためです。

    Bdf スクリプト例

    dcltrans
  transaction TMain
  var
hObject, hObject2 : number;
hReturn : number;
  begin
    DotNetSetString(hObject, "ConstrValue1");
    hObject := DotNetLoadObject("bin\\Release\\TestDriver.dll", "TestDriver.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\TestDriver.dll", "TestDriver.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetObject(hObject, hReturnValue);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
    DotNetFreeObject(hReturn);
  end TMain;

    .NET コード (C#) 例

    using System;
using Silk Performer;
namespace TestDriver
{
  public class TestClass
{

public TestClass(string sConstrValue)
{
Bdl.Print("Constructor called with param" + sConstrValue);
}

public TestClass()
{
Bdl.Print("Default Constructor called!");
}

public ParamClass TestMethod(double fParam, int nParam)
{
return new ParamClass(fParam, nParam);
}
}

  public class ParamClass
{
public double mfMember;
public int mnMember;

public ParamClass(double fParam, int nParam)
{
mfMember = fParam;
mnMember = nParam;
}

public ParamClass()
{
mfMember = 0.0;
mnMember = 0;
}
}
}
親トピック: .NET のサポート


.NET 構成ファイル

Microsoft .NET Framework では、Windows、Web、Internet Explorer ベースの .NET アプリケーションの構成ファイルを指定できます。 これらの構成ファイルには、.NET ランタイム環境に影響を及ぼす設定 (アセンブリのバインドや .NET Remoting の設定など) が含まれます。

Silk Performer の .NET Framework で .NET テスト ドライバを実行すると、Silk Performer Framework アセンブリのロードに必要な設定を使用して perfrun.exe.config と呼ばれる構成ファイルが自動的に作成され、Silk Performer の Web エンジンを経由したルーティングが可能になります。

このような構成ファイルを介してカスタム構成を提供するには、次の 2 つのオプションがあります。

  • 構成ファイルをランタイム時に .NET テスト ドライバにロードする。

  • 自動生成される perfrun.exe.config ファイルにマージされる構成キーを含むプロジェクト ディレクトリで app.config ファイルを作成する。

ランタイム時の構成

.NET Class Library には、構成ファイルからロードされる特定の .NET Remoting 設定を構成できるクラスが備えられています。 たとえば、次の構成ファイル スキーマがあるとします。

<configuration>
<system.runtime.remoting>
<application>
  <channels>
    <channel ref="http" port="2000" />
  </channels>
  <client url="http://remoteserver:2000">
    <activated type="RemoteDll.RemoteClass1, RemoteDll"/>
    <activated type="RemoteDll.RemoteClass2, RemoteDll"/>
  </client>
</application>
</system.runtime.remoting>
</configuration>

これをプロジェクト ディレクトリ内のファイルに保存し、データ ファイル セクションに追加すると、次のコードを使用してランタイム時に (多くの場合、Init トランザクションに対応するメソッドで) ロードできます。

RemotingConfiguration.Configure(Bdl.GetDataFilePath("vuser.config"));

アプリケーション構成ファイルで構成できる他の設定は、System.AppDomain などの .NET Framework の他のクラスで変更できます。 .NET ランタイム環境を変更できるクラスの詳細については、MSDN オンライン リファレンスを参照してください。

独自の構成ファイル

Silk Performer .NET Framework を使用してテストを実行すると、仮想ユーザー プロセスでホストされる .NET ランタイムの初期化に使用される構成ファイルが Silk Performer によって自動的に生成されます。 このファイルは perfrun.exe.config と呼ばれ、Silk Performer インストール ディレクトリに保存されます。 このファイルには、次のようなスキーマがあります。

<configuration>
<system.net>
...
</system.net>
<runtime>
...
</runtime>
</configuration>

この構成ファイルが生成されると、Silk Performer によってプロジェクト ディレクトリ内で app.config ファイルが検索されます。 ファイルが見つかると、ファイルの内容がランタイム ノードの直後にマージされます。 これは、必要な構成 XML 要素を app.config ファイルで定義できることを意味します。 ただし、ルート configuration タグまたは Silk Performer によって生成されるタグ (system.net または runtime) がファイルに存在しないことを確認する必要があります。

次に、.NET Remoting コンポーネントの構成ファイルの例を示します。

<system.runtime.remoting>
<application>
<channels>
  <channel ref="http" port="2000" />
</channels>
<client url="http://remoteserver:2000">
  <activated type="RemoteDll.RemoteClass1, RemoteDll"/>
  <activated type="RemoteDll.RemoteClass2, RemoteDll"/>
</client>
</application>
</system.runtime.remoting>
親トピック: .NET のサポート


.NET Framework で Web Services および .NET Remoting オブジェクトをテストする

.NET Framework および Silk Performer の Visual Studio .NET Add-Onを使用すると、Web サービスおよび .NET Remoting オブジェクトを簡単にテストすることができます。

Framework では、Web サービス/.NET Remoting オブジェクトをテストするために、次のオプションを提供しています。
  • 一般的な .NET 言語 (C# または VB.NET) を使用して Microsoft Visual Studio でテスト コードを作成する
  • Microsoft Visual Studio の Web サービス クライアント プロキシ生成ウィザードを利用する
  • .NET テスト ドライバで Web サービス呼び出しをコーディングする
  • .NET テスト ドライバを使用して負荷テストを実行する
  • Web サービス/.NET Remoting メソッドを呼び出す .NET によって生成された HTTP トラフィックは Silk Performer の Web エンジンを通してリダイレクトされるため、Silk Performer の Web エンジンの利点 (モデム シミュレーション、IP アドレスの多重化など) が使用可能になる
  • TrueLog Explorer を使用して HTTP トラフィック (SOAP、XML、およびバイナリ) を検討する
  • Web サービスをテストする
    Web サービスをテストする方法について説明します。
  • .NET Remoting オブジェクトをテストする
    .NET Remoting オブジェクトをテストする方法について説明します。
親トピック: .NET のサポート


Web サービスをテストする

  1. Silk Performer .NET プロジェクトを作成します。 Silk Performer (プロジェクト タイプ：Web サービス/.NET) からプロジェクトを作成するか、Visual Studio .NET から Silk Performer プロジェクト ウィザードを起動して (ファイル > 新規作成 > プロジェクト)、新しい .NET プロジェクトを作成します。
  2. Web サービス クライアント プロキシを作成します。 Visual Studio .NET の Web サービス クライアント プロキシ ウィザードを使用して、クライアント プロキシ クラスを生成します。
    1. Add Web Reference を呼び出します。
    2. アドレス フィールドに Web サービスの URL を挿入します。
    3. 参照の追加 をクリックします。 Web サービス名を使用して、プロキシ クラスが生成されます。 名前空間は、サービスがホストされている Web サーバー名になります。 たとえば、URL が http://localhost/MyWebService/Service1.asmx の場合、プロキシ クラスの完全名は localhost.Service1 になります。
  3. Web サービス呼び出しをコーディングします。 プロキシ クラスのオブジェクトをインスタンス化し、いずれかのトランザクションで呼び出しを行います。 プロキシをテスト クラスのメンバ変数として定義し、それを Init トランザクションでインスタンス化して、Main トランザクションで呼び出すという設計をお勧めします。 例 (C#)：
    using System;
using Silk Performer;
namespace SPProject1
{
[VirtualUser("VUser")]
public class VUser
{
public localhost.Service1 mService;

public VUser()
{
}

[Transaction(ETransactionType.TRANSTYPE_INIT)]
public void TInit()
{
mService = new localhost.Service1();
}

[Transaction(ETransactionType.TRANSTYPE_MAIN)]
public void TMain()
{
int nRetParam = mService.ServiceCall1("Testparam");
Bdl.Print("Return value of ServiceCall1: " +
nRetParam.ToString());
mService.ServiceCall2(nRetParam);
}

[Transaction(ETransactionType.TRANSTYPE_END)]
public void TEnd()
{
}
}
}
  4. TryScript を実行します。

    Silk Performer/Try Script を呼び出すか F8 キーを押して、Try Script を起動します。戻り値は、Bdl.Print メソッド経由で仮想ユーザー出力ウィンドウに表示されます。

    TrueLog の Main トランザクションにある 2 つのノードは、Web サービス呼び出しを担当した SOAP HTTP トラフィックを表します。 デフォルトでは、すべての HTTP トラフィックが Silk Performer Web エンジンを通してリダイレクトされるため、TrueLog で出力が使用可能になります。 Web の設定 ダイアログ を使用して、リダイレクトをオフにしたり、特定の Web サービス クライアント プロキシ クラスに対して有効にすることができます。

  5. Silk Performer で作業を継続します。 .NET テスト ドライバの実装が完了したら、Silk Performer での作業および負荷テストの実行を継続できます。 Silk Performer では、複数のエージェントに分散された複数のユーザーで負荷テストを実行できます。 Web サービスを低速モデムを通して呼び出した場合のパフォーマンスをテストしたり、多数のユーザーがサービスを同時に呼び出した場合の Web サーバーのパフォーマンスをテストして、Web エンジン機能 (モデム シミュレーション、IP アドレスの多重化など) を利用してください。
親トピック: .NET Framework で Web Services および .NET Remoting オブジェクトをテストする


.NET Remoting オブジェクトをテストする

  1. リモート オブジェクト アセンブリを参照します。 .NET Remoting オブジェクトをテストするには、リモートにするオブジェクトを定義する .NET アセンブリを参照する必要があります。 これには、クラスを参照する DLL に参照を追加します。
  2. テスト ドライバをリモート クライアントとして構成します。 どのクラスをリモートにするかを .NET に指示する必要があります。 この最も簡単な方法は、.config ファイルで構成を行うことです。 リモート クライアント構成を定義する .config ファイルの詳細については、MSDN を参照してください。

    以下にファイル例を示します。

    <configuration>
 <system.runtime.remoting>
 <application>
 <channels>
 <channel ref="http" port="2000" />
 </channels>
 <client url="http://remoteserver:2000">
 <activated type="RemoteDll.RemoteClass1, RemoteDll" />
 <activated type="RemoteDll.RemoteClass2, RemoteDll" />
 </client>
 </application>
 </system.runtime.remoting>
 </configuration>

    この構成ファイルは、ランタイム時に (理想としてはテスト ドライバの Init トランザクションで) ロードする必要があります。 負荷テストの実行時にすべてのエージェントでこのファイルを確実に使用できるようにするには、プロジェクト依存ファイル (メニュー: Silk Performer/Add Dependencies (依存関係の追加)) に追加します。 Bdl.GetDataFilePath メソッドを使用して、正しいパスを取得できます。

    以下にリモート オブジェクトをリモートにしてインスタンス化するコード例を示します。

    using System;
using Silk Performer;
using System.Runtime.Remoting;
using RemoteDll;
namespace SPProject1
{
[VirtualUser("VUser")]
public class VUser
{
public VUser()
{
}

[Transaction(ETransactionType.TRANSTYPE_INIT)]
public void TInit()
{
 RemotingConfiguration.Configure(Bdl.GetDataFilePath("vuser.config"));
 }

[Transaction(ETransactionType.TRANSTYPE_MAIN)]
public void TMain()
{ // .NET Runtime knows that objects of type RemoteDll.RemoteClass1 are remoted
 RemoteClass1 rm1 = new RemoteClass1();
 rm1.SomeMethod("param");
}

[Transaction(ETransactionType.TRANSTYPE_END)]
public void TEnd()
{
}
}
}

    HTTP が転送プロトコルとして構成されているため、.NET Remoting 呼び出し用に生成されたトラフィックを TrueLog Explorer を介して表示することができます。

親トピック: .NET Framework で Web Services および .NET Remoting オブジェクトをテストする


.NET 用の SOAP Web サービスをテストする

Web サービスとは Web 上で利用可能なサービスのことであり、呼び出すことで結果が返されます。 他の標準もありますが、Web サービスで広く使用されているのが SOAP (Simple Object Access Protocol) であり、W3C でも採用されています。

このセクションでは、SOAP ベース Web サービスの基本およびテスト方法についての詳細を説明します。

  • Simple Object Access Protocol (SOAP)
    Simple Object Access Protocol (SOAP) について説明します。
  • SOAP over HTTP ベースの Web サービスをテストする
    SOAP over HTTP ベースのサービスをテストする際に使用できる 3 つのオプションについて説明します。
  • Silk Performer .NET Explorer
    Silk Performer の .NET Explorer を使用して Web サービスをテストする方法について説明します。
  • Silk Performer .NET Framework
    Silk Performer の .NET Framework では、開発者と QA 担当者はそれぞれ完全に特化した環境で作業することができ、開発とテストにかける労力を調整することができます。
  • 外部の参考文献
    セクションで使用される参考文献を示します。
親トピック: .NET のサポート
親トピック: .NET テストのサポート


Simple Object Access Protocol (SOAP)

Simple Object Access Protocol (SOAP) は XML ベースの軽量プロトコルで、非集中的な分散アプリケーション環境で情報を交換するために使用されます。 クライアントとサーバーが同じメソッドを使用していれば、アプリケーションに必要な任意の方法で SOAP メッセージを転送できます。 最新の仕様では、単一の転送プロトコルバインド (HTTP) のみが記述されています。

SOAP はインターネット アプリケーションの世界に完全に合致しており、将来的にはアプリケーション サービスのためのインターネットの相互運用性を改善すると考えられています。 基本的に、SOAP はメソッド呼び出しを XML 文字列にパッケージ化し、HTTP を介してコンポーネント インスタンスに配信します。

SOAP XML ドキュメントはルート要素、値を持つ子要素、その他の仕様に構造化されます。 まず、リクエスト (呼び出されるメソッドおよびパラメータ) が含まれる XML ドキュメントが送信されます。 サーバーは、結果が含まれる対応する XML ドキュメントで応答します。

SOAP は Microsoft の技術を基盤にしていません。 これは、UserLand、Ariba、Commerce One、Compaq、Developmentor、HP、IBM、IONA、Lotus、Microsoft、SAP が起草したオープンな基準です。 SOAP 1.1 は、2000 年 5 月の W3C で、公式のインターネット標準として紹介されました。 Microsoft は SOAP 最大の支持者の 1 つであり、SOAP は標準のインターフェイスとして .NET アーキテクチャに組み込まれました。

SOAP スタック (クライアント側の SOAP 標準の実装) は、ライブラリーと、ヘルパー関数を提供するクラスで構成されます。 Web サービス テストの大きな課題は、相互に互換性のない SOAP スタック実装が多数存在することです。 SOAP はプラットフォームや技術に依存しないことを目的としていますが、実際は異なります。 ただし、.NET で記述されている Web サービスは常に .NET クライアントと互換性を持ちます。つまり、これらは同じ SOAP スタックまたはライブラリーを使用しています。 しかし、.NET Web サービスをテストする場合は、サービスが他の SOAP スタック実装 (Java SOAP スタックなど) と互換性を持つかどうかを確認し、相互操作性の問題を回避する必要があります。

SOAP クライアント リクエストは、HTTP POST パッケージまたは M-POST パッケージにカプセル化されます。 次の例は、インターネット仕様案の抜粋です。

呼び出しのサンプル

POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml;
charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<?xml version="1.0"?>
<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetLastTradePrice xmlns:m="Some-URI">
      <symbol>DIS</symbol>
    </m:GetLastTradePrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

コードの最初の 4 行は標準の HTTP です。 POST は HTTP 動詞であり、すべての HTTP メッセージに必要です。 Content-Type フィールドと Content-Length フィールドは、ペイロードが含まれるすべての HTTP メッセージに必要となります。 コンテンツ タイプ text/xml は、ペイロードがサーバー、またはアプリケーション ヘッダーをスキャンすることができるファイアウォールへの XML メッセージであることを表します。

追加の HTTP ヘッダー SOAPAction は HTTP ベースの SOAP メッセージに必須であり、それを使用することで SOAP HTTP リクエストの意図を伝えることができます。 値は URI であり、意図を指定します。 SOAPAction ヘッダー フィールドのコンテンツをファイアウォールなどのサーバーが使用すると、HTTP 内の SOAP リクエスト メッセージを適切にフィルタすることができます。 ヘッダー フィールドが空の文字列 ("") の場合、SOAP メッセージの意図は HTTP リクエスト URI によって提供されることを表します。 つまり、値がないことは、メッセージの意図の提示がないことを表します。

XML コードは単純です。 要素 Envelope および Body が汎用のペイロード パッケージ化メカニズムを提供します。 要素 GetLastTradePrice には symbol と呼ばれる要素が含まれ、そこには証券コードが含まれます。 このリクエストの目的は、特定の株式 (この場合はディズニー (DIS)) の最新の取り引き価格を取得することにあります。

このメッセージを送信するプログラムに必要なのが、SOAP 準拠の XML メッセージにリクエストをフレーム化する方法と、HTTP を介してそれを送信する方法を理解することです。 次の例では、プログラムに株式価格のリクエストのフォーマット化の方法を指示しています。 メッセージを受信する HTTP サーバーは、HTTP ヘッダー SOAPAction を認識することで、それが SOAP メッセージであることを理解します。 その後サーバーがメッセージを処理します。

SOAP は 2 種類のメッセージ、呼び出しおよびレスポンスを定義しており、それによりクライアントはリモート プロシージャをリクエストし、サーバーはそのようなリクエストに応答することができます。 前述の例は、呼び出しの例です。 次の例は、呼び出しに対するレスポンスです。

レスポンスのサンプル

HTTP/1.1 200 OK
Content-Type: text/xml;
charset="utf-8"
Content-Length: nnnn
<?xml version="1.0"?>
<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  <SOAP-ENV:Body>
    <m:GetLastTradePriceResponse xmlns:m="Some-URI">
      <Price>34.5</Price>
    </m:GetLastTradePriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

コードの最初の 3 行は標準の HTTP です。 最初の行は前の POST リクエストに対するレスポンス コードを表しており、2 行目と 3 行目はコンテンツ タイプを、4 行目がレスポンスの長さを表しています。

XML ヘッダーで、実際の SOAP ペイロードが囲まれています。 XML 要素 GetLastTradePriceResponse には、取り引き価格のリクエストに対するレスポンスが含まれています。 子要素は Price であり、リクエストに返された値を表しています。

  • Java Explorer
    Java Explorer がサポートを提供するテクノロジのリストを示します。
  • Java フレームワーク
    Java フレームワークによって Java プログラム言語で仮想ユーザーの動作を定義してシミュレートする強力な手段が提供されることを説明します。
親トピック: .NET 用の SOAP Web サービスをテストする
親トピック: Java 用の SOAP Web サービスをテストする


SOAP over HTTP ベースの Web サービスをテストする

Silk Performer には、SOAP over HTTP ベースのサービスをテストする際に使用できる 3 つのオプションが用意されています。

  • HTTP トラフィックを記録および再生する
  • Silk Performer .Net Framework と組み合わせた .NET Explorer
  • Silk Performer Java Framework と組み合わせた Java Explorer

これらのオプションの中で、各ユーザーのニーズに最適なものは、ユーザーの環境と前提条件によって決まります。

  • HTTP トラフィックを記録および再生する
    HTTP トラフィックを記録および再生して、SOAP over HTTP ベースの Web サービスの負荷テストを行う方法について説明します。
親トピック: .NET 用の SOAP Web サービスをテストする
親トピック: Java 用の SOAP Web サービスをテストする


HTTP トラフィックを記録および再生する

HTTP での SOAP プロトコルの記録は、ブラウザで実行される Web アプリケーションの記録と同じくらいに簡単です。記録するアプリケーションは、SOAP Web サービス呼び出しを実行するアプリケーションです。これはクライアント アプリケーションか、Web アプリケーションそのものの一部のいずれかになります。

  1. 新しい XML/SOAP プロジェクトを作成する
    新しい XML/SOAP プロジェクトを作成して、HTTP トラフィックの記録と再生を行います。
  2. 記録プロファイルを作成する
    アプリケーションの記録プロファイルを作成して、HTTP トラフィックを記録および再生します。
  3. スクリプトの記録
    HTTP トラフィックを再生するためのスクリプトを記録します。
  4. スクリプトのカスタマイズ
    記録したスクリプトをカスタマイズして HTTP トラフィックを再生します。
  5. スクリプトの再生
    SOAP over HTTP ベースの Web サービスをテストするスクリプトを再生します。
親トピック: SOAP over HTTP ベースの Web サービスをテストする


新しい XML/SOAP プロジェクトを作成する

HTTP トラフィックを記録および再生して HTTP ベースの Web サービスで SOAP のテストを行う場合、最初に Web サービス > XML/SOAP タイプの新しい Silk Performer プロジェクトを作成する必要があります。
  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーから、Web Services > XML/SOAP を選択します。 このアプリケーション タイプでは、プロファイル設定が自動的に設定されるため、SOAP ベースのアプリケーションで使用される SOAPAction HTTP ヘッダーを、Web サービスを呼び出す際に元に戻すことができます。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: HTTP トラフィックを記録および再生する
次のトピック: 記録プロファイルを作成する


記録プロファイルを作成する

HTTP トラフィックを記録および再生して、HTTP ベースの Web サービスで SOAP のテストを行う場合、記録するクライアント アプリケーションの記録プロファイルを作成する必要があります。
  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 設定 をクリックします。 システム設定 - Recorder ダイアログ ボックスが表示されます。
  3. システム グループ ボックスで、Recorder をクリックします。 記録プロファイル ページが開きます。
  4. 追加 をクリックして、新しい記録プロファイルをリストに追加します。 記録プロファイル ダイアログ ボックスが開きます。
  5. プロファイル名 テキスト ボックスに、記録プロファイルの名前を入力します。 たとえば、Internet Explorer と入力します。
  6. アプリケーション パス テキスト ボックスの隣にある 参照 ... をクリックして、アプリケーションの実行可能ファイルへのパスを選択します。 たとえば、C:\Program Files\Internet Explorer\Explorer.exe などです。
  7. 作業ディレクトリ を定義します。 たとえば、C:\Program Files\Internet Explorer などです。
  8. プログラムの引数 を定義します。 たとえば、about:blank です。
  9. アプリケーションの種類 リスト ボックスから、アプリケーション タイプを選択します。 たとえば、MS Internet Explorer を選択します。
  10. [プロトコルの選択] 領域で、使用するプロトコルに対応するチェック ボックスをオンにします。 たとえば、Web チェック ボックスをオンにします。
  11. WinSock 記録の記録プロファイルを設定するには、Web の設定 をクリックすると、Recorder で Web および TCP/IP ベースのトラフィックをキャプチャするために使用するメソッドを選択できます。
  12. OK をクリックします。
親トピック: HTTP トラフィックを記録および再生する
前のトピック: 新しい XML/SOAP プロジェクトを作成する
次のトピック: スクリプトの記録


スクリプトの記録

作成した記録プロファイルでスクリプトを記録します。クライアント アプリケーションとやり取りすると、Recorder が HTTP/HTTPS を介して実行されるすべての SOAP リクエストを記録します。完了したら、アプリケーションを閉じ、記録されたスクリプトを保存します。
  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 記録に使用するブラウザに応じて、記録プロファイル リストに一覧表示されたブラウザから 1 つを選択します。
  3. URL フィールドに、記録する URL を入力します。
  4. 記録の開始 をクリックします。 [Silk Performer Recorder - [<プロファイル名>]] ダイアログが最小化されて表示され、クライアント アプリケーションが起動されます。
  5. 記録中に発生したアクションのレポートを表示するには、GUI サイズの変更 をクリックして [SilkPerformer Recorder - [<プロファイル名>]] ダイアログを最大化します。 [SilkPerformer Recorder - [<プロファイル名>]] ダイアログが最大化され、アクション ページに表示されます。
  6. クライアント アプリケーションとやり取りします。 Recorder が、HTTP/HTTPS を介して実行されるすべての SOAP リクエストを記録します。
  7. 記録を終了するには、記録停止 をクリックします。
  8. .bdf ファイルの名前を入力し、保存します。キャプチャ ファイル ページが表示されます。スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。
親トピック: HTTP トラフィックを記録および再生する
前のトピック: 記録プロファイルを作成する
次のトピック: スクリプトのカスタマイズ


スクリプトのカスタマイズ

記録された SOAP リクエストそれぞれには、 WebHeaderAdd と WebUrlPostBin API 呼び出しが含まれます。

Web サービスの呼び出しごとに、入力パラメータを手動でスクリプトを変更してカスタマイズしたり、 TrueLog Explorer の便利な機能を使用してカスタマイズを行うことができます。 これを行うには、スクリプトの試行を実行します。 それから、XML コントロールを使用して、入力パラメータを表す XML ノードをカスタマイズします。

SOAP リクエストのサンプル

WebHeaderAdd("SOAPAction", "\"http://tempuri.org/Login\"");
WebUrlPostBin(
  "http://localhost/MessageWebService/MessageService.asmx",
  "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
  "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/
\"
    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
    "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
    "<soap:Body>"
      "<Login xmlns=\"http://tempuri.org/\">"
        "<sUsername>myuser</sUsername>"
        "<sPassword>mypass</sPassword>"
      "</Login>"
    "</soap:Body>"
  "</soap:Envelope>", STRING_COMPLETE, "text/xml; charset=utf-8");
親トピック: HTTP トラフィックを記録および再生する
前のトピック: スクリプトの記録
次のトピック: スクリプトの再生


スクリプトの再生

スクリプトのカスタマイズを完了したら、ベースライン識別の一環としてのスクリプトの試行を実行したり、テストでスクリプトを再生できます。

スクリプトを再生する方法を選択します。 以下のいずれかを実行できます。
  • スクリプトの試行の実行
  • ベースライン識別の一環としてのスクリプトの再生
  • テストでのスクリプトの再生

Web サービスの呼び出しは、Web API 関数として実行されるので、詳細なプロトコル固有の統計情報を含む、任意の Web アプリケーションのテスト時に取得できるのと同様の測定結果を得ることができます。

親トピック: HTTP トラフィックを記録および再生する
前のトピック: スクリプトのカスタマイズ


Silk Performer .NET Explorer

このセクションでは、Silk Performer の .NET Explorer を使用して Web サービスをテストする方法の概要を提供します。 .NET Explorer は、ポイント＆クリック インターフェイスを通してテスト ケースを作成することができるツールです。 .NET Explorer は、次の .NET テクノロジをサポートします。
  • SOAP Web サービス
  • .NET Remoting
  • .NET コンポーネント (その他のクラス)

.NET Explorer を使用してテスト シナリオを作成することができます。 そして、テスト シナリオを使用して、 .NET Explorer でコンポーネント テストを実行したり、テスト シナリオを Silk Performer にエクスポートしてテストを行うことができます。

さらに、 .NET Explorer を使用して C# または VB.NET のテスト ドライバを生成することもできます。 テスト ドライバにはテスト シナリオで定義したすべてのテスト ロジックが含まれます。 テスト ドライバを Visual Studio .NET にエクスポートして、Visual Studio .NET 上で直接カスタマイズしてスクリプトの試行を実行することができます。カスタマイズし終えたら、 Silk Performer でテストを実行することができます。

.NET Explorer では常にプロジェクトが必要です。 前のバージョンではいつでも現在のプロジェクトを保存することができたので、プロジェクトは必要ありませんでした。 .NET Explorer を起動すると、新しいプロジェクトを作成するか、既存のプロジェクトを最近使ったファイルのリストから選択するか、 .NET Explorer プロジェクト ファイル (.NEF 拡張子) を探して開くよう求められます。

.NET Explorer の詳細については、 .NET Explorer ヘルプを参照してください。

  • 要件
    SOAP ベースの Web サービスをテストするための要件について説明します。
  • WSDL ファイルのロード
    WSDL ファイルのロード方法について説明します。
  • Web サービスを呼び出す
    Web サービスを呼び出す方法を説明します。
  • 最後の手順
    .NET Explorer を使用した Web サービスのテストを完了する方法について説明します。
親トピック: .NET 用の SOAP Web サービスをテストする


要件

SOAP ベースの Web サービスをテストする唯一の要件は、Web サービスの公開メソッドの説明です。 このような説明は Web Service Description Language (WSDL) ファイルにあります。通常、このファイルは Web サービスのエンド ポイントを参照した際や、そのようなファイルを取得するための特別の HTTP GET パラメータを指定した際に生成されます。

ASP.NET Web サービスの場合は、Web サービスの URL エンド ポイントに ?WSDL を追加すると、Web サービス用の WSDL ファイルが返されます。 他の SOAP スタック実装では、同じアプローチを使用することも、個別の URL で WSDL ファイルが提供されることもあります。

親トピック: Silk Performer .NET Explorer


WSDL ファイルのロード

.NET Explorer には Load File Wizard があり、そのガイドに従って必要な手順を実行することで、WSDL ファイルをロードし、Web サービス メソッドを起動します。 .NET Explorer でこのウィザードをアクティブにするには、ツールバーの Start Here をクリックします。

ブラウザのアドレス バーを使用して、.NET Remoting または他の .NET クラスが含まれる WSDL ファイルまたは .NET アセンブリをロードすることもできます。 WSDL ファイルへの URL またはパスを指定して Load をクリックします。

Microsoft .NET Framework は、WSDL ファイルをロードし、WSDL ファイルに定義されている Web サービスのクライアント プロキシを生成するクラスを提供します。 .NET Explorer はこの機能を使用して Web サービス プロキシ用の C# または VB.NET コードを生成し、このコードを一時 .NET アセンブリにコンパイルします。このアセンブリは、 Web Service Proxies として、 .NET Explorer > Loaded Components > References に表示されます。

.NET Explorer は、Microsoft .NET Framework を使用してプロキシを生成するため、.NET Explorer は Microsoft .NET Framework の欠点と制限を共有します。 プロキシを生成する際の最も重要な問題は、他のベンダーによって作成される SOAP スタック実装の一部が、W3C 規格に準拠していないことです。 この結果、WSDL ファイルをロードしようとしたときに問題が発生することがあります。 この問題は、WSDL ファイルを手動で編集することにより回避できます。これでファイルが Microsoft .NET Framework によって認識されるようになります。 WSDL ファイルを編集するには、WSDL に習熟している必要があります。 詳細については、http://www.w3.org を参照してください。

.NET Explorer には System.Web.Services.Protocols.SoapHttpClientProtocol から派生した Web サービス プロキシ ファイルが Web Service Proxies の下の References メニューに表示されます。 通常は、C# または VB.NET コードを記述する場合、プロキシ クラスのインスタンスとプロキシ上の呼び出しメソッドをインスタンス化する必要があります。 .NET Explorer は、プロキシ クラスのインスタンスを自動的にインスタンス化することにより、この必要がなくなります。 コンストラクタを呼び出して、プロキシ クラスのインスタンスを作成することはできません。 .NET Explorer は、Web サービスを、静的メソッドを提供する静的オブジェクトのように取扱います。

Web サービスのメソッドが、複合オブジェクトをパラメータとして選択すると、これらのパラメータのクラスは WSDL ファイルで定義され、.NET Explorer にロードされます。 このようなクラスは Web サービスのプロキシ クラスではありません。 Web サービスのプロキシ クラスはメンバを持つシンプルクラスで、 Class メニュー ツリーの Other Classes ツリー ノードに列挙されます。

メニュー ツリーのプロキシ クラスをダブルクリックし、 Input Data Properties ペインで接続ウィザードを開いて、複数の接続関係プロパティを設定することができます。 これらのプロパティは、内部のプロキシ インスタンスの対応するプロパティに設定されます。

プロジェクトを .NET プロジェクトとして Visual Studio .NET または直接 Silk Performer にエクスポートする際に、Web サービス プロキシの基本クラスが SilkPerformer.SPSoapHttpClientProtocol で置き換えられます。 この置き換えの理由は、基本クラスを交換すると、Silk Performer .NET Framework が Silk Performer Web エンジンからルーティングされる Web サービス呼び出しについてより詳細なタイマを生成するためです。 この動作を実行しない場合、プロジェクトを Visual Studio .NET にエクスポートし、基本クラスを手動で元に戻すか、Silk Performer メニューから Web Service ダイアログ ボックスを使用し、プロキシ クラスのルーティング用オプションを選択解除します。

これで、テストする Web サービスの WSDL ファイルをロードするか、リスト ボックスから WSDL ファイルを選択できるようになりました。

親トピック: Silk Performer .NET Explorer


Web サービスを呼び出す

WSDL ファイルの読み込みに成功したら、Web サービスが提供するメソッドを Web サービス プロキシ クラスのツリー ノードを展開して調べることができます。

メソッドの 1 つをクリックすると、Web サービスの呼び出しに必要な入力パラメータや入力ヘッダー情報を確認できます。 入力データは、プリミティブ型のデフォルトの静的な値を変更したり、グローバル、ローカル、ランダム変数を使ってカスタマイズすることができます。 詳細については、 .NET Explorer ヘルプ および Silk Performer ヘルプ を参照してください。

あるメソッドが Web サービスに対して初めて呼ばれるときに、プロキシ クラスの内部インスタンスがインスタンス化されます。 Cookie コンテナを保持するプロパティがプロキシ クラスにあります。Cookie を処理する Web サービスを呼び出すことができるように、このプロパティは新しい Cookie コンテナで初期化されます。

その後、.NET Explorer は SOAP ヘッダーのすべての定義済みの値を、プロキシ クラスの対応するメンバー フィールドに設定します。 そして、入力パラメータに対して定義されたすべての値を持つパラメータ リストが作成されます。 このリストを使用して、Web サービス プロキシ オブジェクトのメソッドが呼び出されます。

Microsoft .NET Framework にはフック機構が備わっており、 .NET Explorer クライアントと Web サーバー間でやりとりされるトラフィックを .NET Explorer がキャプチャすることができます。 メソッド呼び出しの後に、 Show Traffic ダイアログ ボックスでトラフィックを確認することができます。 Web サービスおよび .NET Remoting 呼び出しそれぞれで、ダイアログ ボックスを開くことができます。

この機能は、クライアントとサーバー間でキャプチャした Web サービスの呼び出しそれぞれに対して WebPagePost を持つ BDL Web スクリプトを生成するために使用することもできます。

返り値と SOAP ヘッダー情報はメソッド呼び出しが成功したときに表示されます。例外が発生すると、例外テキストがメッセージ ボックスに表示されます。 現在、エラーをスローするメソッド呼び出しをテスト シナリオに追加することはできません。これは、 .NET Explorer は返り値の情報を必要とするためです。

親トピック: Silk Performer .NET Explorer


最後の手順

Web サービスの呼び出し後に、変数に戻り値を格納したり、これらの値に対して検証を定義することができます。

テスト シナリオの定義が完了したら、 .NET Explorer をそのまま使い続けて、 機能テストとしてテスト シナリオを使用することができます。あるいは、Visual Studio .NET や Silk Performer にプロジェクトをエクスポートして、生成したコードをさらにカスタマイズして回帰テストを実行することもできます。

テスト シナリオに Web サービスの呼び出しのみが含まれている場合にのみ、BDL Web プロジェクトにエクスポートできます。これは、各 Web サービスの呼び出しに対して WebPagePost ステートメントのみが生成されるためです。Web サービスの呼び出し以外の呼び出し (たとえば、他の .NET オブジェクトへの呼び出し) が含まれている場合、 これらの呼び出しは Web スクリプトに含まれないため、エクスポートしたスクリプトはいくつかのメソッド呼び出しが不足しているために、 .NET Explorer で定義した通りに動作 しない可能性があります。

Web サービスの呼び出しのみがあり、サーバーの SOAP スタックをテストしたい場合にのみ、BDL Web プロジェクトにエクスポートします。 Silk Performer でスクリプトを実行する場合は、.NET クライアント SOAP スタックは含まれません。 Silk Performer Web エンジンは、 .NET Explorer で使用された SOAP エンベロープのみを送信します。

.NET クライアントもテストしたい場合は、プロジェクトを Silk Performer .NET プロジェクトにエクスポートしてください。 このプロジェクト タイプは、生成した .NET テスト コードを .NET アセンブリにコンパイルします。この .NET アセンブリは、 .NET Explorer によって生成される BDL スクリプトから呼び出すことができます。

.NET Explorer によって生成された .NET コードをさらにカスタマイズしたい場合は、プロジェクトを Visual Studio .NET にエクスポートできます。 プロジェクトをエクスポートすると、Visual Studio .NET 内で生成したテスト コードに変更を加えてスクリプトの施行を実行することができます。 カスタマイズを完了した後で、プロジェクトを Silk Performer にエクスポートして、テストを続行することができます。

親トピック: Silk Performer .NET Explorer


Silk Performer .NET Framework

Silk Performer の .NET Framework では、開発者と QA 担当者はそれぞれ完全に特化した環境で作業することができ、開発とテストにかける労力を調整することができます。開発者は Visual Studio で作業し、QA 担当者は Silk Performer で作業します。つまり、新しいツールを学ぶ必要がありません。Silk Performer の .NET Framework によって、QA と開発の間の効率的で密接な統合が促されます。Silk Performer .NET Framework (.NET Framework) と .NET Add-On を使うと、.NET 内から簡単に Web サービスにアクセスすることができます。Microsoft Visual Studio は、ウィザードを提供し、Web サービスの URL を指定することができます。Microsoft Visual Studio は、Web サービスのメソッドを呼び出す Web サービス クライアント プロキシを作成することもできます。

  • 新しい Silk Performer .NET プロジェクトを作成する
    Silk Performer または Visual Studio .NET を使用して、新しい Silk Performer .NET プロジェクトを作成します。
  • Web サービス クライアント プロキシを作成する
  • クライアント プロキシ オブジェクトをインスタンス化する
    クライアント プロキシ オブジェクトをインスタンス化する方法について説明します。
  • Web サービスのメソッドを呼び出す
    Web サービスのメソッドを呼び出す方法を説明します。
  • Web サービス トラフィックのルーティング
    Silk Performer .NET Framework が、 Silk Performer Web エンジンを通して .NET コンポーネントによって生成された Web トラフィックをルーティングできることを説明します。
  • 結果を検討する
    実行した負荷テストの結果について説明します。
  • Testing .NET Components
    Explains how to use Silk Performer’s Visual Studio .NET Add-On for testing .NET Components.
  • Understanding the .NET Framework Platform
    .NET Framework is a powerful programming platform that enables developers to create Windows-based applications.
親トピック: .NET 用の SOAP Web サービスをテストする
親トピック: .NET Explorer ヘルプ
親トピック: .NET Framework Developer Guide


新しい Silk Performer .NET プロジェクトを作成する

新しい Silk Performer .NET プロジェクトを作成するには、 Web Services > .NET Explorer アプリケーションの種類のプロジェクトを Silk Performer で作成するか、Visual Studio .NET の Silk Performer .NET プロジェクト ウィザードを使用して作成することができます。
どちらのアプローチを使っても、次の 3 つの実装言語のうちの 1 つを選択することができます。
  • C#
  • VB.NET
  • C++

.NET プロジェクト ウィザードのいずれか 1 つを Visual Studio .NET で選択した場合、 Silk Performer 仮想ユーザーの init、main、end トランザクションに対応する 3 つのメソッドが定義されたテンプレート クラスを使って新しいプロジェクトが作成されます。

.NET テスト ドライバを別の言語で開発するには、選択した言語の空のプロジェクトを作成してから、次のステップを実行します。

  1. 参照に perfdotnetfw.dll を追加します。 この DLL は、 Silk Performer インストール ディレクトリにあります。
  2. 新しいクラスをプロジェクトに追加します。
  3. VirtualUser カスタム属性をクラスに追加します。
  4. ユーザー トランザクションとして機能するパブリック メンバー関数をクラスに追加します。
  5. Transaction 属性を作成した関数に追加し、対応するトランザクション タイプを指定します。
    • init
    • main
    • end
親トピック: Silk Performer .NET Framework


Web サービス クライアント プロキシを作成する

Visual Studio .NET は、ウィザードを使って Web サービス クライアント プロキシを生成することによって、Web サービス メソッドを呼び出すことができます。

プロジェクト > Web 参照の追加 を選択してウィザードを開始します。

  1. ウィザードを開始するには、 プロジェクト > Web 参照の追加 をクリックします。
  2. 対応するテキスト ボックスに Web サービスの URL を入力し、 Enter を押します。 たとえば、 「http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx?WSDL」と入力します。
  3. URL から WSDL ドキュメントを読み込むことができた場合、 参照の追加 をクリックします。 ウィザードは名前空間にプロキシ クラスを生成します。名前空間は、サービスをホストする Web サーバーの名前を逆にしたものです。
プロジェクトを調べて、クラスが生成されているかどうか確認します。 Web サービスごとに、そして Web サービスのメソッドが使用するすべての複合データ型がクラスとして表されます。 つまり、上記の URL の場合、 Web サービスである Service1 と複合パラメータである User があります。
親トピック: Silk Performer .NET Framework
親トピック: Testing Web Services With Microsoft Visual Studio


クライアント プロキシ オブジェクトをインスタンス化する

.NET テスト ドライバのパブリック メンバーとしてクライアント プロキシ クラスの変数を宣言して、クライアント プロキシ オブジェクトをインスタンス化することができます。 変数は、コンストラクタ、または init トランザクション内でインスタンス化されます。 クラスが生成される名前空間の最初の部分はプロジェクトの名前でデフォルトの名前空間です。

例

DotNetProject という名前のプロジェクトを作成した場合、変数宣言は次のようになります。
[VirtualUser("Vuser")]
public class Vuser
{
  public DotNetProject.com.borland.demo.Service1 mService;
  [Transaction(Etranstype.TRANSTYPE_INIT)]
  public void TInit()
  {
    mService = new DotNetProject.com.borland.demo.Service1();
  }
}
親トピック: Silk Performer .NET Framework
親トピック: Testing Web Services With Microsoft Visual Studio


Web サービスのメソッドを呼び出す

Web サービスによって公開されているすべてのメソッドが、プロキシ オブジェクトでも利用できます。プロキシ オブジェクトによって共有されるメソッドは、対応する WSDL と同じ名前を使用します。 Web サービスのメソッド呼び出しは、 main トランザクションで行われます。

例

[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain()
{
  string sReturn = mService.echoString("Test");
  Bdl.Print(sReturn);
}

生成された BDL スクリプトから Web サービスの呼び出しをカスタマイズするには、属性やメソッド パラメータを使用して、BDL と .NET 間でのデータをやりとりできるようにする必要があります。

例

[Transaction(Etranstype.TRANSTYPE_MAIN)]
[TestAttribute("EchoInput", "Test")]
public void TMain()
{
  string sReturn = mService.echoString(Bdl.AttributeGet("EchoInput"));
  Bdl.Print(sReturn);
}
または
[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain(string sEcho)
{
  string sReturn = mService.echoString(sEcho);
  Bdl.Print(sReturn);
}
親トピック: Silk Performer .NET Framework
親トピック: Testing Web Services With Microsoft Visual Studio


Web サービス トラフィックのルーティング

Silk Performer .NET Framework は、 Silk Performer Web エンジンを通して .NET コンポーネントによって生成された Web トラフィックをルーティングできます。 つまり、Web エンジンは実際の Web リクエストを実行するため、ネットワーク上に送信されるものを厳密に確認することができます。 また、 モデム シュミレーション、IP アドレスの多重化、ネットワーク統計情報、TrueLog などの Silk Performer Web エンジンの機能を使用することもできます。

デフォルトでは、すべてのネットワーク トラフィックは Web エンジンを通してルーティングされます。 ルーティングをオフにして、特定の Web サービス クライアント プロキシ クラスに対してのみ有効にすることもできます。 特定の Web サービス クライアント プロキシ クラスに対してルーティングのオン/オフを切り替えるには、 プロキシ クラスの基本クラスを SoapHttpClientProtocol から SilkPerformer.SPSoapHttpClientProtocol に変更する必要があります。 基本クラスの変更することによって、 Silk Performer .NET Framework は、各 Web サービスの呼び出しに対してより詳細な統計情報を生成することができます。すべての Web サービス プロキシ クラスでこの機能を有効にすることをお勧めします。 Microsoft Visual Studio の Silk Performer メニューからアクセスできる Web Service ダイアログ ボックスを使用してこの機能を有効化できます。

各 Web サービスの呼び出しに対してノードが TrueLog に作成され、Web サービスに渡された、およびクライアントに返された SOAP エンベロープが記録されます。

Web サービスの呼び出しに対する詳細な統計情報が無効になっている場合、.NET HTTP クラスがすべてのリクエストを処理します。

親トピック: Silk Performer .NET Framework
親トピック: Testing Web Services With Microsoft Visual Studio


結果を検討する

Web サービス トラフィック ルーティングが有効な場合、.NET テスト ドライバによって実行される Web サービスの呼び出しそれぞれに対して、TrueLog ノードが記録されます。

呼び出される Web サービス メソッドの概要レポートには、統計情報が表示されます。

親トピック: Silk Performer .NET Framework
親トピック: Testing Your .NET Test Driver


外部の参考文献

  1. セッション、Roger

    SOAP。 『Simple Object Access Protocol の概要』、2000 年 3 月

    http://www.w3.org/TR/SOAP/

  2. W3C

    『Simple Object Access Protocol (SOAP) 1.1』、2000 年 12 月

    http://www.w3.org/TR/SOAP/

  3. UN/CEFANT、OASIS

    『Enabling Electronic Business with ebXML』、2000 年 12 月

    http://www.ebxml.org/white_papers/whitepaper.htm

  4. Geyer、Carol

    『ebXML Integrates SOAP Into Messaging Services Specification』、2001 年 3 月

    http://www.ebxml.org/white_papers/whitepaper.htm

  5. Open Financial Exchange

    『Open Financial Exchange Specification 2.0』、2000 年 4 月

    http://www.ofx.net/

親トピック: .NET 用の SOAP Web サービスをテストする
親トピック: Java 用の SOAP Web サービスをテストする


Silk Performer .NET プロジェクトをセットアップする

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、 .NET > .NET Framework using Visual Studio .NET Add-On を選択して、 次へ をクリックします。
    ワークフロー - スクリプトの作成 ダイアログ ボックスが開きます。
  5. .NET 言語 (C# または VB.NET) アイコンを選択して使用する言語を選び、 OK をクリックします。 Microsoft Visual Studio Silk Performer Project Wizard が開きます。
  6. Name of testclass テキスト ボックスで、.NET テストクラスの名前を入力します。 Silk Performer Project テキスト ボックスに、 Silk Performer であらかじめ作成したプロジェクトの名前を入力します。
  7. Finish をクリックします。
次のようなファイルとコードが Microsoft Visual Studio で生成されます。
  • 生成された各テストクラスは、BDL スクリプトで VirtualUser になります。
  • 最初のトランザクションが、BDL スクリプトの Init トランザクションになります。
  • ウィザードによって生成されるファイル (コード ファイルおよび Silk Performer プロジェクト/BDL スクリプト) は、ソリューション エクスプローラ ページに一覧表示されます。
  • ハンドラー/クリーンアップ コードは、stopExceptionメソッドに挿入できます。
  • 例外処理用のカスタム コードは、 testException メソッドに挿入できます。
  • ETransactionType.TRANSTYPE_MAIN は、 BDL スクリプトの Main トランザクションになります。
  • ETransactionType.TRANSTYPE_END は、 BDL スクリプトの End トランザクションになります。

プロジェクト ウィザードにより生成されたサンプル スケルトン コード (C#)

using System;
using ;

namespace SPProject1
{
  [VirtualUser("VUser")]
  public class VUser
  {
    public VUser()
    {
    }

    [Transaction(ETransactionType.TRANSTYPE_INIT)]
    public void TInit()
    {
      /* You can add multiple TestAttribute attributes to each function defining parameters that can be accessed through Bdl.AttributeGet

      Example of testcode: (Access bdl function through the static functions of the Bdl class Bdl.MeasureStart(...);
      ...
      Bdl.MeasureStop(...);
      */
    }

    [Transaction(ETransactionType.TRANSTYPE_MAIN)]
    public void TMain()
    {
    }

    [Transaction(ETransactionType.TRANSTYPE_END)]
    public void TEnd()
    {
    }
  }
}

上のスケルトン例からわかるように、クラスに適用できる VirtualUser と呼ばれるカスタム属性があります。これにより、アドオンの BDL Generation Engine で仮想ユーザー定義が生成されます。 VirtualUser 属性が適用された複数のクラスを実装できます。 VirtualUser 属性は、仮想ユーザー名をパラメータとして受け付けます。

次に、BDL Generation Engine では、 Transaction 属性が適用されたメソッドに対して、仮想ユーザー クラスのメソッドが解析されます。 Transaction 属性は、トランザクション タイプ (Init、 Main、または End) を最初のパラメータとして受け付けます。 Init と End トランザクションは 1 つのみですが、 Main トランザクションは複数可能です。

Main トランザクション タイプでは、 負荷テスト 中に呼び出されるトランザクションの回数を 2 番目のパラメータに指定できます (デフォルトは 1)。

  • Try Script テストを実行する
    Microsoft Visual Studio .NET から Try Script テストを実行します。
  • カスタム属性
    VirtualUser 属性と、クラスへの適用方法について説明します。
親トピック: .NET のサポート
親トピック: Load Testing .NET Components


Try Script テストを実行する

.NET テスト コードを実装すると、Microsoft Visual Studio .NET 内から Try Script テストを実行できます。

  1. 以下のうちいずれかを選択します。
    • F8 を押します。
    • Silk Performer > TryScript を選択します。
    .NET コードは、.NET アセンブリにコンパイルされます。

    カスタム属性のメタ情報および [オプション] ダイアログの設定に基づいて、BDL Generation Machine により BDF スクリプトが生成されます。

    アセンブリのメタ データに変更 (カスタム属性、メソッドの順序、生成オプションなどの変更) が加えられた場合、最新の BDF スクリプトは上書きされます。

    メタ データを変更し、最新の BDF ファイルを手動で変更した場合は、ファイルを上書きするかどうかを指定するようプロンプトが表示されます。ファイルを上書きすると、最新の変更が失われます。 この検出は、BDF ファイルの最終変更日と BDF ファイルにスクリプト化されたタイムスタンプを比較することによって行われます。

  2. 複数の仮想ユーザー クラス (VirtualUser 属性が適用されたクラス) が存在する場合は、どのユーザーを開始するかを指定するようプロンプトが表示されます。 テストが開始します。

    Try Script の実行時に自動的に開始する オプションを選択した場合は、負荷テストによって生成された TrueLog がロードされて TrueLog Explorer が開始します。

    仮想ユーザー出力ツール ウィンドウに、仮想ユーザー出力が表示されます。

    出力ツール ウィンドウの別のペインに、負荷テストコントローラ出力が表示されます。

負荷テストが完了すると、他の結果ファイル (ログ、出力、レポート、およびエラー) を Silk Performer の 結果 メニューから選択して検討することができます。

親トピック: Silk Performer .NET プロジェクトをセットアップする
関連概念
カスタム属性


カスタム属性

VirtualUser と呼ばれるカスタム属性をクラスに適用できます。 この属性により、アドインの BDL 生成エンジンで仮想ユーザー定義が生成されます。 VirtualUser 属性が適用された複数のクラスを実装できます。 VirtualUser 属性は、仮想ユーザー名をパラメータとして受け付けます。

注: BDF ファイルを手動で変更すると、ファイルを上書きするかどうか指定するよう求められます。

BDL 生成エンジンでは、Transaction 属性が適用されたメソッドに対して、VirtualUser クラスのメソッドが解析されます。 Transaction 属性は、最初のパラメータとして、トランザクション タイプ Init、Main または End をとります。 Init と End トランザクションは 1 つのみですが、Main トランザクションは複数可能です。

Main トランザクション タイプでは、テスト中に呼び出されるトランザクションの回数を 2 番目のパラメータに指定できます (デフォルトは 1)。

利用可能なカスタム属性およびその BDL 生成エンジン スクリプトを次に示します。

属性クラス | 適用対象 | パラメータ | 説明
VirtualUser クラス 仮想ユーザー グループ名

(オプション) IsUnitTest

仮想ユーザー グループを定義します。

true を指定すると、標準の DotNet メソッド (DotNetUnitTestLoadObject など) の代わりに DotNetUnitTest メソッドがスクリプト化されます。

Transaction メソッド タイプ (Init、Main、End)

タイプが Main の場合は、トランザクションの繰り返し回数

(オプション) 名前

仮想ユーザー グループのトランザクションを定義します。

トランザクションの実装により、.NET オブジェクトのメソッドが呼び出されます。

Init トランザクションの最初のスクリプト呼び出しは、オブジェクトをロードする DotNetLoadObject です。End トランザクションの最後のスクリプト呼び出しは、DotNetFreeObject です。

必要に応じて、このトランザクションに対して生成された BDL スクリプトで使用する名前を定義できます。 デフォルトでは、VUser 名とメソッド名を組み合わせて BDL でトランザクション名が作成されます。

TestMethod メソッド 現在のトランザクションでメソッドの呼び出しがスクリプト化されます。

現在のトランザクションは、Transaction 属性を持つ前のメソッドです。 したがって、この属性を持つメソッドの前に、Transaction 属性を持つメソッドが存在しない場合、意味をなしません。

TestAttribute メソッド 属性名

属性値

(オプション) 説明

Transaction 属性または TestMethod 属性のいずれかを持つメソッドに対して複数回適用できます。

このメソッドを呼び出す DotNetCallMethod の前に、AttributeSetString 関数がスクリプト化されます。 AttributeSetString により、指定された名前と値で属性が設定されます。 パラメータは、このようにしてスクリプトから .NET 関数に渡すことができます。 .NET 関数は、Bdl.AttributeGet を持つ属性を読み取ることができます。 つまり、完了しているスクリプトを受け取る QA 担当者は、AttributeSetString に渡された値を変更するだけでスクリプトをカスタマイズすることができます。 したがって、.NET コードを変更する必要はありません。

プロジェクト属性の説明を定義できます。 説明は、Silk Performer のプロジェクト属性ウィザードに表示されます。

VirtualUserInitialize | メソッド | このメソッドは、DotNetUnitTestLoadObject でロードされたクラスに対して呼び出されます。
VirtualUserCleanup | メソッド | このメソッドは、DotNetUnitTestFreeObject で解放されたクラスに対して呼び出されます。
TestCleanup | メソッド | このメソッドは、DotNetUnitTestCallMethod でメソッドが呼び出された後に呼び出されます。
TestInitialize | メソッド | このメソッドは、DotNetUnitTestCallMethod でメソッドが呼び出される前に呼び出されます。
TestIgnore | メソッド | この属性が適用されたメソッドは、DotNetUnitTestCallMethod で呼び出されません。
TestException メソッド 例外タイプ

追加ログ メッセージ

通常、例外を送出するメソッドは失敗したものとみなされます。 メソッドで例外を送出する場合は、TestException 属性を使用して、このメソッドで例外が送出されることを Silk Performer に通知することができます。
  • カスタム属性のコード例
    C# テスト コード例を記載します。
  • 生成される BDF スクリプトの例
    BDF スクリプト例を記載します。
  • Attributes for Unit Test Standards
    Explains the attributes for methods that are called before and after test methods when working with unit-testing frameworks.
  • Negative Testing
    Explains that Silk Performer offers an attribute that can be applied to test methods to indicate that a specific exception type is expected.
親トピック: Silk Performer .NET プロジェクトをセットアップする
親トピック: Load Testing .NET Components
関連タスク
Try Script テストを実行する


カスタム属性のコード例

C# テスト コード例

using System;
using SilkPerformer;

namespace SPProject1
{
  [VirtualUser("VUser")]
  public class VUser
  {
    public VUser()
{
    }
    [Transaction(ETransactionType.TRANSTYPE_INIT)]
    public void TInit()
    {
    }
    [Transaction(ETransactionType.TRANSTYPE_MAIN)]
    public void TMain()
    {
    }
    [TestMethod]
    [TestAttribute("Attr1", "DefaultValue1")]
    public void TestMethod1()
    {
      string sAttrValue = Bdl.AttributeGet("Attr1");
      Bdl.Print(sAttrValue);
    }
    [Transaction(ETransactionType.TRANSTYPE_END)]
    public void TEnd()
    {
    }
  }
}
親トピック: カスタム属性


生成される BDF スクリプトの例

benchmark DOTNETBenchmarkName

use "dotnetapi.bdh"

dcluser
 user

    VUser
 transactions
   VUser_TInit : begin;
   VUser_TMain : 1;
   VUser_TEnd  : end;
var
 hVUser : number;

dcltrans
 transaction VUser_TInit
 begin
   hVUser:= DotNetLoadObject("\\SPProject1\\bin\\release\\SPProject1.dll", "SPProject1.VUser");
   MeasureStart("TInit");
   DotNetCallMethod(hVUser, "TInit");
   MeasureStop("TInit");
 end VUser_TInit;

 transaction VUser_TMain
 begin
   MeasureStart("TMain");
   DotNetCallMethod(hVUser, "TMain");
   MeasureStop("TMain");
   AttributeSetString("Attr1", "DefaultValue1");
   MeasureStart("TestMethod1");
   DotNetCallMethod(hVUser, "TestMethod1");
   MeasureStop("TestMethod1");
 end VUser_TMain;

 transaction VUser_TEnd
 begin
   MeasureStart("TEnd");
   DotNetCallMethod(hVUser, "TEnd");
   MeasureStop("TEnd");
   DotNetFreeObject(hVUser);
 end VUser_TEnd;
親トピック: カスタム属性


Microsoft Visual Studio で Silk Performer .NET プロジェクトを作成する

Microsoft Visual Studio から Silk Performer .NET プロジェクトを作成する場合、作成したソリューション ファイル (.sln) が、作成したプロジェクト ファイル (.csproj、.vbproj など) と同じディレクトリに配置されていることを確認してください。 Microsoft Visual Studio のプロジェクトの作成ウィザードには、ソリューションのディレクトリを作成 チェック ボックスがあります。 このオプションは選択しないでください (オフのままにする)。 選択すると、Silk Performer の スクリプトの作成 ダイアログからプロジェクトを開く場合に問題が生じる可能性があります。

親トピック: .NET のサポート


.NET でのメモリ使用量

.NET メソッド呼び出しで BDL スクリプトを実行する場合、Silk Performer で Microsoft .NET 共通言語ランタイム (.NET CLR) をホストする必要があります。 .NET CLR をホストしたり、.NET オブジェクトをロードする場合は、仮想ユーザー プロセス (コンテナ) に使用される追加のメモリが必要となります。

Silk Performer では、各仮想ユーザーが独自のアプリケーション ドメインで実行する必要があるか、仮想ユーザー コンテナ内のすべての仮想ユーザーがアプリケーション ドメインを共有できるかを指定できます。 仮想ユーザーごとに 1 つのアプリケーション ドメインとは、個々の仮想ユーザーのすべてのオブジェクトが、同じ仮想ユーザー コンテナ内の他のユーザーから切り離されることを意味します。

仮想ユーザー コンテナごとに 1 つのアプリケーション ドメインとは、すべてのオブジェクトが同じドメインに存在し、互いに影響を及ぼすことを意味します。 この設定は、プロジェクトのプロファイル設定で変更できます。

追加のアプリケーション ドメインごとに、追加のメモリおよび .NET CLR による管理オーバーヘッドが必要です。

次の表に、仮想ユーザー プロセッサで動作するユーザー数およびアプリケーション ドメイン設定に基づいたメモリ使用量 (MB 単位) を示します。 これは、負荷テストの開始時における初期使用量 (.NET オブジェクトはロードされていない) です。

 | 仮想ユーザー数 1 | 仮想ユーザー数 2 | 仮想ユーザー数 3 | 仮想ユーザー数 4 | 仮想ユーザー数 10 | 仮想ユーザー数 20 | 仮想ユーザー数 50
.NET 呼び出しなし (通常の BDL スクリプト) | 1.668 | 1.760 | 1.836 | 1.904 | 2.352 | 3.124 | 5.484
ユーザーごとのアプリケーション ドメイン | 5.268 | 6.644 | 6.828 | 6.940 | 7.916 | 9.364 | 13.868
コンテナごとのアプリケーション ドメイン | 5.268 | 5.404 | 5.488 | 5.564 | 6.036 | 6.852 | 9.368

次の表に、単純な .NET オブジェクトをロードした後のメモリ使用量を示します。 オブジェクトは 3 つのメソッドを定義しますが、メンバは存在しません。

 | 仮想ユーザー数 1 | 仮想ユーザー数 2 | 仮想ユーザー数 3 | 仮想ユーザー数 4 | 仮想ユーザー数 10 | 仮想ユーザー数 20 | 仮想ユーザー数 50
ユーザーごとのアプリケーション ドメイン | 5.680 | 7.404 | 7.816 | 8.296 | 11.000 | 15.300 | 28.664
コンテナごとのアプリケーション ドメイン | 5.688 | 5.812 | 5.900 | 6.012 | 6.620 | 7.628 | 10.240

上記の表からわかるように、仮想ユーザーごとに 1 つのアプリケーション ドメインは、コンテナごとに 1 つのアプリケーション ドメインより多くのメモリを必要とします。 プロジェクト ファイルでのデフォルト設定は、ユーザーごとに 1 つのアプリケーション ドメインです。 これは、あるユーザーが作成したオブジェクトは、他のユーザーのオブジェクトに影響を及ぼすことができないからです。 オブジェクトがアプリケーション ドメインからグローバル リソースにアクセスする場合に、問題が生じないことを確認してください。

.NET CLR をホストするために必要な初期メモリ容量は約 3.5 MB です。 .NET CLR は、仮想ユーザー コンテナごとにのみホストされ、アプリケーション ドメイン設定の影響を受けません。

オブジェクトをロードする際のメモリ使用量は、オブジェクトのサイズによって異なります。 上記の表では、ロードされたオブジェクトの例にはメンバが存在しません。 メンバが存在するオブジェクトをロードする場合のメモリ使用量は異なります。

参照されなくなったオブジェクトからメンバを解放するには、DotNetFreeObject を呼び出します。

親トピック: .NET のサポート


.NET のエラー メッセージ

.NET 負荷テスト中に、次の問題が発生する可能性があります。

  • .NET 言語ランタイムを開始できません
    「.NET 言語ランタイムを開始できません」というエラー メッセージの考えられる原因と解決策を示します。
  • ハンドルが無効です
    「ハンドルが無効です」というエラー メッセージの考えられる原因と解決策を示します。
  • オブジェクトのロード中に例外が発生しました
    「オブジェクトのロード中に例外が発生しました」というエラー メッセージの考えられる原因と解決策を示します。
  • オブジェクトはこのパブリック メソッドを実装していません
    「オブジェクトはこのパブリック メソッドを実装していません」というエラー メッセージの考えられる原因と解決策を示します。
  • メソッドの実行に失敗しました
    「メソッドの実行に失敗しました」というエラー メッセージの考えられる原因と解決策を示します。
  • .NET 共通言語ランタイムが開始されていません
    「.NET 共通言語ランタイムが開始されていません」というエラー メッセージの考えられる原因と解決策を示します。
  • mscoree.dll (.NET ランタイム) をロードできません
    「mscoree.dll (.NET ランタイム) をロードできません」というエラー メッセージの考えられる原因と解決策を示します。
  • .NET アプリケーション ドメインの初期化に失敗しました
    「.NET アプリケーション ドメインの初期化に失敗しました」というエラー メッセージの考えられる原因と解決策を示します。
  • .NET 共通言語ランタイムが実行されていません
    「.NET 共通言語ランタイムが実行されていません」というエラー メッセージの考えられる原因と解決策を示します。
  • 指定された名前の .NET アセンブリが見つかりませんでした
    「指定された名前の .NET アセンブリが見つかりませんでした」というエラー メッセージの考えられる原因と解決策を示します。
  • Perfrun.Exe.Config の書き込みに失敗しました
    「Perfrun.Exe.Config の書き込みに失敗しました」というエラー メッセージの考えられる原因と解決策を示します。
  • .NET DLL が正しくない perfdotnetfw.dll を参照しています
    「.NET DLL が正しくない perfdotnetfw.dll を参照しています」というエラー メッセージの考えられる原因と解決策を示します。
  • 検証に失敗しました
    「検証に失敗しました」というエラー メッセージの考えられる原因と解決策を示します。
  • 例外がログに記録されました
    「例外がログに記録されました」というエラー メッセージの考えられる原因と解決策を示します。
  • 見つからないクラスまたはロードできないクラスがあります
    「見つからないクラスまたはロードできないクラスがあります」というエラー メッセージの考えられる原因と解決策を示します。
  • タイプのイニシャライザ (.cctor) で例外が発生しました
    「タイプのイニシャライザ (.cctor) で例外が発生しました」というエラー メッセージの考えられる原因と解決策を示します。
  • 呼び出されたメソッドで例外が発生しました
    「呼び出されたメソッドで例外が発生しました」というエラー メッセージの考えられる原因と解決策を示します。
  • パラメータの数が無効です
    「パラメータの数が無効です」というエラー メッセージの考えられる原因と解決策を示します。
親トピック: .NET のサポート


.NET 言語ランタイムを開始できません

考えられる原因 | 解決策
Silk Performer が .NET 共通言語ランタイムをホストできませんでした。 | .NET 共通言語ランタイムがインストールされていることを確認します。
親トピック: .NET のエラー メッセージ


ハンドルが無効です

考えられる原因 | 解決策
DotNet API 関数に無効な .NET オブジェクト ハンドルを渡しました。 | オブジェクト ハンドルは、DotNetLoadObject を呼び出すことで取得できます。あるいは、DotNetGetObject でも受け取ることができます (最後の呼び出しでオブジェクトが返された場合)。
親トピック: .NET のエラー メッセージ


オブジェクトのロード中に例外が発生しました

考えられる原因 解決策
このエラーは、次の場合に発生します。
  • 参照されているアセンブリをロード/検出できない
  • perfdotnetfw.dll のバージョンが perfrun.exe と異なります。
 参照場所にアセンブリ ファイルが存在し、perfdotnetfw.dll と perfrun.exe のバージョンが一致していることを確認します。
親トピック: .NET のエラー メッセージ


オブジェクトはこのパブリック メソッドを実装していません

考えられる原因 | 解決策
.NET オブジェクトのパブリック メソッドではないメソッドを呼び出そうとしました。 | パブリック メソッドのみが DotNetCallMethod 関数で呼び出し可能です。
親トピック: .NET のエラー メッセージ


メソッドの実行に失敗しました

考えられる原因 | 解決策
処理されない例外のため、メソッドの実行に失敗しました。 | 失敗したメソッドを調べます。
親トピック: .NET のエラー メッセージ


.NET 共通言語ランタイムが開始されていません

考えられる原因 | 解決策
このエラーは、.NET CLR が開始される前に、DotNet 関数を呼び出そうとした場合に発生します。 | DotNet 関数を呼び出す前に、.NET CLR が開始されていることを確認します。
親トピック: .NET のエラー メッセージ


mscoree.dll (.NET ランタイム) をロードできません

考えられる原因 | 解決策
Silk Performer が .NET 共通言語ランタイムをホストできませんでした。 | .NET 共通言語ランタイムがインストールされていることを確認します。 ランタイムは、Microsoft ダウンロード センター からインストールできます。
親トピック: .NET のエラー メッセージ


.NET アプリケーション ドメインの初期化に失敗しました

考えられる原因 | 解決策
.NET アプリケーション ドメインを開始できませんでした。 | .NET アプリケーションを実行する権限がユーザーにあることを確認します。
親トピック: .NET のエラー メッセージ


.NET 共通言語ランタイムが実行されていません

考えられる原因 | 解決策
このエラーは、.NET CLR が開始される前に、DotNet 関数を呼び出そうとした場合に発生します。 | DotNet 関数を呼び出す前に、.NET CLR が開始されていることを確認します。
親トピック: .NET のエラー メッセージ


指定された名前の .NET アセンブリが見つかりませんでした

考えられる原因 | 解決策
最初のパラメータとして DotNetLoadObject に渡されたアセンブリ ファイルが見つかりません。 | 相対パスを渡した場合、プロジェクト ディレクトリに対して相対的である必要があります。
親トピック: .NET のエラー メッセージ


Perfrun.Exe.Config の書き込みに失敗しました

考えられる原因 | 解決策
ファイル perfrun.exe.config は、Silk Performer が .NET CLR をホストする前に、ロードされた .NET オブジェクトの構成設定に書き込まれます。 | このファイルが書き込み可能であり、実行するユーザーに適切な権限があることを確認します。
親トピック: .NET のエラー メッセージ


.NET DLL が正しくない perfdotnetfw.dll を参照しています

考えられる原因 | 解決策
perfdotnetfw.dll のバージョンが perfrun.exe と異なります。 | 使用している perdotnetfw.dll のバージョンが perfrun.exe と同じであることを確認します。
親トピック: .NET のエラー メッセージ


検証に失敗しました

考えられる原因 | 解決策
このエラーは、perfdotnetfw.dll によって提供されるいずれかの検証関数を使用した検証に失敗した場合に発生します。 | 失敗した検証関数を調べます。
親トピック: .NET のエラー メッセージ


例外がログに記録されました

考えられる原因 | 解決策
このエラーは、perfdotnetfw.dll によって提供される Bdl.LogException メソッドで例外を記録した場合に発生します。 | 記録された例外を調べます。
親トピック: .NET のエラー メッセージ


見つからないクラスまたはロードできないクラスがあります

考えられる原因 | 解決策
2 番目のパラメータとして DotNetLoadObject に渡された名前を持つクラスが、アセンブリで見つかりません。 | 綴りを確認し、完全な名前 (名前空間を含む) が定義されていることを確認します。
親トピック: .NET のエラー メッセージ


タイプのイニシャライザ (.cctor) で例外が発生しました

考えられる原因 | 解決策
オブジェクトのコンストラクタで例外が発生しました。 | 例外が発生したオブジェクト コンストラクタを調べます。
親トピック: .NET のエラー メッセージ


呼び出されたメソッドで例外が発生しました

考えられる原因 | 解決策
DotNetCallMethod で呼び出されたメソッドで、例外が発生しました。 | 例外が発生したメソッドを調べます。
親トピック: .NET のエラー メッセージ


パラメータの数が無効です

考えられる原因 | 解決策
DotNetCallMethod 関数に渡したパラメータの数が無効です。 | DotNetCallMethod 関数で使用されるパラメータを確認します。
親トピック: .NET のエラー メッセージ


NUnit インテグレーション

Silk Performer は、現実的な同時アクセスのサーバー条件下のリモート コンポーネント テストをサポートするために、既存の NUnit と Microsoft Unit のテスト スクリプトを円滑に Silk Performer に統合する機能を備えています。

Silk Performer は、既存の NUnit アセンブリとその他の .NET アセンブリのインポートを可能にするインポート ツールを提供しています。 メソッドには、パラメータや戻り値があってもかまいません。これらの関数の入力パラメータを設定するためのコードが自動的に生成されます。

Silk Performer のユニット テスト インポート ツールには、特定のテストケース メソッドを選択するオプションがあります。 選択されたテストケース メソッドを呼び出す BDL スタブ コード (ベンチマーク記述ファイル) は、自動的に生成されます。 既存の NUnit テスト クラスを変更しなくても、そのクラスを Silk Performer から呼び出すことができます。

注: Silk Performer の NUnit インポート ユーティリティは、NUnit のバージョン 2.1.4 以降をサポートしています。
  • NUnit または .NET テストの Silk Performer プロジェクトをセットアップする
    NUnit テスト スクリプトをインポートするために、NUnit または .NET テスト プロジェクトを作成します。
  • NUnit または .NET のアセンブリをインポートする
    現実的な同時アクセスのサーバー条件下でのリモート コンポーネント テストをサポートするために、既存の NUnit または .NET のテスト アセンブリを Silk Performer にインポートします。
  • NUnit メソッドのフィルタ オプション
    テスト クラスをインポートするときに、メソッド 領域で利用可能なフィルタを列挙します。
  • NUnit BDL スクリプトの例
    タイマ パラメータを含む NUnit 用 BDL スクリプトの例を示します。
親トピック: .NET のサポート


NUnit または .NET テストの Silk Performer プロジェクトをセットアップする

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、ユニット テスト を展開して NUnit または .NET Testing を選択します。
  5. 次へ をクリックします。
    注: プロジェクトにさらにリソースを追加する必要がある場合は、プロジェクト メニュー ツリー ビューでプロジェクト アイコンを右クリックします。 Silk Performer に必要なユーザー データ ファイル (.csv)、ランダム データ ファイル (.rnd)、.idl ファイルをすべてプロジェクトにセットアップすることが特に重要です。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: NUnit インテグレーション
関連タスク
テスト スクリプトを記録する


NUnit または .NET のアセンブリをインポートする

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. ファイル フィールドに、テストするアーカイブを指定します。 このアーカイブは、自動的にプロファイル クラスパスに追加されます。次に、利用可能なクラスが取得されて、クラス フィールドにアルファベット順に表示されます。
  3. クラス リストから、テストに利用可能なクラスを 1 つ選択します。
    テスト用に特定のアーカイブを指定しない場合は、スクリプトの作成 ダイアログを利用して、プロファイル クラスパスで利用可能なクラスを指定できます。 クラス フィールドには、完全なパスのクラス名を入力します。 利用可能なコンストラクタとメソッドが、自動的に取得されて表示されます。
  4. コンストラクタ リストから、インポートしたクラスをインスタンス化するための適切なコンストラクタを選択します。 コンストラクタが選択されていない場合 は(<インスタンス不要 – 静的呼び出しのみ> エントリ)、 メソッド リストに静的メソッドのみが表示されます。
  5. メソッド 領域で、呼び出したいメソッドを選択します。
  6. メソッド 領域に表示されるメソッドをフィルタリングするには、以下の手順を実行します。
    1. 詳細 ボタン (メソッド 領域の上のじょうご型アイコン) をクリックします。
    2. フィルタ設定をカスタマイズしたら、OK をクリックして、メソッド 領域を更新します。
  7. 経由する Web サービス プロキシ クラスなど、トラフィックのリダイレクション値を含む一般的な NUnit 設定を変更するには、アクティブ プロファイルの設定 リンクをクリックします。 プロファイル - [<プロファイル名>] - .NET ダイアログが開き、.NET プロジェクト (NUnit および .NET のテスト プロジェクト タイプ) の 全般 ページが表示されます。
    注: これらの設定を変更すると、異なる結果になる場合があります。 クラス、コンストラクタ、および メソッド の各フィールドでの選択が、新しい結果によって更新されます。
  8. OK をクリックします。
親トピック: NUnit インテグレーション


NUnit メソッドのフィルタ オプション

この表は、テスト クラスをインポートするときに、メソッド 領域で利用可能なフィルタの一覧を示しています。

NUnit メソッド | 説明
パラメータのない関数のみ | パラメータを持つ可能性がある関数はすべて無視されます。
ユニット テスト関数のみ (デフォルト) | NUnit 以外の関数はすべて無視されます。
メンバ関数のみ | メンバ関数以外はすべて無視されます。
public 可視性の関数 (デフォルト) | public 可視性の関数を含めます。
protected 可視性の関数 | protected 可視性の関数を含めます
private 可視性の関数 | private 可視性の関数を含めます。
package 可視性の関数 | package 可視性の関数を含めます。
宣言済み関数のみ | 基底クラスから継承した関数は無視します。
複合関数 (デフォルト) | 複合したパラメータを取る関数を表示します。 Java では、複合したパラメータは、デフォルト値として NULL を持つ DotNetSetObject で記述します。
ユニット テスト関数の自動検出 (デフォルト) | 自動的に検出されて記述された関数。 関数には、パラメータや戻り値がありません。 [SetUp] と [TearDown] (NUnit の場合) 、[TestInitialize] と [TestCleanup] (Microsoft Unit Tests の場合) という名前のメソッドは、各メソッドの前と後にそれぞれ呼び出されます。
親トピック: NUnit インテグレーション


NUnit BDL スクリプトの例

スクリプトの例

以下のスクリプトは、NUnit Money をインポートし、BagMultiply、BagNegate、および BagSimpleAhdd の 3 つのメソッドを選択することによって生成されたものです。

transaction TInit
var
  sFileName : string;
begin
  DotNetSetOption(DOTNET_OPT_REDIRECT_CONSOLE, 1);
  // ==============================================
  // Unit Test TestClass Information:
  // Used Framework: NUnit Test Framework
  // Initialize method: SetUp
  // Class contains 21 test methods!
  // ==============================================
  GetDataFilePath("nunitmoneysample.dll", sFileName);
  ghTestObj := DotNetUnitTestLoadObject(sFileName, "NUnit.Samples.Money.MoneyTest", "NUnit.Samples.Money.MoneyTest");
end TInit;

transaction TMain
begin
  // BagMultiply
  DotNetUnitTestCallMethod(ghTestObj, "BagMultiply", "BagMultiply");
  // BagNegate
  DotNetUnitTestCallMethod(ghTestObj, "BagNegate", "BagNegate");
  // BagSimpleAdd
  DotNetUnitTestCallMethod(ghTestObj, "BagSimpleAdd", "BagSimpleAdd");
end TMain;

transaction TEnd
begin
  DotNetUnitTestFreeObject(ghTestObj, "NUnit.Samples.Money.MoneyTest");
end TEnd;

DotNetUnitTestLoadObject は、NUnit アセンブリをロードして、このテスト クラスのインスタンスを作成します。 このテスト クラスには、グローバルの初期化関数が実装されています (名前は TestFixtureSetup - ClassInitialize)。この関数は、オブジェクトが作成された直後に呼び出されます。

TEnd トランザクション内の DotNetUnitTestFreeObject は、テスト オブジェクトへの参照を解放します。 このテスト クラスには、グローバルの後処理 (tear-down) 関数が実装されています (名前は TestFixtureTearDown - ClassCleanup)。この関数は、オブジェクトが解放される前に呼び出されます。

DotNetUnitTestCallMethod は、NUnit Microsoft Unit Test Engine と同様に、TestMethod を呼び出します。 SetUp - TestInitialize メソッドが実装されている場合は、テスト メソッドが呼び出される前に、このメソッドが呼び出されます。

TearDown - TestCleanup メソッドが実装されている場合は、テスト メソッドが呼び出された後に、このメソッドが呼び出されます。

例外が発生する可能性があるテスト メソッド (名前は ExpectedException) は、実際に例外が発生したときにのみ、成功と見なされます。

テスト メソッドによって、エラー (コンソール以外) に情報が書き込まれた場合、その情報は TrueLog 内で見ることができます。 個々の要素は、DotNetUnitTestCallMethod の子ノードとして記録されます。

予期しない例外についても同様です。 スタック トレースと例外のメッセージは、TrueLog に記録されます。

タイマ

元からある DotNet API 呼び出しと、新しい DotNetUnitTest API 呼び出しに、新たなオプション タイマ パラメータが導入されました。 このパラメータを指定すると、コンストラクタ、テスト メソッド、セットアップ メソッド、および後処理メソッドの実行タイマが測定されます。 上の例では、次のような測定結果が得られます。

  • コンストラクタ:NUnit.Sample.Money.MoneyTest
  • メソッド:BagMultiply、BagNegate、BagSimpleAdd
  • セットアップ メソッド: BagMultiply_Setup、BagNegate_Setup、BagSimpleAdd_Setup
親トピック: NUnit インテグレーション


Silk Performer .NET Explorer

.NET を使用して開発されたSilk Performer .NET Explorer と、Silk Performer .NET Framework を利用すると、Web Services、.NET Remoting オブジェクト、GUI がないその他の .NET オブジェクトをテストできます。 .NET Explorer を利用すると、ユーザーがプログラムを記述しないで (マウスの操作で、ビジュアルにタスクを完了できるため)、さまざまなテスト ケースを含む完全なテスト シナリオを定義し、実行できます。 テスト スクリプトは、.NET プログラミング言語に慣れていないユーザーにとっても、ビジュアルで理解しやすいものになっています。

.NET Explorer によって作成されたテスト シナリオは、Silk Performer にエクスポートして、同時実行および負荷テストですぐに再利用できます。また、Microsoft Visual Studio .NET にエクスポートして、さらにカスタマイズすることもできます。

.NET の詳細については、http://msdn.microsoft.com/net にアクセスしてください。

  • .NET Explorer を起動する
    プログラムを記述しないで、さまざまなテストケースを含む完全なテスト シナリオを定義し、実行するには、.NET Explorer を起動します。
  • .NET Explorer SilkEssential を使用する
    .NET Explorer をフックし、テスト済みの Web Services を利用して BDL スクリプトを作成するには、SilkEssential を使用します。
  • .NET メッセージ サンプルの使用
    Silk Performer を使用した .NET テクノロジのテストを試すことができる .NET メッセージ サンプルの概念およびタスクについて説明します。
  • .NET Explorer サンプル
    .NET Explorer に同梱されている .NET Remoting および Web サービスのサンプルへのアクセス方法について説明するトピックが含まれています。
親トピック: .NET のサポート


.NET Explorer を起動する

.NET Explorer を起動するために次のステップのいずれかを実行します。
  • スタート > すべてのプログラム > Silk > Silk Performer 21.0 > 開発ツール > Silk Performer .NET Explorer をクリックします。
  • スタート > すべてのプログラム > Silk > Silk Performer 21.0 > Silk Performer Workbench をクリックし、アプリケーションの種類が .NET/.NET Explorer または Web Services/.NET Explorer の新しいプロジェクトを作成します。

デフォルトでは、この実行可能ファイルは C:\Program Files\Silk\Silk Performer 21.0\DotNET Explorer\NetExplorer.exe にあります。

詳細については、Silk Performer.NET Explorer のヘルプを参照してください。

親トピック: Silk Performer .NET Explorer


.NET Explorer SilkEssential を使用する

この作業を始める前に、.NET Explorer のテスト シナリオを作成して保存します。 詳細については、Silk Performer.NET Explorer のヘルプを参照してください。

Silk Performer には、.NET Explorer をフックして、テスト済みの Web Services を利用して BDL スクリプトを作成する SilkEssential が付属しています。

  1. SilkEssential に基づくプロジェクトを新規作成します。
    1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
      注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
    3. オプションのプロジェクト説明を 説明 に入力します。
    4. アプリケーションの種類 メニュー リストで、Web Services を展開して .NET Explorer をクリックします。
    5. 次へ をクリックします。
      注: プロジェクトにさらにリソースを追加する必要がある場合は、プロジェクト メニュー ツリー ビューでプロジェクト アイコンを右クリックします。 Silk Performer に必要なユーザー データ ファイル (.csv)、ランダム データ ファイル (.rnd)、.idl ファイルをすべてプロジェクトにセットアップすることが特に重要です。
  2. スクリプトを作成します。
  3. Recorder が実行されている間に、.NET Explorer を起動します。
  4. 以前の .NET Explorer セッションで定義したテスト シナリオをロードします。
  5. このシナリオのアニメーション実行を行います。 Recorder と .NET Explorer が実行されている間に、BDL スクリプトが生成されます。
  6. .NET Explorer と Recorder を閉じます。
  7. 記録された BDL スクリプトの [スクリプトの試行] を実行します。
  8. 必要に応じて TrueLog 内の XML のカスタマイズや検証を実行します。 詳細については、TrueLog Explorer のヘルプを参照してください。
親トピック: Silk Performer .NET Explorer
関連概念
スクリプトを作成する
スクリプトの試行の概要


.NET メッセージ サンプルの使用

このセクションでは、Silk Performer を使用した .NET テクノロジのテストを試すことができる .NET メッセージ サンプルの概念およびタスクについて説明します。

メッセージ サンプルでは、ユーザーがログインでき、各自のメッセージ ストアの表示や他のユーザーへのメッセージの送信が可能なメッセージ サーバーが実装されています。 このサンプルでは、次の .NET テクノロジが使用されています。
  • .NET Remoting
  • Web サービス
  • ASP.NET
  • .NET メッセージ サンプルの概要
    メッセージ サンプルで使用されている .NET コンポーネントおよび .NET テクノロジについて説明します。
  • MessageLib のインターフェイス
    MessageLib の動作について説明し、そのインターフェイスの一覧を提供します。
  • サンプル .NET Web サービス
    サンプル .NET Web サービスの動作について説明し、インターフェイスに定義されている関数の一覧を提供します。
  • .NET メッセージ サンプルに対する作業
    .NET メッセージ サンプルのインストール方法と構成方法、およびクライアント コンポーネントとサーバー コンポーネントの詳細について説明します。
  • .NET メッセージ サンプルのテスト
    Silk Performer を使用してメッセージ サンプルの .NET コンポーネントをテストするために使用可能なオプションの一覧を提供します。
親トピック: Silk Performer .NET Explorer


.NET メッセージ サンプルの概要

メッセージ サンプルでは、ユーザーがログインでき、各自のメッセージ ストアの表示や他のユーザーへのメッセージの送信が可能なメッセージ サーバーが実装されています。 このサンプルでは、次の .NET テクノロジが使用されています。
  • .NET Remoting
  • Web サービス
  • ASP.NET
このサンプルには、次のコンポーネントが含まれています。
コンポーネント | 説明
MessageLib | サーバー ライブラリによって実装されるインターフェイスが定義された .NET ライブラリです。
MessageImpl | MessageLib インターフェイスの実装です。
MessageServer | MessageImpl で実装された .NET Remoting オブジェクトをホストする単純なコンソール アプリケーションです。 IObjectManager を実装するオブジェクトは、http://localhost:1999/ObjectManager.rem で有効化できます。 この設定は、config ファイルで変更できます。
MessageServerIIS | IIS によってホストされる ObjectManager Remoting オブジェクトです。
MessageWebService | この Web サービスは、MessageImpl で実装されているほとんどのメソッドの Web サービス メソッドを公開しています。 この Web サービスでは、MessageImpl のオブジェクトは直接的にはホストされません。 Web サービスは、.NET Remoting サーバーと通信します。
MessageSimpleClient | この単純なクライアント コンソール アプリケーション (シンプル クライアント) は、サーバー アプリケーションから IObjectManager を取得して、オブジェクトのメソッドを呼び出します。
MessageWin32Client | .NET Remoting サーバーまたは Web サービスに接続する Win32 アプリケーションです。 ログイン、メッセージの確認、メッセージの送信を行うためのインターフェイスを提供します。
MessageWebClient | Web サービスに接続し、ログイン、メッセージの確認、メッセージの送信を行うためのインターフェイスを提供する ASP.NET アプリケーションです。

コンポーネント間のやり取りの例

.NET Remoting サーバーは、クライアント アプリケーション (Web サービス、Win32 クライアント、シンプル クライアント) が http://localhost:1999/ObjectManager.rem から取得できるシングルトン SAO (Server Activated Object) をホストします。

親トピック: .NET メッセージ サンプルの使用


MessageLib のインターフェイス

MessageLib ライブラリには、.NET Remoting サーバー上にホストされた MessageImpl ライブラリによって実装されるインターフェイスがいくつか定義されています。 IObjectManager は、サーバーから取得可能な中核的インターフェイスです。 このインターフェイスを使用することによって、ユーザー、メッセージ ストア、メッセージなどの他のオブジェクトにアクセスできます。 クライアント アプリケーションがリモート オブジェクトにアクセスする場合は、取得するオブジェクトの型情報が必要であるため、別途インターフェイス アセンブリが必要となります。 インターフェイスの定義のみを行うライブラリを実装することによって、サーバー側の実装を使用することができます。 MessageImpl をクライアントに配置することもできますが、その場合はクライアント側とサーバー側の両方に実装が存在することになり、お勧めできません。

一部のメソッドは、メソッド呼び出しが成功したかどうかを示す整数値を返します。 0 は、呼び出しが成功したことを示します。 0 以外の値は、エラーを示します。 IObjectManager インターフェイスの GetErrorMsg メソッドは、指定されたエラー コードに対応するエラーの説明を返します。

  • ObjectManager インターフェイス
    ObjectManager インターフェイスで使用可能なメソッドについて説明します。
  • IUser インターフェイス
    IUser インターフェイスで使用可能なメソッドについて説明します。
  • IMessageStore インターフェイス
    IMessageStore インターフェイスで使用可能なメソッドについて説明します。
  • IMessage インターフェイス
    IMessage インターフェイスで使用可能なメソッドについて説明します。
親トピック: .NET メッセージ サンプルの使用


ObjectManager インターフェイス

Login メソッド

int Login(string sUsername, string sPassword,
    ref IUser user)

このメソッドでは、指定したパスワードを使用してユーザー ログインが実行されます。 ログインに成功すると、user には、ユーザーのオブジェクトへの有効な参照が設定されます。 ログインに失敗した場合は、戻り値を確認してください。

Logout メソッド

int Logout(IUser user)

ユーザーのログアウトを実行します。

CreateUser メソッド

int CreateUser(string sUsername, string sPassword);
新規ユーザーを作成します。
注: このメソッドを実行しても、ユーザーのログインは実行されません。

DeleteUser メソッド

int DeleteUser(IUser user);

ユーザーを削除します。 このメソッドを呼び出した後、指定したユーザーは無効になります。

GetErrorMsg メソッド

string GetErrorMsg(int errNo);

エラー番号に対応する説明を返します。

親トピック: MessageLib のインターフェイス


IUser インターフェイス

ChangePassword メソッド

int ChangePassword(string sOldPwd, string sNewPwd);

ユーザー パスワードを変更します。

ChangeName メソッド

int ChangeName(string sNewName);

ユーザー名を変更します。

GetMessageStore メソッド

IMessageStore GetMessageStore();

ユーザーのメッセージ ストアを返します。

SendMessage メソッド

int SendMessage(string sRecipient, string sMsgText);

他のユーザーにメッセージを送信します。

Username メソッド

string Username

ユーザーの名前です (読み取り専用プロパティ)。

親トピック: MessageLib のインターフェイス


IMessageStore インターフェイス

GetMessage メソッド

int GetMessage(int nMsgId, ref IMessage msg);

指定されたメッセージ ID (1 から始まる番号) のメッセージを返します。

DeleteMessage メソッド

int DeleteMessage(int nMsgId);

指定されたメッセージ ID (1 から始まる番号) のメッセージを削除します。

Count メソッド

int Count

ストア内のメッセージ数です (読み取り専用プロパティ)。

親トピック: MessageLib のインターフェイス


IMessage インターフェイス

Sender メソッド

string Sender

送信者です (読み取り専用プロパティ)。

MessageText メソッド

string MessageText

メッセージ テキストです (読み取り専用プロパティ)。

親トピック: MessageLib のインターフェイス


サンプル .NET Web サービス

サンプル Web サービスでは、インターフェイスに定義されているほとんどの関数が公開されています。 ログインに成功すると、ユーザー オブジェクトが ASP.NET セッション オブジェクトに格納されます。 その結果、Web サービスのクライアントにユーザー オブジェクトへの参照を返さなくても、ユーザー オブジェクトのメソッド呼び出しが可能になります。 セッションの状態情報はサーバー メモリ内に保持されており、セッション キーがクッキーによってクライアントに返されます。 そのため、生成された Web プロキシ クライアント クラスを使用する場合は、CookieContainer オブジェクトを作成し、このオブジェクトをプロキシ オブジェクトの CookieContainer プロパティに割り当てる必要があります。

次の関数が公開されています。
  • Login
  • Logout
  • CreateUser
  • DeleteUser
  • GetMessageCount
  • GetMessage
  • DeleteMessage
  • SendMessage
  • GetErrorMsg

Web サービスでは、別にメッセージ クラスが定義されています。 メッセージ クラスには、2 つのパブリック メンバ (Sender および MessageText) が含まれています。

親トピック: .NET メッセージ サンプルの使用
関連タスク
Web サービスを構成する


.NET メッセージ サンプルに対する作業

このセクションでは、.NET メッセージ サンプルのインストール方法および構成方法について説明します。 また、クライアント コンポーネントおよびサーバー コンポーネントの詳細についても説明します。 このセクションの最後では、Silk Performer を使用して .NET メッセージ サンプルをテストする方法について説明します。

  • .NET メッセージ サンプルをインストールする
    .NET Remoting メッセージ サーバーをインストールして、.NET メッセージ サンプルのテストを可能にします。
  • .NET メッセージ サンプルを構成する
    .NET メッセージ サンプル クライアント、サンプル Web サービス、および IObjectManager のセットアップ方法を説明するタスクが含まれています。
  • .NET メッセージ サンプルの概要
    .NET メッセージ サンプルのコンポーネントの概要について説明します。
親トピック: .NET メッセージ サンプルの使用


.NET メッセージ サンプルをインストールする

注: メッセージ サンプルの .NET Remoting コンポーネントのみをテストする必要がある場合には、このタスクをスキップして、単にメッセージ サーバーを起動してください。
  1. 次の手順を実行して、IIS にホストされている Web サービス、Web クライアント、およびメッセージ サーバーの仮想ディレクトリを作成します。
    1. 管理ツール フォルダから インターネット サービス マネージャ を開きます。
    2. MessageWebService、MessageWebClient、および MessageServerIIS の 3 つの仮想ディレクトリを作成します。
    3. サンプル アプリケーション ディレクトリを開き、ベース ディレクトリを MessageWebService、MessageWebClient、および MessageServerIIS に設定します。 デフォルトでは、サンプル アプリケーション ディレクトリは <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample です。
    4. ツリー内の仮想ディレクトリ エントリを右クリックして、プロパティ をクリックします。 プロパティ ウィンドウが開きます。
    5. 作成 をクリックして、仮想ディレクトリにアプリケーションを作成します。 プロパティ ページに 作成 ボタンがない場合、このステップは仮想ディレクトリの作成中に IIS によって自動的に実行されています。
    6. 上記の 2 つのステップ (d および e) をすべての仮想ディレクトリに対して繰り返します。
  2. サンプル アプリケーションのバイナリが最新バージョンの .NET Framework でコンパイルされるように、次の手順を実行します。
    1. <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\MessageLib ディレクトリの MessageLib.sln ソリューションを開きます。
    2. ソリューションのリリース ビルドまたはデバッグ ビルドを実行します。
    3. デバッグ モードまたはリリース モードの MessageImpl プロジェクトの出力ファイルを MessageServerIIS\bin ディレクトリにコピーします。
親トピック: .NET メッセージ サンプルに対する作業
関連概念
.NET メッセージ サンプルのテスト
関連タスク
.NET メッセージ サンプルを構成する
.NET メッセージ サンプルの概要


.NET メッセージ サンプルを構成する

  • IObjectManager オブジェクト プロパティを構成する
    IObjectManager オブジェクトに対して、ポート、HTTP の代わりに TCP チャネルを使用するかどうか、または URL を構成します。
  • シンプル クライアントを構成する
    MessageServer.exe.config で ObjectManagerURL の値を変更した場合は、シンプル クライアントの構成ファイルも編集する必要があります。
  • Web サービスを構成する
    サンプル Web サービスにアクセスできるようにするには、Object Manager の URL を指定する必要があります。
  • Web クライアントを構成する
    Web クライアントを有効にするには、Web サービスの URL を指定する必要があります。
親トピック: .NET メッセージ サンプルに対する作業
関連概念
.NET メッセージ サンプルのテスト
関連タスク
.NET メッセージ サンプルをインストールする
.NET メッセージ サンプルの概要


IObjectManager オブジェクト プロパティを構成する

デフォルトで、メッセージ サーバーでは、http://localhost:1999/ObjectManager.rem で IObjectManager オブジェクトが公開されています。 デフォルト設定を変更する必要がある場合のみこのタスクを実行してください。

  1. <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\MessageServer に移動して、MessageServer.exe.config をダブルクリックします。
  2. ポート番号を入力します。 ポートが、マシン上の他のサービスによって使用されていないことを確認してください。
  3. HTTP の代わりに TCP チャネルを使用する場合は、ref 属性を TCP に変更します。
  4. オブジェクトの URL を変更する場合は、objectUri 属性を編集します。

これらのプロパティのいずれかを変更する場合は、クライアント アプリケーションの構成も変更する必要があります。これについては、次のタスクで説明します。

親トピック: .NET メッセージ サンプルを構成する


シンプル クライアントを構成する

MessageServer.exe.config で ObjectManagerURL の値を変更した場合は、シンプル クライアントの構成ファイルも編集する必要があります。

  1. <インストール パス>\Sample Apps\Message Sample\MessageSimpleClient に移動します。
  2. MessageSimpleClient.exe.config をダブルクリックします。
  3. キー ObjectManagerURL の値を必要な URL に変更します。
親トピック: .NET メッセージ サンプルを構成する
関連タスク
シンプル クライアントを実行する


Web サービスを構成する

  1. <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\MessageWebService に移動して、Web.config をダブルクリックします。
  2. キー ObjectManagerURL の値を必要な URL に変更します。
これで、http://<server>/MessageWebService/MessageService.asmx にある Web サービスにアクセスできるようになりました。
親トピック: .NET メッセージ サンプルを構成する
関連概念
サンプル .NET Web サービス
関連タスク
.NET Web サービスをテストする


Web クライアントを構成する

Web サービスが Web クライアントとは異なるマシンにインストールされている場合、または異なる仮想ディレクトリ名を選択した場合は、Global.asax ファイルに Web サービスの URL を指定する必要があります。

  1. <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\MessageWebService に移動して、Global.asax.cs をダブルクリックします。
  2. Session_Start メソッドを検索します。
  3. 使用する Web サービスの URL を定義します。
  4. アプリケーションをリビルドします。
これで、http://<server>/MessageWebClient/Default.aspx にある Web クライアントにアクセスできるようになりました。
親トピック: .NET メッセージ サンプルを構成する
関連タスク
Web クライアントで作業する


.NET メッセージ サンプルの概要

このセクションでは、メッセージ サンプルのコンポーネントの概要について説明します。 サンプルでは、コンソール アプリケーションとして実装されたメッセージ サーバーが使用されます。 クライアント アプリケーションの構成ファイル内のリモート処理 URL を変更することによって、IIS 内で実行されているメッセージ サーバーを使用できます。

  • .NET Remoting サーバーを起動する
    .NET Remoting サーバーを起動して、ObjectManager オブジェクト データにアクセスします。
  • シンプル クライアントを実行する
    シンプル クライアントでは、2 人のユーザーが作成されます。これらのユーザーは、サンプル Win32 クライアントおよびサンプル Web クライアントでも使用されます。
  • Win32 クライアントで作業する
    Win32 クライアントを使用すると、ログイン、ユーザーの作成、メッセージの送信などの基本的な操作を実行できます。
  • Web クライアントで作業する
    Web クライアントを使用すると、ログイン、ユーザーの作成、メッセージの送信などの、サンプル Web サービスに対する基本的な操作を実行できます。
親トピック: .NET メッセージ サンプルに対する作業
関連概念
.NET メッセージ サンプルのテスト
関連タスク
.NET メッセージ サンプルをインストールする
.NET メッセージ サンプルを構成する


.NET Remoting サーバーを起動する

.NET Remoting サーバーでは、すべてのクライアント アプリケーションからアクセスされる ObjectManager オブジェクトがホストされています。 このサーバーは、単純なコンソール アプリケーションであり、任意のキーを押すと実行されます。 リモート処理オブジェクトの一部のメソッドでは、ログインしたユーザー、ログアウトしたユーザー、メッセージの送信元、メッセージの送信先などの情報がコンソールに出力されます。

注: サーバーでは、ユーザーやメッセージについてのすべての情報がメモリ内に保持されます。 そのため、サーバーを停止すると、現在の状態は失われます。 つまり、新たにサーバーを起動したときには、環境は空であり、ユーザーもメッセージも存在しません。
  1. <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\MessageServer に移動します。
  2. MessageServer.exe をダブルクリックします。

メッセージ サーバーのコンソール ウィンドウが表示されます。 コンソール ウィンドウには、テスト中に呼び出されたメソッドについての情報が出力されます。 サーバーを停止するには、任意のキーを押します。

親トピック: .NET メッセージ サンプルの概要
関連タスク
.NET Web サービスをテストする


シンプル クライアントを実行する

シンプル クライアントは、.NET Remoting サーバーに接続し、2 人のユーザー User1 および User2 を作成します。これらのユーザーのパスワードはそれぞれ Pass1 と Pass2 です。 また、シンプル クライアントは User1 から User2 にメッセージを送信します。

  1. <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\MessageSimpleClient に移動します。
  2. MessageSimpleClient.exe をダブルクリックします。
メッセージ サーバーのコンソール ウィンドウが開きます。 2 人のユーザーが作成されて、User1 から User2 にメッセージが送信されます。
親トピック: .NET メッセージ サンプルの概要
関連タスク
シンプル クライアントを構成する


Win32 クライアントで作業する

Win32 クライアントでの作業を行う前に、シンプル クライアントを実行します。 シンプル クライアントによって、Win32 クライアントが使用できるシステム ユーザーが自動的に作成されます。

Win32 クライアントでは、アプリケーション外での構成は必要ありません。

Win32 クライアントは、Remoting サーバーの ObjectManager オブジェクトに直接接続することも、Web サービスを通してあらゆるメソッドの呼び出しを実行することもできます。 メソッド呼び出しは、Web サービスから Remoting サーバーの ObjectManager オブジェクトに転送されます。

Win32 クライアントに接続した後、新しいユーザーを作成するか、または既存のユーザーとしてログインします。 現在のユーザーを削除することもできます。 サンプル Win32 クライアントやシンプル クライアントを使用して送信されたメッセージを含む、アクティブなユーザーに対して送信されたすべてのメッセージは、メッセージ ストア内に一覧表示されます。 メッセージを削除したり、システム内の他のユーザーに新しいメッセージを送信できます。

Last Error ボックスには、メソッド実行時に発生したエラーのうち最新のエラーのエラー テキストが表示されます。

注: リモート オブジェクトに対してメソッドを呼び出している間にエラーが発生した場合、エラーの説明は Error Text ボックスに表示されます。
  1. <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\MessageWin32Client に移動して、MessageWin32Client.exe をダブルクリックします。 サンプル Win32 クライアントが起動します。
  2. Remoting サーバーまたは Web サービスに接続します。
    • .NET Remoting メッセージ サーバーにログインするには、Message Server フィールドにサーバーの URL (http://localhost:1999/ObjectManager.rem など) を入力して、Connect をクリックします。
    • サンプル Web サービスにログインするには、Web Server フィールドに Web サービスの URL (http://localhost/MessageWebService/MessageService.asmx など) を入力して、Connect をクリックします。
  3. シンプル クライアントによって作成されたユーザーのいずれかを使用してログインします。 デフォルトでは、シンプル クライアント アプリケーションによってパスワードが Pass1 の User1 と、パスワードが Pass2 の User2 が作成されます。
  4. 新しいユーザーを作成します。
  5. 新しく作成したログイン認証情報を使用してログインします。
  6. 他のユーザーにメッセージを送信します。
    注: ユーザー名では、大文字と小文字が区別されます。
  7. サーバー コンソール出力を確認します。 コンソールには、呼び出されたすべてのメソッドに関連するログ情報が表示されています。

作業を終了したら、必ずログアウトしてください。

  • 新しいユーザーを作成する
    メッセージ サンプル クライアントに新しいユーザーを作成します。
  • メッセージを送信する
    メッセージ サンプル クライアントの別のユーザーにメッセージを送信します。
親トピック: .NET メッセージ サンプルの概要


新しいユーザーを作成する

  1. 一意の Username と Password を入力します。
  2. Create User をクリックします。
親トピック: Win32 クライアントで作業する
親トピック: Web クライアントで作業する


メッセージを送信する

  1. To User フィールドに、既存のユーザー名を入力します。
  2. Message フィールドに、サンプル テキストを入力します。
  3. Send をクリックします。
親トピック: Win32 クライアントで作業する
親トピック: Web クライアントで作業する


Web クライアントで作業する

Web クライアントを使用する前に、Web サービスの URL を指定して Web クライアントを構成する必要があります。

Web クライアントでの作業を行う前に、シンプル クライアントを実行します。 シンプル クライアントによって、Web クライアントが使用できるシステム ユーザーが自動的に作成されます。

Web クライアントは、Web サービスと通信します。 Web クライアントを使用するとシステムにログインして、新しいユーザーを作成できます。 ログインすると、メッセージ ストアの表示、メッセージの削除、またはシステム内の他のユーザーへの新しいメッセージの送信が可能になります。 ユーザー名では、大文字と小文字が区別されます。 メソッドの実行中にエラーが発生した場合、そのエラーは赤字で表示されます。

  1. ブラウザを起動して、URL http://localhost/MessageWebClient/default.aspx を読み込みます。 ログイン ページが表示されます。
  2. 既存のユーザー アカウントのログイン認証情報を入力するか、または新しいユーザー アカウントを作成します (下記のタスクの手順を参照)。 最初にログインするときは、Username に User1 を、Password に Pass1 を使用します。
  3. ログイン をクリックします。 ログインすると、サンプル Win32 クライアントやシンプル クライアントを使用して送信されたメッセージを含む、アクティブなユーザーのメッセージ ストア内のメッセージを表示できる Your Message Store ページにリダイレクトされます。

    サンプル Win32 クライアントと同様に、システム内の他のユーザーにメッセージを送信することができます (下記のタスクの手順を参照)。

  4. サーバー コンソール出力ウィンドウを確認します。 ウィンドウには、ユーザーの作成、メッセージの送信、ログインなどの、Web クライアントで実行したアクティビティに関連する情報が表示されます。

作業を終了したら、必ずログアウトしてください。

  • 新しいユーザーを作成する
    メッセージ サンプル クライアントに新しいユーザーを作成します。
  • メッセージを送信する
    メッセージ サンプル クライアントの別のユーザーにメッセージを送信します。
親トピック: .NET メッセージ サンプルの概要
関連タスク
Web クライアントを構成する


.NET メッセージ サンプルのテスト

Silk Performer を使用して .NET メッセージ サンプルをテストする場合、次のようないくつかのオプションがあります。
  • Win32 クライアント アプリケーションをフックして、Web トラフィックを記録する。
  • Web クライアントでの Web セッションを記録する。
  • .NET Explorer を使用して Web サービスをテストし、Silk Performer .NET プロジェクトを生成する。
  • 新しい .NET Framework プロジェクトを作成して、Web サービスまたは .NET Remoting サーバーを直接テストする .NET テスト ドライバを記述する。
  • Win32 クライアント アプリケーションをフックする
    Win32 クライアント アプリケーション プロジェクトの作成方法、記録プロファイルの追加方法、およびスクリプトの記録方法について説明します。
  • Web クライアント セッションを記録する
    新しい Web プロジェクトの作成方法、スクリプトの記録方法、およびスクリプトの試行の実行方法について説明します。
  • .NET Web サービスをテストする
    Web サービス プロジェクトの作成方法、WSDL のロード方法、使用シナリオの定義方法、およびテストスクリプトの記録方法について説明します。
  • .NET Framework プロジェクトを作成する
    Silk Performer における .NET Framework プロジェクトの作成方法、スクリプトの記録方法、および .NET テスト ドライバのコーディング方法について説明します。
親トピック: .NET メッセージ サンプルの使用
関連タスク
.NET メッセージ サンプルをインストールする
.NET メッセージ サンプルを構成する
.NET メッセージ サンプルの概要


Win32 クライアント アプリケーションをフックする

作業を続行する前に、メッセージ サーバーを起動します。

  1. Web Services > XML/SOAP タイプの新しい Silk Performer プロジェクトを作成します。
  2. MessageWin32Client.exe 用に新しい記録プロファイルを追加します。
    1. Silk Performer アプリケーションの種類 リスト ボックスで、Custom Application を選択します。
    2. プロトコルの選択 領域で、Web チェック ボックスをオンにします。
      Silk Performer Recorder によって、すべての関数呼び出しがインターセプトされて、結果が表示されます。
  3. スクリプトの記録を開始します。
  4. MessageWin32Client を使用して、接続、ログイン、送信、ログアウトなどのアクションを実行します。
  5. 記録を終了します。 Win32 クライアント アプリケーションでの各呼び出しに対して、WebUrlPostBin の呼び出しおよび SOAP エンベロープが作成されます。
  6. 記録されたスクリプトを確認します。
  7. 記録されたスクリプトを使用して、[スクリプトの試行] を実行します。 サーバー コンソール ウィンドウで、テスト実行の詳細を監視します。
親トピック: .NET メッセージ サンプルのテスト


Web クライアント セッションを記録する

.NET Explorer

作業を続行する前に、メッセージ サーバーを起動します。

  1. Web Browser > Web business transaction のタイプの新しい Silk Performer プロジェクトを作成します。
  2. 記録を開始します：http://localhost/MessageWebClient/Default.aspx
  3. サンプル Web クライアントを使用して、接続、ログイン、送信、ログアウトなどのアクションを実行します。
  4. スクリプトの記録を終了します。
  5. 記録されたスクリプトを確認します。
  6. 記録されたスクリプトを使用して、[スクリプトの試行] を実行します。 サーバー コンソール ウィンドウで、テスト実行の詳細を監視します。
親トピック: .NET メッセージ サンプルのテスト


.NET Web サービスをテストする

作業を続行する前に、メッセージ サーバーを起動します。

注: このシナリオは、Silk Performer のインストールに格納されています。 <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\NetExplorer_TestingWebService でアクセスできます。
  1. Silk Performer を起動して、新しいプロジェクトを作成します。
  2. Web サービスから WSDL をロードします：http://localhost/MessageWebService/MessageService.asmx?WSDL
  3. 入力値として User1 および Pass1 を使用して、login メソッドを呼び出します。

    属性にマップされたランダム変数やグローバル変数を使用することもできます (詳細については、.NET Explorer のヘルプを参照)。

  4. User1 から任意のテキスト メッセージを送信します。
  5. 現在のユーザーからログアウトして、User2 としてログインします (ユーザー名は User2、パスワードは Pass2)。
  6. GetMessageCount を呼び出して、結果を mCount という変数に格納します。
  7. メッセージ数の変数を入力として使用し、GetMessage を呼び出します。 送信された最後のメッセージを受信できます。
  8. 残りのログアウト メソッド呼び出しを追加します。
  9. アニメーション実行を行います。 失敗した検証は無視できます (GetMessageCount 呼び出しのデフォルトの検証を削除することもできます)。
  10. Silk Performer .NET プロジェクトまたは Visual Studio .NET プロジェクトをエクスポートします (プロジェクトは、<public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\NetExplorerExportedProject にエクスポートされます)。
  11. Silk Performer または Visual Studio .NET を使用してスクリプトの試行を行います。
  12. TrueLog を調べます。 各 Web サービス呼び出しのノードが表示されます。
親トピック: .NET メッセージ サンプルのテスト
関連タスク
Web サービスを構成する
.NET Web サービスをテストする
.NET Remoting サーバーを起動する


.NET Framework プロジェクトを作成する

作業を続行する前に、メッセージ サーバーを起動します。

Silk Performer .NET Framework の詳細については、.NET Framework のヘルプを参照してください。

  1. .NET > Visual Studio .NET アドオンを使用した .NET Framework のタイプの新しい Silk Performer プロジェクトを作成します。
  2. スクリプトの作成 ダイアログを使用して、Visual Studio .NET を起動します。
  3. .NET テスト ドライバのコーディングを行います。
  4. .NET Remoting サーバーおよび Web サービスをテストするテスト ドライバのサンプルの実装が <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\Message Sample\SPVNetTestDriver にあります。
  5. プロジェクトを Visual Studio .NET で開き、スクリプトの試行を行います。
  6. 実行後、TrueLog を確認して、ユーザーの WRT ファイルを開きます。
サンプルによって、User1 から User2 にメッセージが送信されます (User1 は Remoting サーバーに接続しており、User2 は Web サービスに接続しています)。
親トピック: .NET メッセージ サンプルのテスト


.NET Explorer サンプル

このセクションには、.NET Explorer に同梱されている .NET Remoting および Web サービスのサンプルへのアクセス方法を説明するトピックが含まれています。 また、便利な Web リソースの一覧も提供します。

  • .NET Remoting のサポート
    RemotingLib では、1 つのリモート化可能オブジェクト (MarshalByRefObject) が実装され、1 つのインターフェイスが定義されています。
  • .NET Remoting のテスト
    .NET Remoting サンプルをテストするには、.NET Explorer を使用します。
  • .NET コンポーネント テストの概要
    テスト可能な基底クラスが netexptestdll.dll に実装されていることについて説明します。
  • サンプル Web サービス
    .NET Explorer を使用してテストできるサンプル Web サービスがいくつかあります。
  • Order Web サービス
    サンプル Order Web サービスは、.NET Explorer を使用してテストできる数多くのメソッドを備えています。
  • Web 参照
    Web サービスをテストしたり、.NET Explorer を最大限に活用するのに役立つ追加のオンライン リソースを紹介します。
親トピック: Silk Performer .NET Explorer


.NET Remoting のサポート

RemotingLib では、1 つのリモート化可能オブジェクト (MarshalByRefObject) が実装され、1 つのインターフェイスが定義されています。 インターフェイスは、<public user documents>\Silk Performer 21.0\SampleApps\DOTNET\RemotingSamples\RemotingLib から利用できます。

RemServerConsole は、リモート化可能オブジェクトをホストし、RemotingLib に定義されているインターフェイスを実装した 1 つのオブジェクトを実装する、サーバー アプリケーションです。 <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\RemotingSamples\RemServerConsole から利用できます。

すべてのソース コードが利用できます。 コードは、既にデバッグ バージョンにコンパイルされています。

親トピック: .NET Explorer サンプル


.NET Remoting のテスト

  1. .NET Explorer から Remoting サーバー アプリケーションを起動します。 Help > Start Remoting Sample を選択します。
  2. 手動で RemServConsole.exe を開始します。これは <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\RemotingSamples\RemServerConsole\bin\debug\RemServConsole.exe から利用できます。
  3. RemotingLib.dll を読み込みます。これは <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\RemotingSamples\RemServerConsole\bin\debug\RemotingLib.dll から利用できます。
  4. RemoteObject クラスのインスタンスを作成します。 RemoteObject を右クリックして、Create Remote Object を選択します。 有効化 URL を入力するように求められます。 tcp://localhost:2000 と入力します。
  5. リモート インターフェイスに接続します。
  6. RemoteInterface インターフェイスのメソッドを呼び出します。 最初に呼び出すときに、有効化 URL を入力するように求められます。 有効化 URL は、tcp://localhost:2000/RemoteInterface.rem または tcp://localhost:2000/RemoteInterfaceSCall.rem (単一呼び出しオブジェクト) です。
親トピック: .NET Explorer サンプル


.NET コンポーネント テストの概要

netexptestdll.dll に、テスト可能な基底クラスが実装されています。 このファイルは、<public user documents>\Silk Performer 21.0\SampleApps\DOTNET\netexptestdll\bin\debug\netexptestdll.dll から利用できます。

クラスのコンテキスト メニューを使用するか、またはコンストラクタを呼び出すことによって、ロードされているいずれかのオブジェクトをインスタンス化できます。 その後、作成したオブジェクトを変数に格納して、そのオブジェクトに対してメソッドを呼び出します。

親トピック: .NET Explorer サンプル


サンプル Web サービス

.NET Explorer を使用してテストできるサンプル Web サービスがいくつかあります。

  • .NET サンプル Web サービス SampleService.asmx は、単純なメソッド呼び出しを提供します。
  • ASP.NET データ型のテスト (DataTypes.asmx) は、Microsoft によって提供されているサンプル Web サービスであり、ASP.NET Framework によって提供されているさまざまなデータ型をテストできます。
  • Order Web サービス (OrderService.asmx) は、本や DVD の注文をシミュレートできるサンプル Web サービスです。
  • http://www.xmethods.net および http://www.mssoapinterop.org にも、その他のアクセス可能な Web サービスがあります。
親トピック: .NET Explorer サンプル


Order Web サービス

サンプル Order Web サービスは多数のメソッドを提供し、http://demo.borland.com/OrderWebService/OrderService.asmx で .NET Explorer を使用してテストできます。 次のメソッドを利用できます。

  • SearchArticles：名前のパターンによって商品を検索します。
  • GetArticleByName：完全な名前によって商品を検索します。
  • GetArticleById：ID によって商品を検索します。
  • CreateUser：データベースに新しいユーザーを作成します。
  • Login：既存のユーザーとしてログインします。 戻り値はユーザー ID です。ユーザー ID は他のメソッド呼び出しで必要となるため、この戻り値をグローバル変数に保存してください。
  • Logout：ユーザーをシステムからログアウトします。
  • CreateOrder：現在ログインしているユーザーで、新しい注文を作成します。
  • AddOrderItem：注文に商品を追加します。
  • GetOrder*：注文に関する情報を返します。

すべての注文関連のメソッドは、最初のパラメータとして userid を受け取ります。 そのため、Login メソッドから返されるユーザー ID をグローバル変数に保存して、すべての注文関連のメソッドの入力としてこの変数を使用する必要があります。

一部のメソッドによって、SOAP 例外が送出されることがあります (たとえば、ログインしていない状態で注文を作成しようとした場合など)。

親トピック: .NET Explorer サンプル


Web 参照

Web サービスをテストしたり、.NET Explorer を最大限に活用するのに役立つ追加のオンライン リソースを紹介します。

  • (Web サービス) http://demo.borland.com
  • (Web サービス) http://www.mssoapinterop.org/asmx/simple.asmx
  • (Web サービス) http://www.mssoapinterop.org/asmx/simpleB.asmx
  • (.NET リソース) http://msdn.microsoft.com/net
親トピック: .NET Explorer サンプル


GUI レベルのテストのサポート

GUI レベルのテストを使用すべき時

従来のクライアント/サーバー アーキテクチャを実装するアプリケーションがあることを仮定します。クライアント アプリケーションの複数のインスタンスがサーバーに同時にアクセスした場合に、どのようになるかをテストします。たとえば、従業員の勤務時間をサーバーに保存する、独自の時間管理システムなどが考えられます。ただし、アプリケーションがクライアントとサーバー間の通信に特殊なプロトコルを使用しているため、既存の Silk Performer のアプリケーションの種類は、テストに使用できません。そのような場合は、GUI レベルのテストを使用する場合があります。GUI レベルのテストを使用すると、サーバーに過負荷をかけることなくサーバーに同時にアクセスし、時間追跡システムを使用できる従業員の数を判断できます。

GUI レベルのテストの動作

以下の図に示すように、プロセスは Silk Performer コントローラで開始されます。負荷テストを開始すると、Silk Performer コントローラは、Microsoft Windows Server オペレーティング システムで実行されるエージェントに接続し、リモート デスクトップ サービス (以前のターミナル サービス) を実行します。Silk Performer エージェントによってランタイムが作成され、ランタイム内で仮想ユーザーが作成されます。各仮想ユーザーは、エージェント マシン上で新しいセッションを作成し、このセッション内で Silk Test を開始します。 Silk Test は、アプリケーションで以前に記録されたステップを実行します。つまり、Silk Test がアプリケーションを駆動します。仮想ユーザーがレスポンス時間を測定する間、アプリケーションはサーバーにアクセスし、負荷を発生させます。

マシン上または単一セッションで、アプリケーションの複数のインスタンスを実行できない場合があります。そのため、各仮想ユーザーが、エージェント マシン上で新しいセッションを作成します。このアプローチでは、Silk Performer はアプリケーションの複数のインスタンスを作成します。これらすべてがテスト対象のシステムに同時にアクセスします。

GUI レベルのテスト環境の設定

  1. いずれかの Microsoft Windows Server Edition がインストールされている、最低 1 台のエージェント マシンを設定します。
  2. マシンに Silk Performer エージェントをインストールします。
  3. Silk Test をインストールします。
  4. クライアント アプリケーションをインストールします。
  5. Silk Test を使用して、アプリケーションを使用した 1 つ以上のテスト ケースをモデル化します。
  6. Silk Test プロジェクトを使用する Silk Performer GUI レベルのテスト プロジェクトを作成し、テスト対象のシステムに対する定義済みテスト ケースを実行します。

これらすべてのステップを実行すると、Silk Performer で負荷テストを開始できるようになります。

注: 次の Silk Test クライアントを GUI レベルのテストで使用できます：Silk Test Classic、UFT Developer (Silk4J)、および UFT Developer (Silk4NET)。GUI レベルのテストとして UFT Developer (Silk4J) と UFT Developer (Silk4NET) を使用する場合、すべての要件が一致することを確認します。詳細については「UFT Developer (Silk4J) と UFT Developer (Silk4NET) を使用した GUI レベルのテストの要件」を参照してください。

GUI レベルのテストと呼ばれるのはなぜですか?

Silk Test は、グラフィカル ユーザー インターフェイス (つまり、GUI レベル) で直接テストを実行します。このアプローチでは、エージェント マシンのいずれかのセッションに接続している場合、たとえば、マウスのクリックやキーボード入力など、Silk Test が記録したテスト ステップをどのように実行するかを監視できます。

GUI レベルのテストの関数

Silk Performer が提供する BDL 関数の詳細については、『Silk Performer BDL Function Reference』(英語) を参照してください。

注: Silk Test は、ローカル ホスト モードで開始できます。この方法では、仮想ユーザーは、別個の Windows セッションではなくコンソール セッションを使用します。
注: GUI レベルのテストは、Windows Server Edition のプラットフォームでのみ利用できます。Windows Home Edition または Professional Edition は、GUI レベルのテストにおける 1 仮想ユーザーのエージェントとしてのみ使用できます。

単一セッションの GUI レベルのテスト

Google Chrome、Mozilla Firefox を使用した Web アプリケーションに対するテストでは、Silk Performer はすべての仮想ユーザーを単一の Windows セッションで実行することができます。このメリットとして、リモート デスクトップ ライセンスが不要なこと、仮想ユーザーごとのリソース消費が従来の GUI レベルのテストでのアプローチと比較して大幅に低いことが上げられます。

  • GUI レベルのテストのために Windows を構成する
    GUI レベルのテストを実行する前に、Windows オペレーティングシステムを構成し、Silk Test をインストールする必要があります。
  • GUI レベルのテストの実行
    Silk Performer と Silk Test を使用した GUI レベルのテストを実行する方法を説明します。
  • UFT Developer (Silk4J) と UFT Developer (Silk4NET) を使用した GUI レベルのテストの要件
    GUI レベルのテストに対して UFT Developer (Silk4J) と UFT Developer (Silk4NET) を使用するための要件をリストします。
  • GUI レベルのテストのスケーラビリティ シナリオ
    GUI レベルの 負荷テスト のスケーラビリティに関する情報が含まれています。このスクリプトは、同じシステム環境で異なる仮想ユーザー数と期間を使用して一連のシナリオを実行するときに、Silk Performer で実行されます。
  • GUI レベルのテストの問題のトラブルシューティング
    GUI レベルのテストの問題を特定および解決します。そのためには、関連する 3 つのコンポーネント (Silk Performer、Silk Test、および Windows/ターミナル サービス/リモート デスクトップ サービス) についてよく知っている必要があります。
親トピック: 特定のアプリケーションの種類に対する負荷テスト
関連概念
Silk Test Automation Functions Overview
GUI-Level Testing Functions
関連タスク
Silk Test の結果を検討する
GUI レベルのテストのために Windows を構成する
GUI レベル テスト オプションを設定する


GUI レベルのテストのために Windows を構成する

GUI レベルのテストを実行する前に、Windows オペレーティングシステムを構成する必要があります。また、Silk Test を、エージェント コンピュータにインストールしなければなりません (詳細については、Silk Test のヘルプを参照してください)。

  • GUI レベルのテストのために Windows 2008 R2 を構成する
    Windows 2008 R2 コンピュータでテストを有効にするために構成する必要があるいくつかの設定について説明します。
  • GUI レベルのテストのために Windows 2012 から 2019 を構成する
    Windows 2012、2016、2019 マシンでテストを有効にするために構成する必要があるいくつかの設定について説明します。
  • Windows Server Edition のライセンスを追加で入手する
    Windows Server Edition は、リモート デスクトップ セッションに対して複数のライセンスを提供します。これは、単一のセッションにおいて接続を複数確立できることを意味します。
親トピック: GUI レベルのテストのサポート


GUI レベルのテストのために Windows 2008 R2 を構成する

このタスクを実行する前に、サーバーの役割「Remote Desktop Services」がインストールされていることを確認してください。

  1. Remote Desktop Protocol (RDP) を有効にします。 RDP は、デフォルトでは無効になっています。
    1. Windows の コントロール パネル > システムとセキュリティ システム を開きます。
    2. リモートの設定 リンクをクリックします。
    3. リモート デスクトップを実行しているコンピュータからの接続を許可する (セキュリティのレベルは低くなります) チェック ボックスをオンにします。
    4. OK をクリックします。
  2. RDP ユーザーがリモートでアプリケーションを起動できるようにします。
    1. 管理ツール > リモート デスクトップ サービス > RemoteApp Manager に移動します。
    2. RD セッション ホスト サーバー設定 の隣の 変更 クリックします。
    3. 一覧にないプログラムへのアクセス グループ ボックスで、初期接続時に一覧にないプログラムとあるものの両方の起動を許可する チェック ボックスをオンにします。
    4. OK をクリックします。
  3. RDP ユーザーが複数のセッションを実行できるようにします。
    1. 管理ツール > リモート デスクトップ サービス > リモート デスクトップ セッション ホストの構成 に移動します。
    2. 1 ユーザーにつき 1 セッションに制限する をダブルクリックします。 プロパティ ダイアログ ボックスが表示されます。
    3. 1 ユーザーにつき 1 セッションに制限する のチェック ボックスをオフにします。
    4. OK をクリックします。
  4. リモート デスクトップ設定を構成する
    1. 管理ツール > リモート デスクトップ サービス > リモート デスクトップ セッション ホストの構成 に移動します。
    2. 接続 リストの リモート デスクトップ プロトコル-TCP (RDP-Tcp) を右クリックしてから、プロパティ をクリックします。
    3. ログオン設定 タブをクリックし、常にパスワードの入力を求める が無効化されていることを確認します。
    4. セッション タブをクリックし、ユーザー設定より優先にする が選択されていて、切断されたセッションを終了 が 1 分 に設定されていることを確認します。その他のすべての設定が、空欄のままか、無効化されていることを確認します。
    5. 環境 タブをクリックし、ユーザー プロファイルおよびリモート デスクトップ接続またはクライアントで指定された初期プログラムを実行する が有効化されていることを確認します。
    6. ログオン設定 タブをクリックし、常にパスワードの入力を求める が有効化されていることを確認します。
    7. ネットワーク アダプタ タブをクリックし、ネットワーク アダプタ リストで、このプロトコルで構成されたすべてのネットワーク アダプタ が選択されていることを確認します。
    8. OK をクリックします。
  5. ユーザー アカウント制御 (UAC) はデフォルトで有効になっていますが、GUI レベルのテストでは必要ありません。UAC をオンのままにしておく場合は、エージェントをユーザー アカウントの下で実行する必要があります。 UAC 設定を設定するには、以下の操作を実行します。
    1. コントロール パネル > ユーザー アカウント > ユーザー アカウント > ユーザー アカウント ユーザー アカウント制御設定の変更 に移動します。
    2. UAC 通知レベルを希望するレベルに変更します。
    3. OK をクリックします。
  6. Windows のユーザーおよびグループ管理機能を使用して、GUI レベル テストを実行できるローカル ユーザーを選択します。このユーザーが Administrators グループおよび Remote Desktop Users グループ、またはそのいずれかのグループのメンバであることを確認します。
親トピック: GUI レベルのテストのために Windows を構成する


GUI レベルのテストのために Windows 2012 から 2019 を構成する

このタスクを実行する前に、Remote Desktop Services が有効になっており、そのマシンに管理者権限を持つドメイン ユーザーでログインできることを確認してください。

  1. 切断されたユーザーに対する制限時間を設定します。
    注: 制限時間の設定は、Windows グループ ポリシー、または リモート デスクトップ サービス コレクションのいずれかで行うことができます。グループ ポリシーでの設定は、リモート デスクトップ サービス コレクションでの設定よりも優先されます。
    グループ ポリシー：
    1. Windows ローカル グループ ポリシー エディター を開始し、 ローカル コンピュータ ポリシー > コンピュータの構成 > 管理用テンプレート > Windows コンポーネント > リモート デスクトップ サービス > リモート デスクトップ セッション ホスト > セッションの時間制限 に移動します。
    2. Double-click 切断されたセッションの制限時間を設定する をブルクリックします。
    3. 有効 をクリックします。
    4. 切断されたセッションの終了 で、1 分を選択します。
    リモート デスクトップ サービス コレクション：
    1. Windows サーバー マネージャー を開始し、 リモート デスクトップ サービス > コレクション > <コレクションの名前> に移動します。プロパティ 領域で、 タスク メニューから プロパティの編集 を選択します。
    2. セッション コレクション ダイアログで、 セッション を選択します。
    3. 切断されたセッションの終了 で、1 分を選択します。
    4. OK をクリックします。
  2. RDP ユーザーが複数のセッションを実行し、すべてのプログラムを起動できるようにします。
    1. Windows ローカル グループ ポリシー エディター を開始し、 ローカル コンピュータ ポリシー > コンピュータの構成 > 管理用テンプレート > Windows コンポーネント > リモート デスクトップ サービス > リモート デスクトップ セッション ホスト接続 に移動します。
    2. リモート デスクトップ サービス ユーザーに対してリモート デスクトップ サービス セッションを 1 つに制限する をダブルクリックします。
    3. 無効 オプションをクリックします。
    4. OK をクリックします。
    5. 一覧にないプログラムをリモートから起動できるようにする をダブルクリックします。
    6. 有効 オプションをクリックします。
    7. OK をクリックします。
  3. ユーザー アカウント制御 (UAC) はデフォルトで有効になっていますが、GUI レベルのテストでは必要ありません。UAC をオンのままにしておく場合は、エージェントをユーザー アカウントの下で実行する必要があります。 UAC 設定を設定するには、以下の操作を実行します。
    1. コントロール パネル > ユーザー アカウント > ユーザー アカウント > ユーザー アカウント ユーザー アカウント制御設定の変更 に移動します。
    2. UAC 通知レベルを希望するレベルに変更します。
    3. OK をクリックします。
  4. Remote Desktop Users グループにユーザーを追加します。
    1. サーバー マネージャー > ツール > コンピューターの管理 > ローカル ユーザーとグループ > グループ で、Remote Desktop Users グループをダブルクリックし、GUI レベルのテストを実行させるローカル ユーザーを追加します。
    2. テストの実行中に GUI レベルのテスト ユーザーに管理者権限が必要な場合は、同様に Administrators グループにも追加します。
親トピック: GUI レベルのテストのために Windows を構成する


Windows Server Edition のライセンスを追加で入手する

Windows Server Edition は、リモート デスクトップ セッションに対して複数のライセンスを提供します。これは、単一のセッションにおいて接続を複数確立できることを意味します。

Windows Server Edition では、2 つのフリー ライセンスがリモート デスクトップ セッションのために用意されています。 Windows Home Edition および Professional Edition は、GUI レベルのテストにおける 1 仮想ユーザーのエージェントとしてのみ使用できます。

  1. スタート > ... > コントロール パネル > プログラムの追加と削除 に移動します。
  2. Windows コンポーネントの追加と削除 ボタンをクリックします。
  3. Windows コンポーネント ウィザード で、ターミナル サーバー チェック ボックスまでスクロールしてオンにします。
  4. 次へ をクリックして、Windows システムに対してアプリケーション モードを有効にします。
    注: アプリケーション モードでは、ライセンス サーバーが必要になります。 ライセンス サーバーを入手するための情報については、Microsoft にお問い合わせください。
  5. コンピュータを再起動します。
親トピック: GUI レベルのテストのために Windows を構成する


GUI レベルのテストの実行

  • GUI レベルのテストを作成する（キーワード駆動）
    Silk Test のキーワード駆動テスト資産をインポートする方法について説明します。
  • GUI レベルのテストを作成する（UFT Developer (Silk4J)）
    UFT Developer (Silk4J) のテスト資産をインポートする方法について説明します。
  • GUI レベルのテストを作成する（UFT Developer (Silk4NET)）
    UFT Developer (Silk4NET) のテスト資産をインポートする方法について説明します。
  • GUI レベルのテストを作成する（Silk Test Classic）
    Silk Test Classic のテスト資産をインポートする方法について説明します。
  • Silk Test テストを Silk Performer にエクスポートする
    UFT Developer (Silk4J) テストを Eclipse から、UFT Developer (Silk4NET) テストを Visual Studio から Silk Performer にエクスポートする方法について説明します。
  • GUI レベルのテストのユーザー資格情報
    テストにおける仮想ユーザーのログイン資格情報を構成する必要があります。
  • GUI レベルのテストのタイマ
    Silk Test Classic、UFT Developer (Silk4J)、UFT Developer (Silk4NET) スクリプトにタイマを追加して、Silk Performer のテスト結果にレポートすることができます。
  • GUI レベルのテストの結果ファイル
    GUI レベルのテストの間、TrueLog とその他の結果ファイルが、Silk Test と Silk Performer によって生成されます。
  • Silk Test の結果を検討する
    Silk Test を Silk Performer から直接起動して、Silk Test の .res 結果ファイルを分析できます。
親トピック: GUI レベルのテストのサポート


GUI レベルのテストを作成する（キーワード駆動）

  1. メニューから ファイル を選択して プロジェクトの新規作成 をクリックします。ツリーで、GUI-Level Testing をクリックし、Silk Test をクリックします。名前 と 説明 を入力し、次へ をクリックします。
  2. ファイル フィールドに、パフォーマンス テストで使用する Silk Test 資産を指定します。Silk Performer は、ファイルの種類を自動的に検出し、下にある適切なボタンを有効にします。
  3. キーワード駆動テストのインポート をクリックします。
  4. テスト 領域で、インポートするキーワード駆動テストを選択します。
  5. インポート オプション　を指定します。
    • パラメータを無視する：キーワード駆動テストのパラメータをインポートしたテストに含めません。
    • スクリプト パラメータ（静的文字列）：パラメータを静的文字列として直接スクリプトに追加します。
    • スクリプト パラメータ（CSV ファイルから）：パラメータを .csv ファイルに保存し、スクリプトから参照します。.csv ファイルがプロジェクトに追加され、プロジェクト ツリーから表示できます。
  6. 行選択の順序 を指定します。
    • ランダム：BDL 関数 FileGetRndRow がスクリプトに追加されます。
    • シーケンシャル - コンピュータ全体：BDL 関数 FileGetNextRow がスクリプトに追加されます。
    • シーケンシャル - テスト全体：BDL 関数 FileGetNextUniqueRow がスクリプトに追加されます。
  7. ドロップダウン リストから Web ブラウザ を選択します。このリストは、インポートするファイルが Silk Test Web プロジェクトの場合にのみ有効になります。Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できます。
  8. セッション ログインにプロジェクト属性を使用する をオンにすると、Silk Performer は プロジェクト属性 で定義した資格情報を使用してセッションにログインします。プロジェクト属性を編集するには、プロジェクト > プロジェクト属性 をクリックします。資格情報は、スクリプトの TInit トランザクションに追加されます。
    注: Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できるため、ログイン資格情報は必要ありません。それでも、セッション ログインにプロジェクト属性を使用する を有効にすることは、スクリプトのカスタマイズを行う場合に有用になる場合があります。
  9. OK をクリックして .bdf ファイルを保存します。
Silk Performer はテスト資産をインポートして、適切な .bdl スタブを生成します。
親トピック: GUI レベルのテストの実行


GUI レベルのテストを作成する（UFT Developer (Silk4J)）

  1. メニューから ファイル を選択して プロジェクトの新規作成 をクリックします。ツリーで、GUI-Level Testing をクリックし、Silk Test をクリックします。名前 と 説明 を入力し、次へ をクリックします。
  2. ファイル フィールドに、パフォーマンス テストで使用する Silk Test 資産を指定します。Silk Performer は、ファイルの種類を自動的に検出し、下にある適切なボタンを有効にします。
  3. UFT Developer (Silk4J) テストのインポート をクリックします。
  4. ファイル フィールドに、テストするアーカイブを指定します。 このアーカイブは、自動的にプロファイル クラスパスに追加されます。次に、利用可能なクラスが取得されて、クラス フィールドにアルファベット順に表示されます。
  5. クラス リストから、テストに利用可能なクラスを 1 つ選択します。
    テスト用に特定のアーカイブを指定しない場合は、ウィザードを利用して、プロファイル クラスパスで利用可能なクラスを指定できます。クラス フィールドには、完全なクラス名を入力します (例：java.lang.String)。 利用可能なコンストラクタとメソッドが、自動的に取得されて表示されます。
  6. メソッド 領域で、呼び出したいメソッドを選択します。
  7. メソッド 領域に表示されるメソッドをフィルタリングするには、以下の手順を実行します。
    1. 詳細 ボタン (メソッド 領域の上のじょうご型アイコン) をクリックします。
    2. フィルタ設定をカスタマイズしたら、OK をクリックして、メソッド 領域を更新します。
  8. Java バージョン、Java ホーム ディレクトリ、または JVM DLL を含む、全般的な Java 設定を変更するには、アクティブ プロファイルの設定 リンクをクリックします。 プロファイル - [<プロファイル名>] - Java ダイアログが開き、Java プロジェクト用 (JUnit プロジェクト タイプ) の 全般 ページが表示されます。
    注: これらの設定 (Java クラスパスなど) を変更すると、異なる結果になる場合があります。クラス、コンストラクタ、および メソッド の各フィールドでの選択が、新しい結果によって更新されます。
    注: Java バージョン、Java ホーム ディレクトリ、または、JVM DLL を変更した場合は、Silk Performer を再起動して変更を有効にする必要があります。
  9. ドロップダウン リストから Web ブラウザ を選択します。このリストは、インポートするファイルが Silk Test Web プロジェクトの場合にのみ有効になります。Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できます。
  10. セッション ログインにプロジェクト属性を使用する をオンにすると、Silk Performer は プロジェクト属性 で定義した資格情報を使用してセッションにログインします。プロジェクト属性を編集するには、プロジェクト > プロジェクト属性 をクリックします。資格情報は、スクリプトの TInit トランザクションに追加されます。
    注: Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できるため、ログイン資格情報は必要ありません。それでも、セッション ログインにプロジェクト属性を使用する を有効にすることは、スクリプトのカスタマイズを行う場合に有用になる場合があります。
  11. OK をクリックして .bdf ファイルを保存します。
Silk Performer はテスト資産をインポートして、適切な .bdl スタブを生成します。
親トピック: GUI レベルのテストの実行


GUI レベルのテストを作成する（UFT Developer (Silk4NET)）

  1. メニューから ファイル を選択して プロジェクトの新規作成 をクリックします。ツリーで、GUI-Level Testing をクリックし、Silk Test をクリックします。名前 と 説明 を入力し、次へ をクリックします。
  2. ファイル フィールドに、パフォーマンス テストで使用する Silk Test 資産を指定します。Silk Performer は、ファイルの種類を自動的に検出し、下にある適切なボタンを有効にします。
  3. UFT Developer (Silk4NET) テストのインポート をクリックします。
  4. ファイル フィールドに、テストするアーカイブを指定します。 次に、利用可能なクラスが取得されて、クラス フィールドにアルファベット順に表示されます。
  5. クラス リストから、テストに利用可能なクラスを 1 つ選択します。クラス フィールドには、完全なパスのクラス名を入力します。利用可能なメソッドが、自動的に取得されて表示されます。
  6. メソッド 領域で、呼び出したいメソッドを選択します。
  7. メソッド 領域に表示されるメソッドをフィルタリングするには、以下の手順を実行します。
    1. 詳細 ボタン (メソッド 領域の上のじょうご型アイコン) をクリックします。
    2. フィルタ設定をカスタマイズしたら、OK をクリックして、メソッド 領域を更新します。
  8. 全般的な .NET 設定を変更するには、アクティブ プロファイルの設定 リンクをクリックします。 プロファイルの設定 ダイアログの .NET/全般 ページが開きます。
  9. ドロップダウン リストから Web ブラウザ を選択します。このリストは、インポートするファイルが Silk Test Web プロジェクトの場合にのみ有効になります。Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できます。
  10. セッション ログインにプロジェクト属性を使用する をオンにすると、Silk Performer は プロジェクト属性 で定義した資格情報を使用してセッションにログインします。プロジェクト属性を編集するには、プロジェクト > プロジェクト属性 をクリックします。資格情報は、スクリプトの TInit トランザクションに追加されます。
    注: Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できるため、ログイン資格情報は必要ありません。それでも、セッション ログインにプロジェクト属性を使用する を有効にすることは、スクリプトのカスタマイズを行う場合に有用になる場合があります。
  11. OK をクリックして .bdf ファイルを保存します。
Silk Performer はテスト資産をインポートして、適切な .bdl スタブを生成します。
親トピック: GUI レベルのテストの実行


GUI レベルのテストを作成する（Silk Test Classic）

  1. メニューから ファイル を選択して プロジェクトの新規作成 をクリックします。ツリーで、GUI-Level Testing をクリックし、Silk Test をクリックします。名前 と 説明 を入力し、次へ をクリックします。
  2. ファイル フィールドに、パフォーマンス テストで使用する Silk Test 資産を指定します。Silk Performer は、ファイルの種類を自動的に検出し、下にある適切なボタンを有効にします。
  3. Silk Test Classic テストのインポート をクリックします。
  4. インポートするテストケース ファイルが Silk Test パッケージ ファイル（.stp）内にある場合、Silk Test パッケージ ファイルを開く を選択し、Silk Test パッケージ フィールドにファイルを指定します。
  5. テストケース ファイルをインポートする場合は、Silk Test スクリプト ファイルを開く を選択し、スクリプト ファイル フィールドにファイルを指定します。
  6. リストから テストケース を選択します。
  7. (省略可能) 必要に応じて、Silk Test Classic のテスト データを選択したテストケースに追加できます。["<テストケース名>",<テスト データ>] (たとえば、["test", 10]) という形式を使用して、テスト データを テスト データ フィールドに入力します。
  8. 追加 をクリックします。選択したテストケースが、下の テストケース フィールドに表示されます。
  9. 必要に応じて、この手順を繰り返してプロジェクトにテストケースを追加します。
  10. ドロップダウン リストから Web ブラウザ を選択します。このリストは、インポートするファイルが Silk Test Web プロジェクトの場合にのみ有効になります。Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できます。
  11. セッション ログインにプロジェクト属性を使用する をオンにすると、Silk Performer は プロジェクト属性 で定義した資格情報を使用してセッションにログインします。プロジェクト属性を編集するには、プロジェクト > プロジェクト属性 をクリックします。資格情報は、スクリプトの TInit トランザクションに追加されます。
    注: Silk Test Web プロジェクトでは、GUI レベルのテストの「単一セッション」の概念を利用できるため、ログイン資格情報は必要ありません。それでも、セッション ログインにプロジェクト属性を使用する を有効にすることは、スクリプトのカスタマイズを行う場合に有用になる場合があります。
  12. OK をクリックして .bdf ファイルを保存します。
Silk Performer はテスト資産をインポートして、適切な .bdl スタブを生成します。
親トピック: GUI レベルのテストの実行
関連タスク
GUI レベル テスト オプションを設定する


Silk Test テストを Silk Performer にエクスポートする

エクスポートを始める前に、Silk Performer がコンピュータにインストールされていることを確認してください。
  1. Silk Test テストを Eclipse および Visual Studio からエクスポートできます。
    • Eclipse を開始し、UFT Developer (Silk4J) テストを開くか、または作成します。
    • Visual Studio を開始し、UFT Developer (Silk4NET) テストを開くか、または作成します。
  2. パフォーマンス テストとしてエクスポート 機能を使用します。
    • Eclipse のツールバーから Silk Test アイコンをクリックし、パフォーマンス テストとしてエクスポート をクリックします。
    • Visual Studio のメニューから UFT Developer (Silk4NET) をクリックし、パフォーマンス テストとしてエクスポート をクリックします。
Silk Performer が起動し、スクリプトの作成 ダイアログが表示されます。必要なオプションを選択し、インポート処理を完了します。 その後、Silk Performer は .bdf ファイルを作成し、必要なすべてのファイルをプロジェクトに追加します。
親トピック: GUI レベルのテストの実行


GUI レベルのテストのユーザー資格情報

次の領域において GUI レベルのテストのユーザー資格情報を指定できます。

  • プロファイル設定
  • プロジェクト属性 (GUI レベルのテスト プロジェクトの作成時に、プロジェクト属性 username と password は自動的に定義されます)
  • BDL スクリプトで指定されたプレーン テキスト
  • データ ファイルからのインポート
注: GUI レベルのテストで使用されるユーザー アカウントが、リモート エージェント上の Remote Desktop Users Windows グループのメンバになっていることを確認します。

別個のログイン資格情報を使用して各仮想ユーザーを接続する場合、プロジェクト属性を使用して資格情報を指定するか、データ ファイルを介してスクリプトのカスタマイズを使用します。

同じログイン資格情報を使用して各仮想ユーザーを接続する場合、プロファイル設定または BDL スクリプトのプレーン テキストを使用して資格情報を指定します。

注: プロファイル設定で指定されたユーザー資格情報は、上記のその他のオプションが使用されていない場合にのみ使用されます。 上記の領域でユーザー資格情報が 1 つも指定されていない場合、Silk Performer はリモート デスクトップ プロトコルを使用せずにコンソール セッションに接続します。 そのような場合、エージェントごとに 1 つの仮想ユーザーのみを実行できます。
親トピック: GUI レベルのテストの実行
関連概念
データ ファイル
Project Attributes
関連タスク
GUI レベル テスト オプションを設定する


GUI レベルのテストのタイマ

タイマは GUI レベルの負荷テストの中心的な機能です。Silk Test Classic、UFT Developer (Silk4J)、UFT Developer (Silk4NET) スクリプトにタイマを追加して、Silk Performer のテスト結果にレポートすることができます。Silk Test スクリプトでのタイマの作成の詳細については、『Silk Test ヘルプ』を参照してください。

Silk Performer は名前のない Silk Test タイマの名前を自動的に生成します。

キーワード駆動テストを実行すると、各キーワードの実行時間が自動的に記録されます。

親トピック: GUI レベルのテストの実行


GUI レベルのテストの結果ファイル

最新のスクリプトの試行に対する TrueLog ファイルは、Silk Performer プロジェクト ディレクトリの RecentTryScriptTest ディレクトリにあります。 GUI レベルのテストの間、拡張子 .xlgs を持つ一時 Silk Test TrueLog ファイルが書き込まれます。 各 Silk Test テストケースの実行が終わると、Silk Test .xlgs の結果と Silk Performer .xlgs ファイルの結果が Silk Performer .xlgs ファイル (仮想ユーザーごと) にマージされ、一時 .xlgs ファイルは削除されます。

Silk Performer プロジェクト ディレクトリの RecentTryScriptTest ディレクトリには、Silk Test .xlgs 結果ファイルも含まれています。 これらのファイルは、 結果の Silk Test 検討 コマンドを実行したときに、Silk Test に表示されます。

親トピック: GUI レベルのテストの実行


Silk Test の結果を検討する

  1. Silk Performer で、仮想ユーザーのプロファイルを右クリックします。
  2. コンテキスト メニューから 結果の Silk Test 検討 を選択します。 Silk Test が起動され、対応する Silk Test の .res 結果ファイルを分析できます。 コンテキスト メニューから TrueLog の検討 を選択して、TrueLog Explorer でスクリプトの試行の TrueLog を表示することもできます。 結果 タブをクリックすると、テスト結果が Silk Performer に直接表示されます。
親トピック: GUI レベルのテストの実行
関連概念
テスト結果の検討
GUI レベルのテストのサポート


UFT Developer (Silk4J) と UFT Developer (Silk4NET) を使用した GUI レベルのテストの要件

GUI レベルのテストに対して UFT Developer (Silk4J) を使用する場合、次の要件が一致することを確認します。
  • Silk Test 15.0 以降がインストールされていること。
GUI レベルのテストに対して UFT Developer (Silk4NET) を使用する場合、次の要件が一致することを確認します。
  • Silk Test 15.0 以降がインストールされていること。
  • .NET Framework のテスト エージェントがインストールされていること。
  • テスト ファイルのビルドに使用された MSTest と同じバージョンが必要です。
    注: Silk Performer は、テスト マシン上にインストールされた最新のバージョンの MSTest を常に使用します。テスト ファイルのビルドに使用したバージョンが、テスト マシンにインストールされている最新のバージョンと異なる場合には、TrueLog ファイルの UFT Developer (Silk4NET) 情報が失われます。
親トピック: GUI レベルのテストのサポート


GUI レベルのテストのスケーラビリティ シナリオ

システム テスト環境

  • Silk Performer 2019
  • Silk Test 21.0
  • 4 GB RAM
  • BroadCom 57xx ギガビット コントローラ
  • デュアル プロセッサ (2 x 2.4 GHz)
  • 167 GB のハード ディスク空き領域
注: 以下の結果はガイドラインとしてのみ使用してください。テスト対象アプリケーション、および特定の Silk Performer エージェント マシンの利用可能なリソースにより、結果が異なる場合があります。

テスト シナリオ

以下の表には、Insurance Demo アプリのような Web アプリケーションを、GUI レベルのテストを使って仮想ユーザーがページを操作する際のメモリ消費量を、 Silk Test タイプごとに見積った値を表示します。仮想ユーザーごとのメモリ消費量は、AUT（ブラウザとアプリ）に強く依存します。 対応するドライバ テクノロジのプロセスだけが表に示されています。

 |  | プライベート メモリ
Silk Test タイプ | 仮想ユーザー | PerfRun.exe | openAgent.exe | PerfSm.exe | 補助プロセス
Silk Test Classic | 1 | 15,5 MB | 861 MB | 2 MB | partner.exe - 19 MB
Silk Test Classic | N | N x 15,5 MB | N x 861 MB | N x 2 MB | N x 19 MB
UFT Developer (Silk4J) | 1 | 15,5 MB | 861 MB | 36,5 MB |
UFT Developer (Silk4J) | N | N x 15,5 MB | N x 861 MB | N x 36,5 MB |
UFT Developer (Silk4NET) | 1 | 15,5 MB | 680 MB | 2,5 MB | vstest.console.exe - 25 MB testhost_x86.exe - 35 MB
UFT Developer (Silk4NET) | N | N x 15,5 MB | N x 680 MB | N x 2,5 MB | N x 60 MB

追加情報

複数のプロセッサを使用するマシン上で 負荷テスト を実行する場合の追加情報：

マシン上で使用可能な CPU より多くの再生エンジン (PerfRun.exe) を装備している限り、Silk Performer での現時点の GUI レベルのサポートの実装には Silk Performer エージェントのインストールで使用できるプロセッサ数に関する制限はありません。負荷テスト シナリオの実行中、Silk Performer 再生エンジン (PerfRun.exe) は、ラウンド ロビン方式で特定のプロセッサが割り当てられます。たとえば、PerfRun.exe1 を CPU1 に、PerfRun.exe2 を CPU2 に、PerfRun.exe3 を CPU3 に、perfRun.exe4 を CPU4 に、のように続きます。

親トピック: GUI レベルのテストのサポート


GUI レベルのテストの問題のトラブルシューティング

GUI レベルの問題をトラブルシューティングするときは、3 つの各コンポーネント (Silk Performer、Silk Test、および Windows/ターミナル サービス/リモート デスクトップ サービス) が GUI レベルのテストの実行中に統合して役割を果たすことに注意することが重要です。つまり、エラーの根本原因を分離しようとするときに、それらの各コンポーネントについて考慮する必要があります

ステップ 1： Windows のテスト環境の構成

注: このセクションに記載された問題の解決策については、「Micro Focus Knowledge Base」を開き、Resolution ID を入力して検索してください。

最初の考慮事項は、Silk Performer が複数の GUI レベルの仮想ユーザーを実行できるのは、ターミナル サービス/リモート デスクトップ サービスがインストールされていて、ライセンスがあり、構成されている Microsoft Windows オペレーティング システム上でのみということです。 複数の GUI レベルの仮想ユーザーを Microsoft Windows マシンで実行しようとすると、エラー メッセージ StInitSession(GUI-Level Testing Replay: 10 - Virtual user information, Silk Test Connection timeout reached が表示されます。

解決 ID： 17256、17231

次の、おそらく最も重要であるステップは、それぞれのターミナル セッションにおいて各 Silk Performer 仮想ユーザーが Silk Test テストケースを実行できるように Windows ターミナル サービス/リモート デスクトップ サービスを構成することです。 したがって、以下の各設定を以下の解決法に指定されるとおりに構成することがきわめて重要です。

解決 ID： 17255

Windows ターミナル サービス/リモート デスクトップ サービスを上記に推奨されるように構成していない場合は、次のようなエラー メッセージが表示されることに注意してください。GUI-Level Testing Replay:10 - Virtual user information, RDP not connected

解決 ID： 20117

ターミナル サービス/リモート デスクトップ サービスを構成すると、最後に構成チェックが行われ、 (テストケースの生成に) 正しいバージョンの Silk Test を使用していて、GUI レベルの負荷テストに正しい Silk Performer ライセンスが利用可能であることを確認します。

解決 ID： 17168、17148

ステップ 2： プロキシ サーバーの構成

状況によっては、Silk Performer スクリプトを Silk Test インターフェイスを介して記録する場合、結果として生成される BDF ファイルに Silk Performer 関数が含まれません。 この問題を解決するには、以下の手順を実行します。

  1. Internet Explorer を起動し、ツール > インターネット オプション を選択します。
  2. 接続タブを選択します。
  3. LAN の設定 をクリックします。 ローカル エリア ネットワーク (LAN) の設定ダイアログ ボックスが開きます。
  4. LAN にプロキシ サーバーを使用するチェックボックスをオンにします。
  5. アドレス フィールドに、localhost と入力します。
  6. ポート フィールドに、8080 と入力します。
  7. OK をクリックします。

ステップ 3： Silk Test の構成およびテストケースの生成

注: このセクションに記載された問題の解決策については、「Micro Focus Knowledge Base」を開き、Resolution ID を入力して検索してください。

Silk Test を使用して Silk Performer で実行するためのテストケースを生成する場合は、そのテストケースが最終的にターミナル サービス/リモート デスクトップ サービス環境において Silk Performer によって実行されることを考慮することが重要です。 つまり、完全なバージョンの Silk Test が Silk Performer エージェントにインストールされていることを確認し、インストールされていないと Silk Performer によってエラー メッセージ GUI-Level Testing Replay:7 - Application could not be launched が表示されることを考慮する必要があります。

解決 ID： 17181

Silk Test プロジェクトを Silk Performer にエクスポートするときに、Silk Test 用に構成されているディレクトリ パスが使用可能であることを確認します。使用できない場合、Silk Performer ランタイム エンジンはテスト時にアプリケーションを起動するために使用するディレクトリ パスを指定できない場合があります。 グローバル パスを設定していないと、次のようなエラー メッセージが表示されます。Error:Directory XXXX does not exist"

解決 ID： 17204

最後に、Silk Test プロジェクトを Silk Performer にエクスポートする前に、正しい設定を使用してプロジェクトをエクスポートしていることが重要です。 そうでない場合、次のエラーが表示される場合があります。GUI-Level Testing Replay:11 SilkTest reported. Project failed to open 以下の解決法では、プロジェクトを Silk Test からエクスポートする場合に行ってはいけない手順の結果と正しい方法の両方について説明します。

解決 ID： 17200

ステップ 4： Silk Performer 構成および一般的な GUI レベルの再生エラー

注: このセクションに記載された問題の解決策については、「Micro Focus Knowledge Base」を開き、Resolution ID を入力して検索してください。

GUI レベルの問題をトラブルシューティングするときに確認する最後のコンポーネントは、Silk Performer です。 GUI レベルの BDF スクリプトを Silk Performer で再生する前に、エンド ユーザーがまず考慮する必要があるのは、通常のコンソール セッションを使用して Silk Performer で Silk Test テストケースを実行することと、ターミナル サーバー セッションを使用して、Silk Test テストケースを実行することには大きな違いがあるということです。 BDF スクリプトをコンソール セッションとして起動することとターミナル サーバー セッションとして起動することの大きな違いについては、次の解決法で詳細に説明します。

解決 ID： 17258

Silk Performer で実行可能なセッションの種類の違いを理解しておらず、ターミナル サーバー セッションを実行するように Silk Performer に設定していないと、一般的な再生エラーが表示されます。GUI-Level Testing Replay:10 - Virtual user information, More than 1 user per Session is not allowed Silk Performer での再生中にこのエラーを表示しないようにする方法については、以下に示す解決法を参照してください。

解決 ID： 17257

再生中に一般的に発生するその他のエラーは、Silk Test テストケースが実行するターミナル サービス/リモート デスクトップ サービス セッションに関連します。 たとえば、Silk Test テストケースを最初に記録するときは、Silk Test テストケースがターミナル サーバー環境で実行されている環境とは異なるユーザー資格情報を使用するオペレーティング システム環境で記録していることが多いです。 このことに起因して、ターミナル サーバー セッションでの再生中に予期しないウィンドウが生成されることがあり、その結果、SilkTest エージェントは Silk Performer での再生中に次のようなエラー メッセージを表示します。Silk Test 次の解決法ではこのようなエラーの例を示し、その回避方法について説明します。

解決 ID： 17236

実際の GUI レベルのテストを実行する前に、ターミナル サーバー環境で実行可能な仮想ユーザー数に関する制限があることを考慮することが重要です。 以下の解決法では、1 つの Silk Performer インストールから実行可能な GUI レベルの仮想ユーザーの一般的な数について示します。

解決 ID： 17202

親トピック: GUI レベルのテストのサポート


Jacada のサポート

このセクションでは、Silk Performer による Jacada アプリケーションのテストのサポートについて、プロジェクトのセットアップや Java 構成に関する問題などを説明します。

Jacada は、エージェント デスクトップとバック エンドの両方をカバーしている J2EE ベースのソリューションです。 Jacada の主な用途は、アプリケーションのラップとクライアントへの Web UI の表示です。

  • Jacada プロジェクトを作成する
    Jacada アプリケーションをテストするには、適切な Jacada のアプリケーションの種類でプロジェクトをセットアップする必要があります。
  • Jacade 記録プロファイルを構成する
    Jacada アプリケーションを記録する前に、Web ベースの記録プロファイルをセットアップする必要があります。
  • Jacada 用に Java プロファイル設定を構成する
    Jacada アプリケーションを再生する前に、Java 仮想マシン (JVM) を定義し、Jacada の clbase.jar ファイルを指定する必要があります。
  • Jacada アプリケーションを記録する
    Jacada アプリケーションを標準の Web アプリケーションのように記録します。
  • Jacada BDL スクリプトの構造
    記録された Jacada アプリケーションの BDL スクリプトの構造について説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


Jacada プロジェクトを作成する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、 Application Server/Component Models > Jacada を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: Jacada のサポート
関連タスク
Jacada アプリケーションを記録する


Jacade 記録プロファイルを構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. アプリケーション リストに一覧表示された記録プロファイルを選択し、編集 をクリックします。 記録プロファイル ダイアログ ボックスが開きます。
  4. プロトコルの選択 領域で、Web チェック ボックスをオンにします (選択されていない場合)。
  5. Web の設定 をクリックします。 Web 設定 ダイアログ ボックスが開きます。
  6. WinSock オプション ボタンをクリックし、OK をクリックします。
  7. Java API リスト ボックスで、Jacada チェック ボックスをオンにします。
  8. OK をクリックして 記録プロファイル ダイアログ ボックスを閉じます。
  9. システム設定 ダイアログ ボックスの プロキシ タブをクリックして、記録プロキシ構成を編集します。 プロキシのページが開きます。
  10. プロキシ リスト ボックスで、SOCKS プロトコルを選択し 編集 をクリックします。 プロキシの設定 ダイアログ ボックスが開きます。
  11. 記録しない (データの転送のみ) 領域で、ポート範囲 テキスト ボックスに 1100-1200 と入力して転送データの記録を抑制します。
  12. OK をクリックして プロキシの設定 ダイアログ ボックスを閉じます。
  13. OK をクリックして、システム設定 ダイアログ ボックスを終了します。
親トピック: Jacada のサポート


Jacada 用に Java プロファイル設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストから Java アイコンをクリックします。
  4. Jacada アプリケーションをテストする Jacada サーバーから、ファイル clbase.jar をローカルの作業ディレクトリにコピーします。 Jacada サーバーにおける clbase.jar のデフォルトの場所は、\classes\cst\ です。
  5. ファイル をクリックしてローカル マシンで clbase.jar を見つけ、クラスパス に追加します。
  6. プロファイルの設定を保存するには、OK をクリックします。
親トピック: Jacada のサポート
関連タスク
Java バージョンとクラスパス設定を構成する


Jacada アプリケーションを記録する

Jacada アプリケーションを標準の Web アプリケーションのように記録します。

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. URL テキスト ボックスに、テストする Jacada アプリケーションの URL を入力します。 例：http://my.jacada.server:9999
  3. 記録の開始 をクリックすると、セッションの記録が始まります。
  4. テスト対象のアプリケーションで必要な操作を実行します。
  5. 記録が完了したら、アプリケーションと Recorder を閉じて、テスト スクリプトを保存します。
  6. テスト スクリプトが予期したとおりに実行されることを確認するには、アニメーション モードでスクリプトの試行を実行します。これにより、実行したテストの結果を TrueLog Explorer に表示できます。
親トピック: Jacada のサポート


Jacada BDL スクリプトの構造

Silk Performer で Jacada アプリケーションを記録した結果の BDL スクリプトには、Jacada プロトコル エントリだけでなく、Web/HTTP の両方が混在しています。 スクリプトは、HTTP トラフィックとユーザー操作に構造化されます。
  • HTTP トラフィック
    • JacCreateUser(…)
    • JacConnectUsing…(…)
  • ユーザー操作
    • JacDestroy(…)

Jacada 関数

Silk Performer からの Jacada 関数呼び出しを処理するために、数多くの関数が備えられています。 これらの関数は、Jacada 独自の API の 1 対 1 のラッパです。 詳細については、Jacada のドキュメントを参照してください。

以下は、Jacada ユーザー操作のサンプルです。
  • データ入力
    • JacSetTextData(...)
    • JacSetTableData(...)
  • 画面の遷移
    • JacSendWindowData(...)
    • JacSendCommand(...)
    • JacChangeCellValue(...)
  • 検証
    • JacCheckScreen(...)
    • JacCheckFieldValue(...)
    • JacCheckTableCell(...)
親トピック: Jacada のサポート


Java のサポート

Silk Performer での Java サポートには、Enterprise JavaBeans (EJB) のテスト、RMI オブジェクト、JUnit などが含まれます。

  • Java フレームワークのサポート
    Java フレームワークは、Silk Performer の Benchmark Description Language に対する強力な拡張機能であり、ユーザーの動作を Java で実装できます。
  • Java 用の SOAP Web サービスをテストする
    SOAP ベース Web サービスの基本および Java でのテスト方法についての詳細を説明します。
  • Java Over HTTP のサポート
    このセクションでは、Java over HTTP に依存するアプリケーションのテストにおける Silk Performer のサポートについて説明します。
  • JUnit インテグレーション
    JUnit のテスト スクリプトを Silk Performer に統合する際の概要について説明します。
  • Java RMI のサポート
    Silk Performer による Java RMI アプリケーションのテストのサポートについて、プロジェクトのセットアップや Java 構成に関する問題などを説明します。
  • Eclipse プラグイン
    Eclipse プラグインの Silk Performer での動作について説明します。
  • Silk Performer Java Explorer
    Silk Performer Java Explorer の概要について説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


Java フレームワークのサポート

Java フレームワークは、Silk Performer の Benchmark Description Language に対する強力な拡張機能であり、ユーザーの動作を Java で実装できます。 既存の Java アプリケーションをテストする場合、テスト スクリプトを作成するために多くの時間を費やす必要はありません。 必要な作業は、既存の Java ソース コードをフレームワークに埋め込むことだけです。 詳細については、『Java フレームワーク開発者ガイド』(英語) を参照してください。

ベンチマーク実行可能ファイルを生成し、Java フレームワークを使用してテストを実行するには、通常、2 つのソース ファイルが必要になります。

  • 仮想ユーザーの動作を実装する Java クラス
  • Java メソッド呼び出しを起動する Silk Performer テスト スクリプト

両方のソース ファイルは、同じ名前で、ファイルの種類を示す拡張子 (Silk Performer テスト スクリプトは .bdf、Java ソース ファイルは .java) を持つ必要があります。

Silk Performer を使用すると、Java オブジェクトに対する Java 関数を、任意の数と種類のパラメータおよび戻りパラメータを使用して BDL コンテキストから呼び出すことができます。 Java 関数が複雑なオブジェクトを返した場合、Java オブジェクトのハンドルが共に返されます。 ハンドルは、他の関数呼び出しに入力パラメータとして渡すことができます。または、パブリック メソッドがオブジェクトに対して呼び出されます。 また、静的メソッド、キャスト操作、および例外処理もサポートされます。

  • Java プロジェクトを作成する
    Java プロジェクトをセットアップするには、アプリケーションの種類で Java Framework を指定し、プロジェクトに必要な追加のリソースを特定します。
  • Java フレームワーク ファイルを生成する
    Java クラスをテストするには、プロジェクトに BDL ファイルとクラスを含む Java ファイルが必要です。
  • BDL ファイルを使用せずに Java ファイルを生成する
    BDL ファイルを使用しないでプロジェクトに Java ファイルを生成するオプションがあります。
  • Java ファイルをコンパイルする
    Java ファイルをコンパイルする前に、Java SDK へのパスが有効であり、有効なクラスパスが指定されていることを確認する必要があります。
  • 32 ビット Java と 64 ビット Java の切り替え
    32 ビット Java と 64 ビット Java を切り替える方法と、Java アーキテクチャのテスト実行への影響について説明します。
親トピック: Java のサポート
関連概念
JUnit インテグレーション
Java Framework Functions


Java プロジェクトを作成する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーから、Java > Java Framework を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。

プロジェクトに追加のリソースを加える必要がある場合、メニュー ツリーでプロジェクト アイコンを右クリックします。 Silk Performer に必要なユーザー データ ファイル (.csv)、ランダム データ ファイル (.rnd)、.idl ファイルをすべてプロジェクトにセットアップすることが特に重要です。

親トピック: Java フレームワークのサポート


Java フレームワーク ファイルを生成する

  1. ファイル > 新規作成 > Java フレームワーク スクリプト (.bdf/.java) をクリックします。 Java フレームワーク スクリプトの新規作成 ダイアログ ボックスが開きます。
  2. Java クラスの名前を入力します。
  3. OK をクリックします。 指定した名前のクラスを含む Java ファイルが生成され、BDL ファイルと共に表示されます。これは、Java クラスをテストするために使用されます。
  4. このファイルを保存すると、プロジェクトに追加するかどうかを求められます。
親トピック: Java フレームワークのサポート


BDL ファイルを使用せずに Java ファイルを生成する

  1. メイン メニュー バーから ファイル > 新規作成... > Java スクリプト (.java) を選択します。 新規 Java スクリプト ダイアログが表示されます。
  2. Java クラスの名前を入力します。
  3. OK をクリックします。 指定された名前のクラスを含む Java ファイルが生成されて開きます。
  4. 新しい Java ファイルを初めて保存するとき、ファイルを現在のプロジェクトに追加するかどうかを指定するように求められます。 はい をクリックします。 プロジェクトに Java ファイルを追加する方法は、他に 2 つあります。
    • プロジェクトの スクリプト サブノードを右クリックして 既存のスクリプトの追加... を選択し、スクリプトの選択 ダイアログを開きます。 ファイルの種類 リスト ボックスの選択を Java ファイル (*.java) に変更します。 プロジェクトに追加するファイルを選択して、開く をクリックします。
    • Java ファイル ビューで右クリックして、コンテキスト メニューを開きます。 プロジェクトに追加 をクリックして、ファイルをプロジェクトに追加します。
親トピック: Java フレームワークのサポート
関連概念
JUnit インテグレーション


Java ファイルをコンパイルする

  1. 設定 > アクティブ プロファイル を選択します。
  2. 左側のスクロール ウィンドウにある Java アイコンを選択します。 全般 ページが表示されます。
  3. Java ホーム テキスト ボックスの隣にあるフォルダ アイコンを使用して、Java SDK がインストールされているディレクトリを選択します。
  4. 必要なクラスパスのエントリがあれば、クラスパス テキスト ボックスに追加します。
    注: あるいは、JavaSetOption 関数を適切なオプション番号と共に使用することで、Java のバージョン、ホーム ディレクトリ、およびクラスパスを設定できます。
  5. OK をクリックします。
  6. 次のいずれかの方法を使用して、手動でコンパイルを行います。
    • Java ファイルを開いて、F7 を押します。
    • Java ファイルを開いてビューの上で右クリックし、コンテキスト メニューを開きます。 コンパイル コマンドを選択します。
    • プロジェクト ページで Java ファイルを右クリックして、コンテキスト メニューを開きます。 コンパイル コマンドを選択します。
また、TryScript を初期化して、ベースラインを検索し、テストを実行すると、すべての Java および BDL ファイルのコンパイルが自動的に起動します。

コンパイル中の Java コンパイラからのすべての出力は コンパイラ ページにリダイレクトされます。 結果のクラス ファイルは、現在のプロジェクト ディレクトリに生成されます。

親トピック: Java フレームワークのサポート
関連概念
Java Framework Functions


32 ビット Java と 64 ビット Java の切り替え

  1. メニューから、 設定 > アクティブ プロファイル をクリックします。
  2. Java アイコンをクリックしてから、詳細 タブをクリックします。
  3. 32 ビット Java (デフォルト)、または 64 ビット Java を選択します。
  4. 64 ビット Java を使用する場合、Silk Performer ランタイムと JVM 間の通信における 実行タイムアウト を指定します。
選択した Java アーキテクチャに応じて、Java テスト コードがプロセス内で実行されるか、プロセス外で実行されるかが決まります。つまり、次のような動作になります。
  • 32 ビット Java を有効にした場合：テストを実行すると、jvm.dll と必要な .jar ファイルが perfrun.exe に動的にロードされます。この結果、perfrun.exe のメモリ使用量が増加することになります。また、負荷テストの初期段階では、メモリ使用量が変動する可能性があることにもご注意ください。この現象はメモリ リークと誤解されがちですが、Java ガーベージ コレクタが機能しているためで、期待通りの動作となります。デフォルトでは、最大 50 仮想ユーザーが同じ JVM を共有するため、メモリ使用量を節約できます。ただし、この機能を使用するには、Java テスト コードがスレッドセーフ（特に静的変数に注意）になっている必要があります。
  • 64 ビット Java を有効にした場合：テストを実行すると、Java テスト コードが別のプロセスとして実行されます。 つまり、perfrun.exe にロードされません。

JavaSetOption BDL 関数を使って、32 ビット Java と 64 ビット Java を切り替えることもできます。BDL スクリプトで設定を定義すると、プロファイル設定でのオプション定義は上書きされます。

親トピック: Java フレームワークのサポート
親トピック: Java Framework


Java 用の SOAP Web サービスをテストする

Web サービスとは Web 上で利用可能なサービスのことであり、呼び出すことで結果が返されます。 他の標準もありますが、Web サービスで広く使用されているのが SOAP (Simple Object Access Protocol) であり、W3C でも採用されています。

本章では、SOAP ベース Web サービスの基本およびそのテスト方法についての詳細を説明します。

  • Simple Object Access Protocol (SOAP)
    Simple Object Access Protocol (SOAP) について説明します。
  • SOAP over HTTP ベースの Web サービスをテストする
    SOAP over HTTP ベースのサービスをテストする際に使用できる 3 つのオプションについて説明します。
  • 外部の参考文献
    セクションで使用される参考文献を示します。
親トピック: Java のサポート
親トピック: Java テストのサポート


Java Explorer

Java Explorer を使用すると、ポイント＆クリック操作でテスト ケースを作成することができます。 Java Explorer では、以下のテクノロジーをサポートしています。

  • SOAP Web サービス
  • RMI
  • EJB
  • 一般的な GUI のない Java オブジェクト

Java Explorer を Silk Performer Java フレームワークを使用する完全な Silk Performer プロジェクトをエクスポートするために使用することができます。 Java Explorer 自身では、あらかじめ定義したテスト シナリオをアニメーション モードで実行することのみ可能です。 しかし、エクスポートしたプロジェクトでは、Silk Performer を使用した 複数の仮想ユーザーによる現実的なテストを実行できます。

注: Java Explorer は、現在 Axis SOAP スタック (http://www.apache.org) を使用して Web サービス クライアント プロキシ クラスを生成しています。
親トピック: Simple Object Access Protocol (SOAP)


Java フレームワーク

Java フレームワークによって、 Silk Performer は Java プログラム言語で仮想ユーザーの動作を定義してシミュレートする強力な手段を提供します。 任意の Java クラスをフレームワーク内でインスタンス化し、 そのクラスで定義したメソッドを呼び出すことができます。

Java フレームワーク上で実行している仮想ユーザーの動作は、 Silk Performer や他の Java IDE を使用して 手動でスクリプト化することができます。 しかし、より便利な方法は、 Java Explorer のポイント＆クリック インターフェイスを使用して、 仮想ユーザーの動作を定義することです。

親トピック: Simple Object Access Protocol (SOAP)


Java Over HTTP のサポート

このセクションでは、Java over HTTP に依存するアプリケーションのテストにおける Silk Performer のサポートについて説明します。

  • Java Over HTTP の概要
    Java Over HTTP 技術について簡単に説明します。
  • Java over HTTP プロジェクトのセットアップとテスト
    Silk Performer で実施する Java over HTTP アプリケーションのテストに関係する、プロジェクトのセットアップ、スクリプトの作成、検証、解析文などの考慮事項について説明します。
  • Java over HTTP スクリプトをカスタマイズする
    このセクションでは、Silk Performer と TrueLog Explorer の両方を使用してスクリプトをカスタマイズする方法について説明します。
  • 検証/解析文を追加する
    このセクションでは、TrueLog Explorer で、レンダリング XML ビューおよびプレーン テキスト ソース ビューの両方を使用して検証文を追加する方法について説明します。
親トピック: Java のサポート


Java Over HTTP の概要

一部のアプリケーションは、HTTP プロトコルを介してクライアントとサーバー間でオブジェクトを転送するために、Java Object Serialization を利用します。 シリアル化された Java オブジェクトの交換に基づき、この通信はバイナリ形式のデータを使用します。 そのため、Java Object Serialization は事実上、バイナリ形式のオブジェクト表現です。

Java Object Serialization は、多くのアプリケーションで長年使用されてきました。 詳細については Java オブジェクト直列化仕様 を参照してください。

リモート テクノロジとして Java over HTTP の使用を可能にする一般的なフレームワークは、Spring フレームワークとその HTTP Invoker です。

親トピック: Java Over HTTP のサポート


Java over HTTP プロジェクトのセットアップとテスト

前提条件

HTTP アプリケーションで Java をテストするには、Java Development Kit 1.6 以降が必要となります。

HTTP ヘッダー Content-Type が "application/octet-stream" または "application/x-java-serialized-object" に設定されている HTTP リクエストとレスポンスでは、変換が有効になっています。別の HTTP コンテンツ タイプ ヘッダーを使用してデータを変換する必要がある場合は、以下のステップを参照してください。カスタム コンテンツの変換 - タイプ を参照してください。

Java over HTTP プロジェクトのセットアップ

プロジェクトの概要設定では、必ずアプリケーションの種類で Java over HTTP を選択してください (プロジェクトの概要設定 ダイアログの Web browser/Java over HTTP)。

アプリケーションの種類で Java over HTTP を選択すると、プロファイル > Web プロトコル レベル > 変換 タブでいくつかのプロファイル設定が自動的に構成されます。

  • タイプ ドロップ リストで Java over HTTP 変換 DLL が選択されます。
  • HTTP リクエストを変換する が有効化されます。
  • HTTP レスポンスを変換する が有効化されます。
  • Java 仮想マシンの使用を有効にする が有効化されます。この設定が必要なのは、Java over HTTP がシリアル化/外部化可能な Java オブジェクトを正確に変換するためには、JVM が動作していなければならないためです。また、この設定をすることで、変換後のバイナリ Java トラフィックを、読みやすい XML 表現で表示することが可能になります。

スクリプトの作成

JVM を使用するには、正しい XML 表現にシリアル化解除および変換するために必要なクラスを含む Java over HTTP アプリケーション固有のカスタム JAR ファイルを構成する必要があります。そのため、Java over HTTP スクリプトを作成するときには、スクリプトの作成 ダイアログに JAR ファイルの追加 ボタンが表示されます。このボタンをクリックして、テスト対象のアプリケーションに固有のカスタム JAR ファイルを、必要なだけ参照して 追加 します。追加した JAR ファイルは、プロジェクト ツリーの データ ファイル ノードに表示されます。

注: ご使用のアプリケーションが Spring フレームワークの HTTP Invoker を基盤としている場合、クラスパスに spring.jar を追加する必要があります。

これらの必要な JAR ファイル (または個々の .class ファイル) は、テスト対象のサーバーにあります。これらのファイルは、手動で準備し、サーバーから Silk Performer コントローラ マシンへコピーしておく必要があります。

注: JAR ファイルは Project フォルダに置くことをお勧めします。

スクリプトの作成 ダイアログで 設定 をクリックすると、現在のユーザー プロファイルの Java 設定 タブが直接表示されます。このタブで、現在選択されているユーザー プロファイルの Java 設定を変更します。

注: Java 設定 タブで システム クラスパスを使用する を有効にしないでください。システム クラスパスで設定された JAR ファイルによって、手動で構成した JAR ファイルが無効にされることがあります。

キャプチャ ファイルからのスクリプトの生成

ユーザーの操作を記録する際に、Silk Performer Recorder は、記録したセッションのトラフィック全体を含む Silk Performer キャプチャ ファイルというファイルを作成します。保存後に、キャプチャ ファイルは Workbench で開かれ、続いて分析および処理を行うことができます。キャプチャしたトラフィックからスクリプトを生成する前に、記録ルールや他の設定を変更して、スクリプト生成処理に適用させることができます。

エラーが発生した場合、問題の解決 領域にあるボタンをクリックして問題を解決します。その後、スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。

64 ビット OS では、32 ビット版と 64 ビット版の両方の Java をインストールする必要があります。32 ビット版はスクリプトの再生に、64 ビット版はスクリプトの生成に使用します。64 ビット版をインストールできない場合は、つぎのレジストリ キーを 1 に設定して、スクリプトの生成に 32 ビット プロセスを使うことを Silk Performer に強制することができます：HKEY_LOCAL_MACHINE\SOFTWARE\Silk\SilkPerformer\<version>\Force32BitCaptureAnalyzer。
重要: 32 ビットのスクリプト生成プログラムでは、キャプチャ ファイルのサイズが大きい場合に問題が発生する可能性があります。

スクリプトの再生

Java 構成が正しくなければ (たとえば JAR ファイルが見つからないなど)、XML レスポンス (TrueLog Explorer でのみ表示可能) は読みやすい形式で生成されません。また、[仮想ユーザー] 出力ペインに警告またはエラーが書き込まれます。通常、エラーや警告では、その原因がリクエスト (クライアントからサーバーへ) にあるのかレスポンス (サーバーからクライアントへ) にあるのかが示されます。

Java over HTTP スクリプトをカスタマイズする

Java over HTTP スクリプト内の XML オブジェクトの全体構造を変更しないでください。値の解析や検証関数の挿入は構いませんが、Java over HTTP XML 要素の削除や移動を行うと呼び出しがうまくいかなくなります。また、配列内の要素の順序も変更しないでください。

親トピック: Java Over HTTP のサポート
関連概念
キャプチャ ファイルからスクリプトを生成する
関連タスク
Java バージョンとクラスパス設定を構成する


Java over HTTP スクリプトをカスタマイズする

Java over HTTP スクリプトのカスタマイズには、Silk Performer または TrueLog Explorer (レスポンス タブ) のいずれかを使用できます。

  • Silk Performer を使用して入力データをカスタマイズする
    文字列カスタマイズ ウィザードを使用して、ユーザー入力データをスクリプトでカスタマイズします。
  • TrueLog Explorer を使用して入力データをカスタマイズする
    スクリプトの試行の TrueLog を開くと、TrueLog Explorer により、XML 文字列のカスタマイズを容易にする レンダリング XML ビューが提供されています。
親トピック: Java Over HTTP のサポート
関連概念
スクリプトをカスタマイズする


Silk Performer を使用して入力データをカスタマイズする

  1. スクリプトで元の値を検索します。これは通常、XML ノード値です。
  2. カスタマイズをする文字列を選択します。
  3. 右クリックして 選択した文字列のカスタマイズ を選択します。
  4. 文字列カスタマイズ ウィザードで表示される手順に従います。
注: Java over HTTP スクリプト内の XML オブジェクトの全体構造を変更しないでください。 入力のカスタマイズ、値の解析、検証関数の挿入は構いませんが、Java over HTTP XML 要素の削除や移動を行うと呼び出しがうまくいかなくなります。 また、配列内の要素の順序も変更しないでください。
親トピック: Java over HTTP スクリプトをカスタマイズする
関連概念
スクリプトをカスタマイズする


TrueLog Explorer を使用して入力データをカスタマイズする

  1. スクリプトの試行を実行します。
  2. 作成された TrueLog (XLG) ファイルを開きます。 ファイルを開くには、TrueLog Explorer 内から TrueLog を開く をクリックして関連するプロジェクト フォルダを開き、XLG ファイルをダブル クリックします。
  3. ツリー メニューの TrueLog ノードを展開して、リクエストを選択します。
  4. リクエスト タブを選択します。
  5. カスタマイズをする XML ノード値を選択します。
    ヒント: レンダリング XML ビューで右クリックして 検索 を選択し、XML ノード値を検索します。グローバル検索オプションでは、レンダリング XML ビューを検索できません。
  6. 右クリックして 選択した文字列のカスタマイズ を選択します。
  7. 文字列カスタマイズ ウィザードで表示される手順に従います。
親トピック: Java over HTTP スクリプトをカスタマイズする
関連概念
ユーザー入力データをカスタマイズする
XML アプリケーションでの作業


検証/解析文を追加する

このセクションでは、TrueLog Explorer で、レンダリング XML ビューおよびプレーン テキスト ソース ビューの両方を使用して検証文を追加する方法について説明します。

  • レンダリング XML ビューを使用した検証文の追加
    TrueLog Explorer では、サポートされているすべてのコンテンツ タイプのレンダリング XML ビューが提供されます。
  • プレーン テキスト ビューを使用した検証文の追加
    サポートされていないコンテンツ タイプについては、文字列のカスタマイズを容易にするために TrueLog Explorer でプレーン テキスト ソース ビューが提供されています。
親トピック: Java Over HTTP のサポート
関連タスク
レンダリング XML ビューを使用した検証文の追加
プレーン テキスト ビューを使用した検証文の追加


レンダリング XML ビューを使用した検証文の追加

  1. スクリプトの試行を実行します。
  2. 作成された TrueLog (XLG) ファイルを開きます。 ファイルを開くには、TrueLog Explorer 内から TrueLog を開く をクリックして関連するプロジェクト フォルダを開き、XLG ファイルをダブル クリックします。
  3. ツリー メニューの TrueLog ノードを展開して、リクエストを選択します。
  4. レスポンス タブを選択します。
    注: XML は、適切なコンテンツ タイプがサーバーから送信されたときにのみレンダリングできます。サポートされていないコンテンツ タイプについては、プレーン テキスト ソース ビューを使用します。
  5. (オプション) 不明なアプリケーションの種類 (たとえば、octet-stream) が XML として確実にレンダリングできる場合は、次の手順でレンダリングします。
    1. regedit を実行します。
    2. HKEY_CURRENT_USER\Software\Silk\TrueLog Explorer\...\TreatAsXmlAlways を選択します。
    3. application/octet-stream を値リストに追加します。区切り文字にはセミコロン (;) を使用します。
    4. TrueLog Explorer を再起動します。
  6. XML ノード値を右クリックし、要素値の検証... または 要素値の解析... を選択します。
    ヒント: レンダリング XML ビューで右クリックして 検索 を選択し、XML ノード値を検索します。グローバル検索オプションでは、レンダリング XML ビューを検索できません。
  7. ウィザードで表示される手順に従います。
親トピック: 検証/解析文を追加する
関連概念
検証を追加する
XML アプリケーションの検証関数


プレーン テキスト ビューを使用した検証文の追加

  1. スクリプトの試行を実行します。
  2. 作成された TrueLog (XLG) ファイルを開きます。 ファイルを開くには、TrueLog Explorer 内から TrueLog を開く をクリックして関連するプロジェクト フォルダを開き、XLG ファイルをダブル クリックします。
  3. ツリー メニューの TrueLog ノードを展開して、リクエストを選択します。
  4. レスポンス タブを選択します。
  5. 検証する必要のある値を検索して選択します。
  6. XML ノード値を右クリックし、要素値の検証... または 要素値の解析... を選択します。
  7. ウィザードで表示される手順に従います。
親トピック: 検証/解析文を追加する
関連概念
検証を追加する
XML アプリケーションの検証関数


JUnit インテグレーション

Silk Performer は、現実的な同時アクセスのサーバー条件下のリモート コンポーネント テストをサポートするために、既存の JUnit テスト スクリプト (バージョン 3.8.x および 4.x) を 円滑に Silk Performer に統合する機能を備えています。

Silk Performer は、既存の JUnit テスト クラスとその他の Java クラスのインポートを可能にするインポート ツールを提供しています。 テストされる Java メソッドに、パラメータや戻り値があってもかまいません。これらの関数の入力パラメータを設定するためのコードが自動的に生成されます。 デフォルトでは、JUnit テスト メソッドで、パラメータを利用できません。

Silk Performer のユニット テスト インポート ツールには、特定のテスト メソッドを選択するオプションがあります。 選択されたテスト メソッドを呼び出す BDL スタブ コード (ベンチマーク記述ファイル) は、自動的に生成されます。 既存の JUnit テスト クラスを変更しなくても、そのクラスを Silk Performer から呼び出すことができます。

前提条件

JUnit 4.x テストには、Java バージョン 1.5 以降が必要です。

各 JUnit ライブラリは、アクティブ プロファイルの Java 設定のクラスパスで利用できることが必要です。

  • 新規 JUnit Silk Performer プロジェクトをセットアップする
    JUnit テスト スクリプトをインポートするために、JUnit プロジェクトを作成します。
  • JUnit または Java テスト クラスをインポートする
    現実的な同時アクセスのサーバー条件下でのリモート コンポーネント テストをサポートするために、既存の Java テスト クラスを Silk Performer にインポートします。
  • Java プロファイルの設定
    Silk Performer が、プロファイル クラスパスをどのように管理するかを説明します。
  • JUnit メソッドのフィルタ オプション
    テスト クラスをインポートするときに、メソッド 領域で利用可能なフィルタを列挙します。
  • JUnit 3.8.x 用 BDL スクリプトの例（レガシー）
    タイマ パラメータを含むJUnit 3.8.x 用 BDL スクリプトの例を示します。
  • JUnit 4.x 用 BDL スクリプトの例（レガシー）
    タイマ パラメータを含む JUnit 4.x 用 BDL スクリプトの例を示します。
  • JUnit 用 BDL スクリプトの例
    JUnit 用 BDL スクリプトの例を紹介します。
  • JUnit 4.x 以降の例外処理
    JUnit の例外がどのように検証されるかについて説明し、例外をスローするメソッドの例を示します。
  • JUnit Test Suite をインポートする
    現実的な同時アクセスのサーバー条件下でのリモート コンポーネント テストをサポートするために、既存の JUnit テスト スイートを Silk Performer にインポートします。
  • JUnit Test Suite を実行する
    戻り値を持つメソッドを呼び出すには、戻り値を取得するために使われるコードのコメントを外さないと、テスト スイートを正常に実行できません。
親トピック: Java のサポート
関連概念
Java フレームワークのサポート


新規 JUnit Silk Performer プロジェクトをセットアップする

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、ユニット テスト を展開して JUnit を選択します。
  5. 次へ をクリックします。
    注: プロジェクトにさらにリソースを追加する必要がある場合は、プロジェクト メニュー ツリー ビューでプロジェクト アイコンを右クリックします。 Silk Performer に必要なユーザー データ ファイル (.csv)、ランダム データ ファイル (.rnd)、.idl ファイルをすべてプロジェクトにセットアップすることが特に重要です。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: JUnit インテグレーション
関連タスク
テスト スクリプトを記録する


JUnit または Java テスト クラスをインポートする

JUnit 4.x モジュールのテストをインポートする前に、必要に応じて Java プロファイル設定を変更します。
  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. ファイル フィールドに、テストするアーカイブを指定します。 このアーカイブは、自動的にプロファイル クラスパスに追加されます。次に、利用可能なクラスが取得されて、クラス フィールドにアルファベット順に表示されます。
  3. クラス リストから、テストに利用可能なクラスを 1 つ選択します。
    テスト用に特定のアーカイブを指定しない場合は、ウィザードを利用して、プロファイル クラスパスで利用可能なクラスを指定できます。クラス フィールドには、完全なクラス名を入力します (例：java.lang.String)。 利用可能なコンストラクタとメソッドが、自動的に取得されて表示されます。
  4. コンストラクタ リストから、インポートしたクラスをインスタンス化するための適切なコンストラクタを選択します。 コンストラクタが選択されていない場合 は(<インスタンス不要 – 静的呼び出しのみ> エントリ)、 メソッド リストに静的メソッドのみが表示されます。
  5. メソッド 領域で、呼び出したいメソッドを選択します。
  6. メソッド 領域に表示されるメソッドをフィルタリングするには、以下の手順を実行します。
    1. 詳細 ボタン (メソッド 領域の上のじょうご型アイコン) をクリックします。
    2. フィルタ設定をカスタマイズしたら、OK をクリックして、メソッド 領域を更新します。
  7. Java バージョン、Java ホーム ディレクトリ、または JVM DLL を含む、全般的な Java 設定を変更するには、アクティブ プロファイルの設定 リンクをクリックします。 プロファイル - [<プロファイル名>] - Java ダイアログが開き、Java プロジェクト用 (JUnit プロジェクト タイプ) の 全般 ページが表示されます。
    注: これらの設定 (Java クラスパスなど) を変更すると、異なる結果になる場合があります。クラス、コンストラクタ、および メソッド の各フィールドでの選択が、新しい結果によって更新されます。
    注: Java バージョン、Java ホーム ディレクトリ、または、JVM DLL を変更した場合は、Silk Performer を再起動して変更を有効にする必要があります。
  8. OK をクリックします。
親トピック: JUnit インテグレーション


Java プロファイルの設定

インポート対象の JUnit や Java のテスト クラスと、そのテスト クラスで必要なサードパーティ製ライブラリは、プロファイル クラスパスでアクセスできる必要があります。 Silk Performer は、ファイル フィールドに入力されたすべてのアーカイブを、自動的にプロファイル クラスパスに追加します。 また、Silk Performer でコンパイルするテスト クラスはすべて、コンパイルされてプロジェクト ディレクトリに出力されます。このディレクトリも自動的にプロファイル クラスパスに追加されます。

親トピック: JUnit インテグレーション


JUnit メソッドのフィルタ オプション

この表は、テスト クラスをインポートするときに、メソッド 領域で利用可能なフィルタの一覧を示しています。

JUnit メソッド | 説明
パラメータのない関数のみ | パラメータを持つ可能性がある関数はすべて無視されます。
ユニット テスト関数のみ (JUnit インポートでのデフォルト) | JUnit 以外の関数はすべて無視されます。
メンバ関数のみ | メンバ関数以外はすべて無視されます。
public 可視性の関数 (デフォルト) | public 可視性の関数を含めます。
protected 可視性の関数 | protected 可視性の関数を含めます
private 可視性の関数 | private 可視性の関数を含めます。
package 可視性の関数 | package 可視性の関数を含めます。
宣言済み関数のみ | 基底クラスから継承した関数は無視します。
複合関数 (デフォルト) | 複合したパラメータを取る関数を表示します。 Java では、複合したパラメータは、デフォルト値として NULL を持つ JavaSetObject で記述します。
ユニット テスト関数の自動検出 (デフォルト) 以下のルールに従って、自動的に検出され記述された JUnit 関数。
  • JUnit 3.8.x スクリプトは junit.framework.TestCase クラスから派生している。
  • JUnit 3.8.x 関数はパラメータや戻り値を持たない。
  • setUp() と tearDown() は、各 JUnit 3.8.x メソッドの前と後にそれぞれ呼び出される。
  • JUnit 4.x スクリプトは、junit.framework.TestCase クラスから派生する必要はなくなった。
  • JUnit 4.x 関数は、@Test 注釈が使用されていない場合は、@Ignore 注釈によって識別され、スクリプトに追加される。
  • @BeforeClass 注釈と @AfterClass 注釈を持つメソッドは、テスト クラスごとに 1 回呼び出される。
  • @BeforeClass 注釈と @After 注釈を持つメソッドは、各 JUnit 4.x メソッドの前と後に呼び出される。
親トピック: JUnit インテグレーション


JUnit 3.8.x 用 BDL スクリプトの例（レガシー）

スクリプトの例

以下のスクリプトは、サンプル JUnit 3.8.x テストケースをインポートし、testRound、testSqrt、および testMax の各メソッドを選択することによって生成されたものです。

注: 次のスクリプトは、以前のバージョンの Silk Performer を使って生成されたスクリプトです。Silk Performer 19.5 以降では、JUnit インポートが作成するスクリプトは若干異なります。 詳細については、「JUnit 用 BDL スクリプトの例」を参照してください。
transaction TInit
var
    hPerf : number;
begin
    JavaCreateJavaVM();
    JavaSetString(JAVA_STATIC_METHOD, "TestCaseName");
    ghTestObj := JavaLoadObject("JUTestClass", "JUTestClass.<init>");
end TInit;

transaction TMain
begin
    JUnitCallMethod(ghTestObj, "testRound", "testRound");
    JUnitCallMethod(ghTestObj, "testSqrt", "testSqrt");
    JUnitCallMethod(ghTestObj, "testMax", "testMax");
end TMain;

transaction TEnd
begin
    JavaFreeObject(ghTestObj);
end TEnd;

TInit トランザクション内の JavaLoadObject は、JUnit テスト クラス JUTestClass をインスタンス化します。

TMain トランザクション内の JUnitCallMethod は、JUnit テスト ランナーと同様に、この 3 つのテスト メソッドのなかの 1 つを呼び出します。最初に、setUp() メソッドが呼び出されます。次に、テスト メソッド自体 (たとえば、testSqrt()) が呼び出されて、最後に、tearDown() メソッドが呼び出されます。

タイマ

Java メソッドの呼び出しに対してオプション タイマ パラメータを指定した場合は、コンストラクタ、テスト メソッド、セットアップ メソッド、後処理メソッドの実行時間が測定されます。 このトピックの例では、次のような測定結果が得られます。

  • コンストラクタ：JUTestClass.<init>
  • メソッド：testRound、testSqrt、testMax
  • セットアップ メソッド：testRound_setup、testSqrt_setup、testMax_setup
  • 後処理メソッド：testRound_tearDown、testSqrt_tearDown、testMax_tearDown
親トピック: JUnit インテグレーション


JUnit 4.x 用 BDL スクリプトの例（レガシー）

スクリプトの例

以下のサンプル JUnit テスト スクリプトには、テストのセットアップと後処理 (tear-down) のためのいくつかの注釈が含まれています。このスクリプトは、サンプル JUnit 4.x テストケースをインポートし、doFoo メソッドと doFoo2 メソッドを選択することによって生成されたものです。

注: 次のスクリプトは、以前のバージョンの Silk Performer を使って生成されたスクリプトです。Silk Performer 19.5 以降では、JUnit インポートが作成するスクリプトは若干異なります。 詳細については、「JUnit 用 BDL スクリプトの例」を参照してください。
var
  ghTestObj :number;
dcluser
  user
    JavaUser
  transactions
    TInit :begin;
    TMain :1;
    TEnd :end;

dclfunc
  function JUnit4Before
  begin
    // @Before
    JavaCallMethod(ghTestObj, "myBefore", "myBefore");
  end JUnit4Before;

  function JUnit4After
  begin
    // @After
    JavaCallMethod(ghTestObj, "myAfter", "myAfter");
  end JUnit4After;

  function JUnit4CallFunc(hJavaObj :number; sName :string; sTimerName :string optional; sExceptionBuffer :string optional) : boolean
  begin
    JUnit4Before();
    // @Test
    JUnit4CallFunc := JavaCallMethod(hJavaObj, sName, sTimerName);
    if not StrIsNull(sExceptionBuffer) then
      JavaGetLastException(hJavaObj, sExceptionBuffer);
    end;
    JUnit4After();
  end JUnit4CallFunc;

dcltrans
  transaction TInit
  var
    hPerf : number;
  begin
    JavaCreateJavaVM();
    ghTestObj := JavaLoadObject("JU4ImporterTest", "JU4ImporterTest.<init>");
    // @BeforeClass
    JavaCallMethod(JAVA_STATIC_METHOD, "JU4ImporterTest.myBeforeClass", "myBeforeClass");
  end TInit;

  transaction TMain
  var
    sBuffer :string;
  begin
    JUnit4CallFunc(ghTestObj, "doFoo", "doFoo");
    JUnit4CallFunc(ghTestObj, "doFoo2", "doFoo2");
  end TMain;

  transaction TEnd
  var
    sBuffer :string;
  begin
    // @AfterClass
    JavaCallMethod(JAVA_STATIC_METHOD, "JU4ImporterTest.myAfterClass", "myAfterClass");
    JavaFreeObject(ghTestObj);
  end TEnd;

dclfunc セクションでは、テストのセットアップ、後処理、および例外処理のためのヘルパー関数が定義されています。これらの関数は、トランザクション内で使用されます。

TInit トランザクション内の JavaLoadObject は、JUnit テスト クラス JU4ImporterTest をインスタンス化します。@BeforeClass 注釈を使用する JUnit メソッドは、すべて TInit トランザクション内で呼び出されます。

TMain トランザクション内の JUnit4CallFunc は、JUnit テストのインポートで選択されたすべてのテスト メソッドを呼び出します。最初に、@Before 注釈を使用するメソッドが呼び出されます。次に、テスト メソッド自体 (たとえば、doFoo()) が呼び出されて、最後に、@After 注釈を使用するメソッドが呼び出されます。

タイマ

Java メソッドの呼び出しに対してオプション タイマ パラメータを指定した場合は、コンストラクタ、テスト メソッド、セットアップ メソッド、後処理メソッドの実行時間が測定されます。 このトピックの例では、次のような測定結果が得られます。

  • コンストラクタ：JU4ImporterTest.<init>
  • メソッド：doFoo、doFoo2
  • テストのセットアップ：myBeforeClass、myBefore
  • テストの後処理：myAfterClass、myAfter
親トピック: JUnit インテグレーション


JUnit 用 BDL スクリプトの例

スクリプトの例

次のスクリプトの例は、サンプルの JUnit テスト ケースをインポートして生成されたものです。

var
  hTestClass : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the java class
      hTestClass := JUnitLoadClass("com/microfocus/Test");
  end TInit;

  transaction THello
  begin
    JUnitExecuteTest(hTestClass, "doHello", "doHello_timer");
    JUnitExecuteTest(hTestClass, "", "Test_timer");
  end THello;

  transaction TEnd
  begin
    JavaFreeObject(hTestClass);
  end TEnd;
  • TInit トランザクション内の JUnitLoadClass は Java オブジェクトをインスタンス化して、ランタイム クラスのハンドルを返します。ハンドルは、hTestClass に代入されます。
  • TEnd トランザクション内の JavaFreeObject は、Java ランタイム クラスを解放します。
  • THello トランザクション内の JUnitExecuteTest は、JUnit テストの実行を開始します。
親トピック: JUnit インテグレーション


JUnit 4.x 以降の例外処理

JUnit 4.x 以降のバージョンでは、例外をスローするメソッドの定義が可能です。スローされた例外は、JUnit によって検証されます。Silk Performer は、スローしたメッセージの検証を含めて、例外をスローする JUnit メソッドをインポートします。
//@Test(expected=java.lang.IllegalArgumentException)
    JavaRegisterException(500,"java.lang.IllegalArgumentException", JAVA_OPTION_MATCH_SUBSTRING);
    ErrorAdd(FACILITY_NATIVE_JAVA, 500, SEVERITY_INFORMATIONAL);
    JUnit4CallFunc(ghTestObj, "doFoo", "doFoo", sBuffer);
    ErrorRemove(FACILITY_NATIVE_JAVA, 500);
    if (StrSearch(sBuffer, "java.lang.IllegalArgumentException", STR_SEARCH_FIRST) = 0) then
          RepMessage("method did not throw: java.lang.IllegalArgumentException", SEVERITY_ERROR);
    end;

上のサンプルは、java.lang.IllegalArgumentException をスローする可能性がある JUnit メソッドをテストします。関数 JavaRegisterException を使って、BDL エラーコード 500 を例外に割り当てます。このエラーは想定されたものなので、関数 ErrorAdd を使って、エラーの深刻度を情報に設定します。その後、JUnit メソッド doFoo が呼び出されます。ここで、パラメータ sBuffer はエラー メッセージの取得に使用されます。ErrorRemove 関数は、エラー処理を元の状態に戻します。また、想定されていた例外が発生したことを確認します。それ以外の場合は、BDL エラーを発生させます。

注: BDL スクリプトを手動で変更する場合は、Java 例外を別の BDL エラー番号にマッピングしないでください。その逆もしないでください。
親トピック: JUnit インテグレーション


JUnit Test Suite をインポートする

JUnit 4.x モジュールのテストをインポートする前に、必要に応じて Java プロファイル設定を変更します。

  1. プロジェクト > ユニット テストのインポート > JUnit テスト クラス を選択します。 ユニット テストのインポート - JUnit テスト クラス ダイアログが開きます。
  2. 詳細 ボタン (メソッド 領域の上のじょうご型アイコン) をクリックします。 詳細設定 ダイアログが開きます。
  3. 以下の手順を実行します。
    1. ユニット テスト関数のみ チェック ボックスをオフにします。
    2. 宣言済み関数のみ チェック ボックスをオンにします。
    3. メンバ関数のみ チェック ボックスをオフにします。
    4. OK をクリックします。
  4. ファイル フィールドに、テストするアーカイブを指定します。 このアーカイブは、自動的にプロファイル クラスパスに追加されます。次に、利用可能なクラスが取得されて、クラス フィールドにアルファベット順に表示されます。
  5. クラス リストから、テストに利用可能なクラスを 1 つ選択します。
    テスト用に特定のアーカイブを指定しない場合は、ウィザードを利用して、プロファイル クラスパスで利用可能なクラスを指定できます。クラス フィールドには、完全なクラス名を入力します (例：java.lang.String)。 利用可能なコンストラクタとメソッドが、自動的に取得されて表示されます。
  6. コンストラクタ リストから、インポートしたクラスをインスタンス化するための適切なコンストラクタを選択します。 コンストラクタが選択されていない場合 は(<インスタンス不要 – 静的呼び出しのみ> エントリ)、 メソッド リストに静的メソッドのみが表示されます。
  7. メソッド 領域で、suite() メソッドを選択し、OK をクリックします。
親トピック: JUnit インテグレーション


JUnit Test Suite を実行する

戻り値を持つメソッドを呼び出すために、JUnit インポート ツール (プロジェクト > ユニット テストのインポート > JUnit テスト クラス) のスクリプト コードを使用する場合、戻り値を取得するために使用するコードは作成されますが、コメントアウトされています。

Java メソッドが junit.framework.Test メソッドを返す場合は、コメントアウトされた追加コードが作成されます。このコードによって、FRunTestSuite の junit.bdh 関数がテスト スイートを実行できるようになります。 junit.bdh は、BDL スクリプトのインクルード セクションに自動的に追加されます。

戻り値を取得するコードのコメントを外します。 例：
transaction TMain
begin
  // junit.framework.Test suite()
  JavaCallMethod(JAVA_STATIC_METHOD, "JU4ImporterTestSimple.suite", "suite");
  // hObj := JavaGetObject(JAVA_STATIC_METHOD);
  // use the following function to execute JUnit test suites
  // FRunTestSuite(hObj);
  // JavaFreeObject(hObj);
end TMain;

親トピック: JUnit インテグレーション


Java RMI のサポート

このセクションでは、Silk Performer による Java リモートメソッド呼び出し (Java RMI：Java Remote Method Invocation) アプリケーションの記録と再生のサポートについて、プロジェクトのセットアップや、Java の構成の問題などを説明します。 また、Product Manager (Silk Performer に同梱されている Java RMI アプリケーションのサンプル) の使用方法についても示していきます。

Java Remote Method Invocation (Java RMI) により、プログラマは、分散 Java 技術ベースのアプリケーションを作成することが可能になります。そこでは、リモート Java オブジェクトのメソッドが、他の Java 仮想マシン上から呼び出すことができます。

  • Java RMI プロジェクトを作成する
    Java RMI アプリケーションを記録および再生するには、適切な Java RMI のアプリケーションの種類でプロジェクトをセットアップする必要があります。
  • Java RMI 記録プロファイルを構成する
    Java RMI アプリケーションを記録する前に、Web ベースの記録プロファイルをセットアップする必要があります。
  • IBM JVM 用に Java プロファイル設定を構成する
    Java 仮想マシン (JVM) を記録する前に、Java 設定を定義し、カスタマイズした起動ファイルを指定する必要があります。
  • Java RMI アプリケーションを記録する
    Java RMI アプリケーションを標準の Web アプリケーションのように記録します。
  • Java RMI の記録結果
    記録された Java RMI アプリケーションの結果について説明します。
  • Java RMI アプリケーションを再生する
    記録された Java RMI アプリケーションを再生します。
  • Java RMI サンプル アプリケーション
    Silk Performer に付属の RMI サンプル アプリケーションを使用する方法について説明します。
親トピック: Java のサポート


Java RMI プロジェクトを作成する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、Java > Java RMI/EJB (recording) を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: Java RMI のサポート


Java RMI 記録プロファイルを構成する

  1. Silk Performer メニュー バーから、設定 > アクティブ プロファイル を選択します。
  2. Java をクリックし、Java バージョン、クラスパス設定、およびクラスパス要素を構成します。 レコーダでは内部的に JDK が使用され、Silk Performer Java フレームワークでは再生用に JDK が使用されます。

    バージョン リスト ボックスで、バージョン 1.2 以降の JDK バージョンを選択します。

  3. Silk Performer メニューで 設定 > システム をクリックします。
  4. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  5. 追加 をクリックして、記録するアプリケーションの記録プロファイルを定義します。 記録プロファイル ダイアログ ボックスが開きます。
  6. プロファイル名 テキスト ボックスに、新しい記録プロファイルの名前を入力します。
  7. アプリケーション パス テキスト ボックスに、Java RMI クライアントを起動する実行可能ファイルまたは起動スクリプトの完全パスを入力します。作業ディレクトリに続き、パスの区切り文字を指定します。あるいは、実行可能ファイルを参照します。この場合、作業ディレクトリは自動的に挿入されます。
  8. 省略可能：Java 仮想マシン (JVM) をホストする実行可能ファイルがアプリケーションとは別のディレクトリに存在する場合は、記録実行可能ファイルはアプリケーション パスと異なる チェック ボックスをオンにします。記録実行可能ファイル リスト ボックスで、実行可能ファイルを選択します。
  9. プロトコルの選択 領域で、Java API リスト ボックスに記録する Java API にチェックを付けます。
  10. OK をクリックして 記録プロファイル ダイアログ ボックスを閉じます。
  11. OK をクリックして、システム設定 ダイアログ ボックスを終了します。
親トピック: Java RMI のサポート
関連タスク
Java バージョンとクラスパス設定を構成する


IBM JVM 用に Java プロファイル設定を構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. アプリケーション リストに一覧表示された記録プロファイルを選択し、編集 をクリックします。 記録プロファイル ダイアログ ボックスが開きます。
  4. Java の設定 をクリックし、手動 オプション ボタンを選択します。
  5. OK をクリックして Java の設定 ダイアログ ボックスを閉じます。
  6. 起動スクリプトをカスタマイズします。
    1. startMyApp.cmd などの起動スクリプト ファイルをエディタで開きます。
    2. startMyAppForRecording.cmd などのように、起動スクリプト ファイル名を変更します。
    3. Silk Performer ホーム ディレクトリの perfPrepareJavaRecording.cmd の呼び出しを挿入します。たとえば、C:\Program Files\Silk\Silk Performer21.0\perfPrepareJavaRecording.cmd を呼び出します。
    4. 起動スクリプト ファイルで、java my.rmi.application <parameters> を java %PERFREC_OPTIONS% my.rmi.application <parameters> に置き換えます。my.rmi.application は一例です。このようにして、コマンドライン パラメータ %PERFREC_OPTIONS% を Java の実行に追加します。
親トピック: Java RMI のサポート


Java RMI アプリケーションを記録する

Java RMI アプリケーションを標準の Web アプリケーションのように記録します。

重要: アプレットを記録する場合は、Microsoft で提供される JVM ではなく、Sun Microsystems で提供されるものを使用します。
  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 記録プロファイル リスト ボックスで、My Rmi Application など、テスト予定のアプリケーションのプロファイルを選択します。使用するアプリケーションのプロファイルがまだセットアップされていない場合は、リスト ボックスの右側にある 設定 をクリックして、セットアップします。
  3. 記録の開始 をクリックすると、セッションの記録が始まります。
  4. テスト対象のアプリケーションで必要な操作を実行します。
  5. 記録が完了したら、アプリケーションと Recorder を閉じて、テスト スクリプトを保存します。
  6. テスト スクリプトが予期したとおりに実行されることを確認するには、アニメーション モードでスクリプトの試行を実行します。これにより、実行したテストの結果を TrueLog Explorer に表示できます。
親トピック: Java RMI のサポート


Java RMI の記録結果

Java RMI アプリケーションを記録すると、Silk Performer は 2 つの結果ファイル、x.java と x.bdf を生成します。

Java ソース ファイル x.java には、記録されたアクションが含まれています。 このファイルは、Silk Performer 内で自動的にコンパイルされます。 このファイルをコンパイルするのに必要なクラスパスは、設定 > アクティブ プロファイル > Java に指定する必要があります。

ファイル x.bdf には、Java 仮想ユーザーを起動する BDL スタブ コードが含まれています。

親トピック: Java RMI のサポート


Java RMI アプリケーションを再生する

  1. 記録された API 呼び出し JavaSetOption(JAVA_CLASSPATH) および JavaSetOption(JAVA_CMDLINE_OPTIONS) を BDL スクリプトから削除します。
  2. サーバーから JAR ファイルと CLASS ファイルを取得します。 記録された Java ソース コードで記録されたコマンドを使用して、JAR ファイルと CLASS ファイルを見つけます。

    以下に、コメント例を示します。

    // ###ClassPath###
// ###Applet CodeBase###
// ###Applet parameters queried by the Applet###
  // codebase=...
  // archives=...
  // code=...
  3. これらのファイルをローカル マシンにコピーします。
  4. 設定 > システム > Java で、これらのファイルのパスをクラスパスに追加します。
親トピック: Java RMI のサポート


Java RMI サンプル アプリケーション

Java RMI アプリケーションを記録および再生する、Silk Performer に付属のサンプル アプリケーションは、Product Manager と呼ばれます。

Product Manager を起動するには、<public user documents>\Silk Performer 21.0\SampleApps\RMILdap\Web に移動して ProductManager - DemoVersion.htm をクリックします。

  • サンプル アプリケーションを記録および再生する
    Java RMI アプリケーションを記録および再生する方法を示します。
  • Internet Explorer プロファイルを変更する
    Internet Explorer プロファイルを変更して、サンプル アプリケーションを記録します。
親トピック: Java RMI のサポート


サンプル アプリケーションを記録および再生する

  1. 新しい Java RMI プロジェクトを作成します。
  2. 既存の Internet Explorer 記録プロファイルを変更します。「Internet Explorer プロファイルを変更する」を参照してください。
  3. 設定 > アクティブ プロファイル > 記録 > スクリプト > Java で、スクリプト生成の詳細を指定します。
  4. 設定 > アクティブ プロファイル > 記録 > Java へ移動し、Silk Performer のサンプル ディレクトリにある JAR ファイル ProductManager.jar （<パブリック ユーザー ドキュメント>\Silk Performer21.0\SampleApps\RMILdap\Web\ProductManager.jar）をクラスパスに追加します。
  5. RMI サーバーと LDAP サーバーを起動します。サーバーを起動するには、Product Manager のサンプル HTML ページ （<パブリック ユーザー ドキュメント>\Silk Performer21.0\SampleApps\RMILdap\readme.htm）を開き、「Starting up servers」セクションの指示に従います。
  6. ワークフロー バーの スクリプトの作成 をクリックします。
  7. コマンドライン テキスト ボックスに、RMI サンプル アプリケーションの HTML ページの場所を入力します。HTML ページのデフォルトのパスは、<パブリック ユーザー ドキュメント>\Silk Performer21.0\SampleApps\RMILdap\Web\ProductManager - DemoVersion.htm です。
  8. OK をクリックして、アプレットを起動します。
    アプレットがロードされ、レコーダが開始して、アプレットの JNDI アクティビティと RMI アクティビティが記録されます。これで、製品の検索、製品の変更、新製品の追加などの操作を行うことができます。
  9. 必要な操作がすべて完了したら、OK をクリックします。 名前を付けて保存 ダイアログ ボックスが開きます。
  10. スクリプト名に有効な Java 識別子を指定し、保存 をクリックして、記録されたスクリプトを保存します。
  11. はい を 2 回クリックして、レコーダを閉じて終了を確認します。
  12. 記録された API 呼び出し JavaSetOption(JAVA_CLASSPATH, ... および JavaSetOption(JAVA_CMDLINE_OPTIONS, ... をコメントアウトするか、削除します。
これで、記録されたスクリプトを再生できます。ワークフロー バーの Try Script をクリックして、スクリプトを試行します。
親トピック: Java RMI サンプル アプリケーション
関連タスク
Java RMI プロジェクトを作成する
Internet Explorer プロファイルを変更する


Internet Explorer プロファイルを変更する

  1. Silk Performer ワークフロー バーの スクリプトの作成 をクリックします。
  2. 記録プロファイル リスト ボックスの横にある 設定 をクリックします。
  3. 記録プロファイルから Internet Explorer を選択します。
  4. 編集 をクリックします。
  5. Web チェック ボックスをオフにします。
  6. Java RMI および Java JNDI の各チェック ボックスをオンにします。 このサンプルでは、リモート オブジェクト参照のブートストラップ用に JNDI（Java Naming and Directory Interface）が使用されています。
親トピック: Java RMI サンプル アプリケーション


Eclipse プラグイン

Silk Performer には、Eclipse 用のプラグインが付属しています。Eclipse は、プラグイン技術に基づく一般的な Java IDE です。 プラグインを使用すると、Silk Performer の負荷テスト機能で Eclipse ユーザーをサポートできます。

Silk Performer テスト クラスの構造は、Silk Performer のテストケースを作成するときに Java 開発者をサポートします。 テスト クラスには、Eclipse プラグインと共にパッケージに収められている ITestClass インターフェイスが実装されています。 これには、Silk Performer の Java フレームワークへのインターフェイスを表す Silk Performer オブジェクトが含まれます。

テスト クラスには、2 つの基本メソッドがあります。

  • testInit - このメソッドはインターフェイスを初期化します。 テスト実行の開始時に呼び出されます。
  • testEnd - このメソッドはインターフェイスを閉じます。 TryScript 実行および負荷テストの最後に呼び出されます。

testInit と testEnd の間には、実行中の負荷テストから複数のテスト メソッドを呼び出すことができます。 void testXY() というシグニチャを持つ各メソッドは、 Silk Performer Exception. を送出します。

例：

public void testMyMethod() throws
 silk.performer.SilkPerformerException

BDL 関数 JavaSetOption を使用する

Java フレームワークのデバッグの際には、いくつかのデバッグ パラメータをコマンド ライン引数として設定する必要があります。 これは、TryScript 実行時に、Eclipse プラグインによって自動的に行われます。

ほとんどの場合は、修正しなくても TryScript テスト を実行、デバッグできます。 ただし、JavaSetOption を使用して BDL スクリプトの JVM オプションのデフォルト値を上書きした場合、Eclipse でのデバッグを有効にするための追加設定が必要となります。

また、Eclipse デバッグのリモート Java アプリケーションの設定を定義する必要があります。 これらのオプションを設定すると、TryScript 実行を起動できるようになります。 その後、Eclipse デバッグ設定を開始し、デバッグ セクションを開始する必要があります。

  • Eclipse プロジェクトの制限事項
    Eclipse と Silk Performer を同時に使用する場合の制限事項について説明します。
  • Eclipse プラグインのインストール
    Eclipse で Silk Performer を使用するために Eclipse プラグインをインストールします。
  • Eclipse プラグイン設定を構成する
    デフォルト プロジェクト名、テスト クラス名、Java デバッガ タイムアウト、終了遅延後のシャットダウン、ログ レベル、インストールされている JRE、および Java ランタイム プロファイルを構成します。
  • プロジェクト
    Eclipse で Silk Performer プロジェクトをセットアップし、使用する方法について説明します。
  • スクリプトの試行
    テスト クラスに対して [スクリプトの試行] を構成し、実行する方法について説明します。
  • 結果
    テストまたは TryScript 実行の後で表示できる結果の種類について説明します。
親トピック: Java のサポート


Eclipse プロジェクトの制限事項

Eclipse と Silk Performer を同時に使用する場合は、制限事項があります。 Silk Performer がプロジェクトの処理を行っている間、Eclipse はプロジェクトを使用できません。 Silk Performer によって現在使用されているプロジェクトを Eclipse から開こうとすると、エラー メッセージを受け取ります。 Eclipse にプロジェクトの制御を戻すには、Silk Performer を閉じる必要があります。

親トピック: Eclipse プラグイン


Eclipse Plug-In が Microsoft Windows 8 および Microsoft Windows Server 2012 上で機能しない

問題：

Silk Performer Eclipse Plug-In は Microsoft Windows 8 および Microsoft Windows Server 2012 上で機能しません。

解決策：

Microsoft Windows 8 および Microsoft Windows Server 2012 上では、Eclipse を互換モードで実行します。 互換モードで実行するには、以下の手順を実行します。
  1. eclipse.exe を右クリックして、 プロパティ を選択します。
  2. プロパティ ダイアログ ボックスで、 互換性 タブをクリックします。
  3. 互換モード セクションで、 互換モードでこのプログラムを実行する: をチェックし、 Windows 7 を選択します。
親トピック: Eclipse プラグインのインストール


Eclipse プラグイン設定を構成する

  1. Eclipse で、ウィンドウ > 設定 を選択します。 設定 ダイアログが開きます。
  2. メニュー ツリーで Silk Performer ノードを選択して、Silk Performer の設定を表示します。
  3. 使用する Silk Performer インストールのインストール ディレクトリが Install directory テキスト ボックスに表示されていることを確認します。表示されていない場合は、参照 (...) ボタンをクリックして検索し、対象の Silk Performer のインストール ディレクトリを選択します。
  4. 必要に応じて、Default project name を編集します。
  5. 必要に応じて、Default test class name を編集します。
  6. (熟練ユーザーのみ) 必要に応じて、Timeout for connecting to Java debugger のデフォルト設定を編集します。 これは、テスト中に Silk Performer プロセスへの接続に対して許可されている時間 (ミリ秒単位) です。
  7. (熟練ユーザーのみ) 必要に応じて、Shutdown after finish delay のデフォルト設定を編集します。 これは、Silk Performer テストが完了した後で結果を取得するまでに Eclipse が待機する時間 (ミリ秒単位) です。
  8. ログを書き込む条件を指定するには、Log level を選択します。 None を選択すると、ログ ファイルは書き込まれません。Errors を選択すると、エラーが発生したときにのみログ ファイルに書き込まれます。Debug を選択すると、すべてのアクティビティがログに書き込まれます。
  9. メニュー ツリーで、Java を展開し、インストール済みの JRE ノードを選択します。 インストール済みの JRE ページが開き、ローカル システムの Eclipse で使用されている Java ランタイムの一覧が表示されます。
  10. ロケーション と タイプ の設定が、目的の Java ランタイム環境のものであることを確認します。
  11. Java ランタイム プロファイルを追加するには、次の手順を実行します。
    1. 追加 ボタンをクリックします。 JRE の追加 または JRE の編集 ダイアログが開きます。
    2. 参照 (...) ボタンをクリックし、JDK のインストール (具体的には Java コンパイラ) が含まれるディレクトリを参照して選択し、OK をクリックします。 JRE の追加 または JRE の編集 ダイアログのフィールドには、JDK のインストールから抽出された値が自動的に設定されます。
      注: Silk Performer はテスト クラスで Java ファイルの再コンパイルを試みるので、JRE ではなく JDK (バージョン 1.5 以降) を選択する必要があります。
    3. 終了 をクリックして、設定を保存します。
  12. 既存の Java ランタイム プロファイルを編集するには、次の手順を実行します。
    1. 編集 ボタンをクリックします。 JRE の追加 または JRE の編集 ダイアログが開きます。
    2. 参照 (...) ボタンをクリックし、JDK のインストール (具体的には Java コンパイラ) が含まれるディレクトリを参照して選択し、OK をクリックします。 JRE の追加 または JRE の編集 ダイアログのフィールドには、JDK のインストールから抽出された値が自動的に設定されます。
      注: Silk Performer はテスト クラスで Java ファイルの再コンパイルを試みるので、JRE ではなく JDK (バージョン 1.5 以降) を選択する必要があります。
    3. 終了 をクリックして、設定を保存します。
  13. インストール済みの JRE ページで、OK をクリックして設定を保存します。
親トピック: Eclipse プラグイン


プロジェクト

  • 新規 Eclipse プロジェクトをセットアップする
    Eclipse プロジェクトを Silk Performer プロジェクトにリンクする Eclipse プロジェクトを作成します。
  • プロジェクトのインポート
    Silk Performer Eclipse Plug-In でのプロジェクトの作成と、Silk Performer または Silk Performer Java Explorer からのプロジェクトのインポートの違いについて説明します。
  • Silk Performer プロジェクトを Eclipse にインポートする
    選択したプロジェクト、設定、およびクラスパスを、Eclipse ワークスペースにインポートします。
  • 必要な Eclipse 表記を使用するように Silk Performer プロジェクトをカスタマイズする
    Silk Performer を使用して、または Silk Performer を使用して手動で作成した Silk Performer Java Explorer Java フレームワーク プロジェクトを、Silk Performer Eclipse Plug-In で使用される必要な Eclipse 表記を満たすようにカスタマイズします。
  • Eclipse から Silk Performer プロジェクトのプロパティを構成する
    前、値の型、値、デフォルト値、説明など、プロジェクトの属性を定義します。
  • Eclipse で Silk Performer システム設定を構成する
    プロジェクトのシステム設定を定義します。
  • Eclipse で Silk Performer プロジェクト設定を構成する
    Eclipse でプロジェクトの設定を定義すると、Silk Performer で定義されている設定は無効になります。
  • Java ビルド パスをリダイレクトする
    Silk Performer プロジェクトが Eclipse によって制御されるようになった瞬間から、プロジェクトのクラスパスは Eclipse 環境から制御されます。 このため、Eclipse プロジェクトの Java ビルド パスの調整が必要になる場合があります。
  • Silk Performer テスト クラスを Eclipse プロジェクトに追加する
    Silk Performer 対応の Eclipse プロジェクトのテスト用に複数の Java クラスを生成します。
親トピック: Eclipse プラグイン


新規 Eclipse プロジェクトをセットアップする

  1. Silk Performer 対応の Eclipse ワークベンチで、ファイル > 新規 > プロジェクト を選択します。 新規プロジェクト が開きます。
  2. メニュー ツリーで Silk Performer ノードを展開します。
  3. Java プロジェクト ノードを選択し、次へ をクリックします。 New SilkPerformer load testing capable Java project ページが開きます。
  4. 必要に応じて、新しいプロジェクトの名前を編集します。
  5. 必要に応じて、Test class name (初期テスト クラス テンプレートの名前) を編集します。
  6. 終了 をクリックします。 プラグインは、Eclipse ワークスペース内にテスト クラス テンプレートを生成し、テスト クラスを Silk Performer プロジェクトのテストケースにリンクします。
クラスパスは新しいテスト クラスを Silk Performer のワークスペースにリンクし、Eclipse エディタと Silk Performer の両方で動作するようにします。 各テスト クラスの背後には BDF スタブ コードがあります。 このコードはテスト クラスがコンパイルされるたびに生成されるので、BDF スタブ コードに対して行った変更は、次にテスト クラスをコンパイルすると上書きされます。
親トピック: プロジェクト


プロジェクトのインポート

Eclipse と Silk Performer ワークスペースをリンクするもう 1 つの方法は、既存の Silk Performer プロジェクトを Eclipse ワークスペースにインポートすることです。

Silk Performer を使用して作成した Silk Performer Eclipse Plug-In Java フレームワーク プロジェクトは、Eclipse プラグイン プロジェクトで使用される必要な Eclipse 表記を満たしています。 Silk Performer または Silk Performer で作成した Silk Performer Java Explorer Java フレームワーク プロジェクトは、必要な Eclipse 表記を満たしていません。

Silk Performer Java フレームワーク プロジェクトを Eclipse にインポートしたときの結果は、次のように異なります。
Silk Performer Eclipse Plug-In で作成されたプロジェクト | Silk Performer または Silk Performer Java Explorer で作成されたプロジェクト
変更しないで TryScript を実行およびデバッグできる | 限定的な実行およびデバッグ機能を使用できる
テスト クラスまたはテスト メソッドを変更すると bdf スタブファイルが自動的に生成される | bdf スタブファイルは自動的に生成されない
新しいテスト メソッドをプロジェクトに追加できる | 新しいテスト メソッドを追加することはできない
既存のテスト クラスおよびテスト メソッドの名前を変更できる | 既存のテスト クラスおよびテスト メソッドの名前を変更できない
注: どちらの種類のインポートされたプロジェクトについても、Java テスト コードを変更できます。

Silk Performer または Silk Performer Java Explorer で作成された Silk Performer Java フレームワーク プロジェクトを Eclipse にインポートするには、テスト クラスの名前が bdf ファイルと同じである必要があります (たとえば、TestClass.java と TestClass.bdf)。

ヒント: Java Explorer では、テスト クラスおよびスクリプト ファイル名を指定できます。 詳細については、Silk PerformerJava Explorer のヘルプを参照してください。

Silk Performer を使用して、または Silk Performer Java Explorer を使用して手動で作成した Silk Performer Java フレームワーク プロジェクトを、Silk Performer Eclipse Plug-In で使用される必要な Eclipse 表記を満たすようにカスタマイズできます。

親トピック: プロジェクト


Silk Performer プロジェクトを Eclipse にインポートする

  1. ファイル > インポート を選択します。 インポート ダイアログ ボックスが開きます。
  2. メニュー ツリーで その他 ノードを展開します。
  3. Import Existing Silk Performer Java Project を選択します。
  4. 次へ をクリックすると、Silk Performer の projects ディレクトリで使用可能なすべての Silk Performer プロジェクトが表示されます。
  5. インポートするプロジェクトのチェック ボックスをオンにします。
  6. 終了 をクリックします。 選択したプロジェクト、設定、およびクラスパスが、Eclipse ワークスペースにインポートされます。
親トピック: プロジェクト


必要な Eclipse 表記を使用するように Silk Performer プロジェクトをカスタマイズする

このタスクを始める前に、Silk Performer プロジェクトを Eclipse にインポートします。

Silk Performer、または Silk Performer Java Explorer を使用して手動で作成した Silk Performer Java フレームワーク プロジェクトを、Silk Performer Eclipse Plug-In で使用される必要な Eclipse 表記を満たすようにカスタマイズできます。

  1. Eclipse でテスト クラスを開き、以下のルールに従って変更します。
    1. テスト クラスは、silk.performer.ITestClass インターフェイスを実装している必要があります。
    2. テストを初期化するためのメソッドの名前は testInit で、Silk Performer 型のパラメータを 1 つだけ受け取る必要があります。
    3. テストの終了処理を行うメソッドは、testEnd という名前でなければなりません。
    4. すべてのテスト メソッドは、名前が接頭辞 test で始まっている必要があり、パラメータを受け取ることはできません。
  2. 変更を保存します。
親トピック: プロジェクト


Eclipse から Silk Performer プロジェクトのプロパティを構成する

  1. Eclipse で、プロジェクト > プロパティー を選択します。
  2. メニュー ツリーで Silk Performer Project Properties ノードを選択します。 Silk Performer Project Properties ダイアログ ボックスの先頭に、対象の Silk Performer プロジェクトへのパスが表示されます。
  3. 必要がある場合は、Silk Performer でプロジェクトを開いたときに指定した Name を編集します。
  4. 必要に応じて、プロジェクトに対して定義されている 説明 を編集します。
  5. プロジェクトに対する Silk Performer プロジェクトの属性 (名前、値の型、値、デフォルト値、説明) を定義できます。 Silk Performer プロジェクト設定の構成についての詳細は、「プロジェクト属性」を参照してください。
  6. 適用 をクリックして変更を適用します。
  7. OK をクリックします。
    注: Silk Performer プロジェクトの属性には、Eclipse の Silk Performer メニューから プロジェクト属性 を選択して直接アクセスすることもできます。
親トピック: プロジェクト
関連概念
Project Attributes


Eclipse で Silk Performer システム設定を構成する

  1. Eclipseで、Silk Performer 21.0 > システム設定 を選択します。
  2. 必要に応じて構成オプションを設定します。
  3. OK をクリックして、変更を保存します。
親トピック: プロジェクト
関連タスク
システム設定


Eclipse で Silk Performer プロジェクト設定を構成する

注: Eclipse が Silk Performer プロジェクトを制御しているときは、Silk Performer で定義されているすべての Java 設定は、Eclipse で定義されている設定によって無効になります。
  1. Eclipse で、 Silk Performer 21.0 > Profile Settings を選択します。 プロジェクト プロファイルの Java 設定の General ページが表示されます。ここでは、新しく作成したプロジェクトに設定されている Java のホーム、およびクラスパスを確認できます。
  2. 必要に応じてプロファイルのオプションを設定します。
  3. OK をクリックして、変更を保存します。
親トピック: プロジェクト
関連概念
プロジェクトのプロファイル設定


Java ビルド パスをリダイレクトする

Silk Performer 内で使用される Eclipse オブジェクトのクラスパスには制限があります。 テスト中にライブラリーを配布できるようにするには、すべてのライブラリーが Silk Performer プロジェクト ディレクトリ (<my documents>\Silk Performer 21.0\Projects) に存在するか、UNC パスで使用できる必要があります。

  1. Eclipse のパッケージ エクスプローラーで Silk Performer 対応プロジェクトを右クリックし、コンテキスト メニューから ビルド パス > ビルド パスの構成 を選択します。
  2. ライブラリー タブをクリックします。 テストの実行に必要なすべてのユーザー ライブラリーが表示されます。
  3. ライブラリーの追加 をクリックします。 ライブラリーの追加 ページが開きます。
  4. 一覧から ユーザー ライブラリー を選択し、次へ をクリックします。
  5. ユーザー ライブラリー をクリックします。 ユーザー ライブラリー ページが開きます。
  6. 新規 をクリックします。 新規ユーザー ライブラリー ダイアログが開きます。
  7. 新しいライブラリーの名前を指定して、OK をクリックします。 ユーザー ライブラリー ページが開きます。
  8. JAR の追加 をクリックします。
  9. ローカル システムで使用可能な Java ライブラリーを参照して選択します。 複数のライブラリーを選択するには、Shift キーまたは Ctrl キーを押しながらクリックします。
  10. 開く をクリックして、JAR ファイルを新しいユーザー ライブラリーに追加します。 ユーザー ライブラリー ページが開きます。
  11. OK をクリックします。 ライブラリーの追加 ページが開きます。
  12. 終了 をクリックします。 これらの設定は、Silk Performer ワークベンチ プロジェクトと Silk Performer 対応 Eclipse プロジェクトの両方のクラスパスに移行されます。
親トピック: プロジェクト


Silk Performer テスト クラスを Eclipse プロジェクトに追加する

Silk Performer 対応の Eclipse プロジェクトのテスト用に複数の Java クラスを生成できます。

注: Silk Performer は、ユーザー定義の JAR ライブラリを取り扱うことができます。 起動できるのは、Silk Performer 内の Java プロジェクトのルート パッケージ内にあるクラスだけです。 JAR などの外部ライブラリのみを使用できます。
  1. Eclipse SDK で、ファイル > 新規 > その他 を選択します。 新規 ダイアログ ボックスが開きます。
  2. メニュー ツリーから Silk Performer > Silk Performer Test Class を選択し、次へ をクリックします。 New Silk Performer Test Class ダイアログ ボックスが開きます。
  3. 必要に応じて、プロジェクト名 と Test class の値を編集します。
  4. 参照 (...) ボタンをクリックします。 Silk Performer Enabled Projects ダイアログ ボックスが開きます。
  5. この新しいテスト クラス テンプレートを追加する Silk Performer 対応の Eclipse プロジェクトを選択し、OK をクリックします。
  6. 終了 をクリックします。 テスト クラス テンプレートが、Eclipse プロジェクトに追加されます。
親トピック: プロジェクト


スクリプトの試行

  • テスト クラスに対して TryScript を実行する
    テスト クラスがエラーを生成するかどうか、またはテスト クラスによってテストが失敗するかどうかを判定するには、TryScript の実行を行います。
  • Silk Performer Try Scripts の起動構成を定義する
    プロジェクトと起動構成を関連付けます。
  • ベースライン テストを実行する
    ベースライン テストを実行するには、テスト プロジェクトを Eclipse から Silk Performer に渡します。
親トピック: Eclipse プラグイン


テスト クラスに対して TryScript を実行する

  1. Eclipse のパッケージ エクスプローラーのメニュー ツリーで、TryScript を実行するテスト クラスを選択します。
  2. Silk Performer 21.0 > Try Script を選択します。 Eclipse は自動的にデバッグ パースペクティブに切り替わり、TryScript の実行を開始します。 デバッグ ページの下部ペインには、テストのステータスを監視する Silk Performer ビューが含まれます。
  3. テスト クラスによってエラーが発生したりテストが失敗したりする場合は、Eclipse エディタでテスト クラスを編集します。
  4. TryScript の実行が成功した場合は、テストの結果を TrueLog ファイルなどの Silk Performer ログ ファイルおよび結果ファイルで確認できます。
親トピック: スクリプトの試行
関連概念
結果


Silk Performer Try Scripts の起動構成を定義する

  1. Eclipse のメイン ツールバーで、実行 > デバッグの構成 を選択します。 デバッグの構成 ダイアログが開きます。
  2. メニュー ツリーで Silk Performer TryScript のノードを選択します。
  3. ツールバーの 新規の起動構成 ボタンをクリックします。 構成の作成、管理、および実行 ページが開き、現在アクティブな Silk Performer プロジェクトとその最初のテスト クラスが選択されています。
  4. Project ボックスの横にある参照 (...) ボタンをクリックします。 Silk Performer Enabled Projects ダイアログが開きます。
  5. この起動構成と関連付ける Silk Performer 対応プロジェクトを選択します。
  6. OK をクリックします。
  7. この起動構成で起動する Test class を選択します。
  8. (省略可能) ページの Project Attributes セクションで、定義済みプロジェクト属性のパラメータを編集します。
  9. 適用 をクリックして変更を適用します。
  10. 設定した起動構成に基づいて TryScript を実行するには、デバッグ をクリックします。
親トピック: スクリプトの試行


ベースライン テストを実行する

TestClass によって生成された TryScript の結果が満足できるものである場合は、テスト プロジェクトを Eclipse から Silk Performer に渡して、ベースライン テストを実行します。

  1. Eclipse で、Silk Performer 21.0 > Open in Silk Performer を選択します。 Silk Performer ワークベンチが起動し、Eclipse プロジェクトが プロジェクト メニュー ツリーにロードされます。 すべての TestClass が、スクリプト ノードに追加されます。
  2. ベースライン テストを定義して実行します。
親トピック: スクリプトの試行


結果

テストまたは TryScript 実行が成功した後は、仮想ユーザー レポート ファイル、仮想ユーザー ログ ファイル、仮想ユーザー出力ファイル、仮想ユーザー エラー ファイル、または TrueLog を選択して表示できます。

  • 仮想ユーザー レポートを表示する
    Eclipse の Silk Performer Report File Viewer タブに仮想ユーザー レポートを表示します。
  • 仮想ユーザー ログ ファイルを表示する
    最新のテスト実行のログ ファイルを表示します。
  • 仮想ユーザー出力ファイルを表示する
    最新のテスト実行の TestClass コードの出力ファイルを表示します。
  • 仮想ユーザー エラー ファイルを表示する
    最新のテスト実行のエラー ファイルを表示します。
  • TrueLog を表示する
    最新の TryScript 実行の TrueLog ファイルを表示して、テスト結果を分析します。
親トピック: Eclipse プラグイン
関連タスク
テスト クラスに対して TryScript を実行する


仮想ユーザー レポートを表示する

Eclipse で、Silk Performer 21.0 > Virtual User Report File を選択します。

この操作により、Eclipse の Silk Performer Report File Viewer タブにレポートが表示されます。 このビューには、最新の TryScript テストから渡された仮想ユーザーのステータス メッセージが表示されます。

親トピック: 結果


仮想ユーザー ログ ファイルを表示する

Eclipse で、Silk Performer 21.0 > Virtual User Log File を選択します。

最新のテスト実行のログ ファイルが表示されます。

親トピック: 結果


仮想ユーザー出力ファイルを表示する

Eclipse で、Silk Performer 21.0 > Virtual User Output File を選択します。

最新のテスト実行の TestClass コードの出力ファイルが表示されます。

親トピック: 結果


仮想ユーザー エラー ファイルを表示する

Eclipse で、Silk Performer 21.0 > Virtual User Error File を選択します。

最新のテスト実行のエラー ファイルが表示されます。

親トピック: 結果


TrueLog を表示する

Eclipse で、Silk Performer21.0 > Show TrueLog を選択します。 最新のスクリプトの試行の TrueLog ファイルが、TrueLog Explorer に表示されます。
親トピック: 結果
関連概念
TrueLog について


Silk Performer Java Explorer

Java を使用して開発された Silk Performer Java Explorer、および Silk Performer Java Framework を使用すると、Web サービス、Enterprise JavaBeans (EJB)、RMI オブジェクト、およびその他の GUI のない Java オブジェクトをテストできます。Java Explorer では、すべての作業がビジュアルに、マウスによる操作で行われるため、プログラミングを必要とせず、さまざまなテスト ケースのテスト シナリオを定義し、実行できます。テスト スクリプトは、Java プログラミング言語に慣れていないユーザーにとっても、ビジュアルで理解しやすいものになっています。

Java Explorer を利用して作成されたテスト シナリオは、Silk Performer にエクスポートして、同時実行および負荷テストですぐに再利用できます。

注: Java Explorer と互換性があるのは、JDK バージョン 1.2 以降 (1.4 以降を推奨) のみです。

Java の詳細については、次の Web サイトにアクセスしてください。

  • http://java.sun.com
  • http://www.javaworld.com
  • http://www-106.ibm.com/developerworks/java/
  • Silk Performer Java Explorer を起動する
    プログラムを記述しないで、さまざまなテストケースを含む完全なテスト シナリオを定義し、実行するには、Java Explorer を起動します。
親トピック: Java のサポート


Silk Performer Java Explorer を起動する

Java Explorer を起動するために次のステップのいずれかを実行します。
  • スタート > すべてのプログラム > Silk > Silk Performer 21.0 > 開発ツール > Silk Performer Java Explorer をクリックします。
  • スタート > すべてのプログラム > Silk > Silk Performer 21.0 > Silk Performer Workbench をクリックし、アプリケーションの種類が Java/Java Explorer または Web Services/Java Explorer の新しいプロジェクトを作成します。
親トピック: Silk Performer Java Explorer
関連概念
Java Explorer のヘルプ


OnWeb のメインフレームと Web 間のテストのサポート

Silk Performer では、メインフレーム システムとやり取りする Micro Focus OnWeb の Web ベースのアプリケーションのテストをサポートしています。 OnWeb の Web ベースのアプリケーションは、標準の Silk Performer Web アプリケーションの記録、スクリプト作成、再生機能を使用して簡単にテストできます。 スクリプトを作成して OnWeb アプリケーションをテストする場合は、記録するアプリケーションの種類に Web business transaction (HTML/HTTP) を選択します。 Micro Focus OnWeb の Web ベースのアプリケーションの以降のテスト手順は、標準の Web アプリケーションと同じです。パラメータ化する必要のある動的な値はすべて、 Silk Performer で自動的に処理されます。 また、.NET Explorer および Java Explorer を使用して、標準の SOAP Web サービスと同じ手順で OnWeb の Web サービスをテストすることもできます。

Micro Focus OnWeb について

Micro Focus OnWeb には、ホスト アプリケーションを Web アプリケーションに変換するための総合的な開発プラットフォームと配置プラットフォームが備えられています。 OnWeb では、複数のホスト システムにわたる複数の画面からデータが集約および構成され、Web ページとして表されます。

OnWeb® とその広範囲にわたるアプリケーション コネクタは、ホスト システムとエンタープライズ アプリケーションの両方をまとめて、Web 対応の標準ベースの複合アプリケーションを作成するのに役立ちます。このため、既存の IT 投資を利用して、サービス指向アーキテクチャ (SOA) に向けて移行することができます。

親トピック: 特定のアプリケーションの種類に対する負荷テスト


Oracle Forms / Oracle Applications のサポート

このセクションでは、Silk Performer を使用して、Oracle Forms および Oracle Applications に対して負荷テストを実行する方法を説明します。 可能なサーバー構成の概要を示し、そのテスト方法について説明します。 検証機能など、スクリプトのカスタマイズ方法の概要も示します。

  • 基本概念
    Silk Performer による Oracle Forms と Oracle Applications のテストに対するサポートについて説明します。
  • インストールと要件
    Oracle クライアントとサーバー ソフトウェアをセットアップするための構成要件について説明します。
  • Oracle Forms/Oracle Applications負荷テストの管理
    Oracle Forms/Oracle Applications負荷テストの準備、実行、およびその結果の分析を行うために遂行する必要があるタスクを列挙します。
  • 概念を記録する
    Oracle Forms アプリケーションが Silk Performer によって記録される方法について説明します。
  • Oracle Forms / Oracle Applications TrueLogs
    TrueLog Explorer を使用して、Oracle Forms / Oracle Applications テストの結果を検討し、スクリプトを視覚的にカスタマイズする方法について説明します。
  • 再生の概念
    再生中に Silk Performer 駆動で Oracle Forms が動作する方法について説明します。
  • Oracle Forms のパフォーマンス監視
    Performance Explorer を使用して、Oracle Forms Dynamic Monitoring System (DMS) からパフォーマンス指標を取得する方法について説明します。
  • 根本原因の分析
    ログ ファイルを使用したエラーの分析方法について説明します。
  • ヒントとテクニック
    Silk Performer で Oracle Forms アプリケーションをテストする場合に考慮する必要がある問題について説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


基本概念

このセクションでは、Silk Performer による Oracle Forms と Oracle Applications のテストに対するサポートについて、技術概要、プロジェクトのセットアップ、構成に関する問題などを説明します。

次のバージョンがサポートされています。
  • Oracle Forms 6i、9i、10g、11g、12c
  • Oracle EBS 11i、12.x
  • Oracle Fusion 10g、11g、12c
  • アーキテクチャ
    Oracle Web Forms のアーキテクチャについて説明します。
  • Oracle Forms クライアント タイプ
    Oracle Forms クライアント タイプの使用可能なバージョンと使用する JVM との間の違いについて説明します。
  • Oracle Forms/Oracle Applications のバージョン
    サポートされる Oracle クライアント バージョンと、使用される Java バージョンの一覧を示します。
親トピック: Oracle Forms / Oracle Applications のサポート


アーキテクチャ

Oracle Web Forms により、既存の Oracle Forms アプリケーションをブラウザで実行できます。以前のバージョンでは、ユーザー インターフェイスと完全なクライアント/ビジネス ロジックは、クライアント マシンの Oracle Forms ランタイムで実行されていました。Web 技術への移行により、これらのコンポーネントは分割されました。アプリケーション サーバーでクライアント/ビジネス ロジックを実行する Oracle Forms ランタイムは引き続き存在します。ただし、ランタイムはユーザー インターフェイスから分離され、ユーザー インターフェイスのアクションはブラウザで動作するアプレットとの間で送受信されるようになりました。

次の図は、アーキテクチャの基本的な全体像を示しています。

Oracle Forms アーキテクチャ

クライアントが Oracle Forms サーバーに接続すると、HTTP リスナー プロセスはアプレットのホスティングに関する情報を含んでいる最初の HTML ページを返します。Java 仮想マシン (JVM) がまだインストールされていない場合、JVM をダウンロードするためにこのページによってブラウザがリダイレクトされます。

アプレットは初期化中にリスナー プロセスに接続します。このリスナーは、クライアントに対してランタイム エンジンをホストする新しいプロセスを生成します。これにより、クライアント アプレットとランタイム エンジンは、HTTP、HTTPS、またはソケット モードを経由して直接接続します。

注: ソケット モードは、Oracle Forms 6i パッチ 4、10g、11g、12c では使用できません。

Oracle Forms 9i では、記録中にすべてのメッセージを取得し、そのメッセージを再生中にサーバーに送信するために使用できるテスト インターフェイスが導入されました。

親トピック: 基本概念


Oracle Forms クライアント タイプ

Oracle Forms Web クライアントは、ブラウザ内でホストされる Java アプレットです。 Oracle Forms 11g またはそれ以降では、標準の Java 仮想マシン (JVM) が使用され、バージョン 10g またはそれ以前では、Oracle によって、JInitiator と呼ばれる独自の JVM が提供されます。

JVM または JInitiator は、最初に Oracle Forms Web アプリケーションにアクセスしたときに自動的にインストールされます。 JInitiator には異なるバージョンがあります。バージョン番号は、JInitiator 1.1.8 (Java Runtime Environment 1.1.8 を使用) など、Java Runtime Environment バージョンの番号が反映されます。

Oracle Forms および Oracle Applications の詳細については、Oracle Technology Network を参照してください。

親トピック: 基本概念


Oracle Forms/Oracle Applications のバージョン

Silk Performer はいくつかのバージョンの Oracle Forms をサポートしており、使用するバージョンによって、記録のアプローチが異なります。次の表に、サポートされる Oracle クライアント バージョンと、使用される Java バージョンの一覧を示します。
Oracle クライアント バージョン | Oracle クライアントの Java バージョン | Silk Performer プロファイル設定の Java バージョン
Oracle Forms 6 | JInitiator 1.1.x | Java 1.4
Oracle Forms 9i | JInitiator 1.3.x | Java 1.4
Oracle Forms 10g | JInitiator 1.3.x | Java 1.4
Oracle Forms 11g | JVM 1.6 | Java 1.6
Oracle Forms 12c | JVM 1.7 | Java 1.7
Oracle Applications 11i (Oracle Forms 6i で動作) | JInitiator 1.1.x | Java 1.4
Oracle Applications 12i (Oracle Forms 10g で動作) | JVM 1.6 | Java 1.6
親トピック: 基本概念


インストールと要件

Oracle Forms アプリケーションを使用するには、クライアント側に Java Runtime Environment (JRE) が必要です。 Silk Performer の記録/再生メカニズムでも、Oracle Forms アプリケーションをテストするために JRE が必要です。

  • Oracle Forms クライアント ソフトウェアの構成
    必要な Oracle Forms クライアント ソフトウェアの構成について説明します。
  • Oracle Applications サーバー ソフトウェアの構成
    Silk Performer Recorder で名前ではなく ID を記録する場合は、Oracle Applications サーバーの構成を変更します。
親トピック: Oracle Forms / Oracle Applications のサポート


Oracle Forms クライアント ソフトウェアの構成

Oracle Forms クライアントは Web ブラウザでアプレットとして実行されます。 デフォルトでは、Web ブラウザは、初めて Oracle Forms アプリケーションをロードしたときに JRE をダウンロードおよびインストールします。 Oracle Forms 10g 以前の場合、Oracle Forms 用の Oracle JRE は JInitiator という名前です。 JInitiator の使用は必須ではありません。 JRE がインストールされると、Silk Performer は Oracle Forms アプリケーションを記録するようにセットアップされます。

親トピック: インストールと要件


Oracle Applications サーバー ソフトウェアの構成

Silk Performer Recorder は、Oracle Forms アプレットをホストしている HTML ページを変更します。 SilkPerformer Recorder はパラメータ record=names を設定するので、スクリプトでは ID ではなく読みやすい名前を取得できます。 この処理が自動的に機能しない場合は、次の手順を実行します。
  1. Oracle Applications サーバーで、ファイル formsweb.cfg を探し、テキスト エディタで開きます。
  2. このファイルにテキスト record=names を追加して、保存します。
  3. Oracle Applications サーバーを再起動します。
これにより、Silk Performer は、ID ではなく名前を記録できるようになります。
親トピック: インストールと要件


Oracle Forms/Oracle Applications負荷テストの管理

このセクションでは、Oracle Forms/Oracle Applications負荷テストの準備、実行、およびその結果の分析を行うために遂行する必要があるタスクについて説明します。

  1. Oracle Forms/Oracle Applications プロジェクトの概要設定
    テスト スクリプトを準備する前に、Oracle Forms/Oracle Applications プロジェクトを作成します。
  2. Oracle Forms/Oracle Applications テスト スクリプトを記録する
    テスト スクリプトをカスタマイズする前に、Silk Performer Recorder で Oracle Forms / Oracle Applications テスト スクリプトを記録します。
親トピック: Oracle Forms / Oracle Applications のサポート


Oracle Forms/Oracle Applications プロジェクトの概要設定

Oracle Forms アプリケーションのテスト開始前に、次のことを確認します。
  • Oracle Forms クライアントが、記録中のマシンで開始できること。
  • テスト中の Oracle Forms のバージョンを認識しておくこと。 現在サポートされているバージョンは Oracle Forms 6i、9i、10g、11g、12c および Oracle EBS 11i、12.x であること。
  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類メニュー ツリーから、使用している Oracle Forms/Oracle Applications バージョン (Application Server/Component Models > Oracle > Oracle Forms<バージョン>、または ERP/CRM > Oracle > Oracle Applications <バージョン>) に一致するアプリケーションの種類を選択します。
  5. 次へ をクリックします。
    注: プロジェクトにさらにリソースを追加する必要がある場合は、プロジェクト メニュー ツリー ビューでプロジェクト アイコンを右クリックします。 Silk Performer に必要なユーザー データ ファイル (.csv)、ランダム データ ファイル (.rnd)、.idl ファイルをすべてプロジェクトにセットアップすることが特に重要です。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: Oracle Forms/Oracle Applications負荷テストの管理
次のトピック: Oracle Forms/Oracle Applications テスト スクリプトを記録する


Oracle Forms/Oracle Applications テスト スクリプトを記録する

テスト スクリプトをカスタマイズする前に、Silk Performer Recorder で Oracle Forms / Oracle Applications テスト スクリプトを記録します。
  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. デフォルトの Oracle Forms 記録プロファイルを選択します。カスタム記録プロファイルの設定を変更する場合は、設定 をクリックします。
  3. URL テキスト ボックスに、Oracle Forms アプリケーションの URL を入力します。
  4. 記録の開始 をクリックすると、セッションの記録が始まります。
  5. 記録中に発生したアクションのレポートを表示するには、GUI サイズの変更 をクリックして [SilkPerformer Recorder - [<プロファイル名>]] ダイアログを最大化します。 [SilkPerformer Recorder - [<プロファイル名>]] ダイアログが最大化され、アクション ページに表示されます。
  6. クライアント アプリケーションを使用して、テストでシミュレートするターゲット サーバーでの操作などを実行します。この操作を、Recorder が取得して、記録します。 これらのアクションとダウンロードされたデータのレポートが、アクション ページに表示されます。
  7. 記録フェーズ中に、トランザクションとタイマをテスト スクリプトに挿入します。トランザクションとタイマは必要なだけ作成できます。トランザクションを挿入するには、トランザクションの新規作成 をクリックします。トランザクションとは、仮想ユーザーに割り当てることができる作業のことです。
  8. [トランザクションの新規作成] ダイアログで、トランザクション名を入力して、OK をクリックします。 新しいトランザクションが アクション ログに表示されます。
  9. タイマを挿入するには、タイマ セッションの新規作成 をクリックします。タイマは、テスト内でユーザーが定義する測定期間です。パフォーマンスを分析するトランザクションのコンポーネントごとに、タイマを作成してください。確認ダイアログで、タイマ名を入力して、OK をクリックします。
  10. タイマを挿入するには、タイマ セッションの新規作成 をクリックします。タイマは、テスト内でユーザーが定義する測定期間です。パフォーマンスを分析するトランザクションのコンポーネントごとに、タイマを作成してください。確認ダイアログで、タイマ名を入力して、OK をクリックします。
  11. 記録を終了するには、記録停止 をクリックします。
  12. .bdf ファイルの名前を入力し、保存します。キャプチャ ファイル ページが表示されます。スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。
親トピック: Oracle Forms/Oracle Applications負荷テストの管理
前のトピック: Oracle Forms/Oracle Applications プロジェクトの概要設定


概念を記録する

Oracle Forms アプリケーションは、ブラウザを記録することにより、また、クライアントとサーバーとの間で送信されるメッセージをキャプチャする特殊な Java Recording API を使用して、記録されます。

  • プロファイル設定を記録する
    プロファイル設定 ダイアログを使用して設定できる Oracle Forms/Oracle Applications 記録オプションについて説明します。
  • Oracle Forms ログ レベルを設定する
    ログ レベルを定義し、Oracle Forms アプリケーションの記録後に分析する必要があるメッセージを表示します。
  • Oracle Java 記録 API
    Oracle Forms アプリケーションが Silk Performer によって記録される方法について説明します。
  • Java 環境設定
    スクリプトを記録する前に Java 環境設定を定義します。
  • 記録中に生成されるファイル
    アプリケーションの記録中に、スクリプト、テキスト ログ、および TrueLog が生成されます。
  • Oracle Forms HTTPS サポート
    JVM のトラストストア データベースに Silk Performer 証明書を追加し、HTTPS 経由で Oracle Forms アプリケーションを記録する方法について説明します。
親トピック: Oracle Forms / Oracle Applications のサポート


プロファイル設定を記録する

記録プロファイル設定で、Oracle Forms プロジェクト タイプまたは Oracle Applications プロジェクト タイプの 1 つを選択する場合、アクティブなブラウザに基づいて、プロジェクト用の新しい記録プロファイルが作成されます。この一時的な記録プロファイルの設定は、変更できません。異なる設定を使用して記録する場合、コピー をクリックし、選択したプロファイルに基づいてカスタム記録プロファイルを作成します。

Oracle Forms 6 は、2 つの異なる通信チャネル（HTTP/HTTPS またはソケット モード）で動作できます。Oracle Forms 6 を選択すると、両方のチャネルが使用されます。記録中に問題が発生した場合、記録プロファイルで正しい Java Recording API を選択します（まず、使用している通信チャネルを特定する必要があります）。

Oracle Applications12i では、通信チャネル（HTTP/HTTPS またはソケット モード）が自動的に検出されます。

親トピック: 概念を記録する
関連概念
ヒントとテクニック
関連タスク
Oracle Forms オプションを設定する


Oracle Forms ログ レベルを設定する

ログ レベルによって、Oracle Forms アプリケーションの記録時にキャプチャされるメッセージおよび TrueLog が定義されます。
  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. ショートカット リストで 記録 を選択し、Oracle Forms アイコンをクリックします。
  4. ログ タブをクリックします。 ここでは、記録中に値をログに記録する追加プロパティを指定できます。
  5. ログ レベル リスト ボックスから、仮想ユーザー ログのログ レベルを選択します。
    • なし - TrueLog は生成されますが、Oracle メッセージは記録されず、ログ ファイルのコントロールに関する詳細情報は書き込まれません。
    • エラー - なし ログ レベルに加え、記録中に発生したエラーが記録されます。
    • 通常 - エラー ログ レベルに加え、Oracle メッセージが TrueLog およびログ ファイルに記録されます。
    • デバッグ - 通常 ログ レベルに加え、TrueLog Explorer の 受信本文 および 送信本文 タブなどに、コントロール メッセージに関する詳細情報が記録されます。この情報は、スクリプトの試行の実行と比較する場合に、ユーザーのスクリプトをカスタマイズし、デバッグするのに役に立ちます。再生中に問題を検出し、分析のためにログ ファイルを Micro Focus SupportLine に送信する必要がある場合にも、使用する必要があります。
    アプリケーションのコントロールごとに TrueLog で記録される追加のプロパティも、定義できます。このようなプロパティは、その内部名を使用して定義する必要がある Oracle Forms 内部プロパティです。ほとんどの場合、デフォルトのプロパティ (名前、値) がコントロールごとに記録されるため、この機能を使用する必要はありません。OraForms.bdh ファイルには、すべての内部プロパティの完全な一覧が含まれます。そのほとんどはコントロールによっては使用されませんので、定義する場合でも通常は無視されます。
  6. OK をクリックして、設定を保存します。
親トピック: 概念を記録する
関連タスク
Oracle Forms オプションを設定する


Oracle Java 記録 API

Java 記録 API は、次の 2 つのエレメントで構成されます。
  • HTTP 記録ルール
  • Java クラスが記録ロジックを実装する方法について

HTTP/HTTPS が、クライアント/サーバー通信チャネルのトランスポート プロトコルである場合、特定の HTTP/ HTTPS トラフィックの記録を防ぐには、HTTP 記録ルールが必要です。 すべての HTTP/HTTPS トラフィックが無視されるのではなく、メッセージを送受信するトラフィックのみが無視されます。

これは、Oracle Forms アプリケーションが、埋め込みオブジェクトまたはフレーム付きで通常の HTML ファイルに埋め込まれている場合、これらのページを要求する呼び出しはスクリプト化され、このため再生中に要求されることを、意味します。

必要な OraForms API 呼び出しをスクリプト化する観点から、アプレットとサーバーとの間のすべての通信は、Java Recorder によって処理されます。

親トピック: 概念を記録する


Java 環境設定

Oracle Forms アプリケーションの記録と再生には Java 実装が必要なので、プロファイル 設定ダイアログを使用して Silk Performer で Java 環境を構成する必要があります。 Java ホーム ディレクトリ(設定 > アクティブ プロファイル > Java > 全般 > Java ホーム) を定義する必要があります。

親トピック: 概念を記録する
関連タスク
Java バージョンとクラスパス設定を構成する


記録中に生成されるファイル

アプリケーションの記録中に、スクリプト、テキスト ログ、および TrueLog が生成されます。
  • スクリプト
    記録される Oracle Forms スクリプトの基本概念について説明します。
  • テキスト ログを記録する
    記録するテキスト ログには、HTTP トラフィックに関する情報が含まれています。
  • TrueLog の記録
    TrueLog を使用すると、最初に TryScript を実行した後で、記録および再生の違いを比較できます。
親トピック: 概念を記録する


スクリプト

スクリプトでは、init トランザクションに OraFormsInit メソッド コールが含まれます。 OraFormsInit では、サーバー、ポート、サーブレットの URL、および使用する Oracle Forms アプリケーションのバージョンが含まれます。 必要なパラメータは、バージョンおよび接続タイプによってさまざまに異なるため、すべてのパラメータで値を使用してスクリプト化する必要はありません。

OraFormsInit では、内部 Oracle Forms 再生エンジンが初期化され (実際の接続は OraFormsConnect で実現)、したがって、メイン トランザクションで最初のコールの 1 つである必要があります。

新しいフォーム ウィンドウが起動されるたびに、レコーダによって OraFormsSetWindow がスクリプト化され、これは、新しいウィンドウがアクティブなウィンドウであることを示します。 OraFormsSetWindow には、TrueLogs での特別な意味があり、これは、後でこの章で説明します。

次の OraFormsSetWindow までの後続のすべてのメソッド コールは、現在のウィンドウのコントロールで実行されます。

OraFormsDestroy は、end トランザクションでスクリプト化され、再生エンジンがシャットダウンされます。

親トピック: 記録中に生成されるファイル


テキスト ログを記録する

記録するテキスト ログには、HTTP トラフィックに関する情報が含まれています。

Web アプリケーションで通常記録されるほとんどの HTTP 情報は、無効にされます。 詳細な HTTP ログが必要な場合は、ユーザーのプロファイルでこの設定を有効にします。

ログの関連要素は、ログ レベルが 通常 または デバッグ のときに記録される Oracle Forms メッセージです。 サーバーからのメッセージおよびサーバーへのメッセージは、次の形式で記録されます。
サンプル メッセージ | 説明
===> | 方向：===> (サーバーへ)、<== (サーバーから)
Block# 1 -------------------- | ブロック #：ブロックには、サーバーに送信されるメッセージおよびメッセージに対するサーバーの応答が含まれます。 両方の部分の終端に、Terminal メッセージが付きます。
MSGTYPE: UPDATE | メッセージのタイプ。 オプションには、-CREATE、UPDATE、GET、DESTROY、TERMINAL が含まれます。
CLASS: 1/1 | メッセージを処理するコントロールのクラス
ID: 1 | メッセージを処理する一意のコントロール識別子
RESPONSE: 0 | ステータス メッセージ
PROPERTIES: TYPE:PROP_TYPE_INTEGER Name:INITIAL_VERSION Value:90290 TYPE:PROP_TYPE_POINT Name:INITIAL_RESOLUTION Value:java.awt.Point[x=96,y=96] TYPE:PROP_TYPE_POINT Name:INITIAL_DISP_SIZE Value: java.awt.Point[x=1280,y=1024] ... | プロパティの一覧。 各プロパティには、タイプ、名前、および値があります。

ログ レベルが デバッグ に設定されている場合、トラブルシューティングに必要なログ情報が、ログ ファイルに記録されます。 問題が発生し、Micro Focus SupportLine に問い合わせる必要がある場合は、ログ レベル デバッグ を使用しているログ ファイルを提供してください。

親トピック: 記録中に生成されるファイル


TrueLog の記録

記録 TrueLog には、再生 TrueLog と同じ情報が含まれます。 これを使用すると、最初に TryScript を実行した後で、記録および再生の違いを比較できます。

親トピック: 記録中に生成されるファイル
関連概念
Oracle Forms / Oracle Applications TrueLogs


Oracle Forms HTTPS サポート

Silk Performer では、HTTPS 経由でセキュアな接続を使用する Oracle Forms アプリケーションを記録できます。 HTTPS を経由して Oracle Forms アプリケーションを記録するには、Silk Performer 証明書を JVM のトラストストア データベースに追加する必要があります。

  • JVM を使用した Oracle Forms HTTPS サポートの有効化
    JVM を使用して、Silk Performer 証明書を JVM のトラストストア データベースに追加します。
  • JInitiator を使用した Oracle Forms HTTPS サポートの有効化
    JInitiator を使用して、Silk Performer 証明書を JVM のトラストストア データベースに追加します。
親トピック: 概念を記録する


JVM を使用した Oracle Forms HTTPS サポートの有効化

Silk Performer では、HTTPS 経由でセキュアな接続を使用する Oracle Forms アプリケーションを記録できます。 HTTPS を経由して Oracle Forms アプリケーションを記録するには、Silk Performer 証明書を JVM のトラストストア データベースに追加する必要があります。
  1. お使いのシステムの Java コントロールパネル を開きます。
  2. セキュリティ タブを選択します。
  3. インポート をクリックして、Silk Performer 証明書 IRCAcert.pem を探し、インポートします。 このファイルは、Silk Performer インストール ディレクトリにあります。
  4. Java コントロールパネル を閉じます。
    注: Oracle Forms アプリケーションを記録する前に必ず新しいブラウザ セッションを開始してください。
これで、アプリケーションを記録できます。
親トピック: Oracle Forms HTTPS サポート


JInitiator を使用した Oracle Forms HTTPS サポートの有効化

Silk Performer では、HTTPS 経由でセキュアな接続を使用する Oracle Forms アプリケーションを記録できます。 HTTPS を経由して Oracle Forms アプリケーションを記録するには、Silk Performer 証明書を JVM のトラストストア データベースに追加する必要があります。
  1. ファイル certdb.txt をテキスト エディタで開きます。 このファイルは、JInitiator のホーム ディレクトリのディレクトリ \Lib\security\ にあります。
  2. Silk Performer 証明書ファイル IRCAcert.pem をテキスト エディタで開きます。 このファイルは、Silk Performer インストール ディレクトリにあります。
  3. Silk Performer 証明書ファイルの内容をコピーして、certdb.txt ファイルの内容に追加します。
  4. certdb.txt ファイルを保存して、閉じます。
    注: Oracle Forms アプリケーションを記録する前に必ず新しいブラウザ セッションを開始してください。
これで、アプリケーションを記録できます。
親トピック: Oracle Forms HTTPS サポート


Oracle Forms / Oracle Applications TrueLogs

TrueLog Explorer は、Oracle Forms アプリケーションの検討に便利であるだけではありません。 コントロール値の検証を追加し、記録中に変更されたコントロールの入力値をカスタマイズすることもできます。

  • Oracle Forms アプリケーションでの作業 - 概要
    スクリプトの試行の実行結果に基づいて Oracle Forms テスト スクリプトをカスタマイズする方法について説明します。
  • Oracle Forms TrueLog の構造
    Oracle Forms TrueLog 構造および フォーム コントロール ウィンドウについて説明します。
  • Web 呼び出しを処理する
    Oracle Forms は、スクリプトに Web 呼び出しが含まれることがある混合プロトコルのため、TrueLog Explorer では、バイナリの Oracle Forms アプレット用のデータをベースにした表と HTML ページ用のレンダリング HTML ビューを切り替えできます。
  • ノード情報
    Oracle Forms ノードによって保存されるすべてのコントロールの現在の状態に関する情報について説明します。
  • TrueLog Explorer の検証チェック
    テスト スクリプトにコンテンツ チェックを追加して、サーバーから送信されるコンテンツを、現実の条件下で実際にクライアントが受信するかを検証します。
  • 解析関数の概要
    負荷テストの実行中に状態情報を保持し、実際のユーザー データの入力をシミュレートするために解析関数を使用する方法について説明します。
  • カスタマイズできる入力データ関数
    カスタマイズできる入力データ関数の一覧を示します。
  • [受信本文]/[送信本文]ページ
    Silk Performer と Oracle Forms との間で通信されるメッセージ ブロック タイプ (OraForms 呼び出し) について説明します。
親トピック: Oracle Forms / Oracle Applications のサポート
関連タスク
Oracle Applications 12i のセッション情報をカスタマイズする


Oracle Forms アプリケーションでの作業 - 概要

Oracle Forms (旧称「SQL*Forms」) は、Oracle の iDS (Internet Developer Suite) のコンポーネントの 1 つです。 Oracle の iAS (Internet Application Server) Forms Services を使用してフォームを Web 全体に配置できる、第 4 世代言語の RAD (Rapid Application Development) 環境です。

Oracle Forms は Java テクノロジに基づいているため、Oracle Forms トランザクションを記録および再生するには、Silk Performer のプロファイル設定を使用して、事前に Java 仮想マシンを構成する必要があります。 Oracle Forms 6i 以降の記録中は、Java の Just-In-Time コンパイラを無効する必要もあります。

この章を読み進む前に、TrueLog Explorer の基本機能を熟知していることが不可欠です。

親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: Oracle Forms アプリケーションでの作業


Oracle Forms TrueLog の構造

このセクションでは、Oracle Forms TrueLog 構造および フォーム コントロール ウィンドウについて説明します。

  • Oracle Forms TrueLog の構造 - 概要
    選択された Oracle Forms アプレット ウィンドウの要素を表形式のデータとして表示する フォーム コントロール ウィンドウについて説明します。
  • ノード情報
    Oracle Forms ノードによって保存されるすべてのコントロールの現在の状態に関する情報について説明します。
  • Web 呼び出しを処理する
    Oracle Forms は、スクリプトに Web 呼び出しが含まれることがある混合プロトコルのため、TrueLog Explorer では、バイナリの Oracle Forms アプレット用のデータをベースにした表と HTML ページ用のレンダリング HTML ビューを切り替えできます。
  • [受信本文]/[送信本文]ページ
    Silk Performer と Oracle Forms との間で通信されるメッセージ ブロック タイプ (OraForms 呼び出し) について説明します。
  • Terminal メッセージ
    クライアントとサーバー間の通信のラウンドトリップを終了させるために使用される 3 種類の Terminal メッセージについて説明します。
  • Oracle Forms テストのエラーを分析する
    テストが終了すると、通常、TrueLog Explorer に複数の TrueLog On Error ファイルが開きます。 エラーがどの TrueLog に記録されているかにかかわらず、これらのエラーが発生したトランザクションを時間の経過順に分析できます。
  • Oracle Forms テスト スクリプトを分析する
    テスト スクリプトを生成したら、スクリプトの試行を行うことによって、スクリプトがエラーなしで動作するかどうかを確認できます。 スクリプトの試行によって、記録された操作がスクリプトで正確に再現されるかどうかがわかります。
  • Oracle Forms の再生 TrueLog と記録 TrueLog を比較する
    再生 TrueLog と記録 TrueLog を比較して、再生と記録の間のコントロール値の差分を識別します。
  • 予期しない Get 呼び出し
    予期しない Get 呼び出しのために、OraFormsSet と OraFormsOnMessageGet を手動でスクリプト化する必要があるシナリオについて説明します。
  • Silk Performer のログ レベルを [デバッグ] に設定する
    予期しない get 呼び出しを受信した場合のスクリプトを手動で記述するには、クライアントとサーバー間で交換される受信データと送信データを解析することが必要です。この解析を実行できるのは、Silk Performer のログ レベルを [デバッグ] に設定した場合のみです。
親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: Oracle Forms アプリケーションでの作業


Web 呼び出しを処理する

Oracle Forms API 呼び出しに加え、HTTP コンテンツをダウンロードする Web コールは、TrueLogs にも含まれます。 各メイン トランザクションの最初の呼び出しは、テスト中に Oracle Forms アプリケーションの最初のページをダウンロードする Web 呼び出しです。

TrueLog Explorer で利用できる機能は、開いている TrueLog のプロトコルに応じて変化します。 Oracle Forms は、スクリプトに Web 呼び出しが含まれることがある混合プロトコルのため、TrueLog Explorer では、バイナリの Oracle Forms アプレット用のデータをベースにした表と HTML ページ用のレンダリング HTML ビューを切り替えできます。 Web ベースのプロトコルが重要なのは、セッション処理のカスタマイズ、検証関数の挿入、HTML の値の解析、および Oracle Forms スクリプトに含まれる HTML での検索を実行できるからです。

  1. 編集 > TrueLog のタイプ を選択します。
  2. Web (デフォルト) を選択します。
親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: Oracle Forms TrueLog の構造


ノード情報

各 Oracle Forms ノードには、アクティブ化されたウィンドウのすべてのコントロールの現在の状態に関する情報が保存されます。 ウィンドウの最初の外観を表す OraFormsSetWindow ノードを選択する場合、フォームの初期作成時に存在したすべてのコントロールおよび初期値が表示されます。

サブノードを表示する場合、選択したアクションが満たされた後で存在したすべてのコントロールの状態および初期値が表示されます。 たとえば、OraFormsEditSet を選択すると、このアクションが満たされた後のコントロールの状態が表示されます。

ウィンドウが再度有効にされ (つまり、一時的に代替ウィンドウが有効にされ)、再度有効にされたウィンドウの OraFormsSetWindow が選択されると、再度有効にされた後のコントロールのステータスが表示されます (ほとんどの場合は、ウィンドウが再度有効にされたときと同じステータスです)。

親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: Oracle Forms TrueLog の構造


TrueLog Explorer の検証チェック

TrueLog Explorer では、コンテンツ検証関数をテスト スクリプトに挿入することで、テスト中にアプリケーション サーバーから返されたコンテンツが正確かどうかを検証することができます。

TrueLog Explorer では、アプリケーションのライフ サイクル中の任意の時点でコントロール値を検証するため、ユーザーのスクリプトに検証機能を追加するウィザードが提供されます。 検証機能を追加するには、検証するコントロールの 値 列で右クリックし、関連するコンテキスト メニューを選択します。

検証したいコンテンツを特定したら、必要な検証関数をすべて生成し、テスト スクリプトに自動的に挿入することができます。 検証対象のコンテンツ (レンダリングされた HTML、HTML ソース コード、SQL コマンド、Oracle Forms などに含まれるもの) を特定するには、そのコンテンツを選択して右クリックします。

検証は、TrueLog Explorer の レンダリング および ソース ビューで、以下のいずれかの方法で視覚的に適用することができます。
  • スクリプト メニュー
  • 検証の追加 ダイアログ ボックス
  • レンダリング、ソース、および フォーム コントロール の各ビューのコンテキスト メニュー
  • ワークフロー バー
親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: 検証チェック


解析関数の概要

解析機能は、一般に、以下のようなタスクのために使用されます。
  • スクリプト内の静的なセッション ID を、状態情報を保持する動的なセッション ID に置換する。
  • 検証関数だけでは実現できない強力なコンテンツ検証をスクリプト内に作成する。 たとえば、データベース テーブルの 3 行目 2 列目の値が、1 行目 2 列目の値と 2 行目 2 列目の値の和に等しいかどうかを、解析関数によって検証できます。 それには、この 3 つの値を抽出して比較する解析関数をスクリプト内に生成します。
  • サーバーから返されたデータに応じて、テスト スクリプトの一部を条件付きで実行する。 たとえば、HTTP リクエストが、<nnn> 項目が見つかりましたという結果を含む HTML ページを返すとします。 <nnn> の値に応じて異なるアクションを実行する必要があります。 そのために、トランザクションを次のように設計します。
    • <nnn> = 0 の場合は終了する。
    • <nnn> = 1 の場合は詳細ページにリンクする。
    • <nnn> が 1 より大きい場合は次のページにリンクする。

これを実現するには、この HTML ページから <nnn> の値を抽出し、その値に基づいてスクリプトに記述されたアクションを実行しなければなりません。

TrueLog Explorer を利用すると、レンダリング ビューと ソース ビューで、ビジュアルに解析関数を挿入できます。 TrueLog Explorer によって、解析関数が自動的にスクリプト内に生成されるので、手動でコードを記述する必要はありません。 TrueLog Explorer では、アプリケーションのライフ サイクル中の任意の時点でコントロール値を解析するため、ユーザーのスクリプトに解析機能を追加するウィザードが提供されます。 解析機能を追加するには、解析するコントロールの 値 列で右クリックし、関連するコンテキスト メニューを選択します。

親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: 解析関数


カスタマイズできる入力データ関数

TrueLog Explorer には、記録中にユーザーによって変更されたコントロールの入力値をカスタマイズできるウィザードが用意されています。 入力値は、記録中に最初に入力が行われたのと同じ位置でカスタマイズできます。 次に、カスタマイズできる関数の一覧を示します。

関数 | 説明
OraFormsEditSet | テキスト コントロールの値をカスタマイズします。
OraFormsRadioSet | ラジオ ボタンを選択するかどうかを指定します。
OraFormsCheckboxSet | チェック ボックスをオンにするかどうかを指定します。
OraFormsListSelect | 選択するリスト ボックスの要素を指定します。
OraFormsPopListSelect | 選択するポップアップ リスト ボックスの要素を指定します。
OraFormsLogon | [ログオン] ダイアログのログオン資格情報をカスタマイズします。
OraFormsLovFind | [値リスト] ダイアログの検索パターンをカスタマイズします。
OraFormsLovSelect | [値リスト] ダイアログの選択項目をカスタマイズします。
OraFormsEditorDialogOK | [エディタ] ダイアログのテキスト コントロール値をカスタマイズします。
親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: Oracle Forms のユーザー入力データのカスタマイズ


[受信本文]/[送信本文]ページ

Silk Performer と Oracle Forms サーバー間で通信されるデータは、[受信本文] ページと [送信本文] ページで追跡できます。Oracle Forms の再生中、[受信本文] ページには、Silk Performer が Oracle Forms サーバーから受信したデータが表示されます。[送信本文] ページには、Silk Performer が Oracle Forms サーバーに送信したデータが表示されます。

注: これらのメッセージを利用できるのは、プロファイル設定 ダイアログでログ オプションを デバッグ に設定している場合だけです。

データのカスタマイズ中はメッセージを無視できます (ただし、GET メッセージのカスタマイズ中は無視できません)。ただし、問題が発生し、カスタマ ケアに連絡する場合には、分析するためにこの情報が必要になります。記録 TrueLog と再生 TrueLog の間に大きな違いがあることに気付くことがあります。メッセージはすべて含まれていると思われますが、対応するノードでログに記録されておらず、1 つ前または後のノードでログに記録されている場合があります。

Silk Performer と Oracle Forms サーバー間で通信される各メッセージ ブロック (OraForms 呼び出し) は、以下のメッセージ タイプまたはその組み合わせで構成されます。

項目 説明
Create

新しい UI 要素を作成する必要があることを示します。作成が必要な各 UI オブジェクトのクラス、プロパティ、および ID が指定されます。

例：サーバーからクライアントに、指定された種類、名前、ID、および場所に基づいてテキスト ボックスを作成するように指示します。

Destroy

UI 要素を破棄する必要があることを示します。

例：ウィンドウを閉じるとき、ウィンドウにあるすべてのコントロールは破棄する必要があります。

Update

アプレット内部の要素がどのような状態であるかを示します (たとえば、位置、フォーカス、選択ステータスなど)。

例：クライアントからサーバーに、マウス カーソルを配置する場所を問い合わせます。そこでサーバーは、アプレットのインターフェイス内でマウス カーソルの位置を変えることによって、応答します。

Get

クライアントとサーバー間の内部通信を示します。Get メッセージは UI では表示されません。

例：サーバーがクライアントに、対象のコントロールの ID を問い合わせます。Get メッセージは一般に最後に Terminal 3 メッセージが付きます。

Terminal
 通信のラウンド トリップの終端を示します。各メッセージ ブロックの終端に Terminal メッセージが付きます。3 種類の Terminal メッセージを利用できます。
  • Terminal 1
  • Terminal 2
  • Terminal 3

最も一般的なメッセージ ブロックは、クライアントからサーバーに update メッセージと、通信を終了する Terminal 1 メッセージを送信するというものです。これに対して、サーバーは、通常、Terminal 1 メッセージが最後に付いた destroy メッセージや create メッセージで応答します。

[受信本文]/[送信本文] のメッセージ ブロックの例

マウス クリック関数では、クライアントがサーバーに update メッセージをプロパティとともに送信します。プロパティの 1 つは、マウス カーソルの位置です。もう 1 つのプロパティは、マウスがクリックされた状態であることを示すものです。通信のラウンド トリップは、Terminal メッセージで終了します。カーソルの位置が変わり、クリックされた状態に変わったこと示すレスポンスをサーバーが返します。

 MSGTYPE:       UPDATE
 CLASS:         0/0
 ID:            2824
 TITLE:         N/A
 RESPONSE:      0
 PROPERTIES:
 TYPE:  PROP_TYPE_INTEGER
 Name:  MENU_MENUUPDATE/367
 Value: 2855

 MSGTYPE:       DESTROY
 CLASS:         0/0
 ID:            2855
 TITLE:         N/A
 RESPONSE:      0
 PROPERTIES:

 MSGTYPE:       GET
 CLASS:         0/0
 ID:            1644
 TITLE:         N/A
 RESPONSE:      0
 PROPERTIES:
 TYPE:  PROP_TYPE_VOID
 Name:  VALUE/131
 Value: null

 MSGTYPE:       TERMINAL
 CLASS:         0/0
 ID:            0
 TITLE:         N/A
 RESPONSE:      3
 PROPERTIES:
親トピック: Oracle Forms / Oracle Applications TrueLogs
親トピック: Oracle Forms TrueLog の構造


再生の概念

Silk Performer では、複数の Silk Performer にわたって分散されている複数の Oracle Forms クライアントをエミュレートできます。 Silk Performer の Oracle Forms クライアントは、再生中に Silk Performer によってホストされる Java Runtime 駆動で動作します。

  • Oracle Forms オプションを設定する
    接続モードやコントロールのタイマやカウンタの有効化など、Oracle Forms 設定を構成します。
  • Oracle Forms クライアント セッション
    記録されたスクリプトを使用した Oracle Forms クライアント セッションの処理について説明します。
  • 結果
    テスト実行中に Oracle Forms アプリケーションが実行される方法の分析方法について説明します。
  • 接続処理
    Oracle Forms 接続を適切に処理するために考慮する必要がある項目について説明します。
親トピック: Oracle Forms / Oracle Applications のサポート


Oracle Forms クライアント セッション

記録された Oracle Forms スクリプトの実行時に、クライアント セッションは OraFormsConnect 関数呼び出しで始まり、OraFormsDisconnect または OraFormsDestroy で終わります。

例

transaction TInit
begin
  WebSetBrowser(WEB_BROWSER_MSIE8);
  WebModifyHttpHeader("Accept-Language", "en,de-at;q=0.5");
  OraFormsInit("http://lnz-vmoraf11:8888/forms/lservlet", " lnz-vmoraf11", 9000,
  ORA_FORMS_11G);
end TInit;

transaction TShutdown
begin
  OraFormsDestroy();
end TShutdown;

transaction TMain
var
begin
  OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
  OraFormsConnect(
    "server module=healthyliving.fmx userid=hl/hl@ORCL_ SERVER  sso_userid="
    "output_dir=C:\\orant\\forms11\\demos\\temp");

  // New window activated: MAIN
  ThinkTime(3.7);
  OraFormsSetWindow("MAIN");
  OraFormsEditSet("EDIT_CONTROL_0", "USER", ORA_EDIT_SEND_DIRTY); // Supplier Name
  OraFormsDisconnect();
end TMain;

前述のセッションは、OraFormsConnect 呼び出しで始まり、トランザクションの末尾 (OraFormsDisconnect) で終わります。 したがって、トランザクションの繰り返しは、それぞれ、1 つの Oracle Forms クライアント セッションの場合があります。

親トピック: 再生の概念


結果

Silk Performer テストが完了すると、Performance Explorer を使用して、テスト実行中に Oracle Forms アプリケーションが実行される方法の分析方法について説明します。 Silk Performer では、テスト実行中に収集が指定されるパフォーマンス指標によって、関数呼び出しごとに設定可能なタイマとカウンタの数が収集されます。

デフォルトでは、Silk Performer では、関数呼び出しごとに次のカウンタが収集されます。
  • 送信されるバイト数
  • 受信するバイト数
  • 受信するメッセージ
  • 送信されるメッセージ
  • ラウンドトリップ
これらのカウンタは、Performance Explorer では次のように表示されます。
デフォルトの Oracle Forms カウンタ

カウンタに加え、Silk Performer では、タイマが提供され、関数呼び出しがそのタスクの完了に要する時間が測定されます。 これらのタイマは、Performance Explorer では次のように表示されます。

デフォルトの Oracle Forms タイマ

カウンタとタイマをグラフにドラッグすることによって、グラフに組み込むことができます。

親トピック: 再生の概念
関連タスク
Oracle Forms オプションを設定する


接続処理

Oracle Forms 接続は、OraFormsConnect で確立し、OraFormsDisconnect で切断します。 記録されるスクリプトには、TMain トランザクション開始時の OraFormsConnect、TMain での最後の Oracle Forms 呼び出しとしての OraFormsDisconnect が含まれます。 OraFormsDisconnect を呼び出して確実にサーバー接続を切断する必要があります。呼び出さなかった場合、クライアントを処理するサーバー ランタイム プロセスは動作し続けます。

OraForms.bdh は、サーバー エラーが原因で仮想ユーザー プロセスが終了したときに OraFormsDisconnect を呼び出すイベント ハンドラーを実装しています。

1 つのログイン プロシージャがあり、テスト対象のアクションを実行する Main トランザクションが複数存在するシナリオでは、トランザクションの開始時に接続を確立したことを確認する必要があります。 サーバー エラーが原因で接続が切断された場合、後続のトランザクションは接続を再確立する必要があります。

この問題に対応するための推奨方法は、Oracle Forms アプリケーションへの接続を確立するスクリプト コードを記述した BDL 関数を作成することです。 この関数は、OraFormsIsConnected メソッドを使用して、接続が既に確立されているかどうかを問い合わせることができます。 この関数は、アプリケーションへの接続が必要な各 Oracle Forms トランザクションの開始時に呼び出す必要があります。

例

記録後、スクリプトは次のような状態になっているはずです。
var
  gsSSessionID : string;

dclrand

dcltrans
  transaction TInit
  begin
    OraFormsInit("http://lnz-vmoraf11:8888/forms/lservlet", "lnz-vmoraf11", 9000, ORA_FORMS_11G);
    //WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    //WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;

  transaction TShutdown
  begin
    OraFormsDestroy();
  end TShutdown;

  transaction TMain
  begin
    WebSetBrowser(WEB_BROWSER_MSIE8);
    WebModifyHttpHeader("Accept-Language", "de-at");
    WebPageUrl("http://lnz-vmoraf11:8888/forms/frmservlet", "iOrganizer", FORMS_FRMSERVLET001);

    WebSetBrowser(WEB_BROWSER_CUSTOM);
    WebSetUserAgent("Java1.6.0.21");
    WebSetHttpVersion("HTTP/1.1");
    WebModifyHttpHeader("Accept-Language", NULL, WEB_MODIFY_ OPT_Remove);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/f90all_ jinit.jar", 29.61);
    WebUrl("http://lnz-vmoraf11:8888/forms/jars/iorganizer.jar", 0.42);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_images/iorganizer.gif", 0.45);
    WebUrl("http://lnz-vmoraf11:8888/forms/images/blue.gif", 0.43);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/oracle/forms/registry/Registry.dat", 0.08);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_registry/iorg_registry.dat", 6.58);

    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 1111003);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1280, 1024);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetByte("FONT_WEIGHT", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect("server escapeParams=true module=iorganizer.fmx userid=  debug=no host= port= usesdi=yes record=names",
      "http://lnz-vmoraf11:8888/forms/lservlet?ifcfs=/forms/frmservlet?config=iorg&ifsessid=formsapp.4&acceptLanguage=de-at",
      "http://lnz-vmoraf11:8888/forms/frmservlet?config=iorg");
    OraFormsGetSessionId(gsSSessionID);
    WebCookieSet(gsSSessionID, "http://lnz-vmoraf11:8888/forms/java/");

    // ---
    // New window activated: 10
    OraFormsSetWindow("10");
    ThinkTime(6.6);

    …
end TMain
カスタマイズ後、スクリプトは次のように表示されるはずです。
var
  gsSSessionID : string;

dclfunc
  function DoConnect
  begin
    WebSetBrowser(WEB_BROWSER_MSIE8);
    WebModifyHttpHeader("Accept-Language", "de-at");
    WebPageUrl("http://lnz-vmoraf11:8888/forms/frmservlet", "iOrganizer", FORMS_FRMSERVLET001);

    WebSetBrowser(WEB_BROWSER_CUSTOM);
    WebSetUserAgent("Java1.6.0.21");
    WebSetHttpVersion("HTTP/1.1");
    WebModifyHttpHeader("Accept-Language", NULL, WEB_MODIFY_ OPT_Remove);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/f90all_ jinit.jar", 29.61);
    WebUrl("http://lnz-vmoraf11:8888/forms/jars/iorganizer.jar", 0.42);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_images/iorganizer.gif", 0.45);
    WebUrl("http://lnz-vmoraf11:8888/forms/images/blue.gif", 0.43);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/oracle/forms/registry/Registry.dat", 0.08);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_registry/iorg_registry.dat", 6.58);

    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 1111003);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1280, 1024);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetByte("FONT_WEIGHT", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect("server escapeParams=true module=iorganizer.fmx userid=  debug=no host= port= usesdi=yes record=names",
      "http://lnz-vmoraf11:8888/forms/lservlet?ifcfs=/forms/frmservlet?config=iorg&ifsessid=formsapp.4&acceptLanguage=de-at",
      "http://lnz-vmoraf11:8888/forms/frmservlet?config=iorg");
    OraFormsGetSessionId(gsSSessionID);
    WebCookieSet(gsSSessionID, "http://lnz-vmoraf11:8888/forms/java/");

  end DoConnect;

dcltrans
  transaction TInit
  begin
    OraFormsInit("http://lnz-vmoraf11:8888/forms/lservlet", "lnz-vmoraf11", 9000, ORA_FORMS_11G);
    //WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    //WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;

  transaction TShutdown
  begin
    OraFormsDestroy();
  end TShutdown;

  transaction TMain
  begin
    DoConnect();

    // ---
    // New window activated: 10
    OraFormsSetWindow("10");
    ThinkTime(6.6);
    …
  end Tmain

  transaction TsecondMain
  begin
    DoConnect();

    // ---
    // New window activated: 10
    OraFormsSetWindow("10");
    ThinkTime(6.6);
    …
  end TsecondMain;

この方法を使用すると、複数の Main トランザクションを実行するユーザーを使用して負荷テストを実行しているときにアクティブなトランザクションが失敗し、サーバーから切断された場合でも後続のトランザクションに関する問題は発生しません。

親トピック: 再生の概念


Oracle Forms のパフォーマンス監視

Performance Explorer を使用すると、Oracle Forms Dynamic Monitoring System (DMS) からパフォーマンス指標を取得できます。 Performance Explorer では、DMS モジュールがインストールされると、Oracle Forms HTTP サーバーを通じて提供される DMS パフォーマンス Web ページを監視できます。

Oracle Forms のパフォーマンス監視の詳細については、Performance Explorer のヘルプを参照してください。

親トピック: Oracle Forms / Oracle Applications のサポート


根本原因の分析

スクリプトの試行中、ベースラインまたは負荷テストの実行中に発生するエラーは、実行中に書き込まれるログ ファイル、特に TrueLog で簡単に分析できます。

  • TrueLog の分析
    TrueLog でエラーをチェックする方法について説明します。
  • ログ ファイルの分析
    エラー分析に使用するログ ファイルについて説明します。
  • OraForms エラー
    OraForms API 呼び出しによって呼び出される OraForms エラーの一覧。
親トピック: Oracle Forms / Oracle Applications のサポート


TrueLog の分析

発生する最もよく表示されるエラーは、OraForms: 5 - Handler not found というエラーです。

このエラーは、押す必要があるボタンがフォームにない場合など、障害が発生した OraForms API の最初のパラメータとして参照されるコントロール (ハンドラー) が見つからなかった場合に、呼び出されます。

その前の呼び出し、つまり、エラーが呼び出される前の呼び出しを見ると、しばしば、コントロールがない理由を簡単に見つけることができます。 無効なデータを入力した場合など、エラーが発生すると、Oracle Forms アプリケーションでは、しばしば、WINSYS_BEEP メッセージが送信されます。 一部のアプリケーションでも、ステータス バー メッセージが更新されます。 前の呼び出し全体を確認し、情報 タブを見ると、WINSYS_BEEP またはステータス バーの更新があったかが示されています。

サーバーでは、しばしば、エラーの場合にステータス バー メッセージが更新されます。 変更されたステータス バー メッセージに関する情報があるかどうかについて、エラーが呼び出される前の呼び出しをチェックします。 ステータス バー メッセージが変更されるたびに、情報ログ エントリが記録されます。

親トピック: 根本原因の分析


ログ ファイルの分析

ログ ファイル (記録と再生) には、プロファイル設定で定義したログ レベルに応じて異なる情報が格納されます。 問題が発生し、テクニカル サポートに問い合わせる必要がある場合は、必ずログ レベルを デバッグ に切り替えてスクリプトの記録と再生をもう一度試し、そのログ ファイルを送信します。 デバッグ ログ レベルの場合、テクニカル サポートが問題をすばやく分析するのに役立つ特別な開発情報がログに記録されます。

ログ ファイルには、サーバーとクライアントの間で送信される Oracle Forms メッセージが格納されます。 また、デバッグ ログ モードでは、値の変更、マウス ボタンを押す操作など、クライアント側のすべてのイベントがログに記録されます。

親トピック: 根本原因の分析
関連概念
テクニカル サポート


OraForms エラー

以下に、OraForms API 呼び出しによって呼び出されることができる OraForms エラーの一覧です。

ID | メッセージ | 説明
1 | ログオン ダイアログが見つかりません (Logon dialog not found) | ログオン ダイアログが現在のアクティブなダイアログではない場合、 OraFormsLogon および OraFormsLogonCancel によって、このエラーを呼び出すことができます。 ログオン ダイアログは、正常な接続後の最初のダイアログである必要があるため、これは、OraFormsConnect に障害が発生したことを意味します。
2 | ウィンドウが見つかりません (Window not found) | 渡されたウィンドウ名/ID でウィンドウが作成されていない場合、OraForms-CloseWindow、-WindowMove、-WindowResize、および -WindowUpdate によって、このエラーが呼び出されます。 5 - ハンドラーが見つかりません (Handler not found) というエラー メッセージに類似しています。
3 | サポートされていないプロパティ (Unsupported property) | 呼び出しによって、設定される必要があるが、まだ設定されていない特殊なプロパティに対して、問い合わせが行われているときに、複数の OraForms 呼び出しによって呼び出すことができます。 このエラーは、通常の状況では発生する可能性が小さくなります。
4 | フォーカス ハンドラーが見つかりません (Focus handler not found) | 渡されたハンドラーの名前/ID が見つからなかった場合、 OraFormsSetFocus によって、このエラーが呼び出されます。 5 - ハンドラーが見つかりません (Handler not found) というエラー メッセージに類似しています。
5 ハンドラーが見つかりません (Handler not found)

このメソッドは、handler name/ID を最初のパラメータとしてとる OraForms API 呼び出しによって、呼び出される可能性があります。 各 API 呼び出しは、まず最初に、渡された名前/ID のハンドラーが作成済みかどうかを検証します。 作成済みではない場合、そのハンドラーでは操作は実行できません。 ハンドラーが記録中なのに再生には存在しない理由は、複数あります。

最も共通のケースは、無効なユーザー入力などの理由で、サーバーでエラーが発生したことです。 この無効な入力によって、アプリケーションでは、記録中のように有効なデータを入力するときに通常表示されるダイアログまたはその他のウィンドウが、表示されません。

6 | 押す対象のボタンが存在しません (The button to be pressed does not exist) | 無効なボタン番号がメソッドに渡された場合、OraFormsMessageBoxButton ではこのエラーが呼び出されます。 有効なボタンは、ORA_ ALERT_YES、ORA_ALERT_NO、ORA_ALERT_CANCEL です。
7 | メニュー項目が見つかりませんでした (Menu item was not found) | 渡された完全な名前のメニュー項目が見つからない場合、OraFormsMenuItem によってこのエラーが渡されます。 メニュー項目が、渡されたウィンドウ名/ID の割り当て済みメニューで検索されます。
8 | タブ ページが見つかりません (Tab page not found) | 渡された名前または索引のタブ ページがない場合、OraFormsTabSelect ではこのエラーが呼び出されます。
9 | 認識できないダイアログ ボタン (Unrecognized dialog button) | 無効なボタン番号がメソッドに渡された場合、 OraFormsCloseDialog ではこのエラーが呼び出されます。 有効なボタンは ORA_DIALOG_OK および ORA_ DIALOG_CANCEL です。
10 | 関数をこのハンドラーに適用できません (The function cannot be applied for this handler) | タブがないコントローラ ハンドラーでの OraFormsTabSelect など、その種類の関数が実行できないタイプのハンドラーで、メソッドが呼び出された場合、いくつかの OraForms API 呼び出しによってこのエラーが呼び出されます。
11 | LOV 行が存在しません (The LOV row does not exist) | 渡された名前または渡された行インデックスに一致する値ダイアログの現在のリストに、エントリがない場合、OraFormsLovSelect ではこのエラーが呼び出されます。
12 | リスト項目が存在しません (The list item does not exist) | 最初のパラメータで参照されるリスト ハンドラーに、渡された値またはインデックスがあるリスト要素が含まれていない場合、 OraFormsListSelect と OraFormsListActivated では、エラーが呼び出されます。
13 | 無効なクラスのハンドラー (Handler is of invalid class) | タブがないコントローラ ハンドラーでの OraFormsTabSelect など、その種類の関数が実行できないタイプのハンドラーで、メソッドが呼び出された場合、いくつかの OraForms API 呼び出しによってこのエラーが呼び出されます。
14 | このプロパティの値は設定されていません (A value for this property is not set) | 要求されたプロパティが、渡されたハンドラーで設定されていなかった場合、すべての OraFormsGetProp{Type} メソッドでは、このエラーが呼び出されます。
15 | 配列インデックスが範囲外です (Array index is out of bound) | 渡された要素インデックスが、このプロパティの配列境界の範囲外の場合、OraFormsGetPropStringArray と OraFormsGetPropByteArray では、このエラーが呼び出されます。 OraFormsGetPropStringArrayLen および OraFormsGetPropByteArrayLen を使用して、配列にある要素の数を取得します。 インデックスは 0 から始まります。
16 | 検証に失敗しました (Verification failed) | 定義済みの検証に失敗した場合、各検証関数によってこのエラーが呼び出されます。
17 | 受信バージョンが古すぎます (Received version too old) | 接続フェーズ中にサーバーによってエラー VERSION_TOO_OLD が返された場合、このエラーが呼び出されます。 これは、クライアントのバージョン番号は、サーバーにあるバージョンで作業するには古すぎます。 プロパティ INITIAL_VERSION の OraFormsSetInt をカスタマイズして、クライアントの異なるバージョン番号を使用するか、または、プロファイル設定のバージョン番号を使用します。
18 | 受信バージョンが新しすぎます (Received version too new) | 接続フェーズ中にサーバーによってエラー VERSION_TOO_NEW が返された場合、このエラーが呼び出されます。 これは、クライアントのバージョン番号は、サーバーにあるバージョンで作業するには新しすぎます。 プロパティ INITIAL_VERSION の OraFormsSetInt をカスタマイズして、クライアントの異なるバージョン番号を使用するか、または、プロファイル設定のバージョン番号を使用します。
19 | 警告ダイアログ (Alert dialog) | 警告ダイアログが作成されるたびに、このエラーが呼び出されます。 警告ダイアログは、しばしば、ユーザーにメッセージを表示する通常の方法として使用されるため、このエラーのデフォルトの深刻度は INFORMATIONAL です。
20 | ステータスバーが変更されました (Statusbar changed) | サーバーでステータス バー テキストが更新されるたびに、ステータス バーの新しいテキストを使用してこのエラーが発生します。 ステータス バーの更新は、サーバー側のアクションについてユーザーに通知する通常の方法であるため、デフォルトの深刻度は INFORMATIONAL ですが、これはエラー メッセージの可能性もあります。 したがって、エラーの根本原因の分析時には、ステータス バーの変更が確認されます。
21 | ランタイム エラー、スタック トレースについてはログファイルを参照してください (Runtime error, see log file for stack trace) | 内部再生ランタイム エラーがある場合、このエラーは、再生ログ ファイルでの詳細なスタック トレース付きで記録されます。 このようなエラーの場合、テクニカル サポートに連絡し、記録されたすべてのファイルと再生されたすべてのファイルを送信します。
22 | WINSYS_BEEP | サーバーによって WINSYS_BEEP メッセージが送信された場合、このエラーが記録されます。 Oracle Forms アプリケーションによって、WINSYS_ BEEP が送信され、無効なユーザー入力など、サーバーに問題を生じさせた最後のアクションが示されます。 WINSYS_BEEP の次に、ハンドラーが見つかりません (Handler not found) などの他のエラーが続く場合が多くなります。 その理由は、スクリプトが無効な入力値でカスタマイズされた場合、エラーなしで記録されたセッションによって再生中にエラーが発生する可能性があるか、または、テストが実行されるたびに異なる値を使用するなど、カスタマイズする必要があるスクリプトがカスタマイズされていないためです。
23 | OraFormsSetConnectMode はプロファイルの接続設定を無効にします (OraFormsSetConnectMode overrides the profile's connection setting) | これは、プロファイルの設定が、スクリプト化された OraFormsSetConnectMode によって無効になることを示す単なる警告です。
24 | プロファイル設定 INITIAL_ VERSION は関数 OraFormsSetInt によって無効になります (Profile setting INITIAL_ VERSION overridden by function OraFormsSetInt) | これは、プロファイルの設定が、スクリプト化された OraFormsSetInt ("INITIAL_ VERSION", version) によって無効になることを示す単なる警告です。
25 | 検証に成功しました (Verification succeeded) | 検証が成功するたびに、成功ログ エントリが作成されます。
26 | ハンドラーは破壊されたかまだ作成されていません (Handler already destroyed or not created yet) | サーバーからの destroy メッセージによって既に正式に壊された特別なハンドラー (コントロール) から、クライアント アプレットによってメッセージが送信される可能性があります。 これは、実際のエラーではなく、記録中にのみ発生する可能性があります。 したがって、警告が記録されます。
27 | ツリー項目が見つかりませんでした (Tree item was not found) | 参照された項目がツリーで見つからなかった場合、すべての OraFormsTree API 呼び出しによってこのエラーが呼び出されます。
親トピック: 根本原因の分析


ヒントとテクニック

Silk Performer で Oracle Forms アプリケーションをテストする場合に考慮する必要がある問題について説明します。
  • Oracle Forms メモリ使用量
    Oracle Forms アプリケーションをシミュレートする仮想ユーザーのメモリ使用量について説明します。
  • 最新の入手可能な JDK バージョン
    最新の入手可能な JDK バージョンを使用する理由について説明します。
  • JVM の仮想メモリ サイズ
    JVM のデフォルト メモリ サイズの値を変更する利点について説明します。
  • Java VM JIT コンパイラ
    HTTP またはソケットを経由して Oracle Forms 6i を記録するときに、Java JIT コンパイラを無効にする複数の方法について説明します。
  • Socket で Oracle Forms を記録する
    記録するアプリケーションでソケットが使用されている場合に、Oracle Forms スクリプトを記録するために必要な設定について説明します。
  • Oracle Forms 6 の記録の問題
    記録に使用するトランスポート チャネルを指定する方法について説明します。
  • 追加の Java Bean を使用した Oracle Forms 6 の記録での問題
    Java Bean を Oracle Forms アプリケーションで実装する場合に発生する可能性がある問題について説明します。
  • Oracle Applications 12i のサポート
    Oracle Applications 12i に対する Silk Performer のサポート (スクリプトの記録、カスタマイズ、および再生を含む) について説明します。
  • Oracle Applications 12i のセッション情報をカスタマイズする
    TrueLog Explorer は、記録されたテスト スクリプトのハードコードされたセッション情報を、カスタマイズして再生できるようにするために利用できます。
  • システム クラスパスへの新しい Java Bean の追加
    システム クラスパスを更新して、新しい Java Bean を追加する方法について説明します。
親トピック: Oracle Forms / Oracle Applications のサポート


Oracle Forms メモリ使用量

Oracle Forms 再生エンジンでは、Silk Performer の Java フレームワークを使用して Oracle Forms メッセージが送受信されます。したがって、Java Runtime では、ランタイムに実行されるユーザーごとに 1 回ではなく、ランタイム プロセスごとにホストされる必要があるため、各仮想ユーザー コンテナ (PerfRun) では、追加のメモリが必要です。

Java Runtime Environment の初期占有量は、再生に使用される JDK により異なります。JDK は、Oracle Forms プロジェクトのプロファイル設定に定義する必要があります。Java Runtime をホストするには、平均で 10 MB が必要です。さらに、各仮想ユーザーは、Oracle Forms の処理にメモリが必要です。必要なメモリ量は、次の変数によって異なります。

  • 実行されるスクリプトの長さ

  • ホストされるコントロールの数

  • Oracle Forms ログ レベル

  • TrueLog On Error (有効/無効)

「エラー」より高いログ レベルには、十分なメモリが必要です。「通常」および「デバッグ」ログ レベルでは、すべての Oracle Forms メッセージが再生ログおよび TrueLog の送信本文/受信本文セクションに記録されます。このログ情報は、エラーの分析に役に立ちますが、非常に大きなオーバーヘッドが必要です (必要なメモリは、スクリプトの長さとコントロールの数によって異なります)。

親トピック: ヒントとテクニック
親トピック: Oracle Forms Functions Reference


最新の入手可能な JDK バージョン

JDK はプロファイル設定で構成する必要があります。 次の理由から最新の入手可能な JDK バージョンを使用することをお勧めします。

  • パフォーマンス：バージョンが新しいほどパフォーマンスが向上し、1 台のマシンでシミュレートできるユーザーの数が多くなります。
  • 安定性：旧バージョンの JDK を使用していると、廃止された関数が存在するなど、安定性に関する問題が起きる可能性があります。 廃止された関数があると、負荷テスト中に予期しない結果が生じる可能性があります。

Oracle Forms クライアント アプレットが使用している JDK バージョンと異なるバージョンを使用しても影響はありません。 記録中は、選択した JDK は Silk Performer Recorder プロセスでのみ使用されます。アプレットでは使用されません。 再生中は、仮想ユーザー ランタイムで使用されます。

親トピック: ヒントとテクニック


JVM の仮想メモリ サイズ

Java 仮想マシンは、最小と最大のヒープ サイズで設定できます。 最大のヒープ サイズに到達すると、メモリ不足の例外が呼び出されます。 記録中には、非常に多くのメモリが消費されます。 容量は、記録されるトランザクションのログ レベルおよび長さによってさまざまです。

デフォルトの最大ヒープ サイズ 16 MB の使用時にのみ、メモリ問題が発生する可能性が高い傾向にあります。 Java ランタイムを使用すると、2 つの特別なランタイム パラメータを定義することによって、デフォルト値を変更できます。

  • 最小ヒープ サイズを定義する場合は -Xmsn (例：-Xms10m)
  • 最大ヒープ サイズを定義する場合は -Xmxn (例：-Xmx128m)

記録中にメモリ問題が発生した場合は、Oracle Forms アプレット ビューアのランタイム設定で、十分に高いメモリ値を使用して、ランタイム パラメータ -Xmx を定義してください。 ほとんどの場合、これは、JInitiator の設定ダイアログを使用して設定できます。

親トピック: ヒントとテクニック


Java VM JIT コンパイラ

HTTP またはソケットを経由して Oracle Forms 6i を記録するときは、Java ランタイム設定で Java JIT コンパイラを無効にすることをお勧めします。 この理由は、Java 仮想マシンの JIT ライブラリー (symcjit.dll) が原因でブラウザがクラッシュする可能性があるためです。

注: 記録中にブラウザがクラッシュする場合は必ず、JIT コンパイラを無効にします。

オプション #1

Oracle JInitiator プロパティ ダイアログの Java ランタイム設定で -DJAVA.COMPILER=NONE を定義します。 この操作は、JInitiator と一緒にインストールされる JInitiator コントロール パネルを使用して行う必要があります (Windows コントロール パネルでこのコントロール パネルにアクセスできます)。 以下の手順を実行します。

  1. JInitiator コントロール パネルを起動します。
  2. -DJAVA.COMPILER=NONE を Java 実行時のパラメータ テキスト フィールドに追加します。
  3. 適用 をクリックします。

オプション #2

Oracle JInitiator プロパティ ダイアログのチェック ボックスを使用して、Just In Time コンパイラを無効にします (バージョン 1.1.8.x 以降のみ対象)。 以下の手順を実行します。

  1. JInitiator コントロール パネルを起動します。
  2. 詳細 タブを選択します。
  3. Enable Just In Time Compiler チェック ボックスをオフにします。
  4. 適用 をクリックします。

オプション #3

環境変数 SET JAVA_COMPILER=NONE を定義します。

親トピック: ヒントとテクニック


Socket で Oracle Forms を記録する

クライアントと Oracle Forms サーバーの Java アプレット間の通信チャネルは、HTTP/HTTPS 経由または TCP/IP ソケット経由のいずれかで使用できます。 記録するアプリケーションでソケットが使用されている場合に Oracle Forms スクリプトを正確に記録するには、Silk Performer の システム設定 で変更する必要がある設定があります。

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. プロキシ タブをクリックします。
  4. SOCKS プロキシ エントリを選択し、編集 ボタンを押します。 プロキシの設定 ダイアログが表示されます。
  5. 記録しない (データの転送のみ) フィールドで、アプレットと通信するために Oracle Forms アプリケーションで使用されるポートを入力します。
  6. OK をクリックします。 ポートを使用しないようにすることに失敗すると、Silk Performer では、Oracle Forms レベルと TCP/IP レベルの両方で記録されます。 これによって、OraForms の呼び出しと WebTcp の呼び出しの混合でスクリプトが生成されます。
注: アプリケーションでソケット通信が使用されている場合は、アプリケーションのソケット ポートを無効にします。
親トピック: ヒントとテクニック


Oracle Forms 6 の記録の問題

Oracle Forms 6 プロジェクト タイプを使用して Oracle Forms 6 アプリケーションを記録する場合、Silk Performer は、HTTP/HTTPS と Socket の両方でリスンします。

Socket Layer で動作する一部のアプリケーションは、両方のチャネルを記録中に Internet Explorer をクラッシュさせることがわかっています。このため、Silk Performer では、必要なトランスポート チャネルを指定することができます。

この設定は、記録プロファイル ダイアログ ボックスで定義できます。

  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  3. 記録するプロトコルに対する Java API を変更します。

この時点で記録を開始する場合、記録プロファイル設定は既に変更済みのため、事前定義済みの Oracle Forms 6i アプリケーション タイプを選択せず、Internet Explorer を使用します。

親トピック: ヒントとテクニック


追加の Java Bean を使用した Oracle Forms 6 の記録での問題

Java Bean を実装すると、Oracle Forms アプリケーションを新しい GUI 要素またはクライアント側機能で拡張できます。 これらの Java 拡張は、起動時にクライアント アプレットによってダウンロードされます。

Oracle Forms 6 の記録時には、Silk Performer の Recorder は、アプレット クラスを含むメイン Java Archive をフックします。 Java 拡張は、クラスから派生するか、このアーカイブに含まれるインターフェイスを実装します。 Java Runtime では、一部の構成によって、これらの Java Bean のロード時にクラス シグニチャが検証されます。 メイン アーカイブが変更されたため、これらの検証に障害が発生し、アプレットは起動されなくなります。

この検証処理を無効にするには、JInitiator 実行時のパラメータ 設定に追加の Java ランタイム パラメータを定義する必要があります。 ユーザーの JInitiator 設定で、パラメータ -noverify を設定します。

親トピック: ヒントとテクニック


Oracle Applications 12i のサポート

記録を行うための前提条件

重要: Oracle Applications 12i で記録を行う前に、ポート 9000-9005 を無効にする必要があります。

記録されたスクリプトのカスタマイズ

記録された Oracle Applications 12i のスクリプトを再生する前に、スクリプトをカスタマイズする必要があります。

パラメータ icx_ticket は、Oracle Applications 12i のセッション情報を含んでいます。 Silk Performer Recorder は、自動的に icx_ticket の値を解析するコードを生成します。

WebParseDataBoundEx(gsIcxTicket, STRING_COMPLETE, "icx_ticket='", 1, "'",
WEB_FLAG_IGNORE_WHITE_SPACE, 1);
WebPageParseUrl("IMG SRC", "IMG SRC=\"", "or", WEB_FLAG_IGNORE_WHITE_SPACE);
WebPageUrl("http://myserver.com:8005/OA_HTML/runforms.jsp", "Oracle Applications R12",
OA_HTML_RUNFORMS_JSP003);

WebParseDataBoundEx 関数は、次回の HMTL ページの呼び出しからの icx_ticket の値を解析して gsIcxTicket 変数に格納するように Silk Performer ランタイムに通知します。icx_ticket

この例では、次回の HTML ページの呼び出しは、http://myserver.com:8005/OA_HTML/runforms.jsp です。

このページは、入力パラメータをフォーム OA_HTML_RUNFORMS_JSP003 から取得します。 このフォームが記録された icx_ticket の値を既に含んでいる場合、値に空の値を設定する必要があります。

OA_HTML_RUNFORMS_JSP003:
  "icx_ticket"                   := "", // hvg4LnVEVjLLFU-e1pNr6Q...
  "resp_app"                     := "PER",
  "resp_key"                     := "VU_HRMS_MANAGER",
  "secgrp_key"                   := "STANDARD",
  "start_func"                   := "PERWSGEB",
  "other_params"                 := "";

これ以降に icx_ticket パラメータを使用する場合、記録された値ではなく icx_ticket 変数に格納された値を使用する必要があります。

注:

Silk Performer Recorder は、デフォルトで、OraFormsConnect 関数に対してカスタマイズされたコードをスクリプトに記述します。 カスタマイズが正常に行われたことを確認します。

OraFormsConnect(
  "server module=/data/oracle/ebs/application/apps/apps_st/appl/fnd/12.0.0/forms/US/FNDSCSGN
  fndnam=APPS record=names  config='VIS' icx_ticket='" + gsICXTicket + "' resp='PER/VU_HRMS_MANAGER'
  secgrp='STANDARD' start_func='PERWSGEB' other_params=''", "http://myserver:8005",
  "http://myserver.com:8005/forms/frmservlet?&lookAndFeel=ORACLE&colorScheme=KHAKI&
serverApp=OracleApplications3&lang="US"&env=NLS_LANG='AMERICAN_AMERICA'+FORMS_USER_DATE_FORMAT=
'DD-MON-RRRR'+FORMS_USER_DATETIME_FORMAT='DD-MON-RRRR+HH24%3AM"
"I%3ASS'+NLS_DATE_LANGUAGE='AMERICAN'+NLS_SORT='BINARY'+NLS_NUMERIC_CHARACTERS='.,'&
form_params=+config='VIS'+icx_ticket="'.hr7lGQhSIG3iAMWb9LkuVQ..'"+resp='PER%2FVU_HRMS_MANAGER'+
secgrp='STANDARD'+start_func='PERWSGEB'+other_params=''&encoding="UTF-8");
親トピック: ヒントとテクニック


Oracle Applications 12i のセッション情報をカスタマイズする

icx_ticket パラメータが正しくカスタマイズされていることを確認します。

  1. ワークフロー バー の スクリプトの試行 ボタンをクリックして、スクリプトの試行を実行します。
    注: TrueLog の生成が、Silk Performer で有効にされている必要があります。
  2. スクリプト試行の結果の TrueLog を TrueLog Explorer で開きます。通常、HTML ページ (ログイン後すぐに表示される) がエラーを表示します。 エラーの例：

  3. ワークフロー バー の テストの分析 ボタンをクリックします。
  4. ワークフロー - テストの分析 ウィザード ページで、テスト実行の比較 を選択します。
  5. TrueLog のステップ スルー ダイアログを閉じます。
  6. 記録されたアプリケーションのログイン ページに対応する TrueLog ノードを選択します。
  7. ノードを右クリックし、コンテキスト メニューから TrueLog の同期 を選択します。
  8. TrueLog Explorer メニュー バーから 編集 > TrueLog のタイプ > Web を選択します。
  9. 差分 タブをクリックします。

  10. 記録された TrueLog と再生 TrueLog の差分を示す行を右クリックします。この差分は、スクリプトで発生しており、カスタマイズする必要があるセッション情報 (黄色で強調表示される) を含んでいる可能性があります。
  11. Silk Performer でスクリプトの試行を再度実行して、セッション情報のカスタマイズが正常に行われたことを確認します。
親トピック: ヒントとテクニック
親トピック: Oracle Forms アプリケーションでの作業


システム クラスパスへの新しい Java Bean の追加

Oracle Forms アプリケーションは、Java Bean コンポーネントを使用してプッシュできます。 ここでの Java Bean は、Oracle Forms アプレット内で実行できるアプリケーションを含んでいる Java アーカイブを指します。 カレンダーや時計がこのようなアプリケーションに該当します。

Java Bean を利用する Oracle Forms アプリケーションをテストするための要件があります。 Java Bean を含んでいる Java アーカイブは、システム クラスパスにも確実に追加する必要があります。 新しい Java Bean をシステム クラスパスに追加するには、次の手順を実行します。

  1. スタート > コントロール パネル > システム に移動します。
  2. 詳細設定 タブを選択します。
  3. 環境変数 をクリックします。
    環境変数を編集できる 環境変数 ダイアログ ボックスが表示されます。
  4. システム環境変数 ボックスで CLASSPATH 変数を選択し、編集 をクリックします。
  5. システム変数の編集 ダイアログ ボックスで、変数名 と 変数値 を更新して、Java Bean を含んでいる Java アーカイブを追加します。
  6. OK をクリックします。
  7. Oracle Forms サーバーを再起動します。
親トピック: ヒントとテクニック


SAP のサポート

このセクションでは、プロジェクトのセットアップや SAP の構成など、SAP アプリケーションのテストに対する Silk Performer のサポートについて説明します。 スクリプトのカスタマイズ方法、検証関数などのヒントも記載してあります。

  • SAP eCATT のサポート
    Silk Performer の SAP eCATT とのインテグレーションについて説明します。 SAP の eCATT 機能を使用すると、選択したスクリプト言語を使用して、SAP でテスト スクリプトを作成できます。
  • SAPGUI のサポート
    Silk Performer を使用して SAPGUI インターフェイスを介して SAP システムをテストする方法について説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


SAP eCATT のサポート

SAP eCATT は、Silk Performer と統合されています。 SAP の eCATT 機能を使用すると、選択したスクリプト言語を使用して、SAP でテスト スクリプトを作成できます。 eCATT では、テスト スクリプトのリポジトリとして eCATT を利用し、外部のテスト ツール (たとえば、Silk Performer) を使用できます。 eCATT は、スクリプトの実行をトリガするための基本的なテスト管理ソリューションとしての役割も果たします。 内部および外部のスクリプトを個別に実行できるだけではなく、それらを組み合わせることや順番に実行することもできます。

eCATT は、引数のインポート機能 (特殊な入力値を使用してスクリプトを呼び出すメカニズム) を提供します。 スクリプトは、実行時に、入力値を受け取るだけではなく、出力値も設定できます。スクリプトは、前に実行されたスクリプトの出力を基にした入力値を使用して順番に実行できます。

Silk Performer の SAP eCATT とのインテグレーションに関する詳細については、『SAPGUI チュートリアル』(英語) を参照してください。 eCATT の詳細については、SAP ドキュメントを参照してください。

  • SAP eCATT 接続を構成する
    Silk Performer の SAP eCATT とのインテグレーションについて説明します。 SAP の eCATT 機能を使用すると、選択したスクリプト言語を使用して、SAP でテスト スクリプトを作成できます。
  • eCATT 拡張結果を構成する
    拡張 Silk Performer テスト結果が格納され、ユーザーがアクセスするパブリック ファイル共有への UNC パスを指定します。
親トピック: SAP のサポート


SAP eCATT 接続を構成する

Silk Performer が SAP eCATT と通信を行うための接続の詳細は、Silk Performer システム設定で指定する必要があります。 SAP に接続するためのオプションには、次の 2 つがあります。SAPLOGONID 設定を指定するか、[AS ホスト]、[RFC タイプ]、および [システム番号] 設定を行います。 どちらかのオプションを使用して、クライアント、言語、ユーザー名、およびパスワードの詳細を指定する必要があります。 SAPLOGONID を選択すると、[AS ホスト]、[RFC タイプ]、および [システム番号] フィールドは無効になることに注意してください。

  1. 設定 > システム に移動します。
  2. システム設定 – ワークベンチ ダイアログで、SAPGUI グループ アイコンを選択します。
  3. デフォルトで、eCATT 接続 ページが選択されています。 SAPLogon リスト ボックスから、SAP ログイン ID を選択します。
    注: このリスト ボックスには、利用可能な SAP ログイン ID のすべてが事前に構成されています。
  4. AS ホスト フィールドに、ルータとアプリケーション サーバー文字列を組み合わせて入力します (たとえば、H/195.61.176.22/H/194.117.106.130/S/3297/H/cpce801)。
  5. RFC タイプ フィールドに、3 (R/3 の場合) または 2 (R/2 の場合) を入力します。
  6. システム番号 フィールドに、SAP システム番号を入力します。
  7. クライアント フィールドに、SAP サーバーの内部クライアント ID 番号を入力します (これは、SAP ログイン画面で入力する必要がある値です)。
  8. 言語 リスト ボックスから、言語の優先設定を選択します。 値 EN (英語) および DE (ドイツ語) が事前に構成されていますが、他の言語が SAP システムにインストールされている場合は、その言語の短縮形を指定できます。
  9. ユーザー名 フィールドに、自分の SAP eCATT ユーザー名を入力します。
  10. パスワード フィールドに、自分の SAP eCATT パスワードを入力します。
  11. このダイアログ ボックスでの入力が完了したら、接続のテスト をクリックして、適切な接続の詳細が指定されていることを確認します。
  12. 設定を保存するには、OK をクリックします。
親トピック: SAP eCATT のサポート


eCATT 拡張結果を構成する

SAP GUI から Silk Performer の結果ファイルを表示できるようにするには、Silk Performer テスト結果が格納され、ユーザーがアクセスするパブリック ファイル共有への UNC パスを指定します (たとえば、\\fileserver\ecattresults)。 Silk Performer は指定されたディレクトリを使用して、SAP eCATT によって起動された Silk Performer テストの実行結果を格納します。 ユーザーは、SAP eCATT GUI のリンクをクリックすることでテスト結果に簡単にアクセスできます。

  1. 設定 > システム に移動します。
  2. システム設定 – ワークベンチ ダイアログで、SAPGUI グループ アイコンを選択します。
  3. eCATT 結果 タブをクリックします。
  4. SAP 拡張結果を使用する チェック ボックスをオンにします。
  5. SAP 拡張結果のルート ディレクトリ フィールドで、SAP 拡張結果用に使用するディレクトリを参照して選択します。
  6. 設定を保存するには、OK をクリックします。
親トピック: SAP eCATT のサポート


SAPGUI のサポート

このセクションでは、分散型複数ユーザー環境で実行できるようにスクリプト (検証関数など) をカスタマイズするための概要を示します。 Silk Performer を使用して SAPGUI インターフェイスを介して SAP システムをテストする方法について詳しくは、「SAPGUI チュートリアル」を参照してください。

  • 基本概念
    Silk Performer による SAPGUI アプリケーションのテストに対するサポートについて説明します。
  • インストールと要件
    SAPGUI クライアントとサーバー ソフトウェアをセットアップするための構成要件について説明します。
  • 記録と再生の概念
    SAPGUI アプリケーションのスクリプトの記録、再生およびカスタマイズの概要を説明します。
  • SAPGUI TrueLog
    TrueLog Explorer を使用して、SAPGUI アプリケーション テストの結果を検討し、スクリプトを視覚的にカスタマイズする方法について説明します。
  • 大規模な負荷テストの設定
    大規模な負荷テストを実行する際に考慮する問題について説明します。
  • ヒントとテクニック
    Silk Performer で SAPGUI アプリケーションをテストする場合に考慮する必要がある問題について説明します。
親トピック: SAP のサポート


基本概念

SAP には、ツール ベンダーが SAP システムのテストに使用できるテスト インターフェイスがあります。 このテスト インターフェイスには、イベントをリスンする機能と、ユーザー アクションを実行する機能が備わっています。 Silk Performer はこのインターフェイスを使用して新しいスクリプトを記録し、スクリプトを実行します。

このセクションでは、Silk Performer を使用して SAPGUI インターフェイス経由で SAP システムをテストする方法と、考えられるサーバー設定およびそのテスト方法について説明します。
  • SAPGUI スクリプト
    SAPGUI スクリプトプロセスにおいて、記録および再生するときの動作の概要について説明します。
  • SAP パッチ レベル
    SAP サーバーに必要なパッチ レベルを一覧表示します。
  • SAPGUI アプリケーション アーキテクチャ
    SAPGUI アプリケーション オブジェクトの接続のアーキテクチャの概要について説明します。
親トピック: SAPGUI のサポート


SAPGUI スクリプト

SAPGUI スクリプトをクライアントにインストールする必要があります。これは、SAPGUI クライアント のセットアップ プロセス中に選択できます。クライアントにインストールしたら、SAPGUI スクリプトをクライアント側とサーバー側の両方で有効にする必要があります。

注: SAP セキュリティ パラメータ sapgui/user_scripting_disable_recording は、Silk Performer が再生/記録を進めるためにアクセスが必要な SAP サーバー上のキー イベントへのアクセスをブロックします。パラメータ sapgui/user_scripting_disable_recording を有効にすると、再生に失敗します。再生できるようにするには、このパラメータはを無効にする必要があります。

記録時

SAPLogon プロセスが SAPGUI スクリプト API を開始します。これにより、SAPGUI 内の各コンポーネント (コントロール) にアクセスできる SAP DOM への完全アクセス権を提供する COM オブジェクトに Recorder を接続することができます。また、この COM インターフェイスには、GUI の変更 (ボタンを押す、テキストを編集するなど) の登録者およびサーバー ラウンドトリップ (開始/終了リクエスト) の通知を行うイベント メカニズムも備わっています。

Silk Performer Recorder はこのイベント インターフェイスのサブスクライバです。そのため、SAPGUI ユーザー インターフェイスにいるユーザーによるすべての変更についての通知を受信します。記録プロファイル設定に応じて、Silk Performer Recorder は、各変更イベントに対する API 呼び出しの低レベルのスクリプトか、特定の変更イベントが高レベル呼び出し (SapGuiLogon など) にマージされる API 呼び出しの高レベルのスクリプトのいずれかに設定されます。

再生時

SAPGUI 負荷 テストを実行すると、SAPGUI ユーザー インターフェイスが自動的に非表示モードに切り替わります。プロファイル設定には、GUI なしで TryScript を実行するための設定があります。ただし、この設定は 負荷 テスト シナリオには影響がありません。1 台のマシンで複数のユーザーを実行すると、あまりにも多くのウィンドウが表示され、各ウィンドウをそれぞれレンダリングすると追加のリソース消費が大量に必要となるため、UI を表示する意味がないためです。

各 VUser が完全 SAP DOM へのアクセス権を持つため、十分なコントロール情報が含まれる TrueLog を生成することができます。

親トピック: 基本概念
関連タスク
SAPGUI アプリケーションでの作業


SAP パッチ レベル

Silk Performer の SAPGUI 記録/再生技術は SAPGUI スクリプト作成 API に基づいており、サーバー側およびクライアント側で有効にする必要があります。

SAPGUI スクリプト作成 API はすべてのバージョンの SAPGUI クライアント で使用できるわけではありません。そのため、パッチ レベルをチェックしてください。

サーバーのパッチ レベル

サーバーのコンポーネントにも特定のパッチ レベルが必要です。 次は、必要なパッチレベルに関する概要です。
ソフトウェア コンポーネント | リリース | パッケージ名 | カーネル パッチ レベル
SAP_APPL | 31I | SAPKH31I96 | カーネル 3.1I レベル 650
SAP_APPL | 40B | SAPKH40B71 | カーネル 4.0B レベル 903
SAP_APPL | 45B | SAPKH45B49 | カーネル 4.5B レベル 753
SAP_BASIS | 46B | SAPKB46B37 | カーネル 4.6D レベル 948
SAP_BASIS | 46C | SAPKB46C29 | カーネル 4.6D レベル 948
SAP_BASIS | 46D | SAPKB46D17 | カーネル 4.6D レベル 948
SAP_BASIS | 610 | SAPKB61012 | カーネル 6.10 レベル 360
注: クライアント側では、SAPGUI クライアント 620 に最小パッチ レベル 44 を適用する必要があります。
  • SAP パッチ レベルをチェックする
    SAP インストールが SAPGUI スクリプト化をサポートしているかどうかをチェックします。
  • サーバーの SAP パッチ レベルをチェックする
    サーバーの SAP パッチ レベルをチェックします。
  • SAP R/3 サポート パッケージをチェックする
    SAPKB46C29 がインストールされていることを検証します
  • サーバーで SAPGUI スクリプト作成を有効にする
    スクリプト作成を有効にするために sapgui/user_scripting パラメータを変更します。
  • クライアントで SAPGUI スクリプト作成 API を有効にする
    SAPGUI のセットアップ時に SAPGUI スクリプト作成 API がインストールされていることを確認します。
親トピック: 基本概念


SAP パッチ レベルをチェックする

SAPGUI スクリプト化はすべてのバージョンの SAP でサポートされているわけではありません。 よって、インストールされているバージョンでこの機能がサポートされているかどうかをチェックする必要があります。 これを行うには、現在のパッチ レベルをチェックします。 パッチ レベルは少なくとも 66 である必要があります。

  1. SAPGUI ログオン ウィンドウを起動します。このウィンドウには通常、スタート > すべてのプログラム > SAP Front End > SAPLogon > ‌SAP Logon について からアクセスできます。 SAP バージョン情報 ダイアログ ボックスが表示されます。
  2. パッチ レベルは少なくとも 66 であることをチェックします。
親トピック: SAP パッチ レベル
関連概念
SAP Functions


サーバーの SAP パッチ レベルをチェックする

  1. SAP システムにログオンします。
  2. システム > ステータス を選択します。
  3. 他のカーネル情報 ボタンをクリックします。 カーネル情報 ダイアログが開きます。
  4. フィールド Sup.Pkg. レベル の値をチェックします。 SAP パッチ レベルの表で、値とカーネル リリース バージョンをチェックします。 パッチ バージョンが必要なバージョンよりも小さい場合、システムを更新します。 詳細な手順については、「SAP OSS ノート #480149」を参照してください。
親トピック: SAP パッチ レベル
関連概念
SAP Functions


SAP R/3 サポート パッケージをチェックする

  1. SAP システムにログオンします。
  2. SPAM トランザクションを実行します。
  3. ディレクトリ セクションで、全サポート パッケージ を選択し、照会 ボタンをクリックします。
  4. SAP_BASIS、4.6C がインストールされている場合は、SAPKB46C29 がインストールされていることを検証します。 インストールされている場合は緑色の丸が表示されます。 OCS パッケージがインストールされていない場合、www.sap.com からダウンロードしてインストールします。 詳細については、「SAP OSS ノート #480149」を参照してください。
親トピック: SAP パッチ レベル
関連概念
SAP Functions


サーバーで SAPGUI スクリプト作成を有効にする

Silk Performer の SAPGUI 記録/再生技術は SAPGUI スクリプト作成 API に基づいており、サーバー側およびクライアント側で有効にする必要があります。 バージョン 620 以降の SAP サーバーでは SAPGUI スクリプト作成がサポートされています。 それより前のバージョンでは、特定のパッチ レベルが必要になります。

スクリプト化を有効にするには、管理権限を持つユーザーが sapgui/user_scripting パラメータを変更する必要があります。 値を TRUE に変更する必要があります。

  1. SAP サーバーにログオンします。
  2. トランザクション RZ11 を実行します。 パラメータ名 sapgui/user_scripting を指定して、照会 をクリックします。 ステータス バーの「パラメータ名が識別されません」という表示は、最新のサポート パッケージが不足していることを表しています。 インストールされているパッケージをチェックします。
  3. 値を TRUE に変更します。
  4. 保存 をクリックします。
  5. アプリケーション サーバーを再起動します。この変更はシステムにログオンした際に有効になります。
親トピック: SAP パッチ レベル
親トピック: インストールと要件
関連概念
SAP Functions


クライアントで SAPGUI スクリプト作成 API を有効にする

記録、再生または監視のいずれかに使用するすべてのクライアントには、SAPGUI スクリプト作成がインストールされた SAPGUI クライアント が必要です。 SAPGUI セットアップでこのオプションを選択する必要があります。

インストールが終わったら、SAPGUI スクリプト作成が有効になっていることを確認します。

  1. SAPLogon を起動し、いずれかのサーバーのログオン画面に移動します。
  2. SAP クライアントで オプション ダイアログを開きます。
  3. スクリプト タブを選択し、スクリプト有効化 をオンにして、両方のサブ オプションを無効にします。 こうすることで、Silk Performer が SAPGUI スクリプト GUI を操作する際の警告メッセージを回避することができます。

スクリプト タブのインストール ステータスに スクリプトはインストールされています が表示されていない場合は、SAPGUI クライアント セットアップ プロセスでオプションを選択して、SAPGUI スクリプト作成をインストールする必要があります。

親トピック: SAP パッチ レベル
親トピック: インストールと要件
関連概念
SAP Functions


SAPGUI アプリケーション アーキテクチャ

テスト シナリオで仮想ユーザーごとにインスタンス化された SAPGUI アプリケーション オブジェクトは、無限に SAP 接続することができます。 接続は SapGuiOpenConnection または SapGuiOpenConnectionByName で開くことができます。 接続は、テストの開始時に、シミュレートする各仮想ユーザーによって開かれる必要があります。 新しい接続を開くと、SAP セッションも作成されます。 1 つの接続には、SapGuiCreateSession によって作成することのできるセッションを最大 6 つまで保持できます。

接続の最後のセッションが閉じられると、接続そのものが閉じられて破棄されます。

SAP セッションは、セッションのメイン ウィンドウのすべてのコントロール要素に関する情報を保持しています。 さらに、現在のトランザクションまたはパフォーマンス関連データに関する特定のデータについて、セッション情報オブジェクトにアクセスできます。

通常、SAP セッションはメイン ウィンドウを子として持ちます。 このウィンドウは、現在のセッションについてのすべてのユーザー操作の開始点になります。

  • オブジェクト ID
    SAPGUI オブジェクトのリストと説明です。
  • Silk Performer によるオブジェクト アクセス
    オブジェクト アクセスを簡略化する方法について説明します。
  • オブジェクト プロパティにアクセスする
    SAPGUI アプリケーションにある各オブジェクト タイプのすべてのプロパティの全リストを取得する方法について説明します。
  • 低レベル プロパティにアクセスする
    SAP プロパティの概要を説明します。コントロールの ID を所有している場合にコントロール名を取得する方法についても説明します。
親トピック: 基本概念


オブジェクト ID

SAPGUI アプリケーション内の各オブジェクトは一意の ID で特定されます。この ID には、アプリケーション オブジェクトから始まる、完全なオブジェクト階層の ID 情報が含まれます。 階層内のオブジェクトの ID はスラッシュ (「/」) で区切られ、アプリケーション オブジェクト自体はスラッシュで始まります。
オブジェクト | ID の説明
SAP アプリケーション | アプリケーションの ID は /app です。
SAP 接続 | 接続の部分 ID は con[X] です。X は接続のインデックス このインデックスは、同じ基本 ID を持つオブジェクトが複数ある場合に必要です。 インデックスは 0 から始まります。 例：/app/con[0]
SAP セッション | セッションの部分 ID は ses[X] です。X は現在の接続におけるセッションのインデックスです。 例：/app/con[0]/ses[0]
SAP ウィンドウまたはダイアログ | ウィンドウの部分 ID は wnd[X] です。X は現在の接続におけるウィンドウのインデックスです。 例：/app/con[0]/ses[0]/wnd[0]
SAP ユーザー領域 | ユーザー領域の ID は usr です。 ウィンドウごとにユーザー領域は 1 つしかないため、インデックスは不要です。 例：/app/con[0]/ses[0]/wnd[0]/usr
SAP タイトル バー | タイトル バーの ID は titl です。 これはウィンドウまたはダイアログの子です。 例：/app/con[0]/ses[0]/wnd[0]/titl
SAP ツール バー | 部分 ID は tbar[X] です。 ウィンドウには最大 2 つのツール バーを表示できるため、インデックスが必要です。 例：/app/con[0]/ses[0]/wnd[0]/tbar[0]
SAP ステータス バー | ステータス バーの ID は sbar です。 ウィンドウごとにステータス バーは 1 つしかないため、インデックスは不要です。 例：/app/con[0]/ses[0]/wnd[0]/sbar
その他のコントロール | 一部のコントロール タイプには特別な ID 接頭辞があります (たとえば、ラベルの lbl やテキスト コントロールの txt)。 コントロールには接頭辞の後ろにプログラム上の名前を付けられます (たとえば、RSYST-BCODE)。 テーブル形式で一覧表示されるコントロールは、前述のセッションや接続などのインデックスと同様の、多次元的なインデックスを持つことができます。 多次元的なインデックスは controlid[X,Y] のように定義されます。 例： /app/con[0]/ses[0]/wnd[0]/usr/txtRSYST-BCODE /app/con[0]/ses[0]/wnd[0]/usr/sub:SAPMSYST:0020/txtINFO-TABTDLINE[0,0] /app/con[0]/ses[0]/wnd[0]/tbar[0]/btn[0]
親トピック: SAPGUI アプリケーション アーキテクチャ


Silk Performer によるオブジェクト アクセス

オブジェクト アクセスを簡略化するために、Silk Performer API 呼び出しに、コントロールの完全オブジェクト ID は必要ありません。 その代わりに、大部分の API 呼び出しには、現在のウィンドウの相対オブジェクト ID を使用できます。

たとえば、SapGuiPressButton ("tbar[0]/btn[0]"); でボタン /app/con[0]/ses[0]/wnd[0]/tbar[0]/btn[0] を押す作業を実行できます。

そのためには、Silk Performer には現在のウィンドウ、セッションおよび接続に関する情報が必要です。 この目的のために、現在のコンテキストを設定するための 3 つの方法が用意されています。
  • SapGuiSetActiveConnection
  • SapGuiSetActiveSession
  • SapGuiSetActiveWindow

スクリプトを記録する場合、コンテキストが変更されるたびに、前述の 3 つの関数のうち 1 つがスクリプト化されます。

通常スクリプトは次のようになります。
gsConnID := SapGuiOpenConnection("CONNECTSTRING");
SapGuiSetActiveConnection(gsConnID);
SapGuiSetActiveSession("ses[0]");
SapGuiSetActiveWindow("wnd[0]");
SapGuiPressButton("/tbar[0]/btn[0]");

こうすることでスクリプトが読み取りやすくなり、カスタマイズが容易になります。

親トピック: SAPGUI アプリケーション アーキテクチャ


オブジェクト プロパティにアクセスする

各オブジェクトには、実行中に Silk Performer スクリプトからアクセスできるプロパティがあります。 各オブジェクト タイプのすべてのプロパティの完全なリストを取得するには、次の手順を実行します。

  1. タイプ ライブラリを表示できるツールを開きます (Microsoft Visual Studio に付属する OLEView など)。
  2. ファイル <SAPINSTALLDIR>\FrontEnd\SAPGui\sapfewse.ocx を開きます。 <SAPINSTALLDIR> は通常 C:\Program Files\SAP にあります。
  3. そのプロパティの他の COM クラスを調べます。 COM クラスには意味のある名前が付けられており、要求したオブジェクト タイプに適切な COM オブジェクトを簡単に見つけることができます。たとえば、テキスト コントロールは GUITextField です。
  4. ツリーやグリッドといった特殊なコントロールは、対応する dll を開くことで調べることができます。これは、<SAPINSTALLDIR>\FrontEnd\Controls\Scripting にあります。 たとえば、GridViewScripting.dll を開いて、グリッド コントロールの情報を取得します。

Silk Performer は Get/Set プロパティにメソッドを提供する他、メソッドの呼び出しも行います。 メソッドの呼び出しまたは GetProperty アクセスによって別のオブジェクトが返される場合は、定数 SAPGUI_ACTIVEOBJECT をオブジェクト識別子として渡すことにより、追加の Get/Set/Invoke 呼び出しを使用してオブジェクトにアクセスできます。

親トピック: SAPGUI アプリケーション アーキテクチャ
関連概念
ヒントとテクニック


低レベル プロパティにアクセスする

SapGuiInvokeMethod、SapGuiSetProperty、SapGuiGetProperty の関数を使用すると、アクティブな画面上にある任意のコントロールの低レベル プロパティにアクセスできます。 これにより、たとえばテキスト コントロールが読み取り専用であることを確認したり、ラベルの背景色を決めたりできます。

SAPGUI テストに使用する SAPGUI スクリプト記述 API は大規模な COM ライブラリであり、Silk Performer によるコントロールへのアクセスおよびアクションの実行を許可します。 これと同じ COM ライブラリは上述の API 呼び出しによって使用できます。 個々のコントロールが提供するメソッドおよびプロパティのリストにアクセスするには、SAPGUI スクリプト記述 API のタイプ ライブラリを調査する必要があります。 そのためには、タイプ ライブラリを効率的に調査にするツールが必要です (Microsoft Visual Studio に付属する Ole32View など)。 ツールを使用して sapfewse.ocx ファイルを開きます。このファイルは、\FrontEnd\SapGui の SAPGUI インストール ディレクトリにあります。 下のイメージは、ラベル コントロールでアクセスできるプロパティを表しています。

コントロールの ID がわかっているコントロールの名前を取得するには、次の呼び出しを使用します。

SapGuiGetProperty("/usr/lbl[1,2]", "Name", sOutValue);
Print("The control has the following name:" + sOutValue);

ほとんどのプロパティが文字列、数字またはブール値パラメータといった単純データ型を返します。 他のオブジェクトを返すプロパティもあります。たとえば、Parent プロパティは現在のコントロールの親コントロールを返します。 プロパティが別のコントロールを返す場合、コントロールは一時的にキャッシュに保存され、SAPGUI_ACTIVEOBJECT の定数を介してアクセスできます。 次は、親プロパティの名前を取得するコードのサンプルです。

SapGuiGetProperty("/usr/lbl[1,2]", "Parent");
SapGuiGetProperty(SAPGUI_ACTIVEOBJECT, "Name", sOutValue);
Print("The parent control has the following name:" + sOutValue);

620 クライアントと 640 クライアントの差異

SAP はその SAPGUI 640 クライアントに新しいプロパティとメソッドを導入しました。 たとえば、640 を使用すると、ラベルやチェックボックスの背景色を取得できます。 そのため、640 でスクリプトを作成する場合は、必ずエージェントも 640 で実行され、同じパッチ レベルが使用されている必要があります。 そうでない場合、エージェントで使用できないプロパティを要求したり、エラーが生成されたりすることがあります。

プロパティの概要

SAP は次のプロパティを持つコンポーネントで構成されます (ComClass GuiComponent)。

  • 'Name' - コントロール名
  • 'Type' - テキスト形式のコントロール タイプ (GuiButton、GuiTextField など)
  • 'TypeAsNumber' - すべてのタイプが内部の数字を持つ (30=GuiLabel、31=GuiTextField など)
  • 'ContainerType' - コントロールがコンテナであるか否かを定義するブール値プロパティ。 コンテナには別のコントロールが子として含まれます (ツールバーはツールバー ボタンを含むコンテナなど)。
  • 'Id' - コントロールの一意の ID
  • 'Parent' - コントロールがコンテナに含まれる場合、このプロパティは親コントロールを返す

コントロールなどのビジュアル コンポーネントは、次の追加のプロパティを持ちます (ComClass GuiVComponent)。

  • 'Text' - コントロールのメイン テキスト (テキスト コントロールのテキストやボタンのテキストなど)
  • 'Left'、'Top'、'Width'、'Height'、'ScreenLeft'、'ScreenTop' - 画面座標と親コンテナ内での座標の詳細を表す数値
  • 'Changeable'、'Modified' - コントロールの現在の状態を表すブール値パラメータ (コントロールが変更可能かまたは読み取り専用か、コントロールが修正されたかなど)

各コントロール タイプは、タイプ ライブラリ調査ツールを介して COM タイプ ライブラリで確認可能な追加のプロパティを持つことがあります。

親トピック: SAPGUI アプリケーション アーキテクチャ


インストールと要件

Silk Performer の SAPGUI サポートを使用するには、SAPGUI スクリプトをクライアント側とサーバー側にインストールし、有効にする必要があります。

  • サーバーで SAPGUI スクリプト作成を有効にする
    スクリプト作成を有効にするために sapgui/user_scripting パラメータを変更します。
  • クライアントで SAPGUI スクリプト作成 API を有効にする
    SAPGUI のセットアップ時に SAPGUI スクリプト作成 API がインストールされていることを確認します。
親トピック: SAPGUI のサポート


記録と再生の概念

次のセクションでは、スクリプトの記録、再生およびカスタマイズの他、結果分析についても説明します。

  • SAP プロファイル設定
    記録設定、共通設定、再生設定など、Silk Performer SAPGUI サポートのためのプロファイルを設定します。
  • SapGuiLogon のパスワード
    パスワード フィールドを SAPGUI スクリプト API 経由で取得できない理由について説明します。
  • SAPGUI オプションを設定する
    カウンタ/タイマ、ログ レベル、スクリーンショットなど、SAPGUI の設定を構成します。
  • 記録中に生成されるファイル
    SAPGUI アプリケーションを記録するときに生成されるファイルについて説明します。
  • SAP の結果
    SAP サーバーへのラウンドトリップを強制するメソッド呼び出しに生成される測定値について説明します。
  • SAP のパフォーマンス監視
    SAP システムを監視するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
親トピック: SAPGUI のサポート


SAP プロファイル設定

記録設定

記録固有の設定は、プロファイル設定の記録タブで変更できます。

  • ログオンを単一機能としてスクリプト化する - 有効にすると、ログオン プロシージャを SapGuiLogon API 呼び出しとしてスクリプト化します。 無効にすると、ユーザー名、パスワードおよび ENTER を押す動作など、複数の API 呼び出しがスクリプト化されます。
  • 低レベル機能をスクリプト化する - たとえば SapGuiSetText のような高レベルの API 関数の代わりに、低レベルの API 関数 (SapGuiInvokeMethod、SapGuiSetProperty など) がスクリプト化されます。
  • タイマをスクリプト化する - 大部分の SAPGUI API 関数にオプションのタイマ パラメータが付きます。 このパラメータを定義すると、再生中にこの測定値が生成されます。 このオプションを有効にすると、SAPGUI Recorder は各関数に対して適切なタイマ名をスクリプト化します。
  • 既存の SAP セッションへ接続する - 有効にすると、SAPGUI Recorder は SapGuiOpenConnection 文を記録せずに、既存の SAPGUI セッションに接続します。
  • ウィンドウ タイトルの検証を記録する - 有効にすると、再生中に検証されるように、SAPGUI Recorder はウィンドウ タイトルで SapGuiSetActiveWindow をスクリプト化します。

共通設定

次は記録と再生の両方に共通の設定です。

  • ログ レベル - ログのレベルを定義します。 トラブルシューティング目的の場合は デバッグ を使用し、それ以外の場合は 通常 を使用します。 大規模な負荷テストの場合、メモリ消費を抑えるために、ログを 無効 にしてください。
  • スクリーンショットをキャプチャする - 有効にすると、新しいウィンドウがアクティブになるたびにスクリーンショットがキャプチャされます。 このオプションは、スクリプトの再生時に 単一実行中に SAPGUI を表示する が有効になっている場合にのみ使用できます。
  • すべてのアクションのスクリーンショットをキャプチャする - 有効にすると、SAP サーバーへのラウンドトリップの原因となるユーザー アクションごとにスクリーンショットがキャプチャされます。 このオプションは、スクリーンショットをキャプチャする が有効になっている場合にのみ使用できます。
  • コントロールの情報を TrueLog に記録する - 有効にすると、アクティブ ウィンドウのそれぞれのコントロールに関するコントロール情報が TrueLog に記録されます。 これにより、TrueLog Explorer のカスタマイズ機能を使用できるようになります。 追加のリソースが余分に消費されるため、負荷テストの実行時には、このオプションを無効にする必要があります。
  • 単一実行のコントロールの情報を TrueLog に記録する - コントロールの情報を TrueLog に記録する と同じですが、スクリプトの試行と検証実行に対してのみ有効です。
  • エラー時のコントロールの情報を記録する - 有効にすると、再生中にエラーが発生した場合に、アクティブ ウィンドウのそれぞれのコントロールに関するコントロール情報が TrueLog に記録されます。 これにより、エラーが発生した画面のすべてのコントロールの現状を取得して、再生の問題のトラブルシューティングを実行できます。 負荷テスト中は、コントロールの情報を TrueLog に記録する を使用するのではなく、このオプションを使用することをお勧めします。

デフォルトのプロファイル設定

デフォルトのプロファイル設定 (スクリーンショットをキャプチャしてコントロール情報をログ) を使用して SAP アプリケーションを記録する場合、SAP クライアントの動作が通常よりも遅くなることがあります。 これは、スクリーンショットを取得し、各 SAP ウィンドウのすべてのコントロールに関するコントロール情報をログに記録するために、余分なオーバーヘッドが必要になるためです。 このオプションをオフにすると、TrueLog が提供する多くの利点がなくなるため、このオプションは変更しないでください。 ただし、タイミングに問題が生じる場合は、次の順番にオプションをオフにします。
  • 各アクションのスクリーンショットのキャプチャ
  • スクリーンショットのキャプチャ
  • TrueLog へのコントロール情報のログ

再生設定

再生固有の設定は、プロファイル設定の再生タブで変更できます。

  • 再生タイムアウト - 再生中のタイムアウトを定義します。 このタイムアウト期間内にサーバーからレスポンスがない場合は、エラーが発生します。
  • 単一実行中に SAPGUI を表示する - 有効になっていると、再生中に SAPGUI クライアント が表示されます。 このオプションは、Try-Script を実行する場合にのみ使用してください。 負荷テスト中はオフにしてください。
  • クライアント側スクリプトを有効にする - SAPGUI クライアント アプリケーションの オプション メニューから、各クライアントマシンの SAPGUI スクリプト作成を有効にする必要があります。 複数のエージェントでテストを実行する場合、負荷テストを開始する前に、各マシンでこの設定を手動で変更することになります。 このオプションを有効にすると、Silk Performer は負荷テストを開始する前に、各マシンでこの設定を自動的に変更します。
  • 新しい SAP Visual Design を使用する - SAPGUI では従来の Visual Design モードと、新しい Visual Design モードの 2 つのモードを使用できます。 通常、設定は SAP 構成ツールで変更する必要があります。 このオプションを有効/無効にすると、Silk Performer は負荷テストの開始前に自動で設定変更を行います。 このオプションを使用すると、使用する Visual Design のバージョンを問わずに、リソース消費の観点で異なる動作をテストすることができます。

タイマとカウンタ

測定 タブには再生測定のための設定があります。 すべてのコントロールの、すべてのタイマとカウンタを有効にする をオンにするか、必要な項目を選択することができます。 タイマは、オプションのタイマ パラメータが指定されているメソッド呼び出しに対してのみ作成されます。

これらのタイマの詳細については、「SAP の結果」を参照してください。

親トピック: 記録と再生の概念
関連概念
SAP の結果


SapGuiLogon のパスワード

パスワード フィールドの値は、SAPGUI スクリプト API 経由では取得できません。 そのため、Silk Performer の Recorder では、パスワード フィールドに入力された値を、ログオン画面のようにスクリプト化することはできません。

SapGuiLogon は、パスワード パラメータにアスタリスクを付けて生成されます。 この値をスクリプトで手動でカスタマイズするか、TryScript の実行後に TrueLog Explorer を使用してカスタマイズする必要があります。

SapGuiLogon メソッドのカスタマイズされていないパスワード フィールドを使用して TryScript や 単なる負荷テスト を実行しても、実際のログオンは実行されません。 パスワード パラメータのカスタマイズをしないまま 負荷 テストを実行すると、3 度目の試行の後にユーザーがロックされてしまうため、代わりに深刻度 プロセス終了 のエラーをスローします。 これを回避するために、パスワード パラメータがカスタマイズされていない場合には、Silk Performer はスクリプトの実行を停止します。

親トピック: 記録と再生の概念
関連タスク
SAPGUI アプリケーションでの作業


記録中に生成されるファイル

スクリプト

既存の SAP セッションへ接続する オプションを選択していない場合は、スクリプトには TMain トランザクションの最初の文として SapGuiOpenConnection 文が記録されます。

大規模な負荷テストを実行する場合は、すべてのログオン シーケンス (SapGuiOpenConnection から SapGuiLogon) を Tinit トランザクションに移動させる必要があります。

高レベルのスクリプト作成が有効になっていると、Recorder は大部分のコントロール操作に対し、高レベルの API 関数をスクリプト化します。 その他のすべての低レベル関数 (高レベルの API 呼び出しがない関数) に対しては、SapGuiInvokeMethod と SapGuiSetProperty がスクリプト化されます。

テキスト ログを記録する

ログ レベルが デバッグ に設定されていると、テキスト ログには、SAPGUI イベントおよびコントロールの詳細情報が格納されます。 このログの追加情報はトラブルシューティングに役立ちます。 問題が発生し、テクニカル サポートに問い合わせる必要がある場合は、記録する前にログ レベルを デバッグ に切り替える必要があります。 これは再生テキスト ログ ファイルにも当てはまります。

TrueLog の記録

記録 TrueLog には、再生 TrueLog と同じ情報が含まれます。 それにより、TryScript の実行後に、TrueLog Explorer の [比較] ビューを使用できるようになります。

親トピック: 記録と再生の概念
関連タスク
大規模な負荷テストの設定


SAP の結果

アクティブ プロファイルの測定設定に応じて、オプションのタイマ パラメータが定義されているメソッド呼び出しの測定値が生成されます。

SAP サーバーへのラウンドトリップを強制するメソッド呼び出しの測定が生成されます。
注: すべての API 呼び出しがラウンドトリップを強制するわけではありません。

ラウンドトリップ中に次の測定値が生成されます。

ラウンドトリップ

SAPGUI がサーバーにデータを送信する前に、ユーザー インターフェイスをロックします。 多くの場合、サーバーからデータが到着してもインターフェイスのロックを解除せず、その代わりにサーバーに対して直ちに新しいリクエストを送信します。 コントロールは特にこの技術を使用して、視覚化に必要なデータを読み込みます。 SAPGUI とサーバー間におけるこれらのトークンの切り替え数は、この測定によって提供されます。

フラッシュ

サーバー通信中の自動キューのフラッシュ数をカウントします。

解釈時間

解釈時間は、サーバーからデータが到着した後に開始されます。 これは、データの解析と SAPGUI 要素への配分から構成されます。

レスポンス時間

これは、データがサーバーに送信されてからサーバー レスポンスが到着するまでのネットワーク通信にかかる時間です。

テスト時にはラウンドトリップの全体のカウンタが [監視] ウィンドウに表示され、Silk Performer コントローラ/エージェント測定の一部として Performance Explorer でも監視できます。

親トピック: 記録と再生の概念
関連資料
SAP プロファイル設定


SAP のパフォーマンス監視

Performance Explorer を使用して、SAP システムのパフォーマンスと信頼性指標を監視します。 Performance Explorer には、SAP インストールを監視するために特に設計された 2 つの監視があります。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. Application Server フォルダ、SAP フォルダの順に展開します。
  4. 使用する SAPGUI 監視のタイプに応じて、適切な監視タイプを選択します。 以下の種類の SAPGUI 監視が使用可能です。
    • SAPGUI Monitoring (ST02)：バッファ関連の指標を監視します。 SAP トランザクション ST02 は、この監視が実行されている場合に実行されます。
    • SAPGUI Monitoring (ST03N)：アプリケーション固有の指標を監視します。 SAP トランザクション ´ST03n は、この監視が実行されている場合に実行されます。
    • SAPGUI Monitoring (ST04)：データベース関連の指標を監視します。 SAP トランザクション ST04 は、この監視が実行されている場合に実行されます。
    • SAPGUI Monitoring (ST07)：SAP システム上のユーザー分散を監視します。 SAP トランザクション ST07 は、この監視が実行されている場合に実行されます。
    • SAPGUI OS-Monitoring (ST06)：オペレーティング システム固有の指標を監視します。 SAP トランザクション ST06 は、この監視が実行されている場合に実行されます。
  5. 次へ をクリックします。

    接続パラメータ ページが開きます。

  6. ホスト名 テキスト ボックスに、監視対象となるマシンのホストを指定します。
    この値は、表示目的でのみ使用されるもので、 監視自体の内部では使用されません。
  7. 次へ をクリックします。 属性設定 ページが開きます。
  8. 以下の監視固有の属性を定義します。
    • ConnectionString：SAP Server への完全な接続文字列。 確かでない場合は、Silk Performer を使用して、ログオン シーケンスを記録します。 接続文字列は、SapGuiOpenConnection の最初のパラメータです。
    • Username：監視トランザクションへのアクセス権限を持つ SAP ユーザー名。
    • Password：SAP ユーザーのパスワード。
    • ClientNum：ログオン プロシージャのクライアント番号 (850 など)。
    • Language：ログオンに使用する言語 (EN など)。
    • Entity：監視するデータ エンティティ (ダイアログ、RFC、バックグラウンドなど)。
      注: Entity 属性は、[SAPGUI OS-Monitoring (ST06)] の場合指定する必要はありません。
    • TimeFrame：SAP は定義した間隔の平均値を提供します。
      注: Timeframe 属性は、[SAPGUI OS-Monitoring (ST06)] の場合指定する必要はありません。
    • Server：(ST03N のみ) 監視が必要なサーバー。 ST03N で選択されるツリー ノードの名前です。 合計では、SAP システム全体からの測定値が返されます。
  9. OK をクリックします。 表示する測定値の選択 ページが開きます。
  10. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: 記録と再生の概念
親トピック: 定義済みのデータ ソース


SAPGUI TrueLog

TrueLog Explorerは、SAPGUI アプリケーションの検討に便利であるだけではなく、コントロール値の検証を追加し、記録中に変更されたコントロールの入力値をカスタマイズすることもできます。

  • SAPGUI TrueLog の構造
    SAPGUI TrueLog の要素について説明します。
  • ノード情報
    SAPGUI TrueLog で表示されるノードについて説明します。
  • コントロール情報
    各 SAPGUI コントロールに記録されるコントロール情報について説明します。
  • 検証および解析関数
    値検証関数によって、サーバーから送信されたコンテンツがクライアントで本当に受信されるかどうかを検証する方法、および SAPGUI 解析関数を追加することの有用性について説明します。
  • 入力データのカスタマイズ
    シミュレートされたユーザー入力を TrueLog Explorer で視覚的にカスタマイズする方法について説明します。
親トピック: SAPGUI のサポート


SAPGUI TrueLog の構造

SAPGUI TrueLog は Oracle Forms TrueLog に似た構造を持ちます。 各 SapGuiSetActiveWindow の呼び出しは、新しい上位レベル ノードで発生します。 SapGuiSetActiveWindow の呼び出しでは、記録セッション中に起動される各ウィンドウでスクリプト化されます。 ウィンドウで実行されるすべてのアクション (コントロールの編集、リスト エントリの選択など) は、仮想 SapGuiRoundtrip ノードによってグループ化されたサブノードとして表示されます。

親トピック: SAPGUI TrueLog
親トピック: SAPGUI アプリケーションでの作業


ノード情報

TrueLog Explorer では、HTTP クライアント リクエストと HTTP/HTML サーバー レスポンスの視覚化をサポートするのと同じ方法で、SAPGUI のリクエストとレスポンスの視覚化がサポートされています。

SAPGUI TrueLog では、以下の 3 つのウィンドウが表示されます。
  • TrueLog メニュー ツリー - テスト実行に含まれるすべての SAPGUI API 呼び出しを一覧表示します。
  • コンテンツ ペイン (右上のペイン) - 各 API ノードの GUI の状態を表示します。 終了リクエスト ページと 開始リクエスト ページを利用すると、各 SAPGUI サーバー リクエストの初期状態と終了状態の両方を表示できます。 これらの表示を利用して、サーバー リクエストが GUI 表示にどのような影響を与えたかを確認できます(新規ダイアログ ボックスやエラー メッセージの表示など)。

    選択した API ノードのアクション (ボタンのクリックなど) によってウィンドウが破棄された場合や新しいウィンドウが作成された場合、次にアクティブ化されるウィンドウのスクリーンショットが 終了リクエスト ペインに表示されることがあります。 この場合、ツリーのコントロール情報とスクリーンショットが一致しないため、紛らわしくなることがあります。 これはウィンドウの最後のノードでのみ発生します。

    注: TrueLog のスクリーンショットは、スクリプトの試行の実行中にのみキャプチャされます。負荷テスト中にはキャプチャされません。
  • 情報 ペイン (右下のペイン) - 最新のテスト実行に関連するデータが表示されます。 このペイン内で SAPGUI TrueLog で利用できるアクティブなページは、情報、BDL、および コントロール です。 コントロール ページは、各 GUI 画面に含まれる、階層構造順になったカスタマイズ可能なすべてのコントロールを表示したり操作する場合に便利です。
    [コントロール] タブを示すグラフィック

各 SapGuiSetActiveWindow ノードの下には、API 呼び出しを反映しない仮想ノードがあります。 これらのノードは SapGuiRoundtrip と呼ばれ、1 回のラウンドトリップでサーバーに送信された API 呼び出しがすべて含まれます。 SapGuiRoundtrip ノードの最後の API 呼び出しのみがラウンドトリップを強制実行します。 また、この API 呼び出しは、プロファイル設定で呼び出しの最後のパラメータとして指定されたタイマ名で選択された測定値を生成します。

スクリーンショットをキャプチャする が有効になっている場合は、新たにアクティブ化されるウィンドウごとにスクリーンショットがキャプチャされます。 SapGuiSetActiveWindow ノードやサブ ノードをクリックすると、スクリーンショットが TrueLog Explorer に表示されます。

また、すべてのアクションのスクリーンショットをキャプチャする が有効になっていると、各ラウンドトリップの前後でスクリーンショットが取得されます。 SapGuiRoundtrip ノードやサブ アクション ノードをクリックすると、スクリーンショットが TrueLog Explorer に表示されます。

コントロールの情報を TrueLog に記録する オプションが有効になっていると、各ウィンドウのそれぞれのコントロールに関する情報が記録されます。 特定の API ノードでコントロールの値が変更になった場合には、変更内容が TrueLog に反映され、コントロールはツリー構造に表示されます。

親トピック: SAPGUI TrueLog


コントロール情報

プロファイル設定に応じて、すべてのウィンドウのコントロールが記録されるか (コントロールの情報を TrueLog に記録する)、エラーの場合にのみ記録されます (エラー時のコントロールの情報を記録する)。

各コントロールには次のコントロール情報が記録されます。
  • 内部の一意のシーケンス番号
  • 絶対および相対オブジェクト/コントロール ID
  • オブジェクトの現在値
  • オブジェクトのタイプ
  • 親コントロールのシーケンス番号
  • コントロールの画面座標

一意の内部シーケンス番号は内部でのみ使用されます。 それにより、コントロールの階層ビューを構築できます。

各オブジェクトの現在値はコントロールのタイプによって異なります。 テキスト コントロールの場合は、Text プロパティが使用されます。 他のコントロールは、他の値タイプを反映するプロパティを持ちます。

親トピック: SAPGUI TrueLog


検証および解析関数

ほとんどのコントロール タイプで検証と解析を実行できます。 TrueLog Explorer には、SAPGUI TrueLog 用の標準的な検証および解析ウィザードが備わっています。 ウィザードにアクセスするには、スクリーンショットまたはコントロール ツリーでコントロールを右クリックします。 その後、コンテキスト メニューから、検証および解析ウィザードを起動します。

検証および解析関数は、ツリーで現在選択している API ノードの後にスクリプト化されます。 検証および解析関数をウィンドウの最後の API 呼び出しの後に挿入すると、再生エラーが発生することがあります。 たとえば、現在選択している API ノードが 閉じる ボタンを押すことである場合、現在のウィンドウとそのウィンドウのすべてのコントロールがこのアクションで破棄されます。 よって、この呼び出しの後にスクリプト化されている検証/解析関数は、再生中に「ハンドラが見つかりません」エラーにより失敗します。 このため、ウィンドウの最後のノードに挿入される検証/解析関数を追加しようとする場合、TrueLog Explorer では確認メッセージが表示されます。

TrueLog Explorer では、コンテンツ チェックを追加して、サーバーから送信されたコンテンツが現実の条件下でクライアントによって本当に受信されるかどうかを簡単に確認できます。 入力データが挿入される任意の SAPGUI 関数呼び出しに対して、戻り値検証関数を挿入できます。 検証関数は、ソース ビューまたは コントロール メニュー ツリーから挿入できます。

再生テスト実行と記録テスト実行を比較することによって、TrueLog Explorer では、SAPGUI アプリケーションが過負荷状態にあるときに、テキスト、グラフィック、フィールド データ、その他のデータがクライアントによってダウンロードされて表示されるかどうかを視覚的に確認できます。 これによって、他の SAPGUI トラフィック シミュレーション ツールでは検出できないようなエラー、つまり、標準的なテスト スクリプトでは検出されない負荷がかかっている場合にのみ発生するエラーを検出できるようになります。

コンテンツ検証関数は、稼働中のパフォーマンス管理にも利用できるので、システムの配置後も役立ちます。

  • 値の検証を追加する
    検証する SAPGUI コントロールを右クリックします。 簡単に、必要な検証関数を生成して BDL スクリプトに挿入できます。
  • SAPGUI 解析関数を追加する
    値の解析は、正確な再生ができるようにセッション固有の文字列をパラメータ化する必要がある場合に役立ちます。
親トピック: SAPGUI TrueLog
親トピック: SAPGUI アプリケーションでの作業


入力データのカスタマイズ

ユーザー入力をシミュレートする API 呼び出しは TrueLog Explorer でカスタマイズできます。 そのような API 呼び出しには SapGuiSetText や SapGuiLogon などがあります。 TrueLog Explorer の TrueLog のステップ スルー ダイアログを使用すると、すべてのカスタマイズ可能な呼び出しを移動することができます。

TrueLog Explorer のパラメータ ウィザードを使用すると、次の項目を使用して入力データをカスタマイズできます。
  • 定数値
  • 複数のソースによるランダム値
  • 複数列データ ファイルのサポート
  • 前に解析された値
親トピック: SAPGUI TrueLog


大規模な負荷テストの設定

大規模な負荷テストを実行する際に考慮する問題について説明します。
  • 推奨されるプロファイル設定
    大規模な負荷テストの実行に使用するのに最適なプロファイル設定について説明します。
  • 接続処理
    SAPGUI 接続を処理するための最適な方法について、推奨事項とスクリプト サンプルを提供します。
  • ログオン
    SapGUILogon のユーザー名パラメータを管理するベスト プラクティスを説明します。
親トピック: SAPGUI のサポート


推奨されるプロファイル設定

コントロール情報

大規模な負荷テストの実行時には、コントロールの情報を TrueLog に記録する 設定を無効にすることをお勧めします。 これにより、実行される各仮想ユーザーの全体のパフォーマンスが向上します。 このオプションを有効にすると、ウィンドウ操作のすべてのコントロールが TrueLog に記録され、リソース (CPU) を大量に使用します。

代わりに エラー時のコントロールの情報を記録する を有効にすると、エラーが発生したウィンドウのコントロールを確認するという利点を利用できます。

スクリーンショット

スクリーンショットは、SAPGUI が表示モードで実行されている場合にのみキャプチャされます。 この動作は、単一実行中に SAPGUI を表示する プロファイル設定によって有効化/無効化できます。 負荷テスト実行時には、プロファイル設定に関係なく、この設定が自動的に無効になります。 これにより、負荷テスト時にスクリーンショットが取得されることがないため、仮想ユーザーの全体のパフォーマンスにも影響を及ぼしません。

ただし、エラーが発生した場合は、エラー時のコントロールの情報を記録する または コントロールの情報を TrueLog に記録する オプションのいずれかが有効になっていれば、TrueLog On Error ファイルでコントロール情報を確認できます。 コントロール情報がツリー構造に表示されることで、エラーの原因となったコントロール、それらのコントロールの画面座標を確認できます。 コントロールの位置を視覚的に確認するには、対応する記録を開き、比較モードで TrueLog を再生して、同期させます。 そうすると、アプリケーションの記録時のコントロールの状態とスクリプト再生時のコントロールの状態を比較することができます。

親トピック: 大規模な負荷テストの設定


接続処理

メイン トランザクションに SapGuiOpenConnection 呼び出しを置くことは推奨されません。こうすると、各ユーザーがトランザクションを繰り返すたびに、新しい接続が開かれます。 SAPGUI スクリプト API は接続を非同期的に切断することから、負荷テスト エージェントによって SAP サーバーへの同時接続が大量に開かれるという問題が発生します。 そのため、最大接続制限を超えると、エラーが生じます。

新しい接続確立での負荷テストを目的としない限り、ログオン プロシージャを INIT トランザクションに移動させることをお勧めします。 さらに、メイン トランザクションは常に開始したのと同じ場所で終了させる必要があります。通常は、正常にログオンした後の画面です。

同様に、ログアウト シーケンスをメイン トランザクションから終了トランザクションに移動させてください。

完全にカスタマイズされたスクリプトは次のようになります。
dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;
    TEnd            : end;
var
  gsConnID : string;

dcltrans
  transaction TInit
  begin
    // Connecting to SAP
    gsConnID := SapGuiOpenConnection("CONNECTSTRING");
    SapGuiSetActiveConnection(gsConnID);
    SapGuiSetActiveSession("ses[0]");
    SapGuiSetActiveWindow("wnd[0]");
    // Logon to SAP System
    // Before running a test you have to customize the password
    parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiLogon("username", "password", "000", "", "SapGuiLogon");
  end TInit;

  transaction TMain
var
  begin
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAP GUI_MATCH_
    ExactNoCase);
...
...
...
    // The VUser should now be again back on the window after a
    successful logon
  end TMain;

  transaction TEnd;
  begin
    SapGuiPressButton("tbar[0]/btn[15]", "SapGuiPressButton\\btn[15]");
    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAP GUI_MATCH_
    ExactNoCase);
    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "SapGuiPressButton\\Yes");
  end TEnd;
親トピック: 大規模な負荷テストの設定


ログオン

負荷テストを実行する場合は、仮想ユーザーごとに異なる SAP ユーザーを使用することをお勧めします。 これは、シーケンス番号が付加されたユーザー名を持つユーザーを作成することで管理できます。たとえば、SAPUSER1-SAPUSER99 です。

これにより、スクリプトでは SapGuiLogon のユーザー名パラメータを次のようにしてカスタマイズできます。
SapGuiLogon("SAPUSER" + string(GetUserId()), "PASSWORD", "000", "");

デフォルトでは、SapGuiLogon は渡されたパラメータをログオン画面の対応するテキスト フィールドに入力し、Enter キーを押します。

既にログオンしているユーザーでログオンしようとすると、SAP にダイアログが表示され、ユーザーが既にログオンしていることが通知されます。 続行するための 3 つのオプションが用意されています。
  • 続行してログオンしている他のユーザーをキャンセルする
  • 続行するが、ログオンしている他のユーザーはキャンセルしない
  • 新しいユーザーでログオンしない
デフォルトでは、SapGuiLogon では 2 番目のオプションが選択されます。つまり、同一ユーザーの他のセッションをキャンセルしないでシステムにログオンします。 SapGuiSetOption でオプション SAPGUI_OPT_LOGON_BEHAVIOR を変更すると、この動作をカスタマイズできます。
SapGuiSetOption(SAPGUI_OPT_LOGON_BEHAVIOR, nValue)
ここで nValue は次の 4 つの値のいずれかになります。
0 | 多重ログオンを自動に処理しない これは、ダイアログが自動で処理せずに、通常の新しいウィンドウとして扱うことを意味しています。 これにより、ウィンドウを手動で処理できます。
1 | 多重ログオンなし これは、 ログオンしない オプションが選択されていることを意味します。
2 | 多重ログオン (デフォルト) これは、 続行するが、ログオンしている他のユーザーはキャンセルしない オプションが選択されていることを意味します。
3 | ログオンして他のセッションを強制終了 これは、 続行してログオンしている他のユーザーをキャンセルする オプションが選択されていることを意味します。
親トピック: 大規模な負荷テストの設定


ヒントとテクニック

Silk Performer で SAPGUI アプリケーションをテストする場合に考慮する必要がある問題について説明します。
  • SAPGUI 負荷テストでのメモリ使用量
    SAPGUI 負荷テスト 中にシミュレートできるユーザー数を定義する方法について説明します。
  • 予期しないウィンドウをチェックする
    記録中に別のウィンドウが出現するかどうかをチェックする方法、および状況を処理する方法について説明します。
  • グリッドおよびテーブルを参照する
    グリッドおよびテーブル コントロールでデータにアクセスする場合に使用する関数の例です。
  • コントロール プロパティにアクセスする
    コントロール プロパティにアクセスする方法について説明します。
  • コントロール メソッドを呼び出す
    SAP コントロール メソッドを呼び出す方法について説明します。
親トピック: SAPGUI のサポート


SAPGUI 負荷テストでのメモリ使用量

一般的に、SAPGUI 負荷テストでは、1 GB RAM を持つ 1 GHz のコンピュータで 50 人の仮想ユーザーを実行できます。

速度と RAM を増やせば 50 人以上のユーザーを実行することも可能ですが、直線的にユーザーが増えるわけではありません。また、すべてのオペレーティング システムにこのルールを適用できるわけでもありません。

SAPGUI テストの実際のボトルネックは RAM でも CPU でもなく、システム全体の GUI リソースの数です。

コンピュータごとに実行可能な仮想ユーザー数を正確に算出することは難しく、実行されるスクリプトによって異なります。画面上にコントロールが多数含まれるトランザクションを仮想ユーザーが実行する場合、別のスクリプトよりも早くシステムの GUI リソースが不足する傾向があります。

そのため、何度かテストを実行して、シミュレートできる正確なユーザー数を決定する必要があります。これはワークロードを増やしながら実行して決定します。限界に達すると、ユーザーは次のいずれかの状態になります。

  • 新しい SAP 接続を開くことができない
  • タイムアウトになる
親トピック: ヒントとテクニック


予期しないウィンドウをチェックする

場合によっては、記録中には出現しなかった別のウィンドウが再生中に出現することが考えられます。 たとえば、同一ユーザーで複数回ログインすると、複数ユーザー ログイン警告が表示されます。

エラーのないスクリプトを作成するには、SapGuiSetActiveWindow などの関数をスクリプト化する前に、新しいウィンドウが使用可能かどうかをチェックする必要があります。チェックしない場合、エラーが表示されることになります。

多重ログオン ダイアログは通常 SapGuiLogon によって自動的に処理されます。 次の例は、この状況を正しく処理するための方法を表しています。
if(SapGuiVerifyWindowAvailability("wnd[1]", null, false,
SEVERITY_INFORMATIONAL)) then
SapGuiSetActiveWindow("wnd[1]");
SapGuiSelectRadioButton("");
SapGuiPressButton("");
end;
SapGuiVerifyWindowAvailabiltity 以外にも、SapGuiVerifyObjectAvailability を絶対オブジェクト ID で使用することができます。 例：
SapGuiVerifyObjectAvailability(gsConnId + "/ses[0]/
wnd[1]", true, SEVERITY_INFORMATIONAL)

SEVERITY_INFORMATIONAL を使用するのは、オブジェクト/ウィンドウがない場合にエラーを受信せず、オブジェクトがある場合にのみアクションを実行するためです。 オブジェクトがない場合、エラーを記録する必要はありません。

SapGuiVerifyWindowAvailability には、ウィンドウ タイトルの確認に使用される追加のパラメータがあります。 これは、ユーザーが複数ある方法のうちのいずれかを使用して処理できるダイアログが複数あり、そのうちの 1 つが予期される場合に便利です。 関数を使用すると、特定のタイトルを持つダイアログが使用可能かどうかだけを検証します。

親トピック: ヒントとテクニック


グリッドおよびテーブルを参照する

次は、グリッドおよびテーブル コントロールでデータにアクセスする場合に使用する関数の例です。

グリッド コントロール

グリッド コントロールには列と行があります。 セルは行インデックスと列名によって特定されます。 セルの値を取得するには、行インデックスと列名を指定する必要があります。 次の例は、すべての列と行を繰り返すことでグリッド内のすべてのセルにアクセス方法を示しています。
SapGuiGridGetColumnCount("CTRLID", iColCount);
SapGuiGridGetRowCount("CTRLID ", iRowCount);
for rowix:=0 to iRowCount-1 do
for colix:=1 to iColCount do
SapGuiGridGetColumnName("CTRLID ", colix, colName);
SapGuiGridGetCellData("CTRLID ", rowix, colix,
cellValue);
end;
end;

行インデックスは 0 から始まります。 つまり、rowix 0 から行数 -1 まで繰り返します。

テーブル コントロール

テーブル コントロールはグリッド コントロールに似ています。 セルは行と列インデックスによって特定されます。 両方のインデックスとも 0 から始まります。 次の例は、すべての列と行を繰り返すことでテーブル内のすべてのセルにアクセス方法を示しています。
SapGuiTableGetColumnCount("CTRLID", iColCount);
SapGuiTableGetRowCount("CTRLID ", iRowCount);
for rowix:=0 to iRowCount do
for colix:=1 to iColCount do
cellValue := SapGuiTableGetText("CTRLID ", rowix,
colix);
end;
end;
親トピック: ヒントとテクニック


コントロール プロパティにアクセスする

SAPGUI スクリプト記述インターフェイスから、現在のウィンドウのすべてのコントロールにアクセスできます。 各コントロールには独自のプロパティがあり、SapGuiGetProperty でアクセスできます。 SAPGUI スクリプト記述は COM テクノロジに基づいているため、これらの COM オブジェクトを実装する多数の COM ライブラリが存在します。 これらのライブラリには、コントロールの種類ごとの型情報が含まれます。

さまざまな種類のコントロールのプロパティおよびメソッドのリストを取得するには、COM タイプ ライブラリの調査が可能なツールでこれらのライブラリを表示します。 OLEView32 はこの目的に使用できるツールであり、Microsoft Visual Studio に付属しています。

SAP インストール ディレクトリ (通常は C:\Program Files\SAP\Frontend) には、次のライブラリがあります。
  • SAPGUI\sapfewse.ocx

    基本的なコントロール (テキスト、ボタンなど) を含むもの

  • Controls\Scripting\*.dll

    拡張コントロール (ツリー、グリッドなど) を含むもの

すべてのオブジェクト プロパティには SapGuiGetProperty を使用してアクセスできます。 例：
SapGuiGetProperty("TXTCTRLID", "text", sTextValue);
プロパティが別の SAPGUI オブジェクトまたは SAPGUI コレクションを返す場合、返されたオブジェクトは内部に格納され、コントロール ID パラメータの SapGui API 呼び出しの定数値 SAPGUI_ACTIVEOBJECT を使用してアクセスできます。 例：
SapGuiPressButton(SAP GUI_ACTIVEOBJECT);
親トピック: ヒントとテクニック


コントロール メソッドを呼び出す

SAP コントロールのメソッドは、SapGuiInvokeMethod を使用して呼び出せます。 コントロールが提供するメソッドの基本情報は COM タイプ ライブラリで表示できます。 OLEView32 はこの目的に使用できるツールであり、Microsoft Visual Studio に付属しています。

ボタンを押すと、高レベルの SapGuiPressButton メソッドを使用することも、次のようなボタン コントロールの pressButton メソッドを呼び出すこともできます。
SapGuiInvokeMethod("BUTTONCTRLID", "pressButton");

メソッド呼び出しが別の SAPGUI オブジェクトまたは SAPGUI コレクションを返す場合、返されたオブジェクトは内部に格納され、コントロール ID パラメータの SAPGUI API 呼び出しの定数値 SAPGUI_ACTIVEOBJECT を使用してアクセスできます。

親トピック: ヒントとテクニック


Siebel のサポート

この節では、Siebel 8.x CRM を負荷テストするために、どのように Silk Performer を使用するかについて説明します。.Web ブラウザ (Internet Exporer など) 内で実行する HTML とアプレットで構成されるフロントエンドを利用した Siebel シンクライアント (Web クライアント) インストールのテストを説明します。

この章では、Silk Performer Web Recorder を使用する方法について説明します。

  • セッション情報のカスタマイズは必要ありません。
  • データベース キーに対する解析関数を手動で挿入する必要はありません。
  • 新しい記録をデータベースに挿入するトランザクションであっても、スクリプトは正しく機能します。
  • スクリプトは、簡単なランダム化が準備されています。

また、次のトピックについても説明します。

  • 記録セッションを正しく準備するためのベスト プラクティス
  • Siebel Thin Client インストールの基本アーキテクチャ

この節は、Silk Performer を使用した Web (HTTP/HTML ベース) アプリケーションの負荷テストについての知識を持つ経験豊富なユーザーを対象としています。

  • Siebel CRM アプリケーション アーキテクチャ
    典型的な Siebel CRM デプロイメントの概要を説明します。
  • プロジェクトのセットアップ
    Java アプレットとしてブラウザで実行する Siebel Web クライアントについて説明します。
  • Web クライアント HTTP トラフィックにおける動的情報
    Siebel Web クライアントによって生成される HTTP トラフィックに、再生が成功しかつ正確に行うために解決する必要がある動的情報が組み込まれていることについて説明します。
  • ベスト プラクティス
    Siebel Web クライアントのテストを成功に導くため、共通の陥りやすい問題について説明し、ヒントを提供し、さらにベスト プラクティスを説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


Siebel CRM アプリケーション アーキテクチャ

このトピックでは、Siebel クライアントの概要を説明します。下の図に、典型的な Siebel デプロイメントのアーキテクチャを紹介します。

この節では、上の図の青でハイライトした部分を取り上げます： Web クライアント (シンクライアント)。これは、Siebel CRM インストールのデフォルトのデプロイメントです。

Web クライアントは、HTTP、HTML、Java アプレット ベースのアプリケーションで、クライアント上にソフトウェアをインストールする必要はありません。

Siebel シンクライアント インストールの負荷テストは、ブラウザや Java アプレットによって生成される HTTP トラフィックの記録と再生によって実現されます。

この節では説明しませんが、専用の Web クライアントとモバイル Web クライアントも、Silk Performer を使ってテストすることができます。

HTTP トラフィック

記録したスクリプトを理解するために、HTTP トラフィックの 2 つの種類を区別することが役立ちます。

  • ブラウザによって生成された HTTP トラフィック
  • Java アプレットによって生成された HTTP トラフィック

ブラウザによって生成された HTTP トラフィックは、典型的な Web アプリケーションによって生成された HTTP トラフィックに似ています (HTMP や画像など)。

Java アプレットによって生成された HTTP トラフィックは、主にサーバーに送信される POST リクエストから構成されます。HTTP リクエストの本体は、MIME タイプ application/x-www-form-urlencoded を持ちます。これは、HTMMML ベースのアプリケーションでフォーム送信に使用される MIME タイプと同じです。しかし、HTTP レスポンス本体は、Siebel 専用の形式です。

以下の最初の例では、典型的な Java アプレット HTTP リクエストの本体を示します。

Java アプレットからの HTTP リクエスト本体

SWERPC=1&SWECount=5&SWECmd=InvokeMethod&SWEMethod=GetPreference&SWEInputPropSet=%400%600%603%600%60GetPreference%603%60%60pCategory%60SWE%3AListAppletLayout%60pPrefName%60%60SWEJSXInfo%60false%60

Java アプレットからの HTTP リクエスト本体の BDL フォーム定義

この例では、この HTTP リクエストに対して Web Recorder が生成する、対応する BDL フォーム定義を示します。

SALES_START_SWE018 <ENCODE_CUSTOM> :
  "SWERPC"               := "1",
  "SWECount"             := "5",
  "SWECmd"               := "InvokeMethod",
  "SWEMethod"            := "GetPreference",
  "SWEInputPropSet"      := "@0`0`3`0`GetPreference`3``pCategory` SWE:"
                                  "ListAppletLayout`pPrefName``SWEJSXInfo`false`";
親トピック: Siebel のサポート


プロジェクトのセットアップ

注: Siebel Web クライアントは、クライアント コンピュータにインストールされソフトウェアを必要としません。クライアントは Web ブラウザ内で実行されます。しかし、セキュリティ上の理由により。Siebel Java アプレットをダウンロードしてインストールするかどうかをブラウザが確認してくる可能性があります。不よなセキュリティ警告を今後表示しないようにするため、ブラウザの信頼済みサイトのリストに Sievel Web サーバーの名前を追加します。
  1. ファイル > プロジェクトの新規作成 を選択して、プロジェクトを作成します。
  2. ERP/CRM > Siebel > Siebel Web Client を選択します。
  3. 次へ をクリックします。 Recorder が表示され、Sievel アプリケーションとのやりとりを記録できるようになります。
  4. (省略可能)： テスト対象の Siebel インストレーションが負荷分散を使用しているためにさまざまなサーバー名があったり、追加のコンテキスト管理が必要な場合、設定 > アクティブ プロファイル > Web > 記録 に移動して、Web コンテキスト管理設定を変更します。

実際のホスト名の場所にホスト名 standardhost を使用するスクリプトは、設定 > アクティブ プロファイル > インターネット > ホスト でホスト名を変更すれば、さまざまなサーバーに対して再生を実行できます。記録が行われる前にホスト名が変更された場合にのみ、Recorder はこのようなスクリプトを生成できます。

  • TrueLog Explorer の設定
    TrueLog Explorer の 差分 ペインで、最善の結果を保証する方法について説明します。
親トピック: Siebel のサポート
関連概念
Web コンテキスト管理設定


TrueLog Explorer の設定

TrueLog Explorer の 差分 ペインで、最善の結果を保証するために、比較タグ および HTML 比較タグ の両方のリストにいくつか文字を追加する必要があります。
  1. TrueLog Explorer で、設定 > オプション > 比較タグ に移動します。
  2. 次の値をテーブル行に入力します。
    1. & (アンパサンド)
    2. * (アスタリスク)
    3. ` (逆一重引用符)
    4. @ (アットマーク)
  3. 設定 > オプション > HTML 比較タグ に移動し、テーブル行に同じ値を入力します。
親トピック: プロジェクトのセットアップ


Web クライアント HTTP トラフィックにおける動的情報

このセクションでは、Siebel Web クライアントによって生成される HTTP トラフィックに、再生が成功しかつ正確に行うために解決する必要がある動的情報が組み込まれていることについて説明します。

  • エラー検出
    スクリプトの再生時の動的データ処理における失敗が常にエラー メッセージを生成するわけではないことについて説明します。
  • セッション ID
    Siebel Web サーバーは、ユーザー セッションのトラッキングにセッション ID を使用することについて説明します。
  • タイムスタンプ
    Java アプレットと Siebel Web サーバー間の HTTP 通信は、1970 年 1 月 1 日以降の経過ミリ秒を表した文字列のタイムスタンプを含むことについて説明します。
  • URL エンコード
    安全でない HTTP 文字を等価な 16 進表記で置換されることについて説明します。
  • ユーザー入力
    記録セッション中に記録したユーザー入力は記録したスクリプトで簡単に識別され、変更できることが望ましいことについて説明します。
  • 動的データ
    HTTP リクエストでサーバーに送信されるさまざまな動的データを含む Siebel HTTP トラフィックについて説明します。
  • 書式再設定関数
    Siebel Web クライアントは、サーバーが送信した、またはユーザーが入力した電話番号と日付/時間値の書式を再設定することについて説明します。.
  • 有意なタイマ名
    Recorder がフォーム フィールドから有意なタイマ名を取り出すことについて説明します。
親トピック: Siebel のサポート


エラー検出

スクリプトの再生時の動的データ処理における失敗は、常にエラー メッセージを生成するわけではありません。これは、Siebel Web サーバーが HTTP エラー ステータス コードをエラーを示すために使用していないためです。実際、サーバーはアプレットにエラー通知を送信し、アプレットが状況を示すエラー メッセージを表示します。

これは、アプリケーションのデータベース層に生成された負荷が実際にあるべき状態と異なるときに (大抵の場合は少ない)、再生が成功したものと勘違いした印象を与える可能性があります。

以下の例では、サーバーから Java アプレットに送信される、エラー状況を説明する HTTP レスポンス本体を示します。このようなレスポンスでは、HTTP リクエストが正しく処理されたことを示す HTTP ステータス コード 200 OK が返されます。

サーバーからアプレットに送信されるエラー条件レスポンス

@0`0`3`2``0`UC`1`SWECount`10`Status`Error`0`1`Errors`0`2`0`Level0`0`ErrMsg`An error happened during restoring the context for requested location`ErrCode`27631`0`0`Notifications`0`

記録したスクリプトのアプリケーション レベルのエラー検出

Silk Performer スクリプトは、このようなアプリケーション レベルのエラーを検出できます。Web Recorder は、以下の例でハイライトした行を追加することで、このような検査を含むスクリプトを生成します。

use "WebAPI.bdh"
use "SiebelWeb.bdh"

// ...

  transaction TInit
  begin
    WebSetBrowser(WEB_BROWSER_MSIE55);
    WebFormDefineEncodeCustom("base=ENCODE_FORM;"
                              " +'@'; -'!()$,'; -'''");
    SiebelWebInit();
  end TInit;
親トピック: Web クライアント HTTP トラフィックにおける動的情報


セッション ID

Siebel Web サーバーは、ユーザー セッションのトラッキングにセッション ID を使用します。サーバーは、クッキーまたは URL (フォーム フィールドまたはクエリ文字列で。これはデフォルトの設定です) の何れかで、セッション ID を送信するように設定できます。

以下の例では、セッション ID に対して Set-Cookie ヘッダーを持つ HTTP レスポンス ヘッダーを示します。クッキー中のセッション ID は、Silk Performer によって自動的に処理されます。

クッキー中の Siebel セッション ID

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 12 Mar 2002 17:26:01 GMT
Content-Language: en
Cache-Control: no-cache
Content-Type: text/html;charset=windows-1252
Content-Length: 3043
Set-Cookie: _sn=!1.428.556d.3c8e3a29; Version=1; Path=/sales

URL 中の Siebel セッション ID

この例は、URL にセッション ID を組み込んだフレームを持つ HTML フレームセットの一部を示します。

<frameset>
  <frame name="_sweclient">
  <frame name="_swe" src="http://lab61/sales/start.swe?
                          SWEFrame=top._swe&SWECount=1&
                          _sn=!1.6c0.447b.3ceccd1b
                          &SWECmd=GetCachedFrame">
</frameset>

Silk Performer Web Recorder は、このようなセッション ID を正しく処理するスクリプトを生成します。

セッション ID を持つ記録したスクリプトの抜粋

この例は、次のテクニックを利用して上記のセッション ID を処理する記録したスクリプトの一部を示します。

  • 変数 gsSid は、セッション ID を保持するために宣言されます。
  • 解析関数 WebParseDataBoundEx は、WebPageLink 関数のサーバー レスポンスに含まれるセッション ID を解析するたのめに、関数呼び出し WebPageLink の前に挿入されます (上記の例を参照)。
  • 解析結果は、必要なときにいつでも使用することができます。この例では、フォーム送信に対して必要です。
  • 情報を含むコメントは、可読性を高めるためます。
var
  gsSid : string; // !1.6c0.447b.3ceccd1b

// ...

WebParseDataBoundEx(gsSid, sizeof(gsSid), "&_sn=", 1,
                    "&", WEB_FLAG_IGNORE_WHITE_SPACE);
WebPageLink("replace", "Siebel Sales (#2)", 1, "_sweapp");

WebPageForm("http://lab61/sales/start.swe",
            SALES_START_SWE003, "Unnamed page (#2)");

// ...

dclform
  SALES_START_SWE003 <ENCODE_CUSTOM> :
    "SWERPC"     := "1",
    "SWECount"   := "1",
    "_sn"        := gsSid,// value: "!1.6c0.447b.3ceccd1b"
    "SWEJSXInfo" := "false",
    "SWECmd"     := "InvokeMethod",
    "SWEService" := "SWE Command Manager",
    "SWEMethod"  := "PrepareGlobalMenu";
親トピック: Web クライアント HTTP トラフィックにおける動的情報


タイムスタンプ

Java アプレットと Siebel Web サーバー間の HTTP 通信は、1970 年 1 月 1 日以降の経過ミリ秒を表した文字列のタイムスタンプを含みます。適切に再生するためには、正しいタイムスタンプが含まれている必要があります。Silk Performer カーネル API (ファイル kernel.bdh) は、関数 GetTimeStamp() を提供しており、正確なタイムスタンプ文字列を得るために使用できます。

Web Recorder は、タイムスタンプを認識し、それを使用するスクリプトを生成します。

タイムスタンプを持つ HTTP リクエスト本体

この例では、タイムスタンプを組み込んだ Java アプレット HTTP リクエストの本体を示します。

SWEUserName=undisclosed&SWEPassword=undisclosed&SWEForm=SWEEntryForm&SWENeedContext=false&SWECount=0&SWECmd=ExecuteLogin&SWETimeStamp=1023377037797

タイムスタンプを持つ対応する BDL フォーム

この例では、Web Recorder が生成する、対応する BDL フォームを示します。タイムスタンプの値は、関数 GetTimeStamp() の呼び出しで置き換えられます。

dclform
  SWEENTRYFORM002:
    "SWEUserName"    := "undisclosed", // changed
    "SWEPassword"    := "undisclosed", // changed
    "SWEForm"        := "SWEEntryForm", // added
    "SWENeedContext" := "false", // added
    "SWECount"       := "0", // added
    "SWECmd"         := "ExecuteLogin", // added
    "SWETimeStamp"   := GetTimeStamp(); // added, value: "1023377037797"
親トピック: Web クライアント HTTP トラフィックにおける動的情報


URL エンコード

HTTP 仕様に従うと、安全でない文字が MIME タイプ application/x-www-form-urlencoded を持つ転送データに含まれる場合、エンコード (エスケープ) されなければなりません。これは、安全でない文字を、パーセント記号 (%) を先頭につけた等価な 16 進表記で置換することで行われます。

Silk Performer は、標準エンコード タイプを提供します：ENCODE_FORM, ENCODE_ESCAPE, ENCODE_BLANKS and ENCODE_NONE。これらのエンコードの種類は、エスケープする文字によって異なります。

Siebel Web クライアント Java アプレットは、標準 Silk Performer エンコード タイプと異なる独自のエンコード タイプを適用します。この理由で、Silk Performer は新しいエンコード タイプ ENCODE_CUSTOM を提供し、関数 WebFormDefineEncodeCustom を使用して設定できます。

Siebel が使用するエンコード タイプは、次の点で、標準エンコード タイプ ENCODE_FORM とは異なります。

  • エスケープされない文字： !()$,'
  • エスケープされる文字：@

Silk Performer Web Recorder は、HTTP リクエストにこの特殊なエンコード タイプを適用することを検出し、次のテクニックを使用してスクリプトを生成します。

  • TInit トランザクションのエンコード タイプ ENCODE_CUSTOM を定義するために、関数 WebFormDefineEncodeCustom() は使用されます。
  • エンコード タイプ ENCODE_CUSTOM はフォーム定義で使用されます。

ENCODE_CUSTOM を利用した記録済みスクリプトの一部

この例は、これらのテクニックを利用した記録済みスクリプトの一部を示します。

dcltrans
  transaction TInit
  begin
    WebSetBrowser(WEB_BROWSER_MSIE55);
    WebFormDefineEncodeCustom("base=ENCODE_FORM;"
                              " +'@'; -'!()$,'");
  end TInit;

// ...

dclform
  SALES_START_SWE011 <ENCODE_CUSTOM> :
    "SWERPC"                    := "1",
    "SWECount"                  := "4",
    "SWECmd"                    := "InvokeMethod",
    "SWEMethod"                 := "GetPreference",
    "SWEInputPropSet"           := "@0`0`3`0`GetPreference`3``pCategory`"
                                   "Behavior`pPrefName``SWEJSXInfo`false`";
親トピック: Web クライアント HTTP トラフィックにおける動的情報


ユーザー入力

一般に、記録セッション中に記録したユーザー入力は記録したスクリプトで簡単に識別され、変更できることが望ましいものです。

Siebel Web クライアントのスクリプトでは、Java アプレットがすべての入力フィールドの値をサーバーに頻繁に送信するため、このことが特に当てはまります。新しいデータベース レコードが作成され (新しい顧客レコードなど)、レコードが続いて編集または参照される場合、入力 (顧客名など) 何度も記録したスクリプトに現れる場合があります。

Silk Performer Web Recorder は、次のような処理を行います。

  • 次の項目のうちの 1 つが真である場合にフォーム フィールド値がユーザー入力であると仮定して、ユーザー入力を検出します。
    • 値が $ 記号で囲まれている
    • 値がアンダースコアで囲まれている(_)
    • 値が次の文字シーケンスで始まる： i.
  • 核にユーザー入力に対して変数が生成され、スクリプトの元の値の場所で変数が使用されます。

ユーザー入力を含む記録済みスクリプトの一部

var
  gsInputNewName     : string init "$NewName$";
  gsInputNewSite     : string init "_NewSite_";
  gsInputiHttp_x_com : string init "i.http://x.com";

// ...

dclform
  SALES_START_SWE020 <ENCODE_CUSTOM> :
    "SWEMethod"   := "GetQuickPickInfo",
    "SWEViewId"   := "",
    "SWEView"     := "Account List View",
    "SWEApplet"   := "Account List Applet",
    "SWEField"    := "s_1_2_46_0",
    "SWERow"      := "0",
    "SWEReqRowId" := "1",
    "s_1_2_38_0"  := "N",
    "s_1_2_39_0"   := gsInputNewName, // value: "$NewName$"
    "s_1_2_40_0"   := gsInputNewSite, // value: "_NewSite_"
    "s_1_2_41_0"  := "(999) 999-9123",
    "s_1_2_37_0"  := gsInputiHttp_x_com,
                           // value: "i.http://x.com"
    "s_1_2_49_0"    := "",
    "s_1_2_46_0"    := "",
    "s_1_2_44_0"    := "",
    "SWEBCVals"     := "@0`0`0`1``3``2`0`FieldValues`3``FieldArray"
                       "`4*Name8*Location17*Main Phone Number"
                       "`ValueArray`14*" + gsInputNewName +
                       "14*" + gsInputNewSite + "10*9999999123`";

Web Recorder が検出できるように、これらの説明に基づいて記録中に入力値を選択します。

親トピック: Web クライアント HTTP トラフィックにおける動的情報


動的データ

Siebel HTTP トラフィックには、HTTP リクエストでサーバーに送信されるさまざまな動的データが含まれます。このようなデータは、前のサーバー レスポンスから解析することができ、ハードコード値の変わりにスクリプトで置換されます。

次のデータが含まれます。

  • 既存のデータベース レコードの値
  • 行 ID

Siebel は、データベース キーを使用してデータベースのレコードを識別します。このようなキーは、ブラウザとアプレットの両方から生じる HTTP トラフィックに存在します。データベース キーは、行 ID としても知られています。行 ID と他の動的データの処理を正確にすることは、再生の成功に不可欠です。

行 ID と他の動的データは、HTML ドキュメント (以下の最初の例を参照) や、Java アプレットからの HTTP リクエストへのレスポンス (以下の 2 番目の例を参照) に含めることができます。

動的データは、常に値配列 (Siebel GUI で表示される単一行に対する値のリスト) に含まれます。

JavaScript コードでの値配列 (HTML ドキュメント内)

<script>
  row = new top._swescript.JSSRecord();
  row.id = "1-9Q1";
  row.valueArray = ["Foo","Bar","1234567890","","Active",
                    "http://www.foo.com/bar","","","USD",
                    "11/26/2002","","USD","11/26/2002",
                    "","","","","N","N","","1-9Q1"];
  S_BC1.Rec(row);
</script>

アプレット レスポンスでの値配列

@0`0`3`2``0`UC`1`Status`Completed`SWEC`10`0`24`Notifications`0`2`0``0`OP`bn`bc`S_BC1`7`0``0`type`SWEIRowSelection`OP`g`br`0`cr`6`bc`S_BC1`size`7`ArgsArray`20*Account Entry Applet1*1`7`0``0`type`SWEIRowSelection`OP`g`br`0`cr`6`bc`S_BC1`size`7`ArgsArray`19*Account List Applet1*11*01*01*01*01*01*0`7`0``0`type`SWEIPrivFlds`OP`g`br`0`cr`6`bc`S_BC1`size`7`ArgsArray`19*Account List Applet11**BlankLine11*?11**BlankLine21*?9**HTML URL1*?15**HTML RecNavNxt1*?`7`0``0`type`SWEICanInvokeMethod`OP`g`br`0`cr`6`bc`S_BC1`size`7`ArgsArray`19*Account List Applet1*01*11*11*01*21*11*31*01*41*11*51*11*61*11*71*11*81*11*91*12*101*02*111*02*121*12*131*02*141*12*151*12*161*12*171*12*181*12*191*12*201*12*211*12*221*12*231*12*241*12*251*02*261*12*271*12*281*02*291*02*301*02*311*02*321*02*331*02*341*12*351*12*361*1`7`1``0`OP`iw`index`7`br`0`cr`6`bc`S_BC1`size`7`ar`0`1`0`FieldValues`0`ValueArray`3*Foo3*Bar10*12345678900*6*Active22*http://www.foo.com/bar0*0*3*USD10*11/26/20020*3*USD10*11/26/20020*0*0*0*1*N1*N0*5*1-9N9`8`0``0`OP`dw`index`7`br`0`cr`6`bc`S_BC1`nr`1`size`7`ar`0`8`0``0`value`0`OP`sc`br`0`cr`6`bc`S_BC1`size`7`ar`0`state`n`8`0``0`value`1`OP`sc`br`0`cr`6`bc`S_BC1`size`7`ar`0`state`n`8`0``0`value`7`OP`sc`br`0`cr`6`bc`S_BC1`size`7`ar`0`state`cr`8`0``0`value`1`OP`sc`br`0`cr`6`bc`S_BC1`size`7`ar`0`state`nrk`8`0``0`value`13`OP`sc`br`0`cr`6`bc`S_BC1`size`7`ar`0`state`nr`6`0``0`OP`nd`br`0`cr`6`bc`S_BC1`size`7`ar`0`2`0``0`OP`en`bc`S_BC1`0`3`

動的情報は大抵スクリプトの dclform セクションに現れます。

必要に応じて、Web Recorder は自動的に解析関数 (WebParseDataBoundEx) を生成し、スクリプトに現れたときに解析済みの値と置き換えます。解析関数は、HTML およびアプレット レスポンスの完全な値配列を解析します。Recorder は、適切なトークン化関数 SiebelTokenHtml または SiebelTokenApplet を使用して、解析済み値配列から個々のトークンを抽出します。

解析関数を利用したスクリプトの一部

この例は、次のテクニックを利用した記録済みスクリプトの一部を示します。

  • 変数は値配列に対して宣言されます (gsRowValArray および gsRowValArray_001)。
  • 解析関数 WebParseDataBoundEx は、後続の関数のサーバー レスポンスに含まれる値配列を解析するために挿入されます (上記の例を参照)。

解析結果は、必要なときにいつでも使用することができます。この例では、解析した値の個々のトークンはフォーム定義のさまざまな場所に出現します。情報を含むコメントは、可読性を高めるために使用されます。

var
  gsRowValArray     : string; // = ["Foo","Bar","1234567890","","Active",
                              //    "http://www.foo.com/bar","","","USD",
                              //    "11/26/2002","","USD","11/26/2002",
                              //    "","","","","N","N","","1-9Q1"];
  gsRowValArray_001 : string; // 3*Foo3*Bar10*12345678900*6*Active
                              // 22*http://www.foo.com/bar
                              // 0*0*3*USD10*11/26/20020*3*USD10*11/26/2002
                    // 0*0*0*0*1*N1*N0*5*1-9N9

// ...

  WebParseDataBoundEx(gsRowValArray, sizeof(gsRowValArray),
            "row.valueArray", 2, "S_", WEB_FLAG_IGNORE_WHITE_SPACE, 1);
// function call where parsing function is in effect

  WebParseDataBoundEx(gsRowValArray_001, sizeof(gsRowValArray_001),
                     "ValueArray`", 1, "`", WEB_FLAG_IGNORE_WHITE_SPACE, 1);
// function call where parsing function is in effect

// ...

dclform

// ...

SALES_ENU_START_SWE016 <ENCODE_CUSTOM> :
  "SWEMethod"  := "Drilldown",
  "SWEView"    := "Account List View",
  "SWEApplet"  := "Account List Applet",
  "SWEReqRowId":= "1",
   "s_1_2_40_0"      := SiebelTokenHtml(gsRowValArray, 0), // value: "Foo"
   "s_1_2_41_0"      := SiebelTokenHtml(gsRowValArray, 1), // value: "Bar"
  "s_1_2_42_0" := "(123) 456-7890",
  "s_1_2_51_0" := "",
   "s_1_2_47_0"      := SiebelTokenHtml(gsRowValArray, 4), // value: "Active"
  "s_1_2_45_0" := SiebelTokenHtml(gsRowValArray, 5),
                       //value:"http://www.foo.com/bar"
  "SWECmd"     := "InvokeMethod",
  "SWERowId"   := SiebelTokenHtml(gsRowValArray, 20), // value: "1-9Q1"
  "SWETS"      := GetTimeStamp(); // value: "1038305654969"

// ...

SALES_ENU_START_SWE022 <ENCODE_CUSTOM> :
  "SWEMethod"  := "Drilldown",
  "SWEView"    := "Account List View",
  "SWEApplet"  := "Account List Applet",
  "SWEReqRowId":= "1",
   "s_1_2_40_0"   := SiebelTokenApplet(gsRowValArray_001, 0), // value: "Foo"
   "s_1_2_41_0"   := SiebelTokenApplet(gsRowValArray_001, 1), // value: "Bar"
  "s_1_2_42_0" := "(123) 456-7890",
  "s_1_2_51_0" := "",
  "s_1_2_47_0" := SiebelTokenApplet(gsRowValArray_001, 4), // value: "Active"
  "s_1_2_45_0" := SiebelTokenApplet(gsRowValArray_001,5),
                                    // value: "http://www.foo.com/bar"
  "SWECmd"     := "InvokeMethod",
  "SWERowId"   := SiebelTokenApplet(gsRowValArray_001, 20), // value: "1-9N9"
  "SWETS"      := GetTimeStamp(); // value: "1038305711331"
親トピック: Web クライアント HTTP トラフィックにおける動的情報


書式再設定関数

Siebel Web クライアントは、サーバーが送信した、またはユーザーが入力した電話番号と日付/時間値の書式を再設定します。.よって、クライアントが送信した HTTP リクエスト本体のこれらの値の書式は、サーバーが送信した HTTP レスポンス本体で使用される書式とは異なります。

サーバー レスポンス本体の電話番号

10*987140255510*78140110000*0*0*22*main.contact@MyCompany.com5*1-FIH

記録したスクリプトの電話番号 (Siebel Web クライアントで書式の再設定済み)

"s_1_1_25_0" := "(987) 140-2555";

変更しないと、リクエスト本体で使用した書式は記録したスクリプトでも使用されます。これは、このような値を解析した値で置換することを不可能にします。

電話番号の書式再設定関数

このような書式の再設定された文字列を解析した値で置換できるようにするために、 Silk Performer Web Recorder は、適切な書式再設定関数を記録します。 この関数は、Siebel Web クライアントの書式再設定と同じことを行い、サーバー レスポンスで使用されるのと同じ書式で実際の値を記録します。

"s_1_1_25_0" := SiebelPhone("9871402555");

書式再設定関数のパラメータとして解析した値を使用する

値が入力値でない限り、一般的に値は第 2 ステップで解析した値で置換されます。実際に Recorder は、ハードコード文字列の代わりに解析した値を記録します。

"s_1_1_25_0" := SiebelPhone(SiebelTokenApplet(gsParsed, 5));

次の書式再設定関数が利用可能で、必要に応じて自動的に記録されます。

  • SiebelPhone
  • SiebelDate
  • SiebelTime
  • SiebelDateTime
  • SiebelDecodeJsString
  • SiebelParam
親トピック: Web クライアント HTTP トラフィックにおける動的情報


有意なタイマ名

Recorder はフォーム フィールドから有意なタイマ名を取り出します。これによって、スクリプト、TrueLogs、パフォーマンス　レポートが人間が読みやすいものになり、理解しやすくなります。

有意なタイマ名

ここでは、直感的なタイマ名の例を示します。

WebPageForm("http://standardhost/sales_enu/start.swe",
            SALES_ENU_START_SWE022,
            "Account List Applet: InvokeMethod: Drilldown");

// ...

dclform

// ...

SALES_ENU_START_SWE022 <ENCODE_CUSTOM> :
  "SWEMethod"  := "Drilldown",
  "SWEView"    := "Account List View",
  "SWEApplet"  := "Account List Applet",
// more form fields
  "SWECmd"     := "InvokeMethod",
  "SWERowId"   := SiebelTokenApplet(gsRowValArray_001, 20),
  "SWERowIds"  := "",
  "SWEP"       := "",
  "SWETS"      := GetTimeStamp(); // value: "1038305711331"
親トピック: Web クライアント HTTP トラフィックにおける動的情報


ベスト プラクティス

このトピックでは、Siebel Web クライアントのテストを成功に導くため、共通の陥りやすい問題について説明し、ヒントを提供し、さらにベスト プラクティスを説明します。

読み取り専用トランザクション

読み取り専用トランザクションは、新しいレコードが挿入されない、かつデータが変更されないトランザクションです。読み取り専用トランザクション用に記録されたスクリプトは変更をせずに実行します。

しかし、このようなスクリプトは、値配列の解析関数を含む場合があります。たとえば、解析関数は、テーブルの 3 番目のレコードの値配列を解析するかもしれません。このテーブルの再生時に、レコード数が 3 レコードより少ないと、値配列を解析できずに再生エラーとなる可能性があります。このような状況は、存在する値配列が解析されるように、解析関数の出現パラメータを調整することによって避けることができます。

しかし、よりよい解決策は、データベースの各テーブルに負荷テスト時に十分なレコードが含まれていることを保障することで、問題を完全に回避することです。

読み取り/書き込み/更新トランザクション

書き込みトランザクションは、新しいレコードを挿入したり、既存のレコードの値を変更するトランザクションです。

必要なスクリプト カスタマイズ

書き込みトランザクションのスクリプトは、再生の成功を保証するために、最低限のカスタマイズが必要となります。これは、新しいレコードの値配列がサーバー レスポンスから解析されることができるためです。

再生を成功させるために修正が必要な場合、Siebel の多くのテーブルはレコードの重複を許さないためという理由が一般的です。Siebel がレコードが重複しているとみなされる状況は、テーブルによって異なります。ほとんどの場合、レコードがユニークであるとみなすには、レコード フィールドのある組み合わせが Siebel に対して異なっている必要があります。

再生を成功させるために、スクリプトの試行の実行時でさえ、これらのフィールドを変更すべきです。これは、Web Recorder がこれらの値を変数として作成するとき、簡単に行うことができます。

スクリプトの試行の実行では、これらの値をスクリプトで直接手動で変更することで十分です。しかし、テストの場合、各仮想ユーザーがユニークな値の組み合わせでレコードを挿入するように、データ ファイルを準備して、スクリプトをカスタマイズする必要があります。

空のテーブルについての注意

空のテーブルにレコードを挿入することによって生成された HTTP トラフィックは、すでにレコードが存在するテーブルにレコードを挿入することによって生成された HTTP トラフィックとは明らかに異なります。このため、殻のテーブルにレコードの挿入を記録するスクリプトは、一旦テーブルにレコードが追加されると、後で再生セッション中に使用することはできません。これは逆も同様です。

このような問題を避けるために、切ろうセッション中に空のテーブルにレコードを挿入しないことを保障します。また、負荷テストの前、または最中にテーブルが空にならないように保障します。

次のシナリオはこれらの制約による影響を受けないことにご注意ください。

  • 他のレコードを含むテーブルに新しいレコードを作成する (例、accounts)
  • まさに作成したレコードに関連付けられたテーブルに新しいレコードを作成する (例、新しい accounts に対して新しい notes を作成する)新たに作成した accounts に対して notes テーブルは空になるので、スクリプトの再生中に新しく作成した acounts の notes テーブルも空になります。つまり、このようなスクリプトは問題を起こしませんん。
親トピック: Siebel のサポート


Microsoft Silverlight のサポート

前提条件

HTTP ヘッダー Content-Type が "application/soap+msbin1" または "application/msbin1" に設定されている HTTP 要求と応答では、変換が有効になっています。 別の HTTP コンテンツ タイプ ヘッダーを使用してデータを変換する必要がある場合は、以下のステップを参照してください。カスタム コンテンツの変換 - タイプ を参照してください。

Microsoft Silverlight プロジェクトの設定

Microsoft Silverlight ブラウザ ベース アプリケーションを Silk Performer を使用してテストするワークフローは、次の例外を除き、Web ベース アプリケーションのテストに使用するワークフローと同じです。

  • プロジェクトの概要設定 - ワークフロー ダイアログの Web ブラウザ ノードから、Silverlight を選択する必要があります。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


ターミナル エミュレーションのサポート

ターミナル エミュレーション アプリケーションに対する Silk Performer のサポートは、Telnet プロトコル ("緑色の画面" のアプリケーション) に基づいてターミナル エミュレータのトラフィックを記録できるようにします。 サポートされるターミナルの種類には、VT100 と VT200 (UNIX、、IBM AS400)、および TN3270(E) と TN5250 からアクセスされる IBM メインフレームが含まれます。

ターミナル エミュレータのトラフィックを記録するための前提条件は、ホスト アプリケーションにアクセスするためのターミナル エミュレータがインストールされていることです。Recorder は、それらが実行した Telnet のトラフィックを記録します。 これらの多くのエミュレータは、市場で入手できます (たとえば、Rumba)。

注: ターミナル エミュレーション アプリケーションに対する Silk Performer のサポートの詳細については、Miscellaneous Tutorials (PDF) を参照してください。 このファイルは Silk Performer の ドキュメント > チュートリアル にあります。

スクリプトのカスタマイズ

ターミナル エミュレーション スクリプトのカスタマイズの詳細については、TrueLog Explorer のヘルプを参照してください。

IBM メインフレーム プロトコルのテスト

ターミナル エミュレーションの TrueLog の ホスト画面情報 ページには、記録された画面または再生された画面に表示されるすべてのフィールドとステータスのコントロールがあります。 これらのコントロールを使用すると、フィールド値および値のステータスの解析関数/検証関数に簡単にアクセスできます。

IBM ターミナルは、地域によって異なる EBCDIC コード ページ に依存します。 Silk Performer は、システムにインストールされているコード ページから EBCDIC コード ページを選択します。 各国語文字が正しく表示されない場合、プロジェクト構成の際にコード ページを変更できます。

IBM コード ページは、人間が読むことができる ASCII 入力データ (たとえば、検索パラメータ) からバイナリ 16 進数表示への変換 (および、その逆の変換) を制御します。 この変換処理によって、スクリプトのカスタマイズが容易になります。

  • ターミナル エミュレーション プロジェクトを作成する
    ターミナル エミュレーション アプリケーションをテストするには、適切な Terminal Emulation のアプリケーションの種類でプロジェクトをセットアップする必要があります。
  • ターミナル エミュレーションのプロファイル設定を構成する
    記録を始める前に、ターミナル エミュレータを介してターミナル エミュレーション アプリケーションを記録するためのプロファイル設定を構成する必要があります。
  • ターミナル エミュレーションの記録プロファイルをセットアップする
    ターミナル エミュレーション アプリケーションを記録する前に、TCP/IP ベースの記録プロファイルをセットアップする必要があります。
  • ターミナル エミュレーション アプリケーションを記録する
    ターミナル エミュレーション アプリケーションに対するテスト スクリプトを記録するには、記録プロファイルを選択して必要なユーザー操作を実行し、スクリプトの試行を実行してスクリプトをテストする必要があります。
  • ターミナル エミュレーション セッションのカスタマイズ
    ターミナル エミュレーション アプリケーションのテスト スクリプトのセッションをカスタマイズする必要がある場合、TrueLog Explorer を利用して手動でカスタマイズする必要があります。
親トピック: 特定のアプリケーションの種類に対する負荷テスト
関連概念
ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション プロジェクトを作成する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーで、Terminal Emulation のアプリケーションの種類ノードを展開し、必要なターミナル エミュレーションの種類を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
親トピック: ターミナル エミュレーションのサポート


ターミナル エミュレーションのプロファイル設定を構成する

  1. Silk Performer の プロジェクト ツリーで プロファイル ノードを展開します。
  2. 構成対象のプロファイルを右クリックして、プロファイルの編集 を選択します。
    ヒント: あるいは、メニュー バーから 設定 > アクティブ プロファイル を選択することもできます。

    プロファイル - [<プロファイル名>] - シミュレーション ダイアログ ボックスが開きます。左側のショートカット リストに 再生 カテゴリが表示されます。

  3. 左側のショートカット リストから 記録 ボタンをクリックします。 記録カテゴリが表示されます。
  4. ショートカット リストから 端末クライアント アイコンをクリックします。
  5. Telnet タブをクリックします。
  6. Telnet の設定 領域で、次の Telnet 検出モードのいずれかを指定します。
    • 常に Telnet-Mode と想定する オプション ボタンをクリックすると、各接続が Telnet 接続であることを想定するようレコーダに指示します。 このオプションは、トラブルシューティングの目的でのみ使用します。
    • Telnet-Mode を自動検出する オプション ボタンをクリックすると、新しい接続それぞれで Telnet を自動的に検出するようレコーダに指示します (デフォルト)。
    • Telnet-Mode と想定しない オプション ボタンをクリックすると、Telnet 接続である接続はないと想定するようレコーダに指示します。 このオプションは、トラブルシューティングの目的でのみ使用します。
  7. コマンド プロンプト文字列 テキスト ボックスには、コマンド プロンプト文字列を指定します。可能なところでは常に、レコーダがその文字列を使用して WebTcpipRecvPacketsUntilData 関数をスクリプトします。 この文字列を使用すると、記録されるスクリプトは動的コンテンツに対してより効率的になります。
  8. 端末のプロパティ セクションでは、ログ レベル リスト ボックスから次の項目のいずれかを選択します。
    • なし
    • エラー
    • 通常
    • デバッグ
  9. テストを行う特定の端末タイプが 端末タイプ リスト ボックスに表示されていることを確認します。 プロジェクトのアプリケーションの種類を選択すると、この設定は自動的に構成されます。 正しく指定されると、レコーダは該当する端末タイプの初期化関数のスクリプトを作成し、TrueLog の画面を表示します。
  10. 設定文字列 テキスト ボックスでは、ターミナル エミュレータをカスタム構成文字列で初期化します。 利用可能なオプションについては、ターミナル エミュレータのドキュメントを参照してください。
  11. デフォルト画面 の次の値を指定して、端末画面のデフォルト表示をレコーダに指示します。
    • 行 テキスト ボックスには、端末画面の高さを入力します。 値を空にすると、Silk Performer によりセッション初期化中に高さが検出されます。
    • 列 テキスト ボックスには、端末画面の幅を入力します。 値を空にすると、Silk Performer によりセッション初期化中に幅が検出されます。
    • カラー チェック ボックスをオンにして、端末画面でデフォルトの色を使用するように指定します。
    入力した値により、Silk Performer が検出したデフォルトは無効になります。 ターミナル アプリケーションでカスタム画面サイズを使用する場合は、スクリプトが正常に再生されるように、スクリプトを記録する前にこれらの値を設定するようにしてください。
  12. ホスト コード ページ テキスト ボックスには、サーバーが使用するコード ページを指定します。 コード ページはさまざまなデータ変換に使用されます。使用可能なコード ページのすべてはシステムにインストール済みです。 必要なコード ページが一覧にない場合は、インストールできます。 選択したコード ページは、各エージェント コンピュータでも利用できるようにしてください。 インストールされているすべてのコード ページを確認するには、スタート > コントロール パネル > 地域と言語のオプション > 詳細設定 に移動します。 リストされ、チェックマークによって有効になっているホスト コード ページのみ利用可能です。
  13. 詳細 タブをクリックし、基本機能を記録する チェック ボックスをオンにすると、レコーダは WebTcpipScreenRecvPacketsUntilCursor や WebTelnetScreenRecvRecordsUntilStatus など、同期化される受信関数のスクリプトを作成しません。 このオプションが有効になっていると、スクリプト化される受信関数は、表示された画面の内容には依存しません。 このオプションは、端末タイプが指定されていない場合には、デフォルトで有効になっています。
  14. 設定を保存するには、OK をクリックします。
親トピック: ターミナル エミュレーションのサポート


ターミナル エミュレーションの記録プロファイルをセットアップする

  1. 設定 メニューから システム を選択します。
  2. Recorder ボタンをクリックします。
  3. 追加 ボタンをクリックします。
  4. 記録プロファイル ダイアログで、プロファイル名 フィールドにプロファイルの名前を指定します。
  5. 参照 をクリックし、ローカル システムにあるターミナル エミュレータの .exe ファイルを選択します。
    注: このダイアログにあるその他のすべての設定は、すべての TCP/IP ベースのアプリケーションに対する標準的な設定項目です。
  6. ターミナル エミュレータとして RUMBA を使用している場合は、記録実行可能ファイルはアプリケーション パスと異なる チェック ボックスをオンにします。
  7. 記録実行可能ファイル フィールドに WDDspPag.exe と入力します。
  8. TCP/IP チェック ボックスをオンにします (Silk Performer の TCP/IP レベルの API は、ターミナル エミュレーション アプリケーションのサポートを容易にします)。
  9. Web の設定 をクリックします。 Web 設定 ダイアログ ボックスが開きます。
  10. WinSock リスト ボックスで ws2_32.dll を選択します。
  11. OK をクリックして、Web 設定 ダイアログ ボックスを閉じます。
  12. OK をクリックして 記録プロファイル ダイアログ ボックスを閉じます。
新しいプロファイルが、記録プロファイル ページに表示されます。
親トピック: ターミナル エミュレーションのサポート


ターミナル エミュレーション アプリケーションを記録する

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 記録プロファイル メニュー ツリーから、ターミナル エミュレーションの記録プロファイルを選択します。
  3. コマンド ライン フィールドにターミナル エミュレーション アプリケーションの場所を入力します。
  4. 記録の開始 をクリックします。 [Silk Performer Recorder - [<プロファイル名>]] ダイアログが最小化されて表示され、クライアント アプリケーションが起動されます。
  5. クライアント アプリケーションを使用して、テストでシミュレートするターゲット サーバーでの操作などを実行します。この操作を、Recorder が取得して、記録します。 これらのアクションとダウンロードされたデータのレポートが、アクション ページに表示されます。
  6. 記録が完了したら、アプリケーションと Recorder を閉じて、テスト スクリプトを保存します。
  7. テスト スクリプトが予期したとおりに実行されることを確認するには、アニメーション モードでスクリプトの試行を実行します。これにより、実行したテストの結果を TrueLog Explorer に表示できます。
親トピック: ターミナル エミュレーションのサポート
関連概念
ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション セッションのカスタマイズ

通常は、ターミナル エミュレーション アプリケーションのテスト スクリプトのセッションを、カスタマイズする必要はありません。 セッションのカスタマイズが必要な場合、カスタマイズの一部は手動で行う必要があります。 ただし、TrueLog Explorer を使用すると、テスト スクリプトに解析関数を挿入できます。

場合によっては、再生とホスト アプリケーションの同期が正常に動作しないことがあります。たとえば、リクエストされた画面が完了していない状態で、カーソル位置を決める際に完了した画面が既に想定されることがあります。 スクリプトの記録されたカーソル同期関数は、画面の最初の位置を受け入れて、同期しないでスクリプトの実行を続けますが、再生エラーが発生する場合があります。 この場合、スクリプト内で、記録された同期関数をより適切な同期関数に置き換える必要がある場合があります (たとえば、WebTcpipRecvPacketsUntilData または WebTelnetRecvPacketsUntilData)。

親トピック: ターミナル エミュレーションのサポート
関連概念
TCP/IP Functions Reference


TCP/IP ベース プロトコルのサポート

このセクションでは、レガシーまたはカスタム TCP/IP ベース プロトコルを使用したアプリケーションに対して負荷テスト スクリプトを開発する方法を説明します。次のような種類のテストで共通に直面する課題について検討します： 動的サーバー レスポンスを扱う、文字コード表間の変換、バイナリ データの文字列操作など。

3 つのプロトコルを詳細に分析します： Telnet、TN3270e、カスタム TCP/IP ベース プロトコル。サンプルとして、実際の負荷テスト プロジェクトからの記録したスクリプトを使用して、アプリケーションの記録、トラフィックの分析、記録ルールの設定、そしてスクリプトのカスタマイズというプロセスを通して学んでいきます。

  • 概要
    Silk Performer を使用して、TCP レベルでプロトコルを記録し、WebTcpip 関数を使用して結果のスクリプトをカスタマイズできることについて説明します。
  • スクリプトのカスタマイズ
    このセクションでは、TCP ベースの負荷テスト スクリプトのカスタマイズ時によく直面する課題について説明します。
  • Telnet、TN3270e、カスタム プロトコル
    このセクションでは、前のトピックで議論した理論を特定の現実の例に適用します。
  • 記録の設定
    TCP/IP ベースのプロトコル トラフィックの記録に対して利用可能な 2 つの機構を設定する方法について説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


概要

注: つぎのプロトコルは、Silk Performer が直接サポートしており、このセクションで述べるようなカスタマイズは必要ありません。レガシー システム と呼ばれるものを含む、以下にリストされていないプロトコルは、スクリプトのカスタマイズが必要です。
  • TN3270
  • TN5250
  • VT100
  • VT200+

このセクションで考察するプロトコルはすべて TCP/IP ベースです。Silk Performer を使用して、TCP レベルでプロトコルを記録し、WebTcpip 関数を使用して結果のスクリプトをカスタマイズできます。Silk Performer の強化した TCP/IP サポート、TrueLog Explorer、ルール ベースの記録を使用すれば、プロセスは簡単です。

このセクションには 2 つの目的があります。

  • 記録したカスタム TCP/IP トラフィックを分析するプロセスを通じて、このようなトラフィックのカスタマイズに必要な汎用ツールと手法について学びます
  • 2 つのプロトコルを徹底的に分析します： Telnet および TN3270e。

TCP/IP 仮想ユーザーのメモリ使用量

それ自身のプロセスで実行しているそれぞれの仮想ユーザーは、およそ 1.6 MB のシステム メモリを必要とします。

プロセスごとに 1 人以上のユーザーが実行していると、メモリ消費量は次のようになります。

  • 25 仮想ユーザー： 仮想ユーザーごとにおよそ 0.2 MB
  • 50 仮想ユーザー：仮想ユーザーごとにおよそ 0.1 MB
親トピック: TCP/IP ベース プロトコルのサポート


スクリプトのカスタマイズ

このセクションでは、TCP ベースの負荷テスト スクリプトのカスタマイズ時によく直面する課題について説明します。

  • 文字変換
    文字変換における共通の課題と、対応するソリューションについて説明します。
  • サーバー レスポンスを動的に受信する
    クライアント リクエストを完全に制御することは簡単に行えますが、適切なサーバー レスポンスを見込むことは困難であることについて説明します。
  • バイナリ データの文字列操作
    リクエストのパラメータ化の管理方法とレスポンス データの検索について説明します。
  • セッション ID
    多くの TCP/IP ベースのプロトコルは、サーバーとクライアント間の TCP/IP 接続に依存しており、セッション中はオープンでアクティブなまま保たれるため、セッション ID を含まないことについて説明します。
  • 情報について
    RFC のサンプルを見つけることができる場所について説明します。
親トピック: TCP/IP ベース プロトコルのサポート


文字変換

Silk Performer によって記録された TCP/IP トラフィックのサンプルをいかに示します。

WebTcpipSendBin(hWeb0,
    "\h00000000007DD7D311D57CA2899392F0"        // ·····}×Ó·Õ|¢···ð
    "\hF0F14011D74CA2899392F0F0F140FFEF", 32);  // ðñ@·×L¢···ððñ@·ï
WebTcpipRecvExact(hWeb0, NULL, 645);

このようなスクリプトのカスタマイズは、最初に見ると困難に思えるかもしれません。サーバー レスポンス (例には表示されていませんが) は、クライアント リクエストとほとんど同じです。読み取り可能な文字がひとつも含まれていません。

実際、このようなスクリプトのカスタマイズは、かなり単純です。サーバーは IBM メインフレームで、使い慣れている ASCII 文字セットではなく、EBCDIC (Extended Binary Coded Decimal Interchange Code) 文字セットを使用します。これらの 2 つの文字セット間では単純に 1 対 1 にマッピングでき、Silk Performer 関数として実装できます。

読み取れない文字列を含むトラフィックのその他の要因

原因 | 結果
トラフィックで ASCII 以外の文字セットを使用している。 | 文字マッピング関数は Silk Performer BDL 言語で簡単に実装できます。
トラフィックがカスタム暗号化アルゴリズムで暗号化されている (たとえば、Silk Performer が自動的にサポートする SSL 以外のもの)。 | 暗号化/復号化ルーチンは、BDL で再実装するか、DLL や Silk Performer フレームワーク (Java Framework など) を使用して Silk Performer からアクセスできるようにします。
トラフィックに文字列が含まれず、数値だけがバイナリとして送信される。 | このような場合、文字列について考慮する必要はありません。
親トピック: スクリプトのカスタマイズ


サーバー レスポンスを動的に受信する

クライアント リクエストを完全に制御することは簡単に行えますが、適切なサーバー レスポンスを見込むことは困難です。最も重要なことは、仮想ユーザーはサーバー レスポンスが完了したときを知る必要があるということです。それによって、続くリクエストを処理することが可能になり、またサーバー レスポンスにエラーが含まれていたり、完了しない場合にエラーを発生させたりできます。

Silk Performer Recorder は、記録する TCP ベース プロトコルのセマンティクスを前もって知ることはできません。よって、すべてのサーバー レスポンスは次のように記録されます。
WebTcpipRecvExact(hWeb0, NULL, 26);

再生時に、仮想ユーザーはサーバーから正確に 26 バイト受信することを期待します。しして、スクリプトの次のステートメントを使って続行します。サーバーが 26 バイトを超えて送信する場合、そのバイトは次の WebTcpipRecvExact ステートメントによって受信されます (以降のすべてのスクリプト実行は予測不能になります)。サーバーが送信するバイトが少ない場合、WebTcpipRecvExact はタイムアウト エラーを報告します。

よって、レスポンスのバイト数がどのような状況でも変わらない場合にのみ、この行を変更せずに残すことができます。レスポンス長を保証できない場合、さまざまな長さのサーバー レスポンスを処理できるようにスクリプトをカスタマイズしなければなりません。

プロトコルのセマンティクスに基づいた適切なカスタマイズ3 つの共通のシナリオは、カスタマイズ処理を簡単にする Silk Performer API 関数によって反映されます。

ケース I：パケットに含まれるパケット長

リクエストとレスポンス データの長さは、パケットの定義済みの位置にエンコードされている場合があります (大抵は、パケット ヘッダー)。Silk Performer 関数 WebTcpipRecvProto とその同系の WebTcpipRecvProtoEx は、このような状況を適切に処理できます。これらは、レスポンス データのパケット長情報の位置と長さの定義を考慮します。たとえば、次の BDL コードの行は、レスポンス データの長さが、サーバー レスポンスの最初の 2 バイト (たとえば、位置 0) に 2 バイト シーケンスで埋め込まれている場合に使用できます。

WebTcpipRecvProto(hWeb, 0, 2, TCP_FLAG_INCLUDE_PROTO,
sData, sizeof(sData), nReceived);

ケース II：終了バイト シーケンス

このシナリオでは、データ パケットは一定のバイト シーケンスで終了します。対応する Silk Performer 関数は、WebTcpipRecvUntil です。たとえば、終了シーケンスが 2 バイト シーケンス 0xFF00 で定義されている場合、次の行は正しく処理されます。

WebTcpipRecvUntil(hWeb, sResp, sizeof(sResp), nRecv,
 "\hff00", 2);

ケース III：レスポンス パケット サイズの情報なし

これは、3 つのシナリオのうち一番困難です。関数を組み合わせて使用できます。 WebTcpipRecv を使用して、サーバーからの不明な長さのバッファを受信します。そして、WebTcpipSelect を使用して、提供した接続ハンドルに対するその後の WebTcpipRecv 操作がブロックされるか、直ちに成功するかどうかを確認します。

ルール ベースの記録

Silk Performer は、ルール ベースの記録 という高度な機能を提供します。.独自の TCP/IP プロトコルのセマンティクスを認識できるように、TCP/IP Recorder を設定できます。特に、Recorder は、先に議論した 2 つのシナリオに対して設定できます (パケットに含まれるパケット長、および終了バイト シーケンス)。

結果として、Recorder は正しい WebTcpipRecvProto(Ex) 関数と WebTcpipRecvUntil 関数を自動的に生成でき、さらにスクリプトのこの部分をカスタマイズする必要はありません。

記録ルールを設定する際に、記録ルールを XML でエンコードした設定ファイルを書き、ドキュメント フォルダ (プロジェクト固有のルール) または、パブリックかユーザーの RecordingRules ディレクトリに保存します (グローバル ルール).ます。記録ルール ファイルは、ファイル拡張子 .xrl を持ちます。

ルール ベースの記録は、TCP/IP および HTTP に対して存在しますが、このセクションで議論する対象の記録ルールは、TCP/IP に対するものだけです。

親トピック: スクリプトのカスタマイズ


バイナリ データの文字列操作

リクエストのパラメータ化

TCP セッションの記録に含まれるサンプル コードを示します。

WebTcpipSendBin(hWeb0, "\h0000104F0000005065746572FFFF",
14); // ···O···Peter

ここで、実際に送信され、パラメータ化されるべいビジネス データは、"Peter" = 0x50 65 74 65 72 ですが、ここでは機能しません。"\h0000104F000000" + sName + "\hFFFF" は期待通りの結果にはなりません。問題は、この文字列中の 0 (0x00) バイトによって起こされます。 Silk Performer (C 言語のような) では、0 バイトは文字列の終端として使用されるためです。よって、文字列中の最初の 0 バイトのあとのすべてのバイトがこのような文字列結合の実行中に無視されます。

0 バイトを含む可能性のあるバイナリ データの操作には、関数 SetMem を使用するべきです。以下で詳細を示す関数ライブラリを使用して、上記のリクエストは次の行に分割できます。

ResetRequestData();
AppendRequestData("\h0000104f000000", 7);
AppendRequestData(sName); // e.g., "Peter"
AppendRequestData("\hFFFF");
SendTcpipRequest(hSend);

関数ライブラリは、インクルード ファイル (*.bdh) を使ってインクルードします。リクエスト データとリクエスト データ長に対して 2 つのグローバル変数を使用します。関数 AppendRequestData は、リクエスト バッファに文字列を追加します (0 バイトを含むことができる)、そして SendTcpipRequest は、開いている TCP 接続を使用してリクエスト データを送信します。

インクルード ファイルの内容は、以下に示すように 3 つの関数で構成されています。

const
  BUFSIZE := 10000; // maximal size for request data
var
  // global variables for Request data contents and length
  gsRequestData : string(BUFSIZE);
  gnRequestLen  : number init 0;

dclfunc
  // start a new request string
  function ResetRequestData
  begin
    gnRequestLen := 0;
  end ResetRequestData;

  // append data (of length nLen) to the request string
  // if nLen=0, use strlen(sData) instead
  function AppendRequestData(sData: string;
                             nLen: number optional): number
  begin
    if nLen = 0 then nLen := strlen(sData); end;
    if nLen + gnRequestLen <= BUFSIZE then
      // append sData to gsRequestData
      SetMem(gsRequestData, gnRequestLen + 1, sData, nLen);
      // the request length has grown by nLen bytes:
      gnRequestLen := gnRequestLen + nLen;
    else
      RepMessage("Request buffer too small!",
                  SEVERITY_ERROR);
    end;
    AppendRequestData := gnRequestLen;
  end AppendRequestData;

  // Send the request buffer
  // (TCP-connection identified by hTcp)
  function SendTcpipRequest (hTcp: number): boolean
  begin
    SendTcpipRequest :=
      WebTcpipSendBin(hTcp, gsRequestData, gnRequestLen);
  end SendTcpipRequest;

レスポンス データの検索

レスポンス データに 0 バイトが含まれているとき、文字列を検索することが困難になります。それは、StrSearch および StrSearchDelimited 関数が、対象の文字列を最初の 0 バイトが見つかるまでしか検索を行わないためです。 0 バイトは文字列の終端として解釈されてしまいます。

Silk Performer では、関数 BinSearch　を提供しており、文字列に対して StrSearch が行うのと同じようにバイナリ データに対して機能します。次のようにして、レスポンス データの文字列 (または、バイナリ データのシーケンス) を検索できます。
nPos := BinSearch(sResponseData, nResponseLength, sSearch);

StrSearchDelimited 関数と同等なバイナリ版の関数はありません。.文字列の検索のみを行いたい場合 (0 バイトを含むバイナリ データとは対照的に)、回避策は、レスポンス データからすべての 0 バイトをマッピングによって (たとえば、0xFF バイトに) 最初に削除する関数を導入することです。

このような関数の単純なバージョンを以下に示します。sLeftVal, sRightVal および検索する文字列が文字列である場合にのみ機能します (つまり、0 バイトを含まない)。

function BinSearchDelimited(sSource   : string;
                            nSrcLength: number;
                            sLeftVal  : string;
                            sRightVal : string)
                           :string(BUFSIZE)
var
  i : number;
begin
  // eliminate zero bytes in the source string
  for i:=1 to nSrcLength do
    if ord(sSource[i]) = 0 then
      sSource[i] := chr(255);
    end;
  end;
  StrSearchDelimited(BinSearchDelimited, BUFSIZE, sSource,
                    sLeftVal, 1, sRightVal, 1,
                    STR_SEARCH_FIRST);
end BinSearchDelimited;
親トピック: スクリプトのカスタマイズ


セッション ID

多くの TCP/IP ベースのプロトコルは、サーバーとクライアント間の TCP/IP 接続に依存しており、セッション中はオープンでアクティブなまま保たれるため、セッション ID を含みません。よって、HTML のようなステートレス プロトコルに対するテスト スクリプトのカスタマイズ時に起こるような問題は存在しません。

もちろん、このルールに例外があり、セッション ID に注意する必要があるものもあります。TrueLog Explorer の TCP サポートはこの点で役立つことができます。

親トピック: スクリプトのカスタマイズ


情報について

標準プロトコルは、通常、RFC (Requests for Comments) で定義されます。これらのサンプルは、http://www.rfc-editor.org/rfcxx00.html で見つけることができます。[RFC854]、[RFC2355]、およびその他は、次のトピックに含まれるサンプルに関係があります。

親トピック: スクリプトのカスタマイズ


Telnet、TN3270e、カスタム プロトコル

次のトピックでは、前のトピックで議論した理論を特定の現実の例に適用します。

  • Telnet プロトコル
    Telnet の主な目的が、ターミナル デバイスのインターフェイスやターミナル志向プロセスを利用することであることについて説明します。
  • TN3270e プロトコル
    TN3270e プロトコルは、3270 ターミナルとプリンタ デバイスを Telnet を使用してエミュレートする手法であることを説明します。
  • カスタム TCP/IP ベース プロトコル
    完全なカスタム TCP/IP ベース プロトコルを使用するアプリケーションからの例を含みます。
親トピック: TCP/IP ベース プロトコルのサポート


Telnet プロトコル

RFC 854 の前書きで、Telnet プロトコル仕様は次のように定義されています。"TELNET プロトコルの目的は、汎用的で、双方向、8 ビットバイト志向の通信機器を提供することです。.主な目的は、ターミナル デバイスのインターフェイスやターミナル志向プロセスを利用することです。"

Telnet セッションは、2 つの主要部分から構成されます。

  • 接続が確立すると、セッションの詳細とオプションがクライアントとサーバー間でネゴシエートされます。
  • アプリケーションが起動します。この時点から、生成されたトラフィックは、ユーザー主導になります。

次の Silk Performer Telnet スクリプトは、VT220 ターミナル エミュレーションとの Telnet セッションから記録、カスタマイズされたスクリプトを含むプロジェクトからの抜粋です。クライアント (ターミナル エミュレーション ソフトウェア) は NT ベースで、サーバー アプリケーションは、Unix ボックスにあります。

パート I：接続を確立する

Telnet セッションの記録の最初の部分を示します。

WebTcpipConnect(hWeb0, "myserver", 23);

WebTcpipRecvExact(hWeb0, NULL, 3);
WebTcpipSendBin(hWeb0, "\hFFFC24", 3); // ·ü$

WebTcpipRecvExact(hWeb0, NULL, 3);
WebTcpipSendBin(hWeb0, "\hFFFB18", 3); // ·û·

WebTcpipRecvExact(hWeb0, NULL, 6);
WebTcpipSendBin(hWeb0, "\hFFFA18005654323230FFF0", 11);
                                   // ·ú··VT220·ð

WebTcpipRecvExact(hWeb0, NULL, 3);
WebTcpipSendBin(hWeb0, "\hFFFC20", 3); // ·ü

WebTcpipRecvExact(hWeb0, NULL, 60);

インライン コメントに 1 つだけ読み取れる文字列があります： VT220、これはターミナルの種類です。これは Telnet トラフィックのセマンティクスを理解する最初の手がかりとなります。つまり、サーバーとクライアントはターミナルの種類とさまざまなその他のセッションの設定をネゴシエートします。

スクリプト カスタマイズの観点では、変更する必要はここではありません。Silk Performer 仮想ユーザーは、ターミナル エミュレーション ソフトウェアがここで行っていることと完全に同じようにセッション設定をネゴシエートすべきです。

それでもなお、RFC 854 (Telnet プロトコル仕様) の情報と共に record.log ファイルを分析すると、この対話がどのように行われたかが明らかになります。ログの最初の部分を TELNET コードに解釈したものを次の表に示します。

サーバーからクライアント | クライアントからサーバー
FF FD 24(IAC DO ENVIRONMENT VARIABLES) |
 | FF FC 24(IAC WON'T ENVIRONMENT VARIABLES)
FF FD 18(IAC DO TERMINAL-TYPE) |
 | FF FB 18(IAC WILL TERMINAL-TYPE )
FF FA 18 01 FF F0(IAC SB TERMINAL-TYPE SEND IAC SE) |
 | FF FA 18 00 56 54 32 32 30 FF F0(IAC SB TERMINAL-TYPE IS "VT220" IAC SE)
FF FD 20(IAC DO TERMINAL-SPEED) |
 | FF FC 20(IAC WON'T TERMINAL-SPEED)
… | …

各コマンドは IAC (Interpret as Command: コマンドとして解釈) エスケープ文字 0xFF で始まります。サーバーとクライアントは、ターミナルの種類 (VT220) といくつかのほかのセッション設定に同意します。クライアントとサーバー間でネゴシエートできる Telnet セッション設定には、ターミナル速度、エコー、Go Ahead 抑止、ウィンドウ サイズ、リモート フロー制御などがあります。

パート II：ユーザー操作

スクリプトの 2 番目の部分は、ユーザー操作が含まれます。記録したセッションから生成されたスクリプトは次のようになります。

// …
    // login: send username
    WebTcpipSend(hWeb0, "t");
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipSend(hWeb0, "e");
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipSend(hWeb0, "s");
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipSend(hWeb0, "t");
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipSend(hWeb0, "u");
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipSend(hWeb0, "se");
    WebTcpipRecvExact(hWeb0, NULL, 2);
    WebTcpipSend(hWeb0, "r");
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipSend(hWeb0, "\r");
    WebTcpipRecvExact(hWeb0, NULL, 2);
    WebTcpipRecvExact(hWeb0, NULL, 10);
    // login: send password
    WebTcpipSend(hWeb0, "password\r");
    WebTcpipRecvExact(hWeb0, NULL, 2);
    WebTcpipRecvExact(hWeb0, NULL, 230);
    WebTcpipRecvExact(hWeb0, NULL, 47);
    WebTcpipRecvExact(hWeb0, NULL, 58);
    WebTcpipRecvExact(hWeb0, NULL, 40);
    WebTcpipRecvExact(hWeb0, NULL, 594);
    WebTcpipRecvExact(hWeb0, NULL, 340);
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipRecvExact(hWeb0, NULL, 188);
    WebTcpipRecvExact(hWeb0, NULL, 147);
    // Choose "1" from main menu and hit RETURN
    ThinkTime(7.0);
    WebTcpipSend(hWeb0, "1");
    WebTcpipRecvExact(hWeb0, NULL, 1);
    WebTcpipSend(hWeb0, "\r");
    WebTcpipRecvExact(hWeb0, NULL, 2);
    WebTcpipRecvExact(hWeb0, NULL, 7);
    WebTcpipRecvExact(hWeb0, NULL, 21);
    WebTcpipRecvExact(hWeb0, NULL, 691);
    // …

インライン コメントで確認できるように、スクリプトのこの部分には、ログイン処理 (アカウント名とパスワード)、続いて、メイン メニューからの項目の選択 (1 と <RETURN> キーを押すことによる)が含まれます。

記録したスクリプトをそのまま変更しない場合、ほとんど問題なく再生することができます。しかし、データのパラメータ化やレスポンスの検証などをスクリプトに適用して変更する必要があります。

各キーストロークは、単一バイト (ヘッダーやフッターを持たない) としてサーバーに送信されます。ログ ファイルを見ると、サーバーが同じバイトをエコーして送り返していることがわかります。

WebTcpipSend(hWeb0, "s");
WebTcpipRecvExact(hWeb0, NULL, 1);
TcpipServerToClient(#432, 1 bytes)
{
  s
}

記録したスクリプトを遡って見ると、ユーザー ログイン名の送信とは異なり、パスワードの送信では、一連のエコーが行われていないことがわかります。これは、パスワードはターミナル画面に表示しないためです。

通信は全二重であることに注意してください。これは、サーバーとクライアントの両方が同時に送信でき、お互いに待機する必要がないことを意味します。上記の例では、次の行でこの結果を確認できます：

WebTcpipSend(hWeb0, "se");
WebTcpipRecvExact(hWeb0, NULL, 2);

ここで、セッションの記録中にすばやく入力したため、エコー s は、e キーストロークがサーバーに送信された後に返ります。

一旦パスワードが送信されると、いくつかの WebTcpipRecvExact が上のコードに続きます。記録のログ ファイルでは、これらのステートメントの 1 つは次のようになります。

TcpipServerToClientBin(#432, 59 bytes)
{
  00000000 [8;19H·[;7m+---  1B 5B 38 3B 31 39 48 1B 5B 3B 37 6D 2B 2D 2D 2D
  00000010 ---Hinweis: Kein 2D 2D 2D 48 69 6E 77 65 69 73 3A 20 4B 65 69 6E
  00000020 Kunde gefunden-  20 4B 75 6E 64 65 20 67 65 66 75 6E 64 65 6E 2D
  00000030 ------+·[m·      2D 2D 2D 2D 2D 2D 2B 1B 5B 6D 0A
}

サーバー レスポンスには、テキスト位置や書式などのメタ情報とプレーン テキストが含まれます (ドイツ語の "Hinweis:Kein Kunde gefunden" は、"メッセージ：顧客が見つかりません" を意味します)。

この Telnet の例では、サーバー レスポンスが完了したことを特定することは困難です。まず、パケット長がレスポンス データに含まれていません (ケース I)。次に、終了バイト シーケンスがありません (ケース II)。よって、この例はケース III を表します：「サーバー レスポンスを動的に受信する」セクションからレスポンスのパケット サイズについての情報がありません。

注: 他の Telnet ベースのプロジェクトでは、サーバー レスポンス データに終端文字列があることもあります (たとえば、コマンド プロンプト文字など)。これはテスト対象アプリケーションに完全に依存します。

この問題を一般的に解決するには、長さ未指定の受信サーバー レスポンスを受け付ける TelnetReceive-Response 関数を書くことです。うーぷは、クライアントが新しいレスポンス パケットを指定した秒数以上待機するときに終了します。対応する関数コードは、このセクションの後で示します。

カスタマイズ後のスクリプトの同じ部分を見て見ると、構造がより明らかで、サーバー レスポンスが新しい関数によって処理されています。各キー ストロークが単一のパケットとして送信されるのとは対照的に、完全な文字列をサーバーに送信できることに注意してください。結果的に、各エコー文字を個々に待機する必要はなくなります。これは、Telnet プロトコルが全二重であるため、完全なリクエストを送信した後に、非同期に読み込むことができるためです。

// Login: Send Username
WebTcpipSend(hWeb0, "testuser\r");
TelnetReceiveResponse(hWeb0, 1.0, "Login: Username");

// Login: Send Password
WebTcpipSend(hWeb0, "password\r");
TelnetReceiveResponse(hWeb0, 5.0, "Login: Passwort");

// Choose "1" from main menu and hit RETURN
WebTcpipSend(hWeb0, "1\r");
TelnetReceiveResponse(hWeb0, 5.0, "Choose 1 from menu");

TelnetReceiveResponse 関数によって、適当な期間、受信サーバー データを待機する必要がなくなります。この関数は 3 つのパラメータを取ります。

hWeb0：開かれている TCP/IP 接続のハンドル

fTimeout：サーバー レスポンスが完了したことを特定する方法の定義fTimeout 秒後に、サーバー レスポンスがこれ以上利用可能でない場合、関数は戻ります。

sAction：この文字列は、カスタム タイマーの名前に使用され、ログやデバッグ目的にも使用されます。

例

function TelnetReceiveResponse(hWeb0: number;
                               fTimeout: float;
                               sAction: string): number
var
  sData:      string(4096);
  nRecv:      number;
  nRecvSum:   number;
  fTime:      float;

begin
  gsResponse := "";
  nRecvSum   := 0;

  MeasureStart(sAction);

  while WebTcpipSelect(hWeb0, fTimeout) do
    if NOT WebTcpipRecv(hWeb0, sData, sizeof(sData), nRecv)
    then
      exit;
    end;
    if nRecv = 0 then
      exit;
    end;
    SetMem(gsResponse, nRecvSum + 1, sData, nRecv);
    nRecvSum   := nRecvSum + nRecv;
  end;

  MeasureStop(sAction);
  MeasureGet(sAction, MEASURE_TIMER_RESPONSETIME,
             MEASURE_KIND_LAST, fTime);

  if fTime > fTimeout then
    fTime := fTime - fTimeout;
  end;
  MeasureIncFloat("RespTime: " + sAction, fTime, "sec",
                  MEASURE_USAGE_TIMER);

  TelnetReceiveResponse := nRecvSum;

end TelnetReceiveResponse;

関数は次のように機能します。サーバー レスポンスが fTimeout 秒内で読み込み可能になるまで待機します (WebTcpipSelect)。サーバー レスポンスが利用可能になるとすぐに受信し、グローバル文字列変数 gsResponse に追加されます。サーバー レスポンスが空になったとき、タイムアウト値を超えたとき、またはWebTcpipRecv が何かの理由で失敗した場合に、ループは終了します。

Telnet サーバーがよく文字の行を送信し、数秒間何もせずに、突然さらに数行送ってくることがあるため、このループ構造は必要です。

これらの時間の測定値を見る際に、いくつかの注意が必要です。タイムアウトの本質として、時間の測定値には、fTimeout 秒のうちの最終的なタイムアウト時間が通常含まれるためです。これは、真の時間を測定するためには、測定時間から減算する必要があることを意味します。この訂正した時間の測定値は、"RespTime: " + sAction という名前のカスタム測定値として利用可能です。

親トピック: Telnet、TN3270e、カスタム プロトコル


TN3270e プロトコル

TN3270e プロトコルは、3270 ターミナルとプリンタ デバイスを Telnet を使用してエミュレートする手法です。Rumba® や Hummingbird の HostExplorer® fなどのターミナル エミュレーション ソフトウェアによってメインフレームに直接接続するために使用されます。

Telnet と似て、典型的な TN3270e セッションは 2 つの主要な部分から構成されます。

  • 接続が確立すると、セッションの詳細とオプションネゴシエートされます。
  • アプリケーションを開始し、その時点から、生成されたトラフィックは、ユーザー主導になります。

パート I：接続を確立する

TN3270e セッションの典型的な記録したスクリプトの最初の部分は次のようになります。

WebTcpipConnect(hWeb0, "10.19.111.201", 7230);
WebTcpipRecvExact(hWeb0, NULL, 3);
WebTcpipSendBin(hWeb0, "\hFFFB28", 3);    // ·û(
WebTcpipRecvExact(hWeb0, NULL, 7);
WebTcpipSendBin(hWeb0,
  "\hFFFA28020749424D2D333237382D342D"
    // ·ú(··IBM-3278-4-
  "\h45FFF0", 19);                        // E·ð
WebTcpipRecvExact(hWeb0, NULL, 28);
WebTcpipSendBin(hWeb0, "\hFFFA2803070004FFF0", 9);
  // ·ú(·····ð
WebTcpipRecvExact(hWeb0, NULL, 9);
WebTcpipRecvExact(hWeb0, NULL, 347);

これは、前のセクションで紹介した Telnet セッションの最初の部分と似ています。これは、TN3270e プロトコルが Telnet プロトコルをベースにしているためです。ここれでも、変更する必要はありません。これはステートフルな接続志向プロトコルであるため、セッション処理は問題になりません。

セッションの最初の部分からのトラフィックを TELNET コードに解釈したものを次の表に示します。

サーバーからクライアント | クライアントからサーバー
FF FD 28 (IAC DO TN3270E) |
 | FF FB 28 (IAC WILL TN3270E)
FF FA 28 08 02 FF F0 (IAC SB TN3270E SEND DEVICE-TYPE IAC SE) |
 | FF FA 28 02 07 49 42 4D 2D 33 32 37 38 2D 34 2D 45 FF F0 (IAC SB TN3270E DEVICE-TYPE REQUEST "IBM-3278-4-E" IAC SE)
FF FA 28 02 04 49 42 4D 2D 33 32 37 38 2D 34 2D 45 01 54 39 35 49 54 51 4D 55 FF F0 (IAC SB TN3270E DEVICE-TYPE IS "IBM-3278-4-E" CONNECT "T95ITQMU" IAC SE) |
 | FF FA 28 03 07 00 04 FF F0 (IAC SB TN3270E FUNCTIONS REQUEST [BIND-IMAGE SYSREQ] IAC SE)
FF FA 28 03 04 00 04 FF F0 (IAC SB TN3270E FUNCTIONS IS [BIND-IMAGE SYSREQ] IAC SE) |

簡単にまとめると、サーバーとクライアントは、プロトコル、デバイスの種類 (IBM-3278-4-E)、および、どのプロトコルの機能を使用するかどうかに同意します。ターミナル名 (T95ITQMU) は、クライアントではなく、サーバーによって割り当てられることにご注意ください。これは、サーバー システムがクライアント IP アドレスからターミナル名へのマッピング処理を行うデータベースを保持しているためです。

パート II：ユーザー操作

スクリプトの 2 番目の部分は、ユーザー操作が含まれます。次のリクエスト-レスポンス ペアの例は、ユーザーがアカウント番号 (238729) をテキスト フィールドに入力し、RETURN キーを打つやり取りを表します。

WebTcpipSendBin(hWeb0,
  "\h00000000007DC6C61140C4F311C640F2"
     // ·····}ÆÆ·@Äó·Æ@ò
  "\hF3F8F7F2F9FFEF", 23);               // óø÷òù·ï
WebTcpipRecvExact(hWeb0, NULL, 199);

トラフィックが EBCDIC (ASCII ではなく) でエンコードされていることがわかり、アカウント番号は EBCDIC コード表を使用したリクエスト文字列見つけることができます： 238729 は、EBCDIC のバイナリ バイト シーケンス 0xF2 F3 F8 F7 F2 F9 として表されます。これはカスタマイズに関係する部分で、残りはそのまま残る可能性があります。

このメッセージのほかの部分の詳細は次のようになります。最初の 5 バイトは、TN3270e メッセージ ヘッダー (RFC 2355) を表します。

フィールド | 長さ | 例での値
データ型 | 1 バイト | 0x00 | 3270-DATA
リクエスト フラグ | 1 バイト | 0x00 | ERR-COND-CLEARED
レスポンス フラグ | 1 バイト | 0x00 | NO-RESPONSE
シーケンス番号 | 2 バイト | 0x0000 | シーケンス番号は使用される場合と、そうでない場合があります。この場合は、使用されていません。

各クライアント リクエストは、2 バイト シーケンス (0xFF EF) で終了します。

リクエスト データの残りの部分 (この例では、#6 - #21 バイト) は、画面位置、キーコード、およびテキストを含むアプリケーション データです。

サーバー　レスポンスは、記録セッションの対応するログ、または TrueLog ファイルで解析できます。この例では、レスポンスはリクエスト データと同様に、5 つの 0 バイト (0x00) で始まり、0xFF EF で終了する 199 バイトのデータ ブロックです。その間のデータの内容は、リクエスト データと同様に、カーソル位置、書式、およびテキスト (EBCDIC でエンコード) です。

関数ライブラリを使用してこれらを抽出する簡単なスクリプトのカスタマイズは、次のようになります。

ResetRequestData();
AppendRequestData("\h00000000007DC6C61140C4F311C640",
                15);
AppendRequestData(ASC2EBCDIC(sAccountNr) + "\hFFEF");
SendTcpipRequest(hWeb0);
WebTcpipRecvUntil(hWeb, sResp, sizeof(sResp), nRecv,
                  "\hFFEF", 2);

ここで、文字列変数 sAccountNr は、アカウント番号 (238729 が記録中にしようされました) に対して導入されました。ASCII と EBCDIC 間での変換を行う関数 ASC2EBCDIC は、つぎのセクションで説明します。

最後に、柔軟性の無い WebTcpipRecvExact が WebTcpipRecvUntil で置き換えられました。 終了バイト シーケンスが不明なため、ここでは適切な置換です。レスポンス データは、文字列変数 sResp に格納され、受信したバイト数は nRecv に保持されます。

ログおよび検証目的で、サーバー レスポンスは EBCDIC から ASCII に変換されます。例：

Writeln("Response: " + EBCDIC2ASC(sResp, nRecv));

必要に応じて、単一のレスポンス データ (続くリクエストのための入力として必要な新しい ID など) を、StrSearchDelimited 関数を使用してこのレスポンスから抽出することができます。

さらにカスタマイズ ステップを進めると、上記スクリプトの WebTcpipRecvUntil 呼び出しを、次のサーバー レスポンスで必要なすべてのアクションをカプセル化する MyWebTcpipRecv 関数で置き換えることが推奨されます。

  • 適切な終了バイト シーケンスで WebTcpipRecvUntil を呼び出す
  • レスポンスを EBCDIC から ASCII に変換する
  • レスポンスを出力ファイルに記録する (ASCII で)
  • 共通のエラー メッセージを検索して、レスポンスの汎用的なエラー チェックを行う
  • さらに検証やデータ抽出を行うために、レスポンス データを戻り値またはグローバル 変数として利用可能にする

Silk Performer スクリプトで、記録セッションの WebTcpipRecvExact 関数呼び出しを置換して、この新しい関数の呼び出しで各クライアント リクエストは続けられるべきです。

  • EBCDIC から ANSI 文字コードへの変換
    EBCDIC 文字セットから ASCII へサーバー レスポンスを変換する変換ルーチンを実装する方法について説明します。
  • 「キープ アライブ」機構における問題
    TN3270e トラフィックの記録から得られるテスト スクリプト シーケンスを調べます。
  • IP スプーフィング
    仮想ユーザーが並列にこのようなスクリプトの再生を正しく行うために、各ユーザーはユニークな IP アドレスを使用しなければならないことについて説明します。
  • 記録ルール設定ファイル
    Silk Performer Recorder が、記録ルール設定ファイルを使用して自動的に TN3270e プロトコルに対して正しい WebTcpipRecvUntil 呼び出しを生成するように設定できることについて説明します。
親トピック: Telnet、TN3270e、カスタム プロトコル


EBCDIC から ANSI 文字コードへの変換

EBCDIC (Extended Binary Coded Decimal Interchange Code) は、パーソナル コンピュータ以外のすべての IBM コンピュータで使用される英字データです。EBCDIC 文字セットから ASCII へサーバー レスポンスを変換する変換ルーチンは、簡単に実装できます。

関数 EBCDIC2ASC は、EBCDIC_2_ASCII という配列によって定義されたコード マップを使用します。これは、各 EBCDIC 文字をその対応する ASCII 文字にマップするものです。関数 ASC2EBCDIC は、ASCII から EBCDIC へクライアント リクエストを変換するために必要で、同じような方法で機能します。

var
  asEBCDIC_2_ASCII : array[256] of string(1) INIT
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", "a", "b", "c", "d", "e", "f", "g", "h", "i", " ", " ", " ", " ", " ", " ",
" ", "j", "k", "l", "m", "n", "o", "p", "q", "r", " ", " ", " ", " ", " ", " ",
" ", "~", "s", "t", "u", "v", "w", "x", "y", "z", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", "A", "B", "C", "D", "E", "F", "G", "H", "I", " ", " ", " ", " ", " ", " ",
" ", "J", "K", "L", "M", "N", "O", "P", "Q", "R", " ", " ", " ", " ", " ", " ",
" ", " ", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", " ", " ", " ", " ", " ",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " ", " ", " ", " ", " ", " ";

function EBCDIC2ASC(pEBCDIC: string; pMaxLen: number optional)
  var
    i: number;
  begin
  //
  if pMaxLen = 0 then
     pMaxLen := Strlen(pEBCDIC);
  // writeln("length of string : " + string(pMaxLen));
  end;
  //
  // writeln("EBCDIC STRING " + pEBCDIC);
  //
  for i := 1 to pMaxLen do
  //
  //writeln("Ordinal Value:" + String(ord(pEBCDIC[i])));
  //write("Value From Array:" + asASCII_2_EBCDIC[ord(pEBCDIC[i]) + 1]);
    write(asEBCDIC_2_ASCII[ord(pEBCDIC[i]) + 1]);
  //writeln;
  //
  end;
    writeln;
  end EBCDIC2ASC;

以下の表は、2780/3780 プロトコル コード マップ ([EBCDIC_CTI] から抜粋) の標準 EBCDIC 表です。たとえば、EBCDIC バイト 0x83 をデコードするには、行 8、列 3 を選択します。0x83 は、ASCII 文字 c にマップされることがわかるでしょう。

[EBCDIC_UNI] は、UTF-EBCDIC - EBCDIC Friendly Unicode (or UCS) Transformation Format の仕様を表すリファレンスです。

親トピック: TN3270e プロトコル


「キープ アライブ」機構における問題

次のテスト スクリプト シーケンスは、TN3270e トラフィックの記録から得られたものです。

WebTcpipRecvExact(hWeb0, NULL, 3);
WebTcpipSendBin(hWeb0, "\hFFFB06", 3);  // IAC WILL TIMING-MARK
WebTcpipRecvExact(hWeb0, NULL, 3);
WebTcpipSendBin(hWeb0, "\hFFFC06", 3);  // IAC WON'T TIMING-MARK

この例では、ある一定期間の間クライアントが非アクティブであるときに、サーバーは 3 バイト コード (上記コードの最初の行) を使ってクライアントに確認を送信します。クライアントは、自身の 3 バイト シーケンスを使用して応答します。このような「ピンポン」活動は、サーバーによってはじめられ、クライアントがまだアクティブであるかどうかを検出するための制御機構として使用できます。

これらの行は、予測できないまたは再現できないため、再生時に問題を起こします。このような状況を解決するために、Silk Performer スクリプトに適切な知能を組み込むのは非常に困難な作業になるため、単にこの機能をサーバー上で無効化します。

RFC 860 (Telnet タイミング マーク オプション) の基礎知識：

「以前に送信されたデータが完全に処理され、印刷され、破棄され、または捨てられたかことを確実にすることは、TELNET 接続の片端のユーザーまたはプロセスにとって時には有効になります。このオプションはこれを行うための機構を提供します。さらに、オプション リクエスト (DO TIMING-MARK) が拒否されたとしても (WON'T TIMING-MARK により)、リクエスト送信者は、拒否者がすべての前のデータを受信したことが少なくとも保障されます (処理されなかったとしても)。」

親トピック: TN3270e プロトコル


IP スプーフィング

仮想ユーザーが並列にこのようなスクリプトの再生を正しく行うために、各ユーザーはユニークな IP アドレスを使用しなければなりません。

Silk Performer の 設定 > アクティブ プロファイル > インターネット > 最適化 で クライアント IP アドレスの多重化 オプションを有効化し、各仮想ユーザーがユニークな IP アドレスを持つことができるように (IP スプーフィング)、Silk Performer エージェントに十分な IP アドレスを構成します。IP アドレスは、ツール > System Configuration Manager > IP Address Manager で、Silk Performer System Configuration Manager を使用して構成することもできます。

親トピック: TN3270e プロトコル


記録ルール設定ファイル

Silk Performer Recorder は、記録ルール設定ファイルを使用して自動的に TN3270e プロトコルに対して正しい WebTcpipRecvUntil 呼び出しを生成するように設定できます。

2 つの異なるルールを指定する必要があります： セッション パラメータがネゴシエートされるセッションの最初のパートでは、終了シーケンスとして 0xFF F0 が使用されますが、セッションの 3270-DATA パートでは、終了シーケンスは 0xFF EF が使用されます。

これらの 2 つのパートは、レスポンス データの最初のバイトを確認して区別できます。最初のパートでは、0xFF であり (Telnet コード IAC - "Interpret as Command")、2 番目のパートでは、0x00 となります (コード 3270-DATA、上記の TN3270e レスポンス ヘッダと比較)。

最終的な記録ルール XML ファイルは次のようになります。

<RecordingRuleSet>
  <TcpRuleRecvUntil>
    <Name>Telnet session start</Name>
    <Identify>
      <TermData>&#xFF;&#xF0;</TermData>
      <IgnoreWhiteSpaces>false</IgnoreWhiteSpaces>
    </Identify>
    <Conditions>
      <CompareData>
        <Data>&#xFF;</Data>
        <ApplyTo>Left</ApplyTo>
        <Offset>0</Offset>
      </CompareData>
    </Conditions>
  </TcpRuleRecvUntil>
  <TcpRuleRecvUntil>
    <Name>3270-DATA</Name>
    <Identify>
      <TermData>&#xFF;&#xEF;</TermData>
      <IgnoreWhiteSpaces>false</IgnoreWhiteSpaces>
    </Identify>
    <Conditions>
      <CompareData>
        <Data>&#x00;</Data>
        <ApplyTo>Left</ApplyTo>
        <Offset>0</Offset>
      </CompareData>
    </Conditions>
  </TcpRuleRecvUntil>
</RecordingRuleSet>
親トピック: TN3270e プロトコル


カスタム TCP/IP ベース プロトコル

次の例は、完全なカスタム TCP/IP ベース プロトコルを使用するアプリケーションからのものです。このプロトコルで、クライアント リクエストとサーバー レスポンス データの両方が、固定長フィールドで構成される事前定義メッセージのテレグラム構造のセットに従います。いくつかのフィールドはバイナリであり (よって、0 バイトの可能性があります),いくつかのフィールドは文字列型になります。

記録したトラフィックからの典型的なリクエスト/レスポンス ペアを示します：

WebTcpipConnect(hWeb0, "10.9.96.81", 3311);
WebTcpipSendBin(hWeb0,
"\h00000280000000000000000000000000" // ················
"\h000100000000000000004F4B36302020" // ··········OK60
...
"\h303030302B3030303030303030303030" // 0000+00000000000
"\h30303030000000000000000000000000" // 0000············
, 640);
WebTcpipRecvExact(hWeb0, NULL, 80);
WebTcpipShutdown(hWeb0);

記録ログからのサーバー レスポンスを示します。上記のスクリプトで、WebTcpipRecvExact 関数の 3 番目の引数を元に、80 バイトが含まれていることが既にわかっています。

00 00 00 00  ···P············  00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 10  ··········OK60    00 01 00 00 00 00 00 00 00 00 4F 4B 36 30 20 20
00 00 00 20    ··U60OKS1 SILK  20 20 00 00 55 36 30 4F 4B 53 31 20 53 49 4C 4B
00 00 00 30  01  ············  30 31 20 20 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 40  ················  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
注: 最初の 4 バイト (0x00 00 00 50) は、4 バイト整数を表しており、10 進数値 80 (5 * 16 = 80) になります。パケット全体の長さは 80 バイトであり、つまり、最初の 4 バイトは「パケット サイズ」変数に含まれることに注意してください。利用可能な場合、テスト対象カスタム アプリケーションに関するプロトコル ドキュメントを参照してください。そうでない場合、このようなプロトコルの動作を自分で発見するために実験しなければなりません。
注: クライアント リクエスト テレグラムには同じ情報が含まれます。最初の 4 バイトは、0x00 00 02 80　であり、2*256 + 8*16 = 640 と同等です。これはサーバーに送信するバイト数です。

カスタマイズ後のスクリプトを以下に示します。次にご注意ください。

  • MeasureStart/MeasureStop 関数の追加したペアは、リクエストの時間を測定するために追加されています。
  • リクエストはパラメータ化のため、関数ライブラリを使用していくつかに分割されています。
  • WebTcpipRecvExact 関数は、WebTcpipRecvProto の呼び出しで置き換えられています。

結果を以下に示します。

ResetRequestData();
AppendRequestData("\h00000280000000000000000000000000"
                 "\h00010000000000000000", 26);
AppendRequestData("OK60    ");
AppendRequestData("\h0000", 2);
AppendRequestData(sUser + sPassword);
// ... (some more lines not displayed here)

MeasureStart("Write Journal");
WebTcpipConnect(hWeb0, "10.9.96.81", 3311);
SendTcpipRequest(hWeb0);
WebTcpipRecvProto(hWeb0, 0, 4, TCP_FLAG_INCLUDE_PROTO,
               sResponse, sizeof(sResponse), nReceived);
// ... (response verification not displayed here)
WebTcpipShutdown(hWeb0);
MeasureStop("Write Journal");

記録ルール設定ファイル

次の記録ルール XML ファイルは、Silk Performer Rcorder を、WebTcpipRecvExact の場所に正しい WebTcpipRecvProto 呼び出しを生成するように設定します。Identify ノードの設定は、上記のスクリプトで WebTcpipRecvProto の引数にマップします。

<RecordingRuleSet>
  <TcpRuleRecvProto>
    <Name>My custom TCP protocol</Name>
    <Identify>
      <LengthOffset>0</LengthOffset>
      <LengthLen>4</LengthLen>
      <OptionFlags>ProtoIncluded</OptionFlags>
    </Identify>
  </TcpRuleRecvProto>
</RecordingRuleSet>
親トピック: Telnet、TN3270e、カスタム プロトコル


記録の設定

Silk Performer は、TCP/IP ベースのプロトコル トラフィックの記録に対して 2 つの機構を提供します。このようなアプリケーションを SOCKS 化 することは、一般的に受け入れられているアプローチです。しかし、TCP プロキシ Recorder を使用することがよりよい解決策になるシナリオもいくつかあります。

  • TCP プロキシ メカニズムを使用すると、Silk Performer をクライアント アプリケーションと同じマシン上で実行する必要がなくなります。たとえば、クライアントとサーバーの両方が Unix アプリケーションである場合に機能します。単にそれぞれが、Windows 上の Silk Performer プロキシを使用して接続するように設定するだけです。
  • 数多くのクライアント アプリケーション プロセスがすべて同じサーバーじ接続しようとする場合があります。このような場合には、トラフィックを生成するすべてのプロセスに対して NT のタスク マネージャを検索するよりも、TCP プロキシをセットアップするほうが早い可能性があります。
  • TCP ポートを 1 つあるいは少しだけ記録で必要とするのであれば、設定は簡単です。
  • アプリケーションの「SOCKS化」
    サーバーに接続しているクライアント アプリケーション実行可能ファイルのパスがわかっている場合、そのアプリケーションの記録プロファイルをセットアップできることについて説明します。
  • TCP プロキシ Recorder
    クライアント アプリケーションが接続するサーバー名と TCP ポート番号をコントロールできる場合、TCP/IP プロキシ Recorder を使用できることについて説明します。
親トピック: TCP/IP ベース プロトコルのサポート


アプリケーションの「SOCKS化」

サーバーに接続しているクライアント アプリケーション実行可能ファイルのパスがわかっている場合、そのアプリケーションの記録プロファイルを、Silk Performer の 設定 > システム > Recorder > 記録プロファイル > 追加 でセットアップできます。

親トピック: 記録の設定


TCP プロキシ Recorder

もうひとつの解決策は、TCP/IP プロキシ Recorder を使用することです。前提条件として、クライアント アプリケーションが接続するサーバー名と TCP ポート番号をコントロールできる必要があります。通常、これらの設定は、レジストリまたは設定ファイルで見つけることができます。そして、トラフィックが確実に Silk Performer Recorder にルートされるように、Silk Performer とクライアント アプリケーションを設定します。

クライアントが、MYSERVER のポート 5012 に接続し、これらの設定を LOCALHOST のポート 49152 (または任意のほかの未使用 TCP ポート) にレジストリや適切な設定ファイルで変更するものと仮定します。Silk Performer で、設定 > システム > Recorder > プロキシ > 追加 を選択します。新しいプロキシを追加し、TCP プロキシのリッスン ポートを 49152 に、そしてリモート ホスト MYSERVER のポート 5012 に接続するように設定します。

この結果、次のようにシナリオは構成されます。

クライアント アプリケーションは、Recorder が実行しているときのパフォーマンスの違いに気づくことはありません。これは、クライアントが直接サーバーに接続するシナリオとは対照的です。

親トピック: 記録の設定


PeopleSoft の負荷テスト

この節では、PeopleSoft アプリケーションを負荷テストするために、どのように Silk Performer を使用するかについて説明します。PeopleSoft SilkEssential パッケージを使用して PeopleSoft スクリプトを記録して、現実的な仮想ユーザーのシミュレーションになるようにカスタマイズする方法について説明します。

  • PeopleSoft プロジェクトの種類を指定する
    PeopleSoft プロジェクトの種類をベースにしたプロジェクトを作成する方法について説明します。
  • スクリプトの作成
    PeopleSoft トランザクションに対してスクリプトの作成がどのように機能するかについて説明します。
  • アプリケーション レベルのエラー
    アプリケーション レベルのエラーを PeopleSoft が処理する方法について説明します。
  • パラメータ化
    スクリプト カスタマイズとランダム化を使用する方法について説明します。
親トピック: 特定のアプリケーションの種類に対する負荷テスト


PeopleSoft プロジェクトの種類を指定する

  1. Silk Performer ワークフロー バーの ここから開始する をクリックします。
    注: 別のプロジェクトが既に開いている場合に、メニュー バーから ファイル > プロジェクトの新規作成 を選択すると、現在開いているプロジェクトを閉じるように確認メッセージが表示されます。
    ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 テキスト ボックスに、プロジェクトの名前を入力します。
  3. オプションのプロジェクト説明を 説明 に入力します。
  4. 種類 メニュー ツリーから、 ERP/CRM > PeopleSoft を選択します。
  5. 次へ をクリックし、設定に基づいてプロジェクトを作成します。
親トピック: PeopleSoft の負荷テスト


スクリプトの作成

PeopleSoft トランザクションに対するスクリプトの作成はごく簡単です。記録したスクリプトは、修正することなく動作します。しかし、次のいくつかの標準的なカスタマイズ手順を記録後に実行することによって、記録したスクリプトの質を高めることができます。記録したスクリプトは、処理をすばやく簡単にするようにデザインされています。

  • 記録
    PeopleSoft ユーザー トランザクションを記録する方法について説明します。
  • スクリプトのカスタマイズ
    記録したスクリプトをカスタマイズし、より良くする方法について説明します。
親トピック: PeopleSoft の負荷テスト


記録

記録を開始する前に、PeopleSoft プロジェクトの種類をベースにプロジェクトが作成されていることを確認してください。単一の BDL トランザクションでユーザーのやり取りを記録します。トランザクションがサインイン処理で始まり、サインアウト処理で終了するようにします。PeopleSoft のような状態に強く依存した Web アプリケーションでは、ブラウザの [戻る] ボタンを使用すると問題が発生する可能性が高いので使用しないようにしてください。

PeopleSoft スクリプトは標準的な構造を持ちます。サインイン/サインアウト処理以外に、次の 2 種類の基本的なユーザーのやり取りが含まれます。
  • メニュー ツリーでの移動
  • 作業領域での作業
  • PeopleSoft API 関数のインクルード
    PeopleSoft API 関数を初期化して使用する方法について説明します。
  • ラッパー関数
    BDH ファイルで定義されている利用可能なラッパー関数を一覧します。
  • サインインとサインアウト
    記録したスクリプトをサイン処理で正しく開始して、サインアウト処理で終了する方法について説明します。
  • メニュー ツリーでの移動
    メニューツリーでの移動を記録する方法について説明します。
  • 作業領域でのやり取り
    作業領域でのやり取りを記録する方法について説明します。
親トピック: スクリプトの作成


PeopleSoft API 関数のインクルード

記録されたスクリプトには、PeopleSoft 固有の API 関数が含まれた BDH ファイル PeopleSoft8Api.bdh に対する use ステートメントが含まれています。初期化関数 PeopleSoftInit() も含まれており、TInit トランザクションで呼び出されます (以下の例を参照)。

これは、PeopleSoftSilkEssential パッケージのいくつかの BDH ファイルに含まれる PeopleSoft フレームワークを初期化します。また、PeopleSoft 固有のアプリケーション レベルのエラーを捕らえるためのグローバル検証ルールも有効化します。これは、[エラー時に TrueLog を生成する] オプションと一緒に使用すると特に有用です。

さらに、動的フォーム名の解析を行うために、グローバル解析ルールも有効化します。解析したフォーム名は、グローバル変数 gsFormMain で利用できます。

例：PeopleSoft API 関数の初期化

benchmark SilkPerformerRecorder

use "WebAPI.bdh"
use "PeopleSoftApi.bdh"

dcluser
  user
    VUser
  transactions
    TInit : begin;
    TMain : 1;

var
  // ...

dclrand

dcltrans
  transaction TInit
  begin
    WebSetBrowser(WEB_BROWSER_MSIE6);
    WebModifyHttpHeader("Accept-Language", "en-us");
    WebSetStandardHost("crm.ps.my.company.com");
    PeopleSoftInit();
    //GetLoginInfoPS("LoginPS.csv", gsUserId, gsPassword);
    //WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    //WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;
親トピック: 記録


ラッパー関数

BDH ファイルには、すべてのページ レベル API 関数に対するラッパー関数が定義されています。これらのラッパー関数は元の API 関数を呼びだし、さらに他のタスクを実行します。

次のラッパー関数が定義されています。

ラッパー関数 | ラップされた元の関数
WebPageUrlPS | WebPageUrl
WebPageLinkPS | WebPageLink
WebPageSubmitPS | WebPageSubmit
WebPageSubmitBinPS | WebPageSubmitBin
WebPageFormPS | WebPageForm
WebPageFileUploadPS | WebPageFileUpload
親トピック: 記録


サインインとサインアウト

以下の例に示すように、記録したスクリプトはサインイン処理で始まり、サインアウト処理で終わるべきです。BDH ファイルは、関数 HomepagePS、SignInPS、SignOutPS を定義し、レコーダーは記録します。

例：記録したサインインとサインアウト処理

var
  gsHomepageUrl : string init "http://standardhost/psp/ps/
?cmd=login";

transaction TMain
begin
  HomepagePS(gsHomepageUrl, "PeopleSoft 8 Sign-in");
  ThinkTime(6.0);
  SignInPS("login", LOGIN002, "EMPLOYEE"); // Form 1

  // more function calls ...
  SignOutPS(gsSignoutUrl, "PeopleSoft 8 Sign-in");
end TMain;

これらの関数呼び出しはカスタマイズする必要はありません。 SignInPS 関数はサインアウト URL を解析して gsSignoutUrl 変数に格納し、記録したスクリプトは SignOutPS 関数呼び出しでその変数を使用します。レコーダーは、カスタマイズしやすくするために、ホームページの URL を変数に格納します。

親トピック: 記録


メニュー ツリーでの移動

メニュー ツリーでの移動は、前の API 呼び出しの WebPageParseUrl 呼び出しからのカスタム ハイパーリンクを使用する WebPageLinkPS 呼び出しによって記録されます。

例：記録したメニュー ツリーでの移動

この処理を修正する必要はありません。

WebPageParseUrl("JavaScript Link in page EMPLOYEE",
                "DEFINITION\",\"", "\"",
                 WEB_FLAG_IGNORE_WHITE_SPACE);
WebPageLinkPS("Home", "EMPLOYEE"); // Link 1

WebPageLinkPS("JavaScript Link in page EMPLOYEE",
              "CR_PRODUCT_DEFINITION", 3);
親トピック: 記録


作業領域でのやり取り

作業領域でのユーザーのやり取りは、WebPageSubmitPS 呼び出しによって記録されます。フォームはフォーム フィールド属性 USE_HTML_VAL に依存するので、カスタマイズすることなく適切なコンテキスト管理が保障されます。

フォーム名は動的に変更できます。フォーム名は通常 main または win (PeopleSoft のバージョンによって異なる) ですが、サーバの負荷によって、main1、main2、win1、win2 のようになります。

このため、レコーダーはフォーム名ではなく番号でフォームを参照する WebPageSubmitPS(NULL, ...) 関数呼び出しを記録します。

しかし、BDH ファイルはスクリプトの実行中に動的にフォーム名を解析するグローバル解析を実装するため、現在のページの実際のフォーム名は常に gsFormMain グローバル変数で利用できます。

例：作業領域でのユーザーのやり取り

WebPageSubmitPS(NULL, MAIN005, "Product Definition", 4); // Form 4

上記の例では、ページで番号によって動的フォームを参照する WebPageSubmitPS 関数を示しています。

次の例では典型的な送信フォームを示します。USE_HTML_VAL 属性のため、セッションまたはステート管理のカスタマイズは必要ありません。必要な可能性のあるカスタマイズは、入力値のランダム化だけです。

例：送信フォーム

MAIN008:
"ICType"       := "" <USE_HTML_VAL> ,
               // hidden, unchanged, value: "Panel"
"ICElementNum" := "" <USE_HTML_VAL> ,
               // hidden, unchanged, value: "0"
"ICStateNum"   := "" <USE_HTML_VAL> ,
               // hidden, unchanged, value: "5"
"ICAction"     := "#ICSearch",
               // hidden, changed(!)
"ICXPos"       := "" <USE_HTML_VAL> ,
               // hidden, unchanged, value: "0"
"ICYPos"       := "" <USE_HTML_VAL> ,
               // hidden, unchanged, value: "0"
"ICFocus"      := "" <USE_HTML_VAL> ,
               // hidden, unchanged, value: ""
"ICChanged"    := "" <USE_HTML_VAL> ,
               // hidden, unchanged, value: "-1"
"RBF_PRD_DF_SRCH_SETID"      := "" <USE_HTML_VAL> ,
                             // unchanged, value: ""
"RBF_PRD_DF_SRCH_PRODUCT_ID" := "" <USE_HTML_VAL> ;
                             // unchanged, value: "NEXT"
親トピック: 記録


スクリプトのカスタマイズ

PeopleSoftSilkEssential パッケージには、いくつかのユーティリティ関数が含まれており、記録したスクリプトを手動で変更する際に使用して、スクリプトをより機能的にすることができます。このセクションでは、これらの付加的な作業について説明します。

  • 思考時間のカスタマイズ
    ThinkTimePS 関数を使用して思考時間をカスタマイズする方法について説明します。
  • ユニークな種によるランダム性
    スクリプト実行のランダム性を改善する方法について説明します。
  • タイマ名のカスタマイズ
    より簡単に結果分析を行うためにタイマ名をカスタマイズする方法を説明します。
  • 別のサーバーを対象にする
    別のサーバーを対象にするための 3 つのオプションについて説明します。
  • サーバー側トレースの有効化
    PeopleSoft が提供する詳細なサーバー側トレース機能を有効化する方法について説明します。
  • テーブル行選択のランダム化
    テーブルの項目をクリックしたときに返されるフォームをランダム化またはカスタマイズする方法について説明します。
親トピック: スクリプトの作成


思考時間のカスタマイズ

Silk Performer のレコーダは、記録中に発生する思考時間を記録します。しかし、これは必要ないこともあります。PeopleSoftApi.bdh ファイルには、ThinkTime API 関数の代わりになる ThinkTimePS という関数があります。
function ThinkTimePS( fTime           : float optional;
                      bForceThinkTime : boolean optional);

スクリプトをカスタマイズするには、メニューから 編集 をクリックして、置換 を選択します。置換 ダイアログ ボックスで、すべての ThinkTime 関数呼び出しを、ThinkTimePS 関数呼び出しで置き換えます。

ThinkTimePS 関数の動作は、bForceThinkTime パラメータの値によって変わります。bForceThinkTime に false が設定されている場合 (デフォルト値)、ThinkTimePS は fTime パラメータの値を無視して、ThinkTimePS プロジェクト属性の値を使って ThinkTime API 関数を呼び出します。動作は通常の思考時間に関連するプロファイル設定に従います (ストレス テスト、ランダムな思考時間、指数分布/一様分布、思考時間の制限など)。

bForceThinkTime に true が設定されている場合、ThinkTimePS は fTime パラメータおよび OPT_THINKTIME_EXACT オプションの値で ThinkTime API 関数を呼び出します。この場合、プロファイル設定やプロジェクト属性に関係なく、指定したとおりの思考時間の結果となります。

ThinkTimePS 関数の動作をカスタマイズするために利用できる 2 つのプロジェクト属性があります。メニューから プロジェクト をクリックして、プロジェクト属性 を選択すると、これらの属性を設定できます。
  • ThinkTimePS (float)：bForceThinkTime が false のときに ThinkTimePS が使用する思考時間の値。単位：秒、事前設定値：10.0
  • ForceThinkTime (boolean)：ThinkTimePS 関数の bForceThinkTime パラメータをグローバルに上書きできます。事前設定値： false
親トピック: スクリプトのカスタマイズ


ユニークな種によるランダム性

スクリプト実行のランダム性を改善するために、各仮想ユーザーに対する乱数生成にユニークな種を与えることができます。これは、UniquelySeedRandomness プロジェクト属性の値を true 変更することによって行えます。

親トピック: スクリプトのカスタマイズ


タイマ名のカスタマイズ

より簡単に結果分析を行うために、スクリプトでの出現順に並べ替えて、追加情報で修正したタイマ名を持つことが期待されています。これを行うために、ラッパー関数を使って追加情報で元のタイマ名を変更できます。

変更したタイマ名に次の項目の任意の組み合わせが含まれるようにプロジェクト属性を使用できす。
  • エージェント名
  • トランザクション名
  • モデム エミュレーション速度
  • 現在のトランザクションのページ カウンタ

WebPage*PS ラッパー関数は、内部のページ番号を記録して、このオプションがプロジェクト属性で選択されているときに、タイマ名の先頭に追加します。ページ番号は各トランザクションの終わりに自動的に 0 にリセットされます。ResetPageCount 関数を呼び出して、任意のタイミングでページ カウンタを手動でリセットできます。

IncPageCount 関数を呼び出すと、内部ページ カウンタを手動で増加させることもできます。if ステートメントのバランスが取れていない場合に、ページ カウンタを一致させるために有用です。

WebPage*PS ラッパー関数を使用して、ページ カウンタに特定の値を割り当てることもできます。元のラップされた関数にフレーム名が渡されるパラメータとしてこの値は渡されます。

注: ラッパー関数にフレーム名を渡すことはできません。この規則はレコーダによっても守られます。特別な値 PAGE_NUMBER_KEEP を渡すと、ページ カウンタを増加させずに現在のページ カウンタを再利用することができます。
親トピック: スクリプトのカスタマイズ


別のサーバーを対象にする

記録したスクリプトの TInit トランザクションには、WebSetStandardHost の呼び出しがあります。

例：記録した時の WebSetStandardHost の呼び出し

transaction TInit
begin
  // ...
  WebSetStandardHost("crm.ps.my.company.com");
  // ...
  PeopleSoftInit();
end TInit;
別のサーバーを対象にするための 3 つのオプションがあります。
  1. 記録した WebSetStandardHost 関数呼び出しを編集する。
  2. 記録した WebSetStandardHost 関数呼び出しを削除し、プロファイル設定で標準ホストを指定する。
  3. プロジェクト属性で別の standardhost を指定する。これらのプロジェクト属性は、PeopleSoftInit() 関数呼び出しで評価されるため、記録した WebSetStandardHost 関数呼び出しは上書きされます。
親トピック: スクリプトのカスタマイズ


サーバー側トレースの有効化

PeopleSoft は、個々のログイン セッションに対して詳細なサーバー側トレースを有効化するオプションを提供します。すべての仮想ユーザーに対してトレースが有効化されるため、スクリプトはトレースを有効化せずに記録されるべきです。

代わりに、以下の例に示すように、TInit トランザクションに EnableTracingPS 関数の呼び出しを挿入して仮想ユーザー ベースでサーバー側トレースを有効化できます。ログインに使用されるフォームをこの関数に渡す必要があります。重要なことは、トレースは個々の仮想ユーザーに対してのみ有効化されるべきであるということです。すべての仮想ユーザーに対してトレースを有効化すると、サーバー側に多大なオーバーヘッドがかかり、正しいテスト結果が得られなくなります。

1 仮想ユーザーに対するトレースの有効化

transaction TInit
begin
  // ...
  PeopleSoftInit();
  if GetUserId() = 1 then
     EnableTracingPS(LOGIN001);
  end;
end TInit;

dclform
  LOGIN001:
    "httpPort" := "" <USE_HTML_VAL> ,
    "timezoneOffset" := "-60",
    "userid" := gsUserId,
    "pwd" := gsPassword,
    "Submit" := "" <USE_HTML_VAL> ;

トレース オプションは、プロジェクト ツリー ビューの データ ファイル ノードにある Tracing.csv ファイルを編集して変更できます。

親トピック: スクリプトのカスタマイズ


テーブル行選択のランダム化

PeopleSoft のページには、検索結果の一覧などのテーブルが含まれることがあります。このようなテーブルの項目をクリックすると、ICAction フィールドが #ICRowX (ここで、X は選択した行を表す番号を表します) に設定されたフォームを返します。

例：テーブル項目の選択時に送信されたフォーム

dclform
  MAIN003:
    "ICType" := "" <USE_HTML_VAL> ,
    "ICElementNum" := "" <USE_HTML_VAL> ,
    "ICStateNum" := "" <USE_HTML_VAL> ,
       "ICAction" := "#ICRow9", // hidden, changed(!)
       "ICXPos" := "" <USE_HTML_VAL> ,
       "ICYPos" := "" <USE_HTML_VAL> ,
       "ICFocus" := "" <USE_HTML_VAL> ,
       "ICChanged" := "" <USE_HTML_VAL> ,
// ...

このようなフォームを正確にランダム化またはカスタマイズするには、テーブル行の数を決定する必要があります。

これを支援するために 4 つの関数があります。
  • GetMaxRowNr は、最大の有効な行番号を返します (たとえば、47 行あるテーブルでは、行番号は 0 ベースであるため、最大の有効な行番号は 46 になります)。現在のページにテーブルが含まれていない場合は、-1 を返します。
  • GetRowCount は、現在のページの行数を返します。現在のページにテーブルが含まれていない場合は、0 を返します。
  • GetRndRowStr は、有効なランダム行文字列を返します。
  • FindICRow(sStringToFind : string) : string は、指定したテキストを含む最初の行の行文字列を返します。

以下の例では、GetRndRowStr 関数を使用して、テーブルの項目の選択をランダム化しています。

例：テーブル項目の選択のランダム化

dclform
  MAIN003:
// ..
    "ICStateNum" := "" <USE_HTML_VAL> ,
    "ICAction" := GetRndRowStr(),
    "ICXPos" := "" <USE_HTML_VAL> ,
// ...
親トピック: スクリプトのカスタマイズ


アプリケーション レベルのエラー

PeopleSoft は、アプリケーション レベルのエラーを示すために HTTP レスポンスのステータス コードを使用しません。その代わりに、「200 Success」のステータス コードを持つ HTML を返します。その HTML にエラー メッセージが含まれていても同様です。

エラー メッセージには 2 つの種類があります。
  • HTML に埋め込まれたエラー メッセージ
  • JavaScript 関数 (Alert) のパラメータで、ダイアログ ボックスに表示されるエラー メッセージ

また、Alert 関数で表示されるメッセージすべてがエラー メッセージというわけではありません。「Record has been saved」などのように、単なる情報を示すメッセージもあります。

深刻なエラーが発生した場合、トランザクションを続行すべきではありません。

PeopleSoft SilkEssential パッケージを使用すると、記録したスクリプトは自動的にアプリケーション レベルのエラーを処理することができます。深刻なエラーが発生すると、深刻度 SEVERITY_TRANS_EXIT のエラーが起こされ、仮想ユーザーがサインアウトすることによって、そのトランザクションは正しく終了します。この機能のメリットを十分に享受するために、エラー時に TrueLog を生成する オプションを有効にすることを強く推奨します。

  • HTML のエラー メッセージのカスタマイズ
    特定のエラー メッセージのリストをカスタマイズする方法について説明します。
  • アラートのカスタマイズ
    アラートのカスタマイズ方法について説明します。
親トピック: PeopleSoft の負荷テスト


HTML のエラー メッセージのカスタマイズ

特定のエラー メッセージのリストは、AppErrors.csv および AlertSeverities.csv ファイルに含まれており、プロジェクト ツリー ビューの データ ファイル セクションのノードをダブルクリックして編集できます。これらのリストはコンサルティングの経験とユーザーから要求に基づいて作成されています。しかし、エラー メッセージが不足している場合や、エラー メッセージを追加したい場合は、これらのファイルをカスタマイズできます。

HTML のエラー メッセージのカスタマイズ

AppErrors.csv ファイルには、HTML レスポンスで発生するときに起こされるエラーを表すエラー メッセージが含まれます。1 つのエラー メッセージは、1 行に 3 列で表現されます。

  • Severity (深刻度)：起こされるエラーの深刻度を指定します。この列の値は、S、I、W、E、T で始まる必要があります (それぞれ、Success、Informational、Warning、Error、Transaction Exit を意味します)。
  • Data or Html (データまたは HTML)：HTTP レスポンス全体からエラー メッセージを検索するか (API 関数 WebVerifyData)、または可視の HTML コンテンツのみからエラー メッセージを検索するか (API 関数 WebVerifyHtml)、のどちらかを指定します。列の値は D または H で始まる必要があります。
  • Error String (エラー文字列)：エラー メッセージのテキスト。共通の部分文字列を持つエラー メッセージ群を処理したい場合は、Error String に共通の部分文字列を持つエントリを 1 つだけ入力すれば十分です。例：100 個の異なるエラー メッセージがあり、それらがすべて「Microsoft SQL error:」で始まるのであれば、Error String に「"Microsoft SQL error:」を指定したエントリを 1 つだけ指定します。

AppErrors.csv ファイルは、必要に応じて編集することができます。

親トピック: アプリケーション レベルのエラー


アラートのカスタマイズ

アラートは JavaScript 関数の Alert 呼び出しで実装されるポップアップ ウィンドウです。この関数は HTML ページの onload セクションから呼び出されます。

例：HTML レスポンスでの警告

<body·class='PSPAGE'··onload="
  processing_main(0,3000);
  setKeyEventHandler_main();
  self.scroll(0,0);
  setEventHandlers_main('ICFirstAnchor_main',
                       ·'ICLastAnchor_main',·false);
  setupTimeout();
alert(&#039;Highlighted·fields·are·required.·(15,30)
>

エラー検出メカニズムは、HTML レスポンスに含まれるすべてのアラートを検出し、深刻度 SEVERITY_TRANS_EXIT のエラーであるものとして扱います。他の深刻度である無視またはレポートされるべき既知のアラートは、AlertSeverities.csv ファイルに指定することができます。

各既知のアラート メッセージは、AlertSeverities.csv ファイルの一行で 2 列を使って表現します。
  • Severity (深刻度)：起こされるエラーの深刻度を指定します。この列の値は、N、S、I、W、E、T で始まる必要があります (それぞれ、None (=ignore)、Success、Informational、Warning、Error、Transaction Exit を意味します)。
  • Alert String (アラート文字列)：アラート文字列のテキスト (またはその一部)。

アラート メッセージは、gsAlertMsgPrefix グローバル変数の内容を先頭に付け足した実際のアラート テキストでレポートされます。この変数のデフォルト値は空の文字列ですが、レポートの必要に応じて、スクリプトの実行中にいつでも値を割り当てることができます。

親トピック: アプリケーション レベルのエラー


パラメータ化

レコーダーはスクリプトに現れるある文字列に対して変数を作成できます。これによってカスタマイズとランダム化がより簡単に行えます。

  • サインイン データ
    サインイン データをカスタマイズする方法について説明します。
  • 入力値
    入力値をランダム化する方法について説明します。
親トピック: PeopleSoft の負荷テスト


サインイン データ

サインインに使用するユーザー名とパスワードはスクリプトの上部に変数として作成されます。レコーダーは、TInit トランザクションの GetLoginInfoPS 関数への呼び出しをコメント化して記録します。GetLoginInfoPS 関数は、gsUserId と gsPassword 変数の値を LoginPS.csv ファイルから取り出します。このファイルは、プロジェクト ツリー ビューの データ ファイル セクションにあり、ダブルクリックして編集できます。

ログイン データのカスタマイズは、記録した GetLoginInfoPS 関数呼び出しのコメントをはずし、LoginPS.csv ファイルを実際の PeopleSoft アプリケーションで有効なユーザー アカウントで編集すれば終わりです。

例：変数として作成されたサインイン データ

var
  gsUserId : string init "Admin";
  gsPassword : string init "Secret";
  // ...

  transaction TInit
    begin
    // ...
    PeopleSoftInit();
    //GetLoginInfoPS("LoginPS.csv", gsUserId, gsPassword);
    // ...
  end TInit;

  transaction TMain
  begin

  // ...

    SignInPS("login", LOGIN001, "EMPLOYEE"); // Form 1

  // ...

  end TMain;

dclform

  // ...

  LOGIN001:
    "httpPort"       := "" <USE_HTML_VAL> ,
                     // hidden, unchanged, value: ""
    "timezoneOffset" := "-120",
                     // hidden, changed(!)
    "userid"         := gsUserId,
                     // changed, value: "Admin"
    "pwd"            := gsPassword,
                     // changed, value: "Secret"
    "Submit"         := "" <USE_HTML_VAL> ;
                     // unchanged, value: "Sign In"
親トピック: パラメータ化


入力値

アンダースコアで始まって終わる、または inp. で始まるフォーム フィールド値は、入力値として扱われます。レコーダーはこれらの値に対する変数をスクリプトの最初に生成するので、入力値をたやすくランダム化することができます。

例：入力値に対して作成された変数

var
  gsInput_NewProduct : string init "_New Product_";
  gsInput_inp_Customer : string init "inp.Customer";

  // ...

dclform

  // ...

  MAIN009:
    "ICType"          := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: "Panel"
    "ICElementNum"    := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: "0"
    "ICStateNum"      := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: "6"
    "ICAction"        := "#ICSave",
                      // hidden, changed(!)
    "ICXPos"          := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: "0"
    "ICYPos"          := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: "0"
    "ICFocus"         := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: ""
    "ICChanged"       := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: "0"
    "ICFind"          := "" <USE_HTML_VAL> ,
                      // hidden, unchanged, value: ""
    "PROD_ITEM_DESCR" := gsInput_NewProduct,
                      // changed, value: "_New Product_"
    "PROD_ITEM_EFF_STATUS" := "A",
                          // added
    "RBF_ARRA_WRK_PROD_ATTR_CATEGORY" := "",
                                      // added
    "PRD_KIT_ARR_FLG1" := "" <USE_HTML_VAL> ,
                       // unchanged, value: "S"
    "DESCR$0"         := "" <USE_HTML_VAL> ,
                      // unchanged, value: ""
    "RBF_ARRA_PRD_VW_DESCR$0" := "" <USE_HTML_VAL> ,
                              // unchanged, value: ""
    "RBF_PROD_ARGMT_RAISE_PCT$0" := "" <USE_HTML_VAL> ,
                                 // unchanged, value: ""
    "RBF_PROD_ARGMT_REDUCTION_PCT$0" := "" <USE_HTML_VAL> ,
                                     // unchanged, value: ""
親トピック: パラメータ化


HLS のサポート

HTTP ライブ ストリーミング (HLS) は、メディア ストリーム用の HTTP ベースの通信プロトコルです。HLS は、世界中に配信するビデオやオーディオに対して広く適用されてきました。Web ページに埋め込まれているのか、スタンドアロン ビデオ プレイヤーで再生されているのかに関係なく、Silk Performer は記録中に HLS トラフィックを自動的に検出し、再生中に HLS データを再生するビデオ プレイヤーをシミュレートします。

Silk Performer は、オンデマンドまたはライブ ストリーミングのシナリオで、オーディオおよびビデオ配布システムの負荷テストを行うために、BDL 関数として HlsInit と HlsPlay を提供します。

Silk Performer は、ストリームに対する総合的な統計情報と測定値を提供し、バンド幅の制約やサーバー上の問題による中断を確実に検出します。

親トピック: 特定のアプリケーションの種類に対する負荷テスト


特定の環境での負荷テスト

Silk Performer は、多様なコンピュータ環境でのテストをサポートします。

  • Silk Performer CloudBurst
    Silk Performer CloudBurst を紹介し、負荷テストがクラウドでどのように機能するか説明します。
  • Visual Studio でのパフォーマンス テストの開発
    Visual Studio 拡張機能を使用して Microsoft Visual Studio でパフォーマンス テストを開発する方法について説明します。
  • マルチバイトのサポート
    頻繁に使用される文字エンコード、世界の特定の地域で使用される文字のサブセット、およびマルチバイトのサポートについて定義します。
  • Silk Performer の CI 環境への統合
  • ネットワーク エミュレーション
    Silk Performer を使用してネットワークをエミュレートする方法を説明し、ネットワーク エミュレーション ドライバに関する重要な情報を提供します。
  • Windows Vista と Windows 7
    Silk Performer では Windows Vista と Windows 7 のマシンでユーザー アカウント制御 (UAC) をサポートしていることについて説明します。また、特定の状況で、管理者のアカウントでエージェント プロセスを起動する値についても説明します。
親トピック: Silk Performer Workbench 21.0


Silk Performer CloudBurst

  • 概要
    Silk Performer CloudBurstとは何か、どのように機能するのかを説明します。
  • CloudBurst での作業
    Cloud Agent Manager および、実行できるさまざまな CloudBurst の作業を扱う方法について説明します。
  • CloudBurst VPN
    VPN を構成して、セキュアな社内ネットワーク内のアプリケーションをテストする方法について説明します。
  • Micro Focus Credits
    Micro Focus Credits とは何か、および Micro Focus Credits がどのように計算されるかについて説明します。
親トピック: 特定の環境での負荷テスト


概要

Silk Performer CloudBurst は、テスト対象のシステムが、実際のパフォーマンス要件を満たしているかどうか確認するための使いやすく柔軟性に富んだアプローチを提供します。CloudBurst により、仮想インフラストラクチャ、仮想ユーザー、または必要に応じてこれら 2 つを組み合わせたものをレンタリングできます。

CloudBurst を使用すると、永続的なライセンスなしで負荷テストを実行できます。24 時間のテスト期間内に同時実行される仮想ユーザー数まで、ユーザー単位で課金されます。

CloudBurst 仮想インフラストラクチャは、複数の地域にまたがって配置できる、設定済みですぐに使用可能なクラウド エージェントの形式で使用できます。さらに、使用量に応じて課金される CloudBurst 仮想エージェントと、オンプレミス テスト インフラストラクチャにアクセス可能な (永続的な Silk Performer ライセンスを使用) 他のエージェントと組み合わせることもできます。

永続的な Silk Performer ライセンスが提供するユーザー数を超える仮想ユーザーが必要なワークロードのあるテストを実行する場合は、CloudBurst ライセンス を使用して追加の仮想ユーザーを配布し、その使用量に応じて課金されるようにできます。

  • CloudBurst インフラストラクチャ
    Silk Performer CloudBurst の背景にある基本概念について説明し、CloudBurst インフラストラクチャを概説します。
  • CloudBurst を使用する利点
    クラウド エージェントを使用した負荷テストの利点について説明します。
  • CloudBurst が提供するサービス
    CloudBurst が提供するサービスについて説明します。
親トピック: Silk Performer CloudBurst


CloudBurst インフラストラクチャ

クラウド コンピューティングおよび Silk Performer CloudBurst は、従来の負荷テストの可能性を広げます。Silk Performer CloudBurst では、クラウドにエージェントをデプロイし、エージェントが社内にあるのかクラウドにあるのかに関わらず、すべてのアプリケーションの負荷テストを行うことができます。さらに、CloudBurst VPN を使用して内部 (インターネットに公開されていない) アプリケーションをテストできます。

CloudBurst の背景にある基本概念を図で説明します。最初の図は、クラウドが Silk Performer エージェントのプラットフォームとして使用され、インターネットに公開されているアプリケーション (テスト対象システム) に対してテストを実行する方法について示しています。

クラウド ベースの負荷テスト インフラストラクチャ

2 番目の図は、ハイブリッド シナリオを示しています。クラウドにあるエージェントのほかに、ローカル イントラネットにある追加のローカル エージェントが使用されます。これは、さまざまな場所からテスト対象システムにアクセスするいくつかのエージェントをセットアップできることを示します。CloudBurst を使うことで、包括的なパフォーマンス データを収集できる広範囲な地域を定義できます。

さらに、このような複合セットアップにより最良のテスト結果を得ることができます。クラウド エージェントはインターネットからのエンド ユーザーの現実的なシュミレーション (および、パフォーマンス問題の検出の支援) を提供するのに対して、ローカル エージェントは従来のパフォーマンス テストに使用し、パフォーマンス問題やボトルネックの検出に役立ちます。

親トピック: 概要


CloudBurst を使用する利点

クラウド エージェントを使用した負荷テストの利点について説明します。
  • アベイラビリティ：クラウド エージェントは数分で利用可能になります。物理マシンのように設定や保守に時間をかける必要が無いため、時間を節約できます。
  • スケーラビリティ：クラウド エージェントの数はスケーラブルです。何百ものエージェントが必要であろうが、たった 2 つであろうが、必要に応じてその数を増減できます。デフォルトでは、Silk Performer は一定数のクラウド エージェントを提供します。さらに多くのクラウド エージェントが必要な場合は、サポートに連絡してください。
  • デプロイ：クラウド エージェントを容易にすばやくデプロイできます。世界中のさまざまな地域からクラウド エージェントを選択できます。
  • メンテナンス コスト：CloudBurst を使用するとメンテナンス コストを節約できます。支払いが発生するのは、クラウド エージェントが実際に実行している間だけです。
  • Cloud Agent Manager：すべてのクラウドに関連する設定は、Cloud Agent Manager を介して直感的に簡単に管理できます。
親トピック: 概要


CloudBurst が提供するサービス

Silk Performer CloudBurst を使用するには、Micro Focus Build Portal に登録し、営業担当者に連絡して Micro Focus Credits を購入する必要があります。Micro Focus Credits がユーザーのアカウントに追加されると、パフォーマンス テストを正常に実行するために必要な仮想インフラストラクチャと仮想ユーザーを購入するために使用できます。

Silk Performer CloudBurst では、プリペイド モデルに加え、Micro Focus Credits の使用量に応じて毎月請求される PAYG (pay-as-you-go) モデルを利用できます。

CloudBurst から仮想エージェントを起動するか、仮想ユーザー リソースを使用する前に、Silk Performer は、CloudBurst の口座から引き落としてよいかどうか確認します。

親トピック: 概要


CloudBurst での作業

  • Cloud Agent Manager
    クラウド エージェントの開始と停止、IP アドレスの予約と開放、CloudBurst VPN の設定など、Cloud Agent Manager の使用方法を説明します。
  • CloudBurst 接続要件
    コントローラ マシンがインターネットに接続する必要があることについて説明します。
  • クラウド エージェントから結果をダウンロードする
    クラウド エージェントから手動でダウンロードする方法について説明します。負荷テストの実行中や、クラウド エージェントから結果をダウンロードしている最中に接続が失われた場合に発生する問題について説明します。
  • クラウド エージェント用に Java を設定する
    Java 関連技術をクラウド エージェントで使用したい場合は、Java 実行環境 (JRE) へのパスを定義する必要があります。
親トピック: Silk Performer CloudBurst


Cloud Agent Manager

Cloud Agent Manager を開始するには、Silk Performer の ツール メニューをクリックして、Cloud Agent Manager をクリックします。その後、既存のアカウントでログインするか、またはアカウントを登録します。

Cloud Agent Manager は、すべての CloudBurst タスクを管理するための使いやすいツールです。次の機能が用意されています。
  • アドレスの予約：クラウド エージェントの IP アドレスを予約します。これによって、クラウド エージェントが同じ IP アドレスを保持し続けることができるようになるため、ファイアウォールに IP アドレス例外を指定するといった毎回繰り返さなければならない作業から開放されます。
    注: IP アドレスは、開放されるまで 24 時間予約し続けられます。
  • アドレスの開放：予約した IP アドレスを開放します。
  • エージェントの開始：負荷テストで使用するクラウド エージェントを開始します。エージェントの開始 ダイアログでは、地域ごとのエージェントの数の指定、および、そのエージェントのシャットダウン方法や時間を指定できます。
  • エージェントの停止：エージェントが不要になったときにエージェントを手動で停止します。クラウド エージェントの管理 ダイアログでは、エージェントが自動的にシャットダウンするように指定されている場合、その時間を確認することもできます。
  • VPN の構成：セキュアな社内ネットワーク内にあるマシンをテスト可能にするために、CloudBurst VPN を構成します。
  • 最新の情報に更新：起動したエージェントがクラウドで使用可能になるまでには、多少の時間がかかるため、表示データの更新は有用です。
  • ログアウト：ウィンドウの右下にログアウト ボタンがあります。

ウィンドウを閉じると、Cloud Agent Manager が終了します。ワークロードの設定 ダイアログ ボックス上の利用可能なエージェントのリストは自動的に更新されます。

親トピック: CloudBurst での作業


CloudBurst 接続要件

コントローラ

CloudBurst を使用するためには、以下のいずれかの方法によってコントローラ マシンをインターネットに接続する必要があります。
  • 直接接続
  • HTTP プロキシ (認証なし)
  • HTTP プロキシ (基本認証)
  • HTTP プロキシ (NTLM 認証)
  • HTTP プロキシ (Kerberos 認証)

プロキシ サーバーが存在する場合、サーバーでポート 443 への HTTP CONNECT メソッドが許可されている必要があります。

クラウド エージェント

クラウド エージェントは仮想イメージです。コントローラとクラウド エージェント間の通信は HTTPS 接続によって行われます。クラウド エージェントでは、無制限のアウトバウンド トラフィックが許可されます。インバウンド トラフィックは、ポート 443 と HTTPS プロトコルに制限されます。

親トピック: CloudBurst での作業


クラウド エージェントから結果をダウンロードする

負荷テストが完了すると、Silk Performer はクラウド エージェントからすべての結果を自動的にダウンロードします。ただし、クラウド エージェントとの接続が失われた場合は、次のような動作になります。

  • 負荷テストの実行中に接続が失われると、コントローラは負荷テストが完了したときの結果を取得しようとします。しかし、これらの結果は、残りの結果とマージされません。このような場合、Silk Performer は切断されたエージェントからの結果が結果フォルダにあることを示すメッセージを通知します。
  • ダウンロード処理中に接続が失われると、Silk Performer はダウンロード処理を再び開始し、残りの結果を結果に追加します。通常、ユーザーにとっては正常の場合と変わらないため、何も通知されません。
  • 手動で結果をダウンロードすることもできます。Cloud Agent Manager で、エージェントを右クリックし、結果の取得 をクリックします。ダイアログが開き、すべての結果のリストが表示されます。ターゲット フォルダを指定して、ローカル マシンに結果をダウンロードします。
親トピック: CloudBurst での作業


クラウド エージェント用に Java を設定する

Java 関連技術をクラウド エージェントで使用したい場合は、Java 実行環境 (JRE) へのパスを定義する必要があります。64 ビット JRE は、C:\Program Files\Java\JRE にあります。32 ビット JRE は自動的に見つけられます。
親トピック: CloudBurst での作業


CloudBurst VPN

社内ネットワークは通常 1 つ以上のファイアウォールによって保護されており、外部から入ってくる不明なトラフィックは大抵ブロックされます。クラウド エージェントを社内ネットワークの一部であるサーバー環境上のアプリケーションをテストするために使用したい場合、次の選択肢があります。

  • 社内のファイアウォールにポート フォワーディングを構成したり、DMZ 運用することによって、テスト対象システムをインターネットからアクセス可能にする。IT 部門がこの作業を支援してくれるでしょう。社内の運用方針の制約によって、この選択肢を実装することが難しい場合があります。
  • CloudBurst VPN を構成する。社内ネットワークでクラウド エージェントとルーティング デバイス間に仮想プライベート ネットワークを構築することによって、実績がありセキュアな VPN テクノロジによって社内ネットワークのテスト対象システムにエージェントがアクセスできるようになります。ルーティング デバイスは、テスト対象システムとクラウド エージェント間の入ってくるトラフィックを転送します。

CloudBurst VPN を正しく構成する方法を学ぶには、「CloudBurst VPN の構成」を参照してください。

注: CloudBurst VPN は UDP (ユーザー データグラム プロトコル) を利用しています。ファイアウォールが、(内部の) ルーター アプライアンスから開始される UDP 通信の確立を許可している場合に機能します。さらに、HTTP プロキシを介した操作はサポートしていません。
  • CloudBurst VPN の背後にある基本概念
    このトピックでは、CloudBurst VPN の背後にある基本概念を概説します。
  • CloudBurst VPN を構成する
    Cloud Agent Manager.で CloudBurst VPN を構成する方法について説明します。
  • VPN ルーター アプライアンス
    VPN ルーター アプライアンスとは何か、それをルーター上でどのように実行するのかについて説明します。
親トピック: Silk Performer CloudBurst


CloudBurst VPN の背後にある基本概念

注: このトピックは、CloudBurst VPN の背後にある基本概念を理解するのに役立つでしょう。実際に CloudBurst VPN を構成する方法を学ぶには、「CloudBurst VPN の構成」を参照してください。
CloudBurst VPN を構成する基本的なステップは次のようになります。
  1. CAM (Cloud Agent Manager) を開く
  2. VPN 構成を追加する
  3. VPN ルーター アプライアンスをダウンロードしてルーティング デバイスにインストールする
  4. クラウド エージェントを開始する。一旦 VPN の運用が開始すると、クラウド エージェントは自動的に VPN に加わります。VPN 構成の前でも後でも、どちらでもエージェントを開始することができます。
以下では、VPN が構成されるときに、その背後で何が行われているかについて説明します。そのプロセスの背後にある概念を理解しやすくするため、次の図を見てみましょう。
  1. VAM を開き、クラウド エージェントを開始すると、CAM は Silk Performer CloudBurst サービスに接続し、クラウド エージェントに起動するようリクエストします。
  2. CloudBurst サービスは、すべてのクラウド　エージェントとそのステータスについて CAM を更新します。
  3. VPN 構成が追加されると、CAM は CloudBurst サービスに接続します。ここで、クラウド エージェントが VPN サーバーとして動作することが伝えられます。
  4. VPN ルーター アプライアンスをダウンロードして、それをルーティング デバイス (ルーター) にインストールすると、デバイスは VPN クライアントとして動作します。
  5. VPN クライアント/ルーター は、利用可能なクラウド エージェントのリストと共に、CloudBurst サービスから VPN の詳細をリクエストします。
  6. VPN クライアント/ルーターは、クラウド エージェント/VPN サーバーに接続します。
  7. クラウド エージェント/VPN アーバーは、特定の DNS サーバーに接続し、会社のネットワークが到達可能かどうか確認します。
  8. 負荷テストを開始すると、クラウド エージェントは、テスト対象システム (SUT) に負荷をかけるために、ファイアウォールと VPN クライアント/ルーターを経由した接続を使用できます。
親トピック: CloudBurst VPN


CloudBurst VPN を構成する

  1. メイン メニューから、ツール > Cloud Agent Manager をクリックします。
  2. 自分のユーザー名とパスワードを使って CloudBurst アカウントにログインします。
  3. エージェントの開始 をクリックし、地域ごとに必要なエージェント数を入力してから、開始 をクリックします。 ステータス 列に 開始中 が表示されます。エージェントが開始すると、その列には 準備完了 が表示されます。
  4. VPN の構成 をクリックして、追加 をクリックします。
  5. VPN 構成の 名前 を入力します。
  6. テスト対象システム (SUT) のホスト名を入力し、ネットワーク設定の取得 をクリックします。 Cloud Agent Manager (CAM) は、SUT の IP アドレスの解決を試みます。その IP アドレスに基づいて、すべての社内ネットワークの設定が自動的に入力されます。
  7. SUT に到達できない場合、情報ダイアログ ボックスが表示されます。一般に、使用しているマシンと SUT のサブネットが異なり、そのマシンから SUT のサブネットにアクセスできない場合に、この問題が発生します。このような場合は、社内ネットワークの設定を手動で入力してください。
    注: 正しい設定が不明な場合には、システム管理者またはネットワーク管理者に確認してください。
  8. VPN のアクティブ化 がチェックされていることを確認して、OK をクリックします。 状態 列に、VPN を準備しています が表示されます。
  9. 状態 列に、ルーターを待機しています が表示されているときに、ルーター イメージのダウンロード リンクをクリックします。 これによって、仮想マシン ソフトウェアである VirtualBox のアプライアンスがダウンロードされます。
  10. アプライアンスをルーティング デバイスに転送します。
    注: ルーター アプライアンスは、テスト対象システム (SUT) と同じネットワーク セグメントに存在しなければなりません。これができない場合は、技術サポートに問い合わせて詳細な手順を確認してください。
  11. ルーティング デバイスに VirtualBox がインストールされていない場合、VirtualBox Web サイト (https://www.virtualbox.org/) からセットアップ ファイルをダウンロードしてインストールします。
  12. VirtualBox を開始し、アプライアンスをインポートして開始します。
    注: アプライアンスをインポートする前に、新しい Mac アドレスがすべてのネットワーク カードに割り当てられていることを確認してください。
  13. CloudBurst の資格情報を入力します。 Linux オペレーティング システムが VirtualBox で開始されます。これによって、ルーティング デバイスが VPN クライアントになります。
Linux オペレーティング システムが実行されると、Cloud Agent Manager (CAM) にはルーターとの接続が確立されたことが表示されます。以上で、CloudBurst VPN が設定されました。
親トピック: CloudBurst VPN


VPN ルーター アプライアンス

CloudBurst VPN を構成する過程で、VPN ルーター アプライアンスをダウンロードして、ルーティング デバイスに転送する必要がありました。VPN ルーター アプライアンスは、仮想化ソフトウェア VirtualBox の Linux アプライアンスです。よって、VirtualBox がルーターにあらかじめインストールされている必要があります。

その後、VirtualBox にアプライアンスをインポートして開始します。VirtualBox は Linux オペレーティング システムを開始します。Linux が実行されれば、ルーティング デバイスは VPN クライアントとして動作します。そして、VPN クライアントは CloudBurst VPN の一部となり、クラウド エージェントから入ってくるすべてのトラフィックを社内ネットワークの指定したサブネットに送信します。

注: ルーター アプライアンスは、テスト対象システム (SUT) と同じネットワーク セグメントに存在しなければなりません。これができない場合は、技術サポートに問い合わせて詳細な手順を確認してください。
親トピック: CloudBurst VPN


Micro Focus Credits

Micro Focus Credits は、Micro Focus Build Portal から利用可能な CloudBurst テスト サービスの購入に使用できる仮想通貨です。課金プロセスはプリペイド モデルに従います。最初に Micro Focus Credits を購入し、その後にクレジットを支払う方法および時期を決定します。

Micro Focus Credits ごとの価格は、一度に購入したクレジットの量に応じて異なります。いくつかのクレジット パッケージから選択できます。

Silk Performer CloudBurst では、招待機能を提供しています。Micro Focus Build Portal 上で、ほかの CloudBurst ユーザーを招待して、あなたの CloudBurst アカウントに加えることができます。招待された CloudBurst ユーザーは、あなたの口座にある購入済みの Micro Focus Credits を使用できます。

  • CloudBurst 負荷テストの料金
    CloudBurst 負荷テストの料金について説明します。この料金は、インフラストラクチャのレンタル料金と仮想ユーザーのライセンス料金で構成されます。
  • Micro Focus Credits の見積もりと引き落とし
    Micro Focus Credits の消費量を見積もる方法、および Micro Focus Credits を引き落とす方法について説明します。
親トピック: Silk Performer CloudBurst


CloudBurst 負荷テストの料金

CloudBurst テストを購入するために必要な Micro Focus Credits の金額は、インフラストラクチャのレンタル料金と仮想ユーザーのライセンス料金で構成されます。

インフラストラクチャのレンタル料金

インフラストラクチャのレンタル料金には 3 種類あります。
  • アクティブ インフラストラクチャのレンタル料金
  • パッシブ インフラストラクチャのレンタル料金
  • IP アドレス予約の料金

インフラストラクチャのレンタル料金は、クラウド エージェントの起動後、1 時間ごとに支払われます。起動した時間に対しては、1 時間分の料金が発生します。例：エージェントを 50 分間実行すると、1 時間分の料金が発生します。エージェントを 1 時間 5 分実行した場合は、2 時間分の料金が発生します。

インフラストラクチャのレンタル料金は、パッシブ料金とアクティブ料金で構成されます。パッシブ料金はエージェントが動作した時間に対して発生し、アクティブ料金は実行中のエージェントを使用して負荷テストを実行した時間に対して発生します。負荷テストの実行中は、パッシブ料金とアクティブ料金の両方が発生します。例：シミュレーション時間が 2 時間の負荷テストを開始します。この負荷テストが完了したら、2 番目の負荷テストを準備します。これには、1 時間かかります。その間、エージェントを実行したままにします。準備が完了したら、シミュレーション時間が 30 分の 2 番目の負荷テストを開始します。このシナリオでは、4 時間のパッシブ料金と 3 時間のアクティブ料金が発生します。メモ：30 分は、1 時間として計算されます。

注: CloudBurst インフラストラクチャの使用中に Micro Focus Credits を使い切ってしまった場合、エージェントが自動的にシャットダウンされる 24 時間前に電子メールによって通知されます。

クラウド エージェントの IP アドレスの予約もインフラストラクチャ レンタル料金が発生します。予約に対する現在の料金は Cloud Agent Manager に表示されます。IP アドレスの予約によって、ファイアウォールに IP アドレス例外を指定するといった毎回繰り返さなければならない作業から開放されます。

注: IP アドレスは、開放されるまで 24 時間予約し続けられます。

仮想ユーザーのライセンス料金

仮想ユーザーのライセンス料金は、24 時間のテスト期間内に同時に消費されたアクティブ仮想ユーザーの最大数に基づいて計算されます。アクティブ仮想ユーザーごとの料金は、テストにおけるアプリケーション タイプに大きく依存しています。例：100 の仮想ユーザーで負荷テストを開始した場合、100 の仮想ユーザーのライセンス料金が 24 時間のテスト期間に対して課されます。負荷テストが完了した後、別の負荷テストを 150 の仮想ユーザーで開始します。これにより、50 の追加の仮想ユーザーの料金が課されます。次の負荷テストでは、120 の仮想ユーザーを使用するように設定します。150 の仮想ユーザーに対して料金が既に支払われているため、このテストに対する追加の料金は発生しません。これは、24 時間のテスト期間内に、この例からの 3 つすべての負荷テストを実行した場合に該当します。

現在のレートの詳細については、Micro Focus の Web サイトにアクセスしてください。

テスト期間の範囲

24 時間のテスト期間モデルでは、負荷テストの実行、結果の分析、および調整された設定による複数回の負荷テストの再実行が可能です。24 時間のテスト期間内で、負荷テストの設定を最適化し、各追加のテストの実行に対して支払うことなくテストを再実行できます。

1 つの 24 時間のテスト期間内で開始するテストが次のテスト期間に拡張される場合は、負荷テストの開始によって新しい 24 時間のテスト期間が自動的に作成されます。

注: CloudBurst 負荷テストの最大シミュレーション時間は 24 時間です。
親トピック: Micro Focus Credits


Micro Focus Credits の見積もりと引き落とし

Micro Focus Credits の消費量の見積もり

負荷テストを開始する前に、負荷テストの終了までに課されることが予想される Micro Focus Credits の見積もりが、Silk Performer に表示されます。見積もりでは、現在のテスト期間にカバーされるすべての仮想ユーザーのライセンス料金が考慮されます。ただし、シミュレーション時間の変更や負荷テストの同時実行によって生じる可能性のある、予期せぬ料金は含まれていません。

テストを手動で停止する必要がある動的なワークロード モデルを使用する場合、インフラストラクチャのレンタル料金の見積もりは、開始した 1 時間ごとに必要な Micro Focus Credits と同じ値です。

Micro Focus Credits の引き落とし

テストが完了すると、アカウントから引き落とされる Micro Focus Credits の金額が Silk Performer によって計算されます。この計算では、アクティブ インフラストラクチャのレンタル料金の計算に使用される実際のシミュレーション時間、および仮想ユーザー ライセンス料金のテスト期間の境界が考慮されます。

各テストに続いて表示される詳細なバランス シートは、Silk Performer 負荷テストの要約 ページから利用できます。

親トピック: Micro Focus Credits


Visual Studio でのパフォーマンス テストの開発

Silk Performer Visual Studio 拡張機能を使用すると、Microsoft Visual Studio でパフォーマンス テストを開発できます。プロトコル レベルおよびブラウザ駆動型の Web テクノロジを記録する機能を提供します。Visual Studio 拡張機能を使用した記録機能は、Silk Performer Workbench の機能と同様に、Web トラフィックとユーザー操作をキャプチャします。キャプチャした情報は、ユーザー トランザクションを表すメソッドを含んだ C# クラスに変換できます。

Visual Studio 拡張機能では、Kernel、Web、Browser API 関数用の C# バインディングを提供しています。これにより、デバッグ機能を含む Visual Studio の豊富な機能に加え、キャプチャ ファイルの記録、TrueLog ファイルによる分析などの Silk Performer の強力な負荷テスト機能を使用できます。

Visual Studio 拡張機能を使用して作成したテストは、Visual Studio 内からスクリプトの試行を実行でき、Silk Performer 内から並列的な負荷テスト シナリオを実行できます。C# プロジェクトを Silk Performer にエクスポートすると、コンパイル済みの C# コード（アセンブリ）を呼び出す BDL スクリプト スタブが生成されます。

Visual Studio 拡張機能のインストール方法については、『インストール ガイド』を参照してください。

  • C# バインディング
    C# バインディング、C# スクリプトの構造、データ型のマッピングについての詳細を説明します。
  • ライセンス
    Visual Studio 拡張機能を使用して Visual Studio で作成した負荷テストの実行時にライセンスがどのように扱われるかを説明します。
  • キャプチャ ファイルの互換性
    記録時に作成されるキャプチャ ファイルは、Visual Studio と Silk Performer Workbench 間で完全に互換性があります。
  • その他の注意事項
    Visual Studio でパフォーマンス テストを開発する際の注意事項について説明します。
親トピック: 特定の環境での負荷テスト


C# バインディング

現在、Silk Performer は C# バインディングとして Kernel、Web、Browser BDL 関数をサポートします。Visual Studio で、Kernel.MeasureStart()、Web.PageUrl()、Browser.Click() などの C# クラスの静的メソッドを呼び出すことで、これらの関数にアクセスできます。

言い換えると、組み込みの Silk Performer .bdh ファイルそれぞれに対応する C# クラスが PerfRunDotNet アセンブリで見つかります。そして、.bdh ファイルで定義された API 関数それぞれに対応する静的メソッドが、これらの C# クラスで定義されています。

C# スクリプトの構造

Silk Performer の負荷テストで使用する C# クラスには、VirtualUser 属性と CodePage 属性が含まれます。VirtualUser では、UserName プロパティと ScriptName プロパティを指定します。CodePage では、記録システムのコードページを指定します。Transaction 属性を持つメソッドは、Silk Performer にエクスポートされたときにトランザクションにマップされます。

namespace SilkPerformerRecorder
{
  [VirtualUser(UserName = "VUser", ScriptName = "MyScript")]
  [CodePage(1252)]
  public class MyScript
  {
    [Transaction(ETransactionType.TRANSTYPE_INIT)]
    public void TInit()
    {
    }

    [Transaction(ETransactionType.TRANSTYPE_MAIN)]
    public void TMain()

データ型マッピング

.NET/C# と BDL 間でパラメータをやり取りするために、組み込みのデータ型を使用して変換が行われます。

文字列

Silk Performer と BDL はマルチバイト文字セット（MBCS）エンコードで処理されますが、C# 言語は Unicode で処理されます。つまり、これらの間で文字列を渡すときには変換が必要になります。PerfRunDotNet アセンブリは BdlString クラスを使用することで、このようなすべての変換を処理します。さらに、バイナリ バッファの処理も行います。利便性のため、BdlString クラスと C# 文字列の間には代入互換性があります。

sizespec 変数と lenspec 変数は C# マッピングでは削除されました。 これは、C# 文字列自身が長さを持つためです。

静的パラメータの値

深刻度パラメータなどの静的整数値は、それぞれ列挙型で置換されました。

フォーム

BDL フォームは、C# の BdlForm クラスにマップされます。

private static readonly BdlForm ZIP_SEARCH001 = new BdlForm()
    {
      Entries = new BdlFormEntries()
      {
        { "zip-search", "", Kernel.USE_HTML_VAL }, // hidden, unchanged, value: "zip-search"
        { "zip-search:zipcode", "", Kernel.USE_HTML_VAL }, // unchanged, value: ""
        { "javax.faces.ViewState", "", Kernel.USE_HTML_VAL }, // hidden, unchanged, value: "j_id3:j_id4"
        { "zip-search:search-zipcode.x", "62" }, // added
        { "zip-search:search-zipcode.y", "4" } // added
      }
    };

コードページを使用した再生

Silk Performer は MBCS ベースのアプリケーションであるため、Recorder は C# スクリプトに CodePage 属性を自動的に生成し、.BDF スクリプト スタブに引き継ぎます。また、システムのコードページで表現できない Unicode 文字列は 16 進バイト配列に変換されます。

CodePage 属性が C# スクリプトで定義されている場合、次のように処理されます。

  • プロジェクトのすべてのクラスで同じコードページを持つ必要があります。
  • C# スクリプトで使用する文字すべてが、そのコードページを使用して MBCS 文字列に変換されます。
  • 定義されたコードページは C# 文字列（Unicode）から MBCS 文字列の変換と、Recorder によって生成されたバイト配列の解釈に使用されます。従って、表現できない文字があり 16 進バイト配列を Recorder が生成した場合は特に、CodePage 属性を設定する必要があります。
  • すべての文字が定義されたコードページで機能することをコンパイル時に確認されます。

CodePage 属性が C# スクリプトで定義されていない場合、システムのコードページが再生に使用されます。

親トピック: Visual Studio でのパフォーマンス テストの開発


ライセンス

C# テスト スクリプトを使用した負荷テストに対するライセンスの扱いは、スクリプト言語として BDL を使用した場合のライセンス モデルと同じです。単一ユーザーの実行ライセンスは常に無料です。スクリプトの試行時には、ライセンスはチェックアウトされません。C# スクリプトを使用して負荷テストを実行する場合は、Silk Performer はスクリプトで使用されるテクノロジをチェックし、Web、Standard、Premium のいずれかのライセンス タイプにマップします。このマッピングは BDL の場合と同様です。

ただし、C# スクリプトがサポートする Silk Performer テクノロジの 1 つではなく、.NET テストに使用されている場合、Standard ライセンスがチェックアウトされます。

親トピック: Visual Studio でのパフォーマンス テストの開発


キャプチャ ファイルの互換性

Visual Studio の記録時に作成されるキャプチャ ファイルと、Silk Performer Workbench で直接作成したキャプチャ ファイルは、完全に互換性があります。つまり、Visual Studio の C# プロジェクトにドラッグ＆ドロップでキャプチャ ファイルを追加して、C# スクリプトを生成することができます。

また、Visual Studio で作成したキャプチャ ファイルを Silk Performer プロジェクトに手動で追加して、BDL スクリプトを生成することもできます。

親トピック: Visual Studio でのパフォーマンス テストの開発


その他の注意事項

Visual Studio 拡張機能で作業する場合には、次の点に注意してください。

  • C# コードがデバッグ モードでコンパイルされ、デバッグ シンボルが利用できる場合、再生 TrueLog のノードに C# スクリプトの現在位置についての情報を追加するためにも使用されます。この場合、TrueLog Explorer の スクリプト タブには、BDF スタブ スクリプトの現在位置ではなく、C# スクリプトの現在位置が表示されます。
  • Visual Studio で C# または VB .NET プロジェクトを作成し、コードを手動で記述できます。ただし、Recorder が生成できるは C# コードだけです。記録機能は、C# プロジェクトでのみ利用できます。
親トピック: Visual Studio でのパフォーマンス テストの開発


マルチバイトのサポート

Unicode は知られているすべての文字のリストです。 つまり、発声されるかどうかにかかわらず、すべての言語の文字が含まれます。 Unicode のリストには、文字ごとに一意のインデックスがあります。 最初の 128 文字は、ASCII 文字です。

データが格納される、または計算されるときに、Unicode リストは文字を表すために使用されません。 代わりに、いわゆる文字エンコード (文字セット) が、コンピュータ上およびファイル内での文字の表現方法を定義します。 世界中では、さまざまな文字セットが使用されています。

すべての Unicode 文字をカバーする文字エンコードの中でよく使用されるものは次の 2 つです。

  • UTF-8:1 文字に 1 から 4 バイトが必要です。この文字セットは、国内に限らない Web サイトやテキスト表現に広く使用されています。 Linux カーネルおよび Java では、文字列は UTF-8 でエンコードされています。
  • UTF-16:1 文字に 2 または 4 バイトが必要です。このエンコードは、主として Windows NT カーネル (Win NT 以降) での文字列表現に使用されます。
ほとんどの文字セットでは、Unicode リストに含まれるすべての文字の表現が定義されているわけではありません。 実際には、世界の特定の地域で使用される文字のサブセットが定義されています。 これらは一般にコード ページ (cp) と呼ばれます。
  • ASCII:シングル バイト エンコード。1 文字につき 1 バイト。
  • Latin-1 (Windows コードページ 1252):シングル バイト エンコード。1 文字につき 1 バイト。
  • Shift-JIS (Windows コードページ 932):ダブル バイト エンコード。1 文字につき 1 または 2 バイト。
  • EUC-JP (Windows コードページ):3 つの日本語文字セットを含みます。1 文字につき 1 から 3 バイト。

Windows 用のアプリケーションを開発するときは、Unicode (UTF-16) 文字表現またはマルチバイト文字セット (MBCS) 文字表現を選択できます。 MBCS 表現は、地理的な地域に依存するコードページ エンコードを表します (日本の場合は Shift-JIS、アメリカおよび多くのヨーロッパ諸国の場合は Latin-1 など)。 すべてのデータはアプリケーションに対して選択されている同じ文字列表現で表示される必要があるので、これはすべての GUI 要素に影響します。

  • Silk Performer のマルチバイト サポート
    Silk Performer が MBCS 形式をどう使用しているかを説明します。
  • コードページ チェック
    Silk Performer が @codepage 注釈をどう使用するかを説明します。
  • 追加エンコードの必要な API 関数
    追加エンコードの必要な API 関数を一覧表示します。
  • Silk Performer への文字列のコピー
    Silk Performer に文字列を貼り付けたときに行われる処理について説明します。
親トピック: 特定の環境での負荷テスト
関連資料
Keywords


Silk Performer のマルチバイト サポート

Silk Performer は MBCS ベースのアプリケーションです。つまり、正しく文字列を表示するには、すべての文字列を MBCS 形式でエンコードする必要があります。 Silk Performer や、特に TrueLog Explorer では、異なるエンコード (UTF-8、EUC-JP、ISO-8859-1 など) を使っている Web サーバーから来たデータを視覚化したりカスタマイズするため、データを表示する前に数多くの文字列変換作業が必要になる可能性があります。

UTF-8 エンコードの Web サイトをテストするときに、文字列を含むデータをアクティブな Windows システム コードページに変換できない場合があります。 このような場合、Silk Performer の Web Recorder は、変換できないすべての文字列を 16 進形式でスクリプトに記録します。 データを表示するだけの場合には、TrueLog Explorer は変換できない文字を置換文字 (構成可能。通常は '?') に置き換えます。

例

日本語ローカル設定 (システム コードページが Shift-JIS) の英語版 Windows システムで、UTF-8 のアプリケーションを記録するとします。 何らかの理由で、ある Web ページの 1 つのリンク名に韓国語の文字が含まれています。 Silk Performer の Web Recorder は、スクリプト内で読みやすくするために、その文字列を UTF-8 から Shift-JIS に変換しようとします。 Shift-JIS コードページに存在しない韓国語文字が含まれるため、変換は失敗します。 この場合、Web Recorder はスクリプト内のリンク名に 16 進表記を使用します。

親トピック: マルチバイトのサポート


コードページ チェック

Silk Performer のマルチバイト サポートについて知っておく必要のある重要なことのひとつが、記録マシンのシステム コードページが再生マシンのシステム コードページと一致している必要があるということです。これは、再生エンジンがスクリプトのバイト シーケンスを文字や文字列として正しく解釈するために必要になります。

そのため、Silk Performer の Web Recorder は、現在のアクティブなシステム コードページと共に @codepage 注釈をスクリプトに記述します。スクリプト内にこの注釈があると常に、Silk Performer ランタイム システムは、マシンのシステム コードページがスクリプトで指定されているコードページと一致するかどうかを調べます。一致しない場合は、ランタイムは停止し、エラー メッセージが表示されます。ただし、@codepage 注釈の第 2 パラメータに false 値を指定することができます。この場合、情報は表示されますが、実行は続けられます。

構文

@codepage( in codepage        : number,
           in abortOnMismatch : boolean optional := true )

例

@codepage(123)          // aborts the execution when the codepages do not match
@codepage(123, false)   // an information indicates the mismatch, but the execution continues
親トピック: マルチバイトのサポート


追加エンコードの必要な API 関数

Web サイトが使用する文字コードには関係なく、Silk Performer が表示できるのは、MBCS (マルチバイト文字セット) 文字列だけです。 ただし、いくつかのAPI 関数は、文字列パラメータのエンコードがサーバーが期待するエンコードである必要があります。 再生エンジンが必要なエンコードを認識できるように、Silk Performer の Web Recorder は、SetEncoding() 関数、ToEncoding() 関数、および FromEncoding() 関数をスクリプトの適切な位置に挿入します。 通常、リンク名のようなパラメータが、解釈を必要とするデータを参照するときに、適切なエンコードが必要になります。 タイマ名のように、クライアントサーバー通信の一部ではないパラメータには、変換は必要ありません。

SetEncoding() 関数は、後に続くすべての ToEncoding() 関数および FromEncoding() 関数で使用されるエンコードを設定します。 エンコードそのものは、Web ページの文字セットに指定されたときに、エンコード名として引き渡されます (UTF-8、SHIFT_JIS、WINDOWS-1252、WINDOWS-1255、EUC-JP など)。

ToEncoding() はパラメータとして引き渡された文字列を、システム コードページのエンコード (MBCS) から、最後の SetEncoding() 関数で指定されたエンコードに変換します。

FromEncoding() はパラメータとして引き渡された文字列を、最後の SetEncoding() 関数で指定されたエンコードから、システム コードページ (MBCS) に変換します。

親トピック: マルチバイトのサポート
関連資料
SetEncoding Function
ToEncoding Function
FromEncoding Function


Silk Performer への文字列のコピー

Silk Performer に文字列をコピーすると、貼り付け操作でデータについて以下の検査が行われます。
  • MBCS (システム コードページ) に変換する必要があるかどうか
  • MBCS に変換できるかどうか
  • 変換できないので Silk Performer の Unicode テキスト/HEX エディタで開く必要があるかどうか

たとえば、コピーされたデータが UTF-8 エンコードであり、貼り付け作業でシステム コードページへの変換が失敗すると、Silk Performer は Unicode テキスト/Hex エディタを起動します。 このツールは Unicode アプリケーションなので、文字がシステム コードページに存在するかどうかに関係なく、どんな文字列でも表示できます。 また、このエディタは、BDL スクリプトに貼り付けることができるよう、文字列の 16 進表記も表示できます。

親トピック: マルチバイトのサポート


Silk Performer の CI 環境への統合

  • コマンド ラインから Silk Performer を起動する
    このトピックでは、Silk Performer 負荷 テストをコマンド ライン インターフェイスから直接実行する方法について説明します。さらに、利用可能なコマンド ライン パラメータも一覧します。
  • コマンドラインから負荷テストを実行する
    PerfExec.exe コマンドライン ツールの構文について説明します。 コマンドのサンプルを紹介し、パラメータについても説明します。
  • コマンドラインからプロジェクト設定を変更する
    PerfProj.exe コマンドライン ツールの構文について説明します。 コマンドのサンプルを紹介し、パラメータについても説明します。
  • JUnit 形式の結果ファイル
    Silk Performer の結果ファイルを JUnit 形式で生成することにより、Jenkins などの CI ツールで自動的に読み込み、表示させることができます。
親トピック: 特定の環境での負荷テスト


コマンドラインから負荷テストを実行する

コマンドの構文コマンドノコウブン

PerfExec.exe を使うと、コマンドラインから負荷テストを実行できます。Performer.exe コマンドライン ツールは Silk Performer Workbench UI を開きますが。PerfExec.exe は完全に UI 無しで実行できます。実行中のテストのステータス情報は、コマンドラインに出力されます。出力を保存するには、> や >> などの標準リダイレクト演算子を使ってください。

PerfExec.exe は、次の構文を使用してコマンドラインから実行できます。

perfExec.exe –ltp project file [-wl workload name] [-rd custom results directory]

いくつかのパラメータを指定したコマンドのサンプルを以下に示します。

perfExec.exe –ltp "<my documents>\Silk Performer <version>\Projects\SPProject\SPProject.ltp" –wl Workload1 –rd "<my documents>\ResultsDirectory"
注: プロジェクト パス内のファイルまたはフォルダにスペースが含まれている場合は、プロジェクト パスを引用符 (") で囲みます。

コマンド ライン パラメータ

パラメータ | 説明
-ltp | 実行するプロジェクトへのパス。.ltp ファイル、または .ltz ファイルを指定します。
-wl | 省略可能：使用するワークロードの名前。省略した場合は、アクティブ ワークロードが使用されます。
-rd | 省略可能：結果ディレクトリへのパス。省略した場合は、.ltp ファイルのディレクトリに結果が保存されます。
-? | ヘルプを表示します。
親トピック: Silk Performer の CI 環境への統合


コマンドラインからプロジェクト設定を変更する

コマンドの構文コマンドノコウブン

PerfProj.exe を使うと、コマンドラインから Silk Performer プロジェクトの設定を変更したり、確認することができます。

PerfProj.exe は、次の構文を使用してコマンドラインから実行できます。

perfProj.exe –ltp project file {[-sh standard host] [-sp standard port] [-af agents list file]} | {[-list profiles|workloads|usertypes] [-wl workload]}

いくつかのパラメータを指定したコマンドのサンプルを以下に示します。

perfProj.exe –ltp "<my documents>\Silk Performer <version>\Projects\SPProject\SPProject.ltp" –sh "microfocus.com" –sp 80
perfProj.exe –ltp "<my documents>\Silk Performer <version>\Projects\SPProject\SPProject.ltp" –af "<my documents>\Silk Performer <version>\Projects\SPProject\agents.txt"
perfProj.exe –ltp "<my documents>\Silk Performer <version>\Projects\SPProject\SPProject.ltp" –list profiles
perfProj.exe –ltp "<my documents>\Silk Performer <version>\Projects\SPProject\SPProject.ltp" –list usertypes –wl Workload1
注: プロジェクト パス内のファイルまたはフォルダにスペースが含まれている場合は、プロジェクト パスを引用符 (") で囲みます。

コマンド ライン パラメータ

パラメータ | 説明
-ltp | 実行するプロジェクトへのパス。.ltp ファイル、または .ltz ファイルを指定します。
-sh | 新しい標準ホスト。
-sp | 新しい標準ポート。
-af エージェント リストを指定したファイルへのパス。指定したエージェントでプロジェクトの現在のエージェントは置き換えられます。
注: 一行にひとつのエージェントを指定します。
-list プロジェクトの設定を確認します。以下のオプションのいずれかを指定します。
  • profiles
  • workloads
  • usertypes
-wl | list に指定するオプションが usertypes の場合、このパラメータで指定したワークロードに対するユーザー タイプが表示されます。
? ヘルプを表示します。
親トピック: Silk Performer の CI 環境への統合


JUnit 形式の結果ファイル

Silk Performer の結果ファイルを JUnit 形式で生成することにより、Jenkins などの CI ツールで自動的に読み込み、表示させることができます。結果ファイルには、発生したエラーや、パフォーマンス レベルを満たしていない場合の警告が含まれます。

JUnit 形式の結果ファイルには、ユーザー タイプごとに以下の内容が含まれます。
  • エラーが発生した場合のエラー メッセージ
  • パフォーマンス レベルを満たしていない場合の情報
JUnit 形式の結果ファイルを使用するには：
  • システム設定で有効化します： メイン メニューから 設定 > システム をクリックし、結果 タブを選択します。 JUnit 結果を書き込む をオンにします。
  • プロジェクトを保存します。
  • プロジェクトを CI ツールにアップロードします。
  • 負荷テスト ディレクトリに生成される junit.xml ファイルを使用するように、CI ツールを設定します。
親トピック: Silk Performer の CI 環境への統合


ネットワーク エミュレーション

ネットワーク エミュレーションの設定

クライアントとサーバーが通信する必要がある場合には必ず、1 つ以上のネットワークを介して 2 者間の接続が確立されます。このネットワーク接続は、通常、データをデータ パケットに分割した送受信に使用されます。

クライアントとサーバー間の接続は、非常に多様な特徴を持つさまざまなネットワークで構成されます。結果として、データ パケットの転送遅延 (待機時間)、データ パケットの損失 (パケット損失率)、一部のネットワークの転送率の低下などを引き起こします。

Silk Performer では、この複雑なネットワーク接続をさまざまなパラメータを設定してエミュレートできます。

  • 待機時間 とは、ネットワーク接続のあるエンドポイントからもう一方へデータ パケットが伝送されるのに必要な時間です。この時間は、ネットワーク メディア (ファイバー ケーブルや無線など) の物理的な速度制限、帯域幅の制約、2 つのエンドポイント間の距離など、さまざまな要因に依存します。ネットワーク接続の待機時間は、時間と共に変化します。この変化をジッターと呼びます。典型的な Web 負荷テストのシナリオでは、ジッターはネットワーク エミュレーションのパラメータとしてはあまり重要ではありません。Silk Performer は、ジッターのエミュレートをサポートしません。
  • 帯域幅 は、データ転送率、ビット レート、またはスループットとして定義されます。ビット/秒 (bps)、kbps、Mbps、Gbps で測定されます。
  • パケット損失率：送信者から受信者にデータ パケットが伝送される途中で失われる場合があります。パケットの損失は、ネットワークやネットワーク デバイスの過負荷が主な原因となります。TCP/IP (Transmission Control Protocol/Internet Protocol) は、組み込みで損失パケット検出が行われ、送信したパケットは一部が損失した場合に再度送信されることによって、確実に伝送されます。パケット損失率が高くなると、TCP/IP レベルでの管理労力が高くなり、データ スループットに多大な影響を与えます。

Silk Performer は、有線、無線ネットワークのさまざまな標準的なテクノロジのプリセット (事前に構成された設定) を提供します。特定のネットワークの条件をシミュレートするために、すべての設定を調整できます。

ネットワーク エミュレーション ドライバ

Silk Performer は、帯域幅の限界値をエミュレートできます。待機時間とパケット損失率には、専用のネットワーク エミュレーション ドライバが必要です。デフォルトでは、ドライバは Silk Performer と一緒にインストールされません。完全なネットワーク エミュレーション機能を使用するには、エージェントで Silk Performer のセットアップ中にドライバをインストールするよう選択してください。

重要: ネットワーク エミュレーション ドライバがエージェントにインストールされている場合のみ、プロファイル設定の ネットワーク エミュレーション ドライバを使用する は有効です。待機時間 と パケット損失率 の設定は、必要に応じて調整できます。ドライバがインストールされていない場合、このオプションを有効にすると、負荷テストの実行中にエラーが発生します。

次の点に注意してください。

  • ネットワーク エミュレーション ドライバは、すべてのネットワーク アダプタと互換性があるわけではありません。互換性がない場合、マシンまたはネットワークにアクセスできなくなったり、ネットワーク速度が低下する場合があります。
  • ネットワーク エミュレーション ドライバは、現時点では Windows 10 をサポートしません。
  • ネットワーク エミュレーションは、CloudBurst をサポートしません。
親トピック: 特定の環境での負荷テスト


Windows Vista と Windows 7

Silk Performer は Microsoft ユーザー アカウント制御 (UAC) ガイドラインに完全に準拠しています。SilkPerformer は、プロジェクトの定義からテストの分析まで、ワークフローのどの時点でも管理者権限が不要なように設計されています。記録やリモート エージェント プロセスの開始などのアクティビティでも、通常のユーザー権限で行えます。

ただし、System Configuration Manager は、そのシステム管理機能により、UAC ガイドラインに従った管理者モードへの昇格が必要です。

UAC の概要

Windows Vista と Windows 7 について、Microsoft は日常の作業に、管理者アカウントではなく標準のユーザー アカウントを使用するように勧めています。この変更に対応するために、Silk Performer の権限管理にいくつかの変更が加えられました。ただし、これらの変更は Silk Performer ワークフローに影響しないため、ユーザーには検出できません。

Microsoft では、UAC により権限管理パラダイムに従うことをユーザーに推奨しています。アプリケーションが標準のユーザー アカウント権限パスから離れて高レベルの権限を必要とする場合、そのユーザー アカウントに必要な権限がすでにあるとしても、UAC はユーザーに通知します。このため、管理者権限が必要な作業を行うときには、管理者であっても確認画面が表示されることになります。UAC によるもう 1 つの影響として、ソフトウェア開発者は、できるだけ少ない権限で通常の操作を行える Windows アプリケーションを作成するように奨励されています。

エージェント マシンでの UAC

Silk Performer エージェント プロセスは、管理者権限がなくても実行できます。ただし、これには例外があります (たとえば、実行されたスクリプトが管理者権限を必要とする操作を含む場合)。一部の場合、特定の管理者ユーザー アカウントでエージェント プロセスを起動する場合に役に立つ場合があるか、または必要です。ただし、エージェント プロセスは、デフォルトで、組み込み システム アカウントで起動されます。

UAC をサポートする Windows オペレーティング システムで実行中のマシンでは、管理者アカウントは、管理者権限を自動的に所有しません。管理者は、ユーザーに昇格を促すことによって、新しい権限を取得します。これによって、ユーザーは明示的に許可されます。この動作には、デフォルトで 1 つの例外があります。組み込み administrator アカウントでは、手動の昇格は不要です。

UAC が有効なマシンでエージェント プロセスを開始する場合には、次のオプションがあります。
  • システム アカウントを使用する (デフォルト)
  • 組み込み 管理者 アカウントを使用して、次の要件の 1 つを満たす
    • UAC をオフにする
    • セキュリティ ポリシー ユーザー アカウント制御: 管理者承認モードですべての管理者を実行する を無効にするこれは、Windows のローカル セキュリティ ポリシー ツール (secpol.msc) を使用して設定できます。
  • 非組み込み管理者アカウントを使用して、次の要件の 1 つを満たす
    • 実行されたスクリプトが管理者権限を必要としない
    • 実行されたスクリプトが管理操作を実施しない
注: UAC の機能は、システム設定 > エージェント の 詳細設定 タブに関連します。また、SysConfManager > アプリケーション > ユーザー資格情報 にも関連します。
親トピック: 特定の環境での負荷テスト


Silk Performer プラグイン

Silk Performer にはプラグイン インターフェイスがあり、サードパーティの技術に対する Silk Performer の互換性を拡張し、Silk Performer 環境内からサードパーティの技術を調整して制御できます。

プラグイン用に使用できる制御は、各プラグインが提供する機能によって異なります。 デフォルトでは、Silk Performer の システム設定 ダイアログで、各プラグインに対して以下の属性を設定できます。

全般 ページ:

  • プラグインの名前、バージョン、および詳細説明
  • プラグインの有効化/無効化
  • プラグインがサポートする機能の一覧
属性 ページ:
  • 使用可能な各属性の名前、説明、データタイプ、および値

使用可能なプラグインの機能により、他のタブおよび構成属性も使用できる場合があります。

Silk Performer には、サードパーティ製診断ツールのプラグイン フレームワークが用意されています。サードパーティのツール ベンダーは、フレームワークを使用することで、次のツールに統合できます。

  • Silk Performer

    Silk Performer プラグインを使用すると、ランタイムが各ページ リクエストで追加の HTTP ヘッダー タグを送信するように、プロファイルの設定を変更できます。同じ機能は、WebSetHttpTag BDL 関数でも使用できます。

  • TrueLog Explorer

    ユーザーが API ノードを選択すると、TrueLog Explorer は追加の HTTP タグを含むプラグインのヘッダーと本文を渡します。TrueLog Explorer の右下のウィンドウには、有効になっている各プラグインの追加タブが含まれます。 プラグイン タブは、Internet Explorer のコントロールであり、HTML で表せるものを表示できます。

    プラグインは、HTTP タグを使用して、トレースを識別し、Web ページ呼び出しごとの完全なコンポーネントの詳細を示すことができます。

  • Performance Explorer

    PerfExp プラグイン インターフェイスを実装するプラグインは、Overview Report/Ranking (OVR) セクションから呼び出すことができます。概要レポートには、プラグインが詳細な情報を提供できる各順位測定値に対するプラグイン関連のアイコンが表示されます。

  • プラグインの初期化と構成
    Silk Performer がプラグインを認識する方法について説明します。
  • メッセージ出力
    出力 ページの内容について説明します。
  • AppDynamics プラグイン
    Silk Performer には、サードパーティ製診断ツールである AppDynamics のプラグイン フレームワークが用意されています。
  • Dynatrace AppMon プラグイン
    Dynatrace AppMon プラグインの Silk Performer での動作について説明します。
  • Dynatrace SaaS/Managed プラグイン
    Dynatrace SaaS/Managed プラグインの概要と、設定方法について説明します。
  • Silk Performer と InfluxDB/Grafana との統合
    Silk Performer の提供する InfluxDB と Grafana との統合機能についての概要を説明します。
親トピック: Silk Performer Workbench 21.0


プラグインの初期化と構成

Silk Performer の設定中に、すべての使用可能なプラグインが C:\Program Files\Silk\Silk Performer 21.0\Plugins ディレクトリにインストールされます。

Silk Performer は、起動するときに、インストールされているプラグインを確認します。 その後、インストールされているすべてのプラグインがロードされて、検証され、初期化されます。

プラグインは、Silk Performer の システム設定 ダイアログを使用して有効化、無効化、または構成できます。 システム設定 ダイアログでは、使用可能なプラグインごとに新しいアイコンが左側のペインに追加されます。 全般 ページでは、インストールされているプラグインごとに、基本的な情報 (説明、バージョン、サポートされる機能など) が表示され、そのプラグインを有効化または無効化できます。 各プラグインには 属性 タブもあり、そのプラグインに関連付けられているすべての属性が一覧表示されます。 一部のプラグインでは、使用可能な機能に関する他のタブが表示される場合があります。

プラグインはデフォルトでは無効になっており、使用する前に有効にする必要があります。

親トピック: Silk Performer プラグイン


メッセージ出力

インストールされて有効になっているプラグインごとに、Silk Performer の 出力 ウィンドウに新しいタブが挿入されます。

Silk Performer は、プラグインからのすべてのメッセージをこれらのタブに出力します。 プラグインを無効にすると、出力 タブは削除されます。

出力 ページには、次の情報が表示されます。

  • タイムスタンプ (HH:MM:SS)。
  • 深刻度 (「エラー」、「警告」、「情報」)。
  • 数値のメッセージ コード。
  • メッセージのテキスト。 メッセージは深刻度に対応する色で表示されます (エラー = 赤、警告 = 橙、情報 = 紫 (マゼンタ))。
親トピック: Silk Performer プラグイン


AppDynamics プラグイン

AppDynamics プラグインは、Silk Performer のセットアップ時にインストールされます。 デフォルトでは無効になっています。

AppDynamics では、ビジネス トランザクション レベルにおけるパフォーマンスの監視に焦点をあてています。 ビジネス トランザクションは、エンド ユーザーのアクティビティを反映します。また、ユーザー リクエストのカテゴリとして定義されます。

現在の Silk Performer - AppDynamics インテグレーションは、Silk Performer タイマ名に基づいてトランザクションなどの自動命名をサポートします。

正常に設定を完了した後、Silk Performer からの API 呼び出しが以下のように行われます。

BrowserNavigate("http://myserver.mydomain.com/login", "LoginPage");

以下のようなビジネス トランザクションが AppDynamics で表示されます。

SilkPerformer.LoginPage

  • AppDynamics プラグイン設定を構成する
    AppDynamics プラグイン Silk Performer 設定を有効にします。
  • AppDynamics での自動トランザクション命名の構成
    トランザクションが命名される方法を定義します。これにより、トランザクションを AppDynamics と Silk Performer の両方で認識できるようになります。
  • インテグレーションの検証
    AppDynamics Business Transactions List と Silk Performance Explorer 概要レポートに表示された結果を比較して、アプリケーションが同期されていることを確認します。
  • タイマをビジネス トランザクションと一致させる方法
    AppDynamics の自動トランザクションの命名では、HTTP ヘッダーが解析され、カスタム式が適用されます。
  • 詳細設定
    AppDynamics プラグインでは、Web リクエストの HTTP ヘッダーに追加で設定するタグを指定できます。
親トピック: Silk Performer プラグイン


AppDynamics プラグイン設定を構成する

  1. Silk Performer で、 設定 > システム設定 を選択します。
  2. AppDynamics Plugin グループ アイコンを選択します。
  3. 全般 ページで、プラグインを有効にする チェック ボックスをオンにします。
  4. 必要に応じて、 属性 ページで名前/値のペアを構成します。 デフォルトの Tag 値は、AppDynamicsTag です。
    注:

    統合設定の数は、AppDynamicsTag の値を保持する Tag 属性に応じて異なります。 このデフォルト値を変更する場合は、以下で説明するように追加の設定を変更する必要があります。

  5. 設定を保存するには、OK をクリックします。
親トピック: AppDynamics プラグイン


AppDynamics での自動トランザクション命名の構成

  1. 一番左にある AppDynamics ナビゲーション ペインで、 Configure > Instrumentation をクリックします。
  2. Use Custom Configuration for this tier オプション ボタンを選択します。
  3. ページのカスタム ルール セクションにスクロールします。
  4. + をクリックしてカスタム マッチ ルールを追加します。
  5. Transaction Match Criteria ページで、ドロップダウン リストから Servlet を選択します。
  6. カスタム ルールの名前を指定します。 この名前は、生成されたトランザクション名の最初の部分になります。 URI で、 Is Not Empty を選択します。 Check for parameter existence を選択し、 パラメータ名 フィールドに Silk Performer で設定したものと一致するように AppDynamicsTag と入力します。
  7. Split Transactions using Request Data ページを選択し、 Split Transactions using Request Data チェック ボックスをオンにします。
  8. Apply a custom expression on HTTPServletRequest and use the result in Transaction names フィールドで、以下の文字列を追加します。

    ${getHeader(AppDynamicsTag).substring(Int/3)}

  9. 保存 をクリックします。
親トピック: AppDynamics プラグイン


インテグレーションの検証

  1. Silk Performer でテストを開始します。 数分後、AppDynamics は Business Transactions List にトランザクション名を表示します。 テストが完了すると、Silk Performance Explorer 概要レポートが表示されます。
  2. 概要レポートに表示されたテスト結果と AppDynamics の [Business Transactions List] を比較します。
親トピック: AppDynamics プラグイン


タイマをビジネス トランザクションと一致させる方法

Silk Performer の再生エンジンで実行される HTTP 要求は、追加の HTTP ヘッダーによって拡張されます。 たとえば、次の API 呼び出しがあります。

BrowserFormSubmit("//FORM[@name='loginForm']", "Login");

HTTP ヘッダー AppDynamicsTag (Silk Performer/AppDynamics プラグイン設定中に定義した Tag 属性) に、指定されたタイマ名 NA=<TimerName> (この例では NA=<Login>) が含まれます。

AppDynamics の自動トランザクションの命名では、上記のカスタム式 “${getHeader(AppDynamicsTag).substring(Int/3)}” を HTTPServletRequest オブジェクトに適用することで HTTP ヘッダーが解析され、それが次の Java コードで評価されます：request.getHeader(“AppDynamicsTag”).substring(3)

注: substring メソッドの目的は、HTTP ヘッダーの NA= 部分を除外することです。

同じ AppDynamicsTag ヘッダーが含まれる要求は、同じビジネス トランザクションにグループ化されます。 たとえば、AppDynamicsTag: NA=Login ヘッダー付きのすべての要求は、Login ビジネス トランザクションにグループ化されます。

親トピック: AppDynamics プラグイン


詳細設定

AppDynamics プラグインでは、Web リクエストの HTTP ヘッダーに追加で設定するタグを指定できます。それぞれのタグの詳細については、設定 UI の説明を参照してください。

Probability 属性は、0 から 1 の間の浮動小数点値であり、追加の HTTP ヘッダーを送信する仮想ユーザーの割合を指定します。

親トピック: AppDynamics プラグイン


Dynatrace AppMon プラグイン

Dynatrace AppMon プラグインは Silk Performer と共にインストールされますが、デフォルトでは無効になっています。このプラグインを動作させるには、コントローラー マシンに Dynatrace AppMon Client をインストールする必要があります。プラグインを有効にすると、ランタイムが各ページ リクエストで追加の HTTP ヘッダーを送信するように、プラグインはプロファイルの設定を変更します。

この HTTP ヘッダーには、負荷テスト固有のデータが含まれており、Dynatrace AppMon で利用できるようになります。Dynatrace AppMon プラグインは、TrueLog Explorer とも統合されます。TrueLog で選択したノードに対して、ウィンドウの右下にあるプラグイン タブから Dynatrace の対応する PurePath に直接アクセスできます。

注: 追加の HTTP ヘッダーは、Internet Explorer を使用したプロトコル レベルのテスト、およびブラウザ駆動型テスト中にのみ追加されます。
プラグインは次の手順で設定します。
  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Dynatrace AppMon をクリックします。
  3. プラグインを有効にする をオンにします。
  4. 属性 タブをクリックして、必要に応じて 名前/値 ペアを設定します。
    • Dynatrace AppMon プラグインを使用するには、AppMon クライアントと通信するために正しいポートを指定する必要があります。さらに、システム プロファイル（system profile）の値に Silk Performer と作業する Dynatrace AppMon のプロファイルを指定する必要があります。
    • Tagging header name には、x-dynatrace を指定します。Dynatrace Diagnostics の初期のバージョンの場合には、ヘッダー名として dynatrace を使用します。詳細については、Dynatrace AppMon の製品マニュアルを参照してください。
    • Tag Selection では、各リクエストの追加の HTTP ヘッダーの一部として仮想ユーザーに送信させたいタグを選択します。
親トピック: Silk Performer プラグイン


Dynatrace SaaS/Managed プラグイン

Dynatrace SaaS/Managed プラグインは Silk Performer と共にインストールされますが、デフォルトでは無効になっています。プラグインを有効にすると、ランタイムが各ページ リクエストで追加の HTTP ヘッダーを送信するように、プラグインはプロファイルの設定を変更します。さらに、プラグインでは次のことを行えます。
  • Dynatrace のリクエスト属性の設定。 負荷テスト固有の情報をヘッダーに追加して、Dynatrace で分析できるようにします。
  • 仮想ユーザー エラーの Dynatrace への通知
  • 全般的な負荷テスト情報を含む注釈の追加
  • Web* およびブラウザ* API 呼び出しに渡したタイマ名パラメータに基づいた、Dynatrace でのリクエスト ネーミング ルールの設定
注: 追加の HTTP ヘッダーは、Internet Explorer を使用したプロトコル レベルのテスト、およびブラウザ駆動型テスト中にのみ追加されます。
プラグインは次の手順で設定します。
  1. Silk Performer メニューで 設定 > システム をクリックします。
  2. Dynatrace SaaS/Managed をクリックします。
  3. プラグインを有効にする をオンにします。
  4. 属性 タブをクリックして、必要に応じて 名前/値 ペアを設定します。
    1. Dynatrace 環境への Base URL を設定します。
    2. Dynatrace で必要なアクセス許可を持つ認証トークンを生成し、Authentication Token プラグイン属性に指定します。
    3. Dynatrace のテスト対象システムの関連コンポーネントにタグを設定し、使用したタグをプラグイン属性のアプリケーション タグとして指定します。
    さらに、その他のプラグイン設定や、HTTP ヘッダーに追加して送信するタグを選択します。
親トピック: Silk Performer プラグイン


Silk Performer と InfluxDB/Grafana との統合

InfluxDB は、時系列データの格納に特化したデータベースです。 Silk Performer を使って、負荷テストで収集したすべてのデータを InfluxDB にエクスポートできます。 これにより、Grafana のようなツールを使って、簡単に負荷テスト データを表示したり、共有することができます。特に Grafana 用には、あらかじめ設定済みの Grafana ダッシュボードが提供されており、それらをダウンロードして利用できます。 もちろん、ユーザーの要求に応じて、表示をカスタマイズできます。

負荷テスト時に Silk Performer は様々な測定値を記録します。ほとんどの測定値は、独自の TSD 形式の時系列データか CSV ファイルの生データで保存されています。 また、リアルタイム測定値や統計情報も保存されています。

Silk Performer InfluxDB 統合には、2 つの主要なコンポーネントがあります。
  • InfluxDB プラグイン（システム設定）： 負荷テストの実行時にデータをエクスポートします。監視 ウィンドウに表示されたデータ、およびアクティブなクライアント側リアルタイム測定値をエクスポートできます。プラグイン設定タブで、エクスポートするデータや InfluxDB へのアクセス情報を定義できます。プラグインを有効にすると、Silk Performer は設定に従って、テストの実行中にリアルタイム データを自動的に InfluxDB に送信します。
  • tsd2InfluxDb.exe ツール： Silk Performer インストール フォルダにあるツールで、TSD ファイルや生データ ファイルから負荷テスト結果をエクスポートできます。Performance Explorer の 結果 タブにある データ処理 グループで、TSD から InfluxDB をクリックすると、tsd2InfluxDb.exe コマンド ライン ツールのオプションを UI で指定して実行する便利なダイアログが表示されます。CI/CD 環境で統合する場合は、このコマンド ライン ツールを実行するように設定できます。
  • tsd2InfluxDb コマンド ライン ツール
    tsd2InfluxDb コマンド ライン ツールについて、パラメータや設定ファイルについての情報を、例を交えて説明します。
  • InfluxDB のタグとフィールド
    エクスポートしたデータの InfluxDB における構造についての情報を提供します。
  • Grafana を使った結果の可視化
    InfluxDB にエクスポートした負荷テスト結果を Grafana で可視化する方法について説明します。
親トピック: Silk Performer プラグイン


tsd2InfluxDb コマンド ライン ツール

ツール

tsd2InfluxDb.exe はコマンド ライン ツールで、Silk Performer のインストール フォルダにインストールされています。 このツールを使うと、.tsd ファイルや生データ ファイルを InfluxDB インスタンスに直接エクスポートしたり、InfluxDB にインポートできるテキスト形式（Line Protocol）のファイルにエクスポートできます。

パラメータ

このツールには次のようなパラメータを指定できます。

パラメータ名 | パラメータ値
loadtestDir | 負荷テスト ディレクトリへの完全パス。
exportTsds | 値なし。このパラメータを指定すると、loadtestDir パラメータで指定したフォルダから .tsd ファイルがエクスポートされます。
exportRaw | 値なし。このパラメータを指定すると、loadtestDir パラメータで指定したフォルダから生データ ファイルがエクスポートされます。
inputFile | 選択した入力ファイルへの完全パス。複数のファイルは、セミコロン（;）で区切って指定します。
baseUrl | InfluxDB インスタンスへの URL。例：https://myInfluxDB:8443/
Db | InfluxDB のデータベース名。
Auth | username:password 形式の認証データ
outputFile | 測定値を InfluxDB Line Protocol 形式で出力するテキスト ファイルへの完全パス。
loadtestName | 負荷テストの名前。Loadtest タグで使用されます。
customTags | key1=value1; key2=value2; 形式で指定するカスタム タグ。
Config | 設定ファイルへの完全パス。コマンド ライン パラメータでのみ指定できます。
selectedMeasures | 設定ファイル内でのみ指定できます。エクスポートする測定値を指定します。Tsd2InfluxDB ツールで クリップボードにコピー ボタンを押すと、selectedMeasures ノードを含んだ設定が生成され、クリップボードにコピーされます。

設定ファイルについて

設定ファイルを利用する場合は、以下の点にご注意ください。
  • 設定ファイルは XML ファイルで、そのルート ノードは InfluxDbParams です。
  • 上記のパラメータ名は、XML ノード名として指定できます。
  • Tsd2InfluxDB ツールの クリップボードにコピー ボタンを押すと、ダイアログでの設定に応じた設定内容がコピーされます。
  • 設定ファイル内で、他の設定ファイルを参照することはできません。つまり、config パラメータはコマンド ラインでのみ指定できます。
  • コマンド ラインでパラメータを指定して、残りを設定ファイルで指定することもできます。両方で同じパラメータが設定されている場合、コマンド ラインの値が優先され、設定ファイルの値は無視されます。

例

.tsd および生データ ファイルの指定した負荷テストを、出力ファイルにエクスポートします。 Loadtest=MyDemoTest タグ内にすべての測定値のタグを作成します。

tsd2InfluxDb.exe
  -loadtestDir "D:/Users/myUser/Documents/Silk Performer 21.0/Projects/WebProject_2/MyDemoTest"
  -exportTsds
  -exportRaw
  -loadtestName MyDemoTest
  -outputFile "D:/myOutputFile.txt"

指定した設定ファイルを使ってエクスポートします。

tsd2InfluxDb.exe -config "D:/myInfluxConfigFile"

設定ファイルの内容の例：

指定した負荷テスト ディレクトリの .tsd ファイルおよび生データ ファイルから選択した測定値を、InfluxDB にエクスポートします。Loadtest=MyDemoTest タグ内に対応する測定値のタグを作成します。

<InfluxDbParams>
  <loadtestDir>D:/Users/myUser/Documents/Silk Performer 21.0/Projects/WebProject_2/MyDemoTest</loadtestDir>
  <exportTsds></exportTsds>
  <exportRaw></exportRaw>
  <loadtestName>MyDemoTest</loadtestName>
  <baseUrl>http://localhost:8086</baseUrl>
  <db>mydb</db>
  <auth>myUser:myPassword</auth>
  <selectedMeasures>
    <MeasuresCollection>
      <Measure type="8" name="TInit" />
      <Measure type="8" name="#Overall Response Time#" />
      <Measure type="8" name="TMain" />
    </MeasuresCollection>
  </selectedMeasures>
</InfluxDbParams>
親トピック: Silk Performer と InfluxDB/Grafana との統合


InfluxDB のタグとフィールド

このセクションでは、エクスポートしたデータの InfluxDB における構造についての情報を提供します。

測定値 'SPMeas'：
  一般タグ
    タグ 'Project'
    タグ 'Loadtest'
    タグ 'SourceType':
      生データ ファイル、TSD ファイルからエクスポートしたデータやリアルタイム データを区別するためにこのタグを使用します。
      値には、'Realtime'、'Tsd'、'Raw' を取ります。
    タグ 'TsdType' (リアルタイム測定値では使用できません)：
      表示したい集計情報を切り替えるためにこのタグを使用します。
      値は、TSD/生データ ファイル名の接頭辞に対応します。
      値： 'm'、'k'、'i'、't'、...
    タグ 'Machine' (エージェント名、または 'aggregated')
    タグ 'UserType' (ユーザー タイプ名、または 'aggregated')
    タグ 'Region' (該当する場合)
  測定値関連タグ
    タグ 'MeasGroup' ('Page and Action timer' など)
    タグ 'MeasType' ('Page time[s]' など)
    タグ 'MeasName' (Silk Performer のタイマ名)
    タグ 'ValueType':
      値には、'Avg'、'Sum/sec'、'Count/sec' を取ります。
      データの 'value' フィールドに含まれる値の種類を示します。
  フィールド：
    N、Sum、Min、Max、Avg、StdDev (リアルタイム測定値では使用できません)
    value：  Silk Performance Explorer にデフォルトで表示される値 (sum/sec、count/sec、average）が含まれます。

Workbench の 監視/要約 パネルに表示される負荷テストの健全度測定値（エラー数、CPU、メモリ、トランザクション数）は、RtHealth MeasGroup に分類され、その名前は MeasType タグに保存されます。

親トピック: Silk Performer と InfluxDB/Grafana との統合


Grafana を使った結果の可視化

負荷テストの結果データを InfluxDB にエクスポートすると、Grafana 上で表示することができます。

このためには、あらかじめ設定された Silk Performer 用の公開ダッシュボードを grafana.com から取得してユーザーの Grafana にインポートし、InfluxDB を参照するデータソースを設定する必要があります。そして、Silk Performer ダッシュボードをロードし、正しい時間の範囲、プロジェクト、負荷テストの名前を設定すると、ダッシュボード上のパネルに、エクスポートしたデータに基づくグラフが自動的に表示されます。

あらかじめ設定されたダッシュボードを使えば、たいていの必要な情報を得ることができますが、独自にカスタマイズすることも可能です。

親トピック: Silk Performer と InfluxDB/Grafana との統合


Silk Central インテグレーション

Silk Performer は Silk Central のテスト計画およびテスト実行機能と完全に統合されています。 Silk Performer プロジェクトを Silk Central テスト計画に統合でき、Silk Central を通じて直接実行できます。 この機能により、テスト結果の効果的な分析とレポート作成が可能になり、構成済みのスケジュールに基づいて Silk Central で自動的に実行されるテストも可能です。 いわゆる無人テストです。

Silk Central プロジェクトを Silk Performer にダウンロードし、そこでスクリプトや設定を編集できます。 編集済みプロジェクトは引続き、Silk Central にアップロードし、以降のテスト実行で利用できます。

注: 用語 プロジェクト の使用法は Silk Performer と Silk Central では異なります。 Silk Central プロジェクトは、Silk Performer にアップロードされると、Silk Central テスト定義 の中核的な要素になります。 Silk Central プロジェクトは、複数のテスト定義、実行定義、および要件を含むことができる高レベルなエンティティです。

Silk Performance Explorer は、テスト実行の詳細な分析に使用できます。 Performance Explorer は、Silk Central の 実行 ユニットから、実行 ページに表示される実行を通じて直接起動でき、Silk Performer、Performance Explorer 自体から起動することもできます。 Performance Explorer と Silk Central のインテグレーションの詳細については、Performance Explorer のヘルプを参照してください。

Silk Performer テスト実行の結果をSilk Central にアップロードし、テスト定義と関連付けできます。 それには、Silk Performer が結果ディレクトリを検索し、その中の適切なファイルを Silk Central にアップロードします。

Silk Central の Silk Performer および Silk Performance Explorer とのインテグレーションに関する追加情報は、Silk Central と Silk Performance Explorer のヘルプを参照してください。

  • Silk Central インテグレーションを構成する
    Silk Central と連動するように Silk Performer を構成する方法について説明します。
  • Silk Performer プロジェクトを Silk Central から開く
    Silk Performer プロジェクトを Silk Central から開く方法について説明します。
  • ダウンロードしたプロジェクトをチェックアウトして編集する
    ソース管理ツールから Silk Central プロジェクトをチェックアウト (または UNC パスからプロジェクトを取得) して編集した後、再び Silk Central にチェックインする方法について説明します。
  • プロジェクトを Silk Central からインポートする
    プロジェクトを Silk Central からダウンロードし、Silk Central とは無関係に処理する方法について説明します。
  • プロジェクトを Silk Central にアップロードする
    Silk Performer プロジェクトを Silk Central にアップロードしてテスト定義に割り当てる方法について説明します。
  • テスト結果を Silk Central にアップロードする
    Silk Performer の有人テスト結果を Silk Central にアップロードして、その他のテスト実行結果とともに保存する方法について説明します。
  • テスト結果を Silk Central からダウンロードする
    Silk Performer から Silk Central テスト結果をダウンロードし、最終実行の結果を分析します。
親トピック: Silk Performer Workbench 21.0
関連概念
Silk Central インテグレーション


Silk Central インテグレーションを構成する

  1. Silk Performer メニューで 設定 > システム をクリックします。 システム設定 ダイアログが開きます。
  2. Silk Central タブをクリックします。
  3. Silk Central のフロントエンド サーバーが稼働しているホストの URL を、URL フィールドに指定します。ポートと Silk Central インスタンスを含む完全 URL を指定してください。
  4. 資格情報を使用する をオンにして、Silk Central の有効な資格情報を ユーザー名 フィールドと パスワード フィールドに入力します。
  5. もしくは、トークンを使用する をオンにして、Web サービス トークンをフィールドに入力または貼り付けます。Web サービス トークンは、Silk Central にログインして、ユーザー設定 を開くと、取得できます。また、トークンの再生成や削除もこのページで行います。
    注: Web サービス トークンはパスワードと同様に扱い、保護してください。トークン ベースの認証を利用すると、ユーザーの Silk Central 資格情報が Silk Central 外に配布されず、認証自身もパスワード更新ポリシーによって変える必要が無くなるため、セキュリティと利便性が向上します。
    注: トークン ベースの認証を使用するには、Silk Performer 19.5 以降および Silk Central 19.5 以降が必須です。
  6. 接続をテスト をクリックして、URL と資格情報またはトークンが正しいことを確認します。
  7. OK をクリックします。 この設定は、Silk Central への接続が必要なすべてのタスク（プロジェクトを Silk Central から開く、プロジェクトを Silk Central からインポート、プロジェクトを Silk Central にアップロード）のデフォルト設定になります。
親トピック: Silk Central インテグレーション
関連タスク
プロジェクトを Silk Central にアップロードする
テスト結果を Silk Central にアップロードする


Silk Performer プロジェクトを Silk Central から開く

注: Silk Central がソース管理インテグレーション用の StarTeam を使用している場合は、StarTeam Microsoft SCC Integration をユーザーのコンピュータにインストールする必要があります。
  1. ファイル > プロジェクトを Silk Central から開く をクリックします。 表示されたダイアログには、Silk Central への接続のデフォルト設定が表示されます。 このデフォルトの接続設定は、システム設定 の Silk Central タブで指定できます。
  2. 初めて接続するか、デフォルト設定を使用しない場合は、以下の設定を行います。
  3. Silk Central のフロントエンド サーバーが稼働しているホストの URL を、URL フィールドに指定します。ポートと Silk Central インスタンスを含む完全 URL を指定してください。
  4. 資格情報を使用する をオンにして、Silk Central の有効な資格情報を ユーザー名 フィールドと パスワード フィールドに入力します。
  5. もしくは、トークンを使用する をオンにして、Web サービス トークンをフィールドに入力または貼り付けます。Web サービス トークンは、Silk Central にログインして、ユーザー設定 を開くと、取得できます。また、トークンの再生成や削除もこのページで行います。
    注: Web サービス トークンはパスワードと同様に扱い、保護してください。トークン ベースの認証を利用すると、ユーザーの Silk Central 資格情報が Silk Central 外に配布されず、認証自身もパスワード更新ポリシーによって変える必要が無くなるため、セキュリティと利便性が向上します。
    注: トークン ベースの認証を使用するには、Silk Performer 19.5 以降および Silk Central 19.5 以降が必須です。
  6. 接続をテスト をクリックして、URL と資格情報またはトークンが正しいことを確認します。
  7. 省略可能：指定した接続設定を今後の接続のデフォルト設定として定義する場合は、デフォルトとして設定 をクリックします。
  8. 省略可能：インターネット接続プロパティ (プロキシ設定、セキュリティ設定、ブラウザ接続設定など) を指定する場合は、インターネット オプション をクリックします。 このステップを実行する場合は、インターネットのプロパティ ダイアログ ボックスで OK をクリックして設定を保存します。
  9. プロジェクトを Silk Central から開く ダイアログ ボックスで、次へ をクリックすると、アクティブ ユーザーから読み取り可能な Silk Central プロジェクトのリストが表示されます。 これは、Silk Central の プロジェクト ユニットで得られるものと同じリストです。
  10. 開く Silk Central プロジェクトを選択し 次へ をクリックします。 あるいは、開くプロジェクトをダブルクリックするだけでもかまいません。
  11. プロジェクト メニュー ツリーで、テスト コンテナやテスト フォルダを必要に応じて開き、Silk Performer で開く Silk Performer テスト定義を選択します。 Silk Performer テスト定義が UNC パスにある場合は、完了 をクリックします。異なる場合は、次へ をクリックして ターゲット ディレクトリの選択 ダイアログ ボックスを開き、プロジェクトのコピー先を指定します。 Silk Central のソース管理インテグレーション (たとえば、Visual SourceSafe) を使用している場合は、そのソース管理クライアントのログイン画面が表示されます。有効なユーザー接続設定値を入力し、OK をクリックして続行します。
Silk Performer プロジェクトはまた、テスト計画 ユニットの Silk Central プロパティ ページにある プロジェクトを開く をクリックして、Silk Central から直接開くこともできます。詳細については、Silk Central のヘルプを参照してください。

また、Silk Central とのソース管理インテグレーションの構成についても、Silk Central のヘルプを参照してください。

親トピック: Silk Central インテグレーション
関連タスク
StarTeam SCC を Silk Performer と統合する


ダウンロードしたプロジェクトをチェックアウトして編集する

Silk Central からいったん Silk Central プロジェクトをダウンロードすると、そのプロジェクトが Silk Performer に表示されるので、そこでプロジェクトを編集したあと再び Silk Central ソース管理ツールにアップロードすることができます。

インストールされている Silk Central に対するソース管理インテグレーションを構成してある場合は、Silk Performer がソース管理データベースから Silk Performer プロジェクト ファイルを自動的にチェックアウトします。
注: Silk Performer メニュー ツリーで、赤いチェック マークは Silk Performer ソース管理インテグレーションを通じてチェックアウトされた Silk Central プロジェクトであることを示します。
Silk Performer 側で Web サービスを使用して Silk Central に接続しソース管理リンク情報 (接続文字列、ユーザー名、LTP プロジェクト ファイル名など) をリクエストすることで、このインテグレーションは簡単に行えるようになります。
注: Silk Central がソース管理インテグレーション用の StarTeam を使用している場合は、StarTeam Microsoft SCC Integration をユーザーのコンピュータにインストールする必要があります。
  1. 必要な変更を完了し Silk Performer プロジェクト ファイルに保存したら、 ファイル > プロジェクトを閉じる を選択します。 あるいは、プロジェクト メニュー ツリーを右クリックし チェックイン (およびプロジェクトを閉じる) を選択することもできます。 メッセージ ダイアログ ボックスが開きます。
  2. はい をクリックして、編集したファイルを再びソース管理データベースにチェックインすることを確認します。 それ以降、Silk Central を通じてこのプロジェクトを実行する場合はすべて、この更新されたプロジェクト ファイルが使用されます。
親トピック: Silk Central インテグレーション
関連タスク
StarTeam SCC を Silk Performer と統合する


プロジェクトを Silk Central からインポートする

プロジェクトのインポートは、プロジェクトのコピーを Silk Central からダウンロードすることと、Silk Central とは無関係に処理することです。 インポートしたプロジェクトに変更を加えても、Silk Central には影響はありません。 Silk Central プロジェクトのインポートに必要なのは、標準的な Web 接続だけです。 ソース管理ツールへの接続も資格情報も必要ありません。

Silk Performer にファイルをインポートすると、 Silk Central とは無関係に有人テスト実行を行うことができます。 有人テスト実行は Silk Performer から手動で実行できる、Silk Central で定義済みのスケジュールに基づいて自動的に実行されるテストとは異なります。 テスト結果を Silk Central にアップロードしなおし、テスト定義と関連付けできます。

仮に Silk Central とのソース管理インテグレーションを構成してあったとしても、インポートしたプロジェクト ファイルは、圧縮された ZIP アーカイブとしてハード ディスクにローカルに保存されるため、ソース管理ツールからチェックアウトされることはありません。 有人テストは、Silk Central 側からも開始できます。

  1. ファイル > プロジェクトを Silk Central からインポート を選択します。 システム設定｜ワークベンチ｜Silk Central ページで指定された接続設定が表示されます。
  2. 省略可能：初めて接続するか、デフォルトの接続設定を使用しない場合は、以下の情報を指定します。
    • Silk Central のフロントエンド サーバーが稼働しているホストの URL を、URL フィールドに指定します。ポートと Silk Central インスタンスを含む完全 URL を指定してください。
      注: ポートは通常、ポート 80 (ISAPI Web サーバーを使用している場合) か、ポート 19120 (Silk Central のスタンドアロン Web サーバーを使用している場合) です。
    • ユーザー名 フィールドと パスワード フィールドに、Silk Performer の有効なユーザー資格情報を入力します。
  3. 省略可能：指定した接続設定を今後の接続のデフォルト設定として定義する場合は、デフォルトとして設定 をクリックします。
  4. 省略可能：インターネット接続プロパティ (プロキシ設定、セキュリティ設定、ブラウザ接続設定など) を指定する場合は、インターネット オプション をクリックします。 このステップを実行する場合は、インターネットのプロパティ ダイアログ ボックスで OK をクリックして設定を保存します。
  5. プロジェクトを Silk Central からインポート ダイアログ ボックスで、次へ をクリックすると、アクティブ ユーザーから読み取り可能な Silk Central プロジェクトのリストが表示されます。 これは、Silk Central の プロジェクト ユニットで得られるものと同じリストです。
  6. インポートする Silk Central プロジェクトを選択し 次へ をクリックします。 あるいは、インポートするプロジェクトをダブルクリックするだけでもかまいません。
  7. プロジェクト メニュー ツリーで、テスト コンテナやテスト フォルダを必要に応じて開き、Silk Performer にインポートする Silk Performer テスト定義を選択します。
  8. デフォルトのインポート先ディレクトリを使用しない場合は、別のディレクトリを ターゲット ディレクトリ テキスト ボックスに入力します。
  9. 終了 をクリックします。
親トピック: Silk Central インテグレーション


プロジェクトを Silk Central にアップロードする

Silk Performer プロジェクトを Silk Central にアップロードする前に、まず、Silk Performer でプロジェクトのワークロードを適切に構成しておく必要があります。ワークロードの設定はその後、Silk Central の テスト ユニットにある、プロパティ ページの Silk Performer テスト プロパティ セクションで、アップロードされたプロジェクトと共に指定されます。
  1. Silk Performer で、アップロードするプロジェクトを開き、 ファイル > プロジェクトを Silk Central にアップロード を選択します。 そのプロジェクトをこれまでに Silk Central にアップロードしたことがある場合は、Silk Central テストとの関連付けが保存されているため、あらかじめ選択されます。次へ をクリックし、ステップ 3 に進みます。
  2. プロジェクト リストから、Silk Central プロジェクトのアップロード先となる Silk Performer プロジェクトを選択し、次へ をクリックします。 既存のテストを選択して置き換えることもできますし、適切なフォルダまたはコンテナを右クリックし 子テストの新規作成 を選択することで新しいテストを作成することもできます。

    また、既存のテスト コンテナを右クリックし 子テスト フォルダの新規作成 を選択することで、そのコンテナ内に新しいフォルダを作成することもできます。

    注: 新規作成されたテストやフォルダは太字で表示され、それらがまだ Silk Central データベースに書き込まれていないことを示します。キャンセル をクリックすると、作成したアイテムは保存されません。
  3. プロジェクトと共にアップロードする特定のテスト実行結果を選択する場合は、結果のアップロードを有効にする チェック ボックスをオンにしたあと、次へ をクリックします。 テスト実行結果を現時点ではアップロードしない場合は、結果のアップロードを有効にする チェック ボックスをオンにせずに、完了 をクリックします。
  4. 結果の選択 ページで、結果 リスト内の該当するチェック ボックスをオンにして、プロジェクトと共にアップロードする結果を選択したあと、次へ をクリックします。
  5. アップロードした結果が属することになる割り当て済み製品のバージョン番号とビルド番号を指定します。
  6. 完了 をクリックすると、プロジェクトが Silk Central にアップロードされます。 新たにアップロードされたアイテムは、Silk Central のテストや プロジェクト メニュー ツリーに表示されます。
親トピック: Silk Central インテグレーション
関連タスク
Silk Central インテグレーションを構成する


テスト結果を Silk Central にアップロードする

  1. 結果 > 結果を Silk Central にアップロード を選択します。 あるいは、結果ノードを右クリックし 結果を Silk Central にアップロード を選択することもできます。

    そのプロジェクトをこれまでに Silk Central にアップロードしたことがある場合は、Silk Central テストとの関連付けが保存されているため、あらかじめ選択されます。次へ をクリックし、ステップ 4 に進みます。

  2. プロジェクト リストから、Silk Performer テスト結果のアップロード先となる Silk Central プロジェクトを選択し、次へ をクリックします。
  3. メニュー ツリーから、結果のアップロード先となるテストを選択し、次へ をクリックします。 あるいは、ツリー内を右クリックし、さまざまなメニュー項目を選択して、結果の保存先となるテスト、子テスト、テスト フォルダ、あるいは子テスト フォルダを新規作成することもできます。
  4. 結果の選択 ページで、結果 リスト内の該当するチェック ボックスをオンにして、プロジェクトと共にアップロードする結果を選択します。
  5. 次へ をクリックします。
  6. 製品情報とテスト結果ステータスの指定 ページで、アップロードした結果が属することになる割り当て済み製品のバージョン番号とビルド番号を指定します。
  7. テスト結果の自動アップロードを有効にする チェックボックスをオンにすると、Silk Performer は、各テストの実行後に自動的にテスト結果をアップロードします。
    注: アップロード パス のリンクをクリックすると、Silk Central が起動され、選択したテストに直接移動することができます。完了 をクリックした後、この操作を自動的に実行するには、終了時にアップロード パスを開く チェック ボックスをオンにします。
  8. 完了 をクリックすると、結果がアップロードされます。 確認ダイアログ ボックスが表示され、アップロードした結果のローカル コピーを削除するかどうか確認されます。
  9. はい をクリックします。
親トピック: Silk Central インテグレーション
関連タスク
Silk Central インテグレーションを構成する


テスト結果を Silk Central からダウンロードする

  1. Silk Performer で 結果 タブをクリックします。
  2. 結果 メニュー ツリーの Silk Central の結果ノードを追加するには、ここをクリックします をクリックします。 別のテスト定義、別のプロジェクト、あるいは別の Silk Central サーバーから結果をダウンロードするには、戻る をクリックして Silk Central のメニュー ツリーを逆にたどります。 Silk Central の結果を開く ウィザードが開きます。 対応する Silk Central のテスト定義があらかじめ選択されています。 複数の実行を選択し、複数のテスト実行の結果をダウンロードできます。
  3. 過去何日分の結果を取得するかを ここ <> 日間のテスト実行 テキスト ボックスで指定します。
  4. 完了 をクリックして、結果をダウンロードします。
親トピック: Silk Central インテグレーション


Silk Performance Manager との統合

このセクションでは、クライアント監視とインフラストラクチャ監視を作成することによって、Silk Performer を Silk Performance Manager と統合する方法と、それらを Silk Performance Manager にアップロードする方法について説明します。

  • Silk Performance Manager クライアント監視を作成する
    Silk Performance Manager クライアント監視を作成する方法について説明します。
  • Silk Performance Manager インフラストラクチャ監視を作成する
    Silk Performance Manager インフラストラクチャ監視を生成するために必要なワークフローを説明します。
親トピック: Silk Performer Workbench 21.0


Silk Performance Manager クライアント監視を作成する

  1. Silk Performer Monitor Workbench を開始するか、ワークフロー バーを右クリックし、監視ワークフロー バーの表示 をクリックして、監視ワークフロー バーに切り替えます。
  2. ワークフロー バーにあるボタンをクリックして、プロジェクトの作成、トランザクションの記録、スクリプトのカスタマイズを、通常通り行います。
  3. スクリプトの試行を実行します。
  4. ワークフロー バーの プロジェクトのアップロード をクリックします。
  5. プロジェクトを Performance Manager にアップロード をクリックします。
  6. 続いて表示されるダイアログで、すべての必要な設定を行い、OK をクリックします。

プロジェクトを Silk Performance Manager にアップロードする前に、Silk Performer は、すべての測定値に対するデフォルトのしきい値を自動的に設定します。しきい値は、既存のベースライン（存在する場合）、あるいは最新のスクリプトの試行のいずれかを使用して計算されます。

親トピック: Silk Performance Manager との統合


Silk Performance Manager インフラストラクチャ監視を作成する

  1. ファイル > プロジェクトの新規作成 をクリックするか、プロジェクトを開いていない場合は、ワークフロー バーの ここから開始する をクリックします。 ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
  2. 名前 および 説明（省略可能）を入力します。
  3. アプリケーションの種類リストから、Monitoring > Performance Manager - Infrastructure Monitor を選択し、次へ をクリックします。 Performance Explorer が開き、データ ソース ウィザード が表示されます。
  4. ウィザードに従ってデータ ソースを選択します。 監視グラフが表示され、監視が自動的に開始されます。
  5. リアルタイム監視 タブの エクスポート グループで、プロジェクトとして をクリックします。
  6. 監視再利用ウィザード に従って監視グラフをエクスポートします。
  7. プロジェクトのアップロード ダイアログで設定を行い、OK をクリックします。
親トピック: Silk Performance Manager との統合
親トピック: BDL 監視プロジェクトを生成する


ソース管理インテグレーション

Silk Performer のソース管理インテグレーション (SCC インテグレーションまたはソース コード管理インテグレーション) を使用すると、企業内で、共通リポジトリ (ソース管理システム) 内の Silk Performer プロジェクト ファイル、テスト スクリプト、カスタム インクルード ファイル、データ ファイルを管理し、共有できます。共通リポジトリでは、チェックイン、チェックアウト、最新バージョンの取得などソース管理システムの一般的な機能が利用できます。

Silk Performer のソース管理インテグレーションは、Silk Performer の ファイル メニュー (ファイル > ソース管理) および Silk Performer の プロジェクト メニュー ツリーのコンテキスト メニューから利用できます。 プロジェクト メニュー ツリーのすべてのプロジェクト ノード、スクリプト ノード、カスタム インクルード ファイル ノード、およびデータ ファイル ノードで SCC コマンドが使用できます。

プロジェクト全体のすべてのファイル (プロジェクト ファイル、カスタム インクルード ファイル、データ ファイル、スクリプト) を選択するコマンドだけでなく、プロジェクト ファイルだけを選択する SCC コマンドのサブセットも用意されています (関連するスクリプトやデータ ファイルを上書きせずに、プロジェクト ファイルを簡単にチェックイン/チェックアウトできます)。

Silk Performer の プロジェクト メニュー ツリーのステータス アイコンはソース管理されているファイルのステータスを示します。

  • ソース管理の管理下にあり、現在チェックアウトされているファイル (ファイルのソース管理バージョンを書き換え可能) は、赤いチェックマーク アイコンで表示されます。
  • ソース管理の管理下にあるが、現在チェックアウトされていないファイル (ファイルのソース管理バージョンは読み取り専用) は、青い錠のアイコンで表示されます。

Silk Performer は、StarTeam、Microsoft Visual SourceSafe、および PVCS をサポートしています。 ソース管理インテグレーションは、Silk Performer のシステム設定 (設定 > システム > ソース管理) で有効にする必要があります。 ソース管理インテグレーションを有効にする前に、システムに StarTeam、PVCS、または Visual SourceSafe をインストールしてください。

  • StarTeam SCC を Silk Performer と統合する
    インテグレーション モジュールをダウンロードして、インストール ウィザードを実行し、StarTeam をセットアップします。
  • Silk Performer にソース コード管理インテグレーションを構成する
    ソース管理インテグレーションをセットアップします。これによって、ファイル メニュー (ファイル > ソース管理) でソース管理機能が有効になります。
  • プロジェクトとファイルをソース管理に配置する
    プロジェクトまたはファイルにおけるローカル ディスクとソース コード管理の接続を構成します。
  • ファイルをチェックインする
    個々のスクリプト、インクルード ファイル、データ ファイル、またはプロジェクト全体を、ソース コード管理にチェックインします。
  • ファイルをチェックアウトする
    個々のスクリプト、カスタム インクルード ファイル、データ ファイル、またはプロジェクト全体を、ソース コード管理からチェックアウトします。
  • ソース管理システムから最新バージョンのファイルを取得する
    ファイルをチェックアウトせずに、最新バージョンのファイルをローカル ディスクにダウンロードします (デフォルトでは、読み取り専用の形式)。
  • プロジェクト ファイル専用ソース管理コマンド
    プロジェクト ファイル レベルでのみ機能するソース コード管理コマンドについて説明します。
  • プロジェクトとソース管理の結合を解除する
    ソース管理のファイル バージョンとローカル ディスクのファイル バージョンを接続しているリンク情報をプロジェクト ファイルから解除します。
  • プロジェクトのソース管理ステータスを同期する
    同期 コマンドを使用すると、ソース管理システム内のファイルのチェックインまたはチェックアウト ステータスを確認して、Silk Performer にあるこれらのファイルのステータスを更新できます。
  • ソース管理の既知の問題および回避策
    各チェックインおよびチェックアウト操作に対するクライアントの再接続機能および Microsoft VSS のログイン リクエストについて、ソース管理の既知の問題とそのソリューションを説明します。
親トピック: Silk Performer Workbench 21.0


StarTeam SCC を Silk Performer と統合する

インテグレーションは、インテグレーション モジュールのダウンロードとインストール ウィザードの実行で構成されています。

  1. StarTeam SCC インテグレーション モジュールをダウンロードする
    Silk Performer と StarTeam にリンクを作成するには、StarTeam SCC インテグレーション モジュールをダウンロードしてインストールします。
  2. StarTeam Microsoft SCC インテグレーション セットアップ ウィザードを実行する
    Silk Performer と StarTeam にリンクを作成するには、StarTeam SCC インテグレーション ウィザードを実行します。
親トピック: ソース管理インテグレーション


StarTeam SCC インテグレーション モジュールをダウンロードする

  1. http://supportline.microfocus.com/websync/StarTeam2009EA.aspx の SCC リリース用の最新の StarTeam インテグレーションの StarTeam 製品ダウンロード領域に移動します。 ログインするか、電子メール アドレスの確認が必要となる場合があります。
  2. 下にスクロールして、ページの下部にある StarTeam 2008 R2 Integration for Microsoft SCC セクションに移動します。
  3. ST-SCC-Int-10.4.7-Win-EN.exe ファイルを探し、ダブルクリックします。
  4. 使用しているブラウザによって、実行 または 保存 をクリックします。
  5. SCC インテグレーション ファイルまたは実行可能ファイルを保存する場所を指定して、保存 をクリックします。

StarTeam SCC インテグレーション モジュール ウィザードの手順に従い、SCC インテグレーション モジュールをインストールします。

親トピック: StarTeam SCC を Silk Performer と統合する
次のトピック: StarTeam Microsoft SCC インテグレーション セットアップ ウィザードを実行する


StarTeam Microsoft SCC インテグレーション セットアップ ウィザードを実行する

この作業を開始する前に、StarTeam SCC インテグレーション モジュールをダウンロードしてください。

  1. 以下のうちいずれかを選択します。
    • ダウンロードの完了直後に、Download Manager の Launch をクリックしてインストール ウィザードを起動します。
    • 作業可能なときに、SCC インテグレーション実行ファイル (SccIntegration.exe) を保存した場所に移動して、このファイルをダブルクリックします。
    SCC Integration - InstallShield wizard が開きます。
  2. Next をクリックします。 Welcome ページが開きます。
  3. Next をクリックします。 Software License Agreement ページが開きます。
  4. Yes をクリックして、SCC インテグレーション モジュールをインストールします。 User Information ページが開きます。
  5. Name と Company を指定してから、Next をクリックします。

    必要に応じて StarTeam SDK Runtime がインストールされます。

    Choose Destination Location ページが開きます。
  6. デフォルトのインストール先のままとするか、Browse... をクリックして他の場所を指定してから、Next をクリックします。 Select Components ページが開きます。
  7. SCC API Integration チェック ボックスをオンにしてから、Next をクリックします。 Folder Selection ページが開きます。
  8. デフォルトのプログラム フォルダのままにするか、他のフォルダを指定してから、Next をクリックします。 指定したフォルダにプログラム アイコンが追加されます。
  9. リスト ボックスからインストールする言語を選択してから、OK をクリックします。 File Compare/Merge ページが開きます。
  10. Next をクリックします。 License Agreement ページが開きます。
  11. 使用許諾契約の条項に同意するかどうか指定してから、Next をクリックします。 Choose Install Folder ページが開きます。
  12. デフォルトのインストール先のままとするか、Choose をクリックして他の場所を指定してから、Next をクリックします。 Choose Shortcut Folder ページが開きます。
  13. ショートカットをインストールする場所を指定してから、Next をクリックします。 Pre-Installation Summary ページが開きます。
  14. Install をクリックします。
  15. Done をクリックします。 Setup Complete ページが開きます。
  16. 今すぐコンピュータを再起動するか、後で再起動するか指定してから、Finish をクリックします。
重要: StarTeam クライアントを使用してプロジェクトをセットアップ、管理することが重要です。 これには、プロジェクトの作成、プロジェクトへのファイルの追加、プロジェクトからのファイルの削除が含まれます。
親トピック: StarTeam SCC を Silk Performer と統合する
前のトピック: StarTeam SCC インテグレーション モジュールをダウンロードする


Silk Performer にソース コード管理インテグレーションを構成する

このタスクを開始する前に、StarTeam、Microsoft VSS、または PVCS がローカル システムにインストールされていることを確認します。

  1. 設定 > システム を選択します。
    システム設定 - ワークベンチ ダイアログが開きます。
  2. ワークベンチ グループ アイコンを選択します。
  3. ソース管理 タブをクリックします。このタブは、タブ一覧の右端にあるので、小さい右向き矢印を使用して、このタブにアクセスします。
  4. ソース管理インテグレーションを有効にする チェック ボックスをオンにします。 ローカル マシンにインストールされていて、Silk Performer によってサポートされるすべての SCC プロバイダ (StarTeam、VSS、または PVCS) が、SCC プロバイダ リスト ボックスに一覧表示されます。
  5. ユーザー名 フィールドに、ユーザー名を入力します。 ここに入力したユーザー名は、デフォルトのユーザー名として、今後の操作 (ログイン ダイアログなど) で自動的に入力されます。
    注: カスタム インクルード ファイルとユーザー データ ファイルは、SCC のためにプロジェクト ファイルおよびシステム ファイルとは別個に構成されます。Silk Performer が、これらのファイルを SCC で別々に保存することを要求する可能性があるためです (たとえば、組織に、開発者のグループ内で共有されるインクルード ファイルのための共通リポジトリがある場合があります。 これらの開発者が、彼らの個々のプロジェクトからファイルをチェックインすることを要求される場合もあります)。
  6. カスタム ユーザー データ ファイル (.pem、.rnd、.csv、.txt、.idl) の SCC パス フィールドで、参照 (...) ボタンをクリックして、カスタム ユーザー データ ファイルを保存する SCC データベース内の場所を選択します。
  7. この時点で、SCC システムにログインすることを要求されます。 前に入力したユーザー名が、ログイン ダイアログに自動的に入力されます。 ソース管理システムの詳細な使用方法については、StarTeam、Microsoft VSS、または PVCS のドキュメントを参照してください。
    1. 指定されたユーザー名に対応するパスワードを入力することを SCC システムから要求されます。
    2. 対象となる SCC データベースをまだ選択していないと、場合により選択が必要です。
    3. それに続いて、SCC システムのファイル構造を参照して、カスタム ユーザー データ ファイルが保存されるディレクトリを選択します (新しいディレクトリも作成可能)。
    SCC データベース パス フィールドには、指定したソース管理システムのデータベース パスのルートが自動的に設定されます。
  8. カスタム インクルード ファイル (.bdh) の SCC パス フィールドで、参照 (...) ボタンをクリックして、カスタム インクルード ファイルを保存する SCC データベース内の場所を選択します。
  9. ステップ 7 を繰り返します。 SCC データベース パス フィールドには、前に指定したソース管理システムのデータベース パスのルートが自動的に設定されます。
  10. OK をクリックして、システム設定 - ワークベンチ ダイアログを終了します。 ソース管理インテグレーションが完了しました。 ソース管理機能が、ファイル メニュー (ファイル > ソース管理) から利用できるようになりました。
親トピック: ソース管理インテグレーション


プロジェクトとファイルをソース管理に配置する

プロジェクトおよびそれに関連したすべてのファイル、または個々のファイルをソース管理に配置します。

  • プロジェクト全体をソース管理に配置する
    プロジェクトに関連付けられているすべてのスクリプト、インクルード ファイル、およびデータ ファイルを、ソース コード管理に配置します。
  • 個々のファイルをソース管理に配置する
    現在ローカル ディスクでのみ利用できるファイルを、指定された SCC ファイルの場所のソース管理に配置します (これにより、ローカル ディスクと SCC の接続を構成します)。
親トピック: ソース管理インテグレーション


プロジェクト全体をソース管理に配置する

注: システムには、ソース管理に配置できないファイルやデータ ファイルが含まれています。 ソース管理に配置できるのは、カスタム インクルード ファイルとデータ ファイルだけです。
  1. Silk Performer にプロジェクトをロードして、プロジェクト メニュー ツリーでプロジェクト ノードを選択します。
  2. 以下のうちいずれかを選択します。
    • ファイル > ソース管理 > ソース管理への追加 を選択します。
    • プロジェクト ノードを右クリックし、コンテキスト メニューから プロジェクト ファイルをソース管理に追加 を選択します。
    ソース管理への追加 ダイアログが開きます。 プロジェクトに関連付けられているすべてのスクリプト、インクルード ファイル、およびデータ ファイルが、ソース コード管理に配置するために自動的に選択されます。
  3. ソース管理に配置しないファイルの種類の選択を解除します。
  4. ソース管理パスがプロジェクトの各ファイルの種類に対して構成されていることを確認します。 Silk Performer のシステム設定で、カスタム インクルード ファイルとデータ ファイルのソース管理パスを既に構成している場合、ここでは、プロジェクト ファイルとスクリプト ファイルのソース管理パスを指定する必要があるだけです。 必要に応じて、SCC にログインして、プロジェクト ファイルとスクリプト ファイルのディレクトリを指定します。 たとえば VSS の場合、ソース管理パスが指定されていないプロジェクトのファイルの種類に対して、ソース管理への追加 ダイアログの ソース管理プロジェクト 列に ここをクリックして指定 リンクが表示されます。
  5. 追加 をクリックして、プロジェクトのファイルをソース管理に配置します。
親トピック: プロジェクトとファイルをソース管理に配置する


個々のファイルをソース管理に配置する

注: システムには、ソース管理に配置できないファイルやデータ ファイルが含まれています。 ソース管理に配置できるのは、カスタム インクルード ファイルとデータ ファイルだけです。
注: プロジェクト ファイル (.ltp)、スクリプト ファイル (.bdh)、カスタム インクルード ファイル、およびカスタム データ ファイルを、別個にソース コード管理に配置できます。
  1. プロジェクト メニュー ツリーで、次のいずれかを選択します。
    • ファイルを右クリックし、コンテキスト メニューから ソース管理への追加 を選択します。
    • スクリプト、データ ファイル、または インクルード ファイル ノードを右クリックして、コンテキスト メニューから ソース管理への追加 を選択し、その種類のすべてのファイルをソース管理に配置するために選択します。
    ソース管理への追加 ダイアログが開き、操作が実行されるファイルが表示されます。
    注: この処理の残りの部分は、ご使用の SCC プロバイダ (StarTeam、PVCS、または VSS) が提供するダイアログを使用して処理されます。 ソース管理システムの詳細な使用方法については、StarTeam、Microsoft VSS、または PVCS のドキュメントを参照してください。
  2. ソース管理に配置するファイルのチェック ボックスをオンにします。
    注: まだ定義されていない場合、ソース管理に配置される各ファイルのソース管理プロジェクト パスを定義する必要があります。 ソース管理に配置するように指定されたファイルに、まだソース管理プロジェクト パスが構成されていない場合、パス (Silk Performer プロジェクト ファイル (*.ltp) のソース管理プロジェクトが、デフォルトで入力) を構成するように要求されます。
    注: ソース管理に追加されるファイルは、対応する *.ltp ファイルに書き込まれます。 したがって、ファイルをソース管理に追加するには、対応する *.ltp ファイルをチェックアウトする必要があります。
  3. 追加 をクリックして、ファイルをソース管理に配置します。 プロジェクト メニュー ツリーでファイルの横に青い錠のアイコンが表示されます。これは、ソース管理に配置されていて、現在チェックインされていること (読み取り専用) を示します。 これは、ソース管理に新しく配置されたファイルのデフォルトのステータスです。
親トピック: プロジェクトとファイルをソース管理に配置する


ファイルをチェックインする

  1. プロジェクト メニュー ツリーで、次のいずれかの手順を実行します。
    • 個々のファイルをチェックインするには、現在チェックアウトされている (赤いチェックマークで示される) ファイルを右クリックして、チェックイン を選択します。
    • 特定のタイプのファイルすべてをチェックインするには、スクリプト、データ ファイル、または インクルード ファイル ノードを右クリックして、チェックイン を選択します。
    • プロジェクト全体をチェックインするには、プロジェクト ノードを右クリックして、チェックイン を選択します。
    チェックイン ダイアログ ボックスが開き、ファイルまたはプロジェクトが現在保存されているローカル パスが表示されます。
  2. 省略可能:チェックインしないファイルの選択を解除します。
  3. チェックイン をクリックして、ファイルまたはプロジェクトをチェックインします。 ファイルのステータスが、青い錠のアイコンで表示されます。これは、ソース管理されているバージョンのファイルまたはプロジェクトが読み取り専用にされたことを示します。
親トピック: ソース管理インテグレーション


ファイルをチェックアウトする

  1. プロジェクト メニュー ツリーで、次のいずれかを選択します。
    • 個々のファイルをチェックアウトするには、現在チェックインされていて (青い錠のアイコンで示される) チェックアウトしたいファイルを右クリックします。
    • スクリプト、データ ファイル、または インクルード ファイル ノードを右クリックして、すべてのファイルをチェックアウトするために選択します。
    • プロジェクト全体をチェックアウトするには、プロジェクト ノードを右クリックします。
  2. コンテキスト メニューから チェックアウト を選択します。 チェックアウト ダイアログが開き、ファイルまたはプロジェクトがコピーされるローカル パスが表示されます。
    注: チェックインされている単一のファイルをチェックアウトのために選択した場合、そのファイルのみが チェックアウト ダイアログに表示されます。 チェックアウトするためのファイルが選択されていない場合、またはチェックアウトされているファイルが選択された場合、プロジェクトの現在チェックインされているすべてのファイルが、チェックアウト ダイアログに表示されます。
  3. 必要に応じて、チェックアウトしない個々のファイルの選択を解除します。
  4. チェックアウト ボタンをクリックして、ファイルまたはプロジェクトをチェックアウトします。 ファイルのステータスが、赤いチェックマークのアイコンで表示されます。これは、ソース管理されているバージョンのファイルまたはプロジェクトが利用可能で、書き込みできることを示します。
  • ファイルのチェックアウトを取り消す
    ローカル ディスクのファイルを (最新の変更の有無にかかわりなく) SCC にある最新のチェックイン バージョンを持ったファイルに置換します。 ローカル ファイルのバージョンは読み取り専用です。
親トピック: ソース管理インテグレーション


ファイルのチェックアウトを取り消す

  1. プロジェクト メニュー ツリーで、次のいずれかを選択します。
    • 個々のファイルのチェックアウトを取り消すには、チェックアウトしたファイル (赤いチェックマーク アイコンで表示) を右クリックします。
    • スクリプト、データ ファイル、または インクルード ファイル ノードを右クリックし、これらの種類のすべてのファイルを一括ですべて選択します。
    • プロジェクト全体のチェックアウトを取り消すには、プロジェクト ノードを右クリックします。
  2. コンテキスト メニューから チェックアウトの取り消し を選択します。 チェックアウトの取り消し ダイアログが開き、続いてファイルまたはプロジェクトが配置されているローカル パスが表示されます。
  3. 必要に応じて、チェックアウトしない個々のファイルの選択を解除します。
  4. 取り消し ボタンをクリックし、チェックアウトを取り消します。 これにより、ファイルまたはプロジェクトのステータスが青い錠のアイコンで表示され、ファイルのソース管理バージョンが読み取り専用になります。
親トピック: ファイルをチェックアウトする


ソース管理システムから最新バージョンのファイルを取得する

以下の手順は、個々のスクリプト、インクルード ファイル、データ ファイル、およびプロジェクト全体に対する 最新バージョンの取得 コマンドで使用できます。

注: SCC の 最新バージョンの取得 コマンドの使用方法に関する詳細については、StarTeam、Microsoft VSS、または PVCS のドキュメントを参照してください。
  1. プロジェクト メニュー ツリーで、次のいずれかを選択します。
    • 個々のファイルを取得するには、プロジェクト メニュー ツリーでファイルを右クリックします。
    • スクリプト、データ ファイル、または インクルード ファイル ノードを右クリックして、その種類のすべてのファイルを選択します。
    • プロジェクト全体の最新バージョンを取得するには、プロジェクト ノードを右クリックします。
  2. コンテキスト メニューから 最新バージョンの取得 を選択します。 最新バージョンの取得 ダイアログが開き、ファイルまたはプロジェクトがコピーされるローカル パスが表示されます。
  3. 必要に応じて、取得しない個々のファイルの選択を解除します。
  4. 取得 ボタンをクリックします。
    注: 最新バージョンの取得 コマンドは、ファイルのチェックイン/チェックアウト ステータスを変更しません。 たとえば、最新バージョンの取得 操作が、現在チェックアウトされているファイルに対して実行された場合、ファイルはチェックアウトされたままです。ファイルが開いている場合、ファイルの新しいバージョンを再ロードするかどうかをたずねるプロンプトが表示されます。
親トピック: ソース管理インテグレーション


プロジェクト ファイル専用ソース管理コマンド

プロジェクト全体のすべてのファイル (プロジェクト ファイル、カスタム インクルード ファイル、データ ファイル、スクリプト) を操作するソース管理コマンドに加えて、プロジェクト ファイルだけを選択する SCC コマンドのサブセットも、ファイル メニュー (ファイル > ソース管理 > プロジェクト ファイルのみ) および プロジェクト メニュー ツリーのプロジェクト ノードから利用できます。 これらのコマンドは、関連ファイル用のコマンドと同じように動作します。唯一異なる点は、関連ファイル (スクリプト、カスタム インクルード ファイル、およびデータ ファイル) に影響しないということです。 これらの機能は、たとえば、現在 SCC に保存されている関連ファイル (スクリプト、カスタム インクルード ファイル、データ ファイル) を上書きせずに、プロジェクト ファイルをチェックインしたい場合に役立ちます。

次のプロジェクト ファイル専用コマンドが、ファイル メニュー (ファイル > ソース管理 > プロジェクト ファイルのみ) および プロジェクト メニュー ツリーのプロジェクト ノードから利用できます。

  • 最新バージョンの取得
  • チェックアウト
  • チェックイン
  • チェックアウトの取り消し
  • ソース管理への追加
親トピック: ソース管理インテグレーション


プロジェクトとソース管理の結合を解除する

ソース管理との結合を解除 コマンドは、ソース管理への追加 コマンドの逆です。 このコマンドは、関連したソース管理システムが利用できないファイル (顧客またはサポート スタッフから受け取ったものなど) を扱う場合に役立ちます。

注: ソース管理との結合は、プロジェクト全体に対してのみ解除できます。個々のファイルに対してはできません。
  1. 以下のうちいずれかを選択します。
    • プロジェクト メニュー ツリーで、ソース管理プロジェクトのプロジェクト ノードを右クリックし、ソース管理との結合を解除 を選択します。
    • ファイル > ソース管理 > ソース管理との結合を解除 を選択します。
  2. OK をクリックし、プロジェクトに対するすべてのソース管理接続データが解除されていることを確認します。
親トピック: ソース管理インテグレーション


プロジェクトのソース管理ステータスを同期する

特定の状態で結合情報が一部でも失われると、Silk Performer がソース管理システムとの同期に失敗することがあります。 たとえば、チェックアウトしたファイルを Silk Performer にロードしている間に Silk Performer を終了し、同ファイルを SCC 経由でチェックインした場合、Silk Performer ではそのファイルがチェックインされたことを認識できません。

注: この機能は、プロジェクト全体に対してのみ適用できます。個々のファイルに対してはできません。
  1. 以下のうちいずれかを選択します。
    • プロジェクト メニュー ツリーで、ソース管理下にあるプロジェクトのプロジェクト ノードを右クリックして、同期 を選択します。
    • ファイル > ソース管理 > 同期 を選択します。
  2. OK をクリックし、プロジェクトに対するすべてのソース管理接続データが解除されていることを確認します。
親トピック: ソース管理インテグレーション


ソース管理の既知の問題および回避策

ソース管理を使用する場合、次の問題が発生する可能性があります。

  • SCC クライアントの再接続機能がサポートされていない
    クライアントの再接続機能に関するソース管理の既知の問題とソリューションについて説明します。
  • Microsoft VSS 8.0 は、ファイルのチェックイン/チェックアウト操作のたびに、ユーザー名/パスワードをリクエストする
    各チェックインおよびチェックアウト操作に対する Microsoft VSS のログイン リクエストに関するソース管理の既知の問題とソリューションについて説明します。
親トピック: ソース管理インテグレーション


SCC クライアントの再接続機能がサポートされていない

問題 | 回避策
Silk Performer のプロジェクトやファイルが定義済みの SCC ディレクトリに結合されているときに、そのディレクトリが SCC クライアントを介して変更された場合、Silk Performer はその新しいディレクトリに再接続しません。 | 既存のソース管理の結合を解除してから、影響を受けたプロジェクトやファイルをその新しいディレクトリに追加します。
注: 一般的に、SCC クライアント機能を使用して、結合された Silk Performer プロジェクトを管理することはお勧めしません。
親トピック: ソース管理の既知の問題および回避策
関連タスク
プロジェクトとファイルをソース管理に配置する
プロジェクトとソース管理の結合を解除する


Microsoft VSS 8.0 は、ファイルのチェックイン/チェックアウト操作のたびに、ユーザー名/パスワードをリクエストする

問題 | 回避策
Microsoft VSS 8.0 では、ユーザーが VSS にファイルをチェックインまたはチェックアウトするたびに、ユーザー名とパスワードを入力することをリクエストするセキュリティ設定 (有効になっている場合) が導入されました。 このリクエストは、VSS に対してファイル操作を実行する場合に、Silk Performer でも発生します。 | Microsoft VSS の手動ログインを無効にします。
  • Microsoft VSS の手動ログインを無効にする
    ユーザーが VSS にファイルをチェックインまたはチェックアウトするたびに、ユーザー名とパスワードの入力をリクエストすることを無効にします。
親トピック: ソース管理の既知の問題および回避策


Microsoft VSS の手動ログインを無効にする

注: この手順は、VSS のユーザー名がネットワークのユーザー名と同じ場合のみ使用できます。
  1. SourceSafe アドミニストレータ を開きます。
  2. Silk Performer プロジェクトが保存されているデータベースを開きます。
  3. ツール > オプション を選択します。
  4. 全般 タブをクリックします。
  5. 自動ログインのために、ネットワークでのユーザー名を使用する チェック ボックスをオンにします。
親トピック: Microsoft VSS 8.0 は、ファイルのチェックイン/チェックアウト操作のたびに、ユーザー名/パスワードをリクエストする


プロジェクトのインポート、アップロード、および電子メール送信

Silk Performer では、プロジェクトのエクスポート、インポート、および電子メール送信を実行できます。

また、 Silk Performer には、テスト プロジェクト全体をディレクトリやアーカイブ ファイルにエクスポートするオプションも用意されています。 この方法でエクスポートされたプロジェクト ファイルは、後ほど Silk Performer にインポートできます。

  • プロジェクトをエクスポートする
    テスト プロジェクト全体を、別のディレクトリやアーカイブ ファイル (ZIP 形式) にエクスポートできます。
  • プロジェクトのインポート
    プロジェクトのアーカイブ ファイル (ZIP 形式) をインポートし、抽出したファイルを保存する場所を指定できます。
  • プロジェクトを電子メールで送信する
    同僚間でプロジェクト ファイルをやり取りする場合、アーカイブしたプロジェクトを電子メールで送信する方法が簡単です。
親トピック: Silk Performer Workbench 21.0


プロジェクトをエクスポートする

  1. Silk Performer メニュー バーから、 ファイル > プロジェクトのエクスポート を選択します。 プロジェクトのエクスポート ダイアログが表示されます。
  2. エクスポート場所 領域に、現在のプロジェクトをエクスポートする場所を指定します。 すべてのプロジェクト ファイルを 1 つのディレクトリにエクスポートする場合、そのディレクトリ名を指定します。 すべてのファイルを ZIP アーカイブにエクスポートする場合、アーカイブ名を指定します。 フィールドの右横にある参照 (...) ボタンをクリックして、プロジェクトをエクスポートするディレクトリまたはファイルを指定します。
  3. Zip を使用して 1 つのアーカイブ ファイルに圧縮する チェック ボックスをオンにすると、現在のプロジェクトに含まれるすべてのファイルを 1 つの ZIP アーカイブにエクスポートできます。 これは、プロジェクトをバックアップするときや、プロジェクトのコピーを送信するときに役立ちます。
  4. エクスポートした後に Windows Explorer で開く チェック ボックスをオンにすると、エクスポート後に Windows Explorer でエクスポート場所のフォルダが自動的に開かれます。 これにより、エクスポート後、ファイルが格納されているディレクトリを探すために移動することなく、プロジェクト ファイルにすばやくアクセスできます。
  5. オプション 領域で、全テストの結果ファイルを含める チェック ボックスをオンにすると、このプロジェクトに含まれるすべてのテストの結果 (TryScript テスト、ベースライン テスト、および実際のテストの結果) をエクスポートできます。 このチェック ボックスをオフにすると、最新の TryScript テストの結果だけがエクスポートされます。
  6. アーカイブ ファイルをパスワードで保護 オプションを選択して、エクスポート ファイル (LTZ) をパスワードで保護します。 これは、プロジェクトに機密性の高いデータ (テスト中のアプリケーションに使用するユーザー名、パスワードなど) が含まれるときに役立ちます。 このチェック ボックスをオンにした場合は、パスワードを入力して、確認します。
  7. システム診断レポートを含める チェック ボックスをオンにすると、診断レポートを一緒にエクスポートできます。 このレポートには、コンピュータのプロセッサ、オペレーティング システム名とそのバージョン、および、ドライブ、メモリ、サービスやドライバに関する情報が記述されています。 また、Windows レジストリに関連する情報も含まれています。
  8. OK をクリックします。 Silk Performer がプロジェクトをエクスポートします。すべての関連ファイルが ZIP アーカイブに圧縮されていく状況が、ステータス バーに表示されます。
親トピック: プロジェクトのインポート、アップロード、および電子メール送信


プロジェクトのインポート

  1. Silk Performer メニュー バーから、ファイル > プロジェクトのインポート を選択します。
    注: 開いているプロジェクトがある場合、そのプロジェクトを閉じるようにメッセージが表示されます。 はい をクリックします。
    ファイルを開く ダイアログが表示されます。 参照して、インポートするアーカイブ ファイルを選択します。
  2. アーカイブ ファイルを選択したら、開く をクリックします。
  3. プロジェクトのインポート ダイアログが表示されます。
  4. インポート先ディレクトリ 領域に、プロジェクト ファイルを抽出する場所を指定します。
    1. アーカイブ ファイルをパスワードで保護している場合、パスワードの入力が求められます。 パスワードを入力し、確認します。
  5. OK をクリックします。 Silk Performer が指定先のディレクトリにアーカイブ ファイルを抽出し、プロジェクトを開きます。
親トピック: プロジェクトのインポート、アップロード、および電子メール送信


プロジェクトを電子メールで送信する

  1. Silk Performer メニュー バーから、 ファイル > プロジェクトを電子メールで送信 を選択します。 プロジェクトの電子メール送信 ダイアログ ボックスが開きます。
  2. 電子メール アドレス フィールドに、プロジェクトの送信先となる電子メール アドレスを指定します。
  3. オプション 領域で、全テストの結果ファイルを含める チェック ボックスをオンにし、このプロジェクトに含まれる TryScript テスト、ベースライン テスト、および実際のテストすべての結果を添付します。 このチェック ボックスをオフにすると、最新の TryScript テスト結果のみが送信されます。
  4. アーカイブ ファイルをパスワードで保護 チェック ボックスをオンにすると、電子メールの内容にパスワードを付けて保護します。 この機能は、テスト中のアプリケーションで使用するユーザー名とパスワードなど、機密性の高いデータ がプロジェクトに含まれている場合に役立ちます。 このチェック ボックスをオンにした場合は、パスワードの入力とその確認を行います。
    注: このパスワードは、電話か別の電子メールで受信者に知らせます。
  5. システム診断レポートを含める チェック ボックスをオンにすると、システム診断レポートが添付されます。 このレポートには、次の情報があります。
    • コンピュータのプロセッサ
    • オペレーティング システムの名前とバージョン
    • ドライブ、メモリ、サービス、およびドライバに関する情報
    • Windows レジストリからの関連情報
  6. OK をクリックします。 Silk Performer がプロジェクトの電子メール送信を実行します。ステータス バーには、すべての関連ファイルの ZIP アーカイブへのパッケージングの進捗状況が表示されます。
親トピック: プロジェクトのインポート、アップロード、および電子メール送信


トラブルシューティング

製品の保守契約を締結している顧客、および製品を評価中のすべての顧客は、テクニカル サポートを受けることができます。

  • 結果の回復ワークフロー
    2 つの一般的なユースケースに基づいて、負荷テスト結果の回復方法について説明します。
  • テクニカル サポート
    テクニカル サポートへの問い合わせ方法について説明します。
  • コントローラとエージェント間の通信のトラブルシューティング
    コントローラ コンピュータがエージェント コンピュータに接続しようとしたときに発生する問題のトラブルシューティングについて説明します。
  • エラー メッセージの概要
    Silk Performer のシステムレベル エラーのタイプについて説明します。
親トピック: Silk Performer Workbench 21.0


結果の回復ワークフロー

インターネットのような信頼性の低いネットワーク接続を使用した環境では、予期しない例外が発生する可能性があります。負荷テスト中や、結果の収集中にコントローラがエージェントとの接続を失うと、Silk Performer は接続の再確立を試みます。しかし、これは常に成功するわけではなく、結果セットが不完全になる場合もあります。

この様な場合のために、Silk Performer では回復ワークフローを提供します。これにより、結果を回復し、有効なデータ セットを新たに構築できます。結果の回復は、最善の解決策ではありませんが、既に収集したデータを完全に失うことを避けることができます。

回復ワークフローは、実行した負荷テストに応じて異なります。

CloudBurst 負荷テストの回復

CloudBurst 負荷テストを実行していると仮定します。不明な理由により、Workbench が応答しなくなり、最終的にクラッシュしたとします。Workbench を再起動すると、回復ワークフロー ダイアログが自動的に表示されます。回復ワークフローに従って、次のフィールド（自動的に値が設定されます）を確認します。

  • 欠落した結果：このフォルダには、エージェントからコントローラに完全に転送されなかった結果が含まれます。これらの結果の転送は、クラッシュによって中断されたため、データは途中から欠落しています。
  • 転送した結果：このフォルダには、エージェントからコントローラに完全に転送された結果が含まれます。これらの結果の転送は成功しており、データは完全で有効です。
  • 回復した結果：このフォルダには、回復を実行した後に、回復した結果が含まれます。 Silk Performer は欠落した結果と転送した結果をマージし、そこから回復した結果を生成します。

CloudBurst 負荷テストの場合、これらのフィールドは自動的に設定されます。ディレクトリを確認し、必要に応じて変更してください。

オンプレミス負荷テストの回復

オンプレミス負荷テストの回復では、ユーザーのサーバー ラボにあるエージェントを使用して負荷テストを実行していると仮定します。いくつかのエージェントとの接続がある理由により失われ、再確立できなかったとします。これにより、負荷テストは不完全な結果セットのまま終了します。このような場合には、ツール > 負荷テスト結果の回復 をクリックします。

回復ワークフローに従って、すべての必要なディレクトリを指定します。これらのディレクトリは、上で説明したものと同じです。ただし、フィールドは自動的に設定されません。欠落した結果のディレクトリを指定する前に、コントローラ上にそのディレクトリが作成されており、すべての失われたエージェント用のサブフォルダが作成されていることを確認してください。そして、エージェントからの結果をそのサブフォルダにそれぞれコピーしてください。これらの 3 つのディレクトリを指定して、回復ワークフローを開始します。

結果の回復

Silk Performer は結果を回復するためにいくつかの手順を実行します。回復中に問題が発生して処理が中断し場合は、ログ ファイルを参照して詳細な情報を確認できます。問題によっては、無視して回復処理を続行したり、処理を再度実行しなおすことができます。

回復が完了すると、新しい結果セットが 結果 ツリーに表示されます。

親トピック: トラブルシューティング


テクニカル サポート

保守およびサポート契約を結んだすべてのお客様、および製品を評価中のお客様は、テクニカル サポートを受けることができます。 高度なトレーニングを積んだカスタマ ケア スタッフが、お客様の質問にできる限り迅速かつ専門的にお答えします。

Web トラフィックの記録、負荷テストのシナリオ、その他、製品や実装の問題に関する質問がある場合は、高度なトレーニングを積んだテクニカル サポート スタッフが、お客様の質問にできる限り迅速かつ専門的にお答えします。

Micro Focus SupportLine に問い合わせるには、https://supportline.microfocus.com にアクセスしてください。 最初にアクセスしたときには、ユーザーは、サイトに登録する必要がある可能性があります。

電話をする前に、以下の情報をご用意ください。

  • 製品名とバージョン番号
  • オペレーティング システム名とバージョン
  • 関連するすべてのエラー メッセージ (そのままの表現で)
  • Silk Performer の出荷受領書に記載してあった顧客 ID、 またはソフトウェアの箱に同梱されていたインデックス カード
親トピック: トラブルシューティング


コントローラとエージェント間の通信のトラブルシューティング

コントローラ コンピュータがエージェント コンピュータに接続しようとしたときには、次のような問題が発生する場合があります。

  • 負荷テスト コントローラ - 3211：エージェント制御サービスに接続できませんでした。
  • 負荷テスト コントローラ - 3212：エージェント制御サービスを認証できませんでした。
  • 負荷テスト コントローラ - 3213：エージェント制御サービスがエージェントを作成できませんでした。
  • 負荷テスト コントローラ - 3223：エージェント接続が失われました。
  • 負荷テスト コントローラ - 3233：エージェントのバージョンが、コントローラのバージョンと一致しません。
  • 負荷テスト コントローラ - 3303：ローカル結果ディレクトリを作成できませんでした。
  • 負荷テスト コントローラ - 3304：ローカル結果ディレクトリをクリアできませんでした。
  • 負荷テスト コントローラ - 3305：ローカル データ ディレクトリを作成できませんでした。
  • 負荷テスト コントローラ - 3306：ローカル データ ディレクトリをクリアできませんでした。
  • 負荷テスト コントローラ - 3422：コマンド (connect) はタイムアウトしました。
  • Silk Performer - 32：アクセスが拒否されました。認証が必要です。
  • Silk Performer - 33：認証に失敗しました (パスワードが間違っています)。
  • Silk Performer - 25：同時実行のインスタンスが上限を超えています。
  • システム - 2：指定されたファイルが見つかりません。
親トピック: トラブルシューティング


負荷テスト コントローラ - 3211：エージェント制御サービスに接続できませんでした。

考えられる原因 | 解決策
エージェント制御サービスが実行されていません。 | エージェント制御サービスを起動します。
ポートの不一致が生じています (エージェント制御サービスがリスンしているポートと、コントローラがエージェント制御サービスに接続しようとしているポートが異なっています)。 | エージェントの接続設定を調整します。
このエージェントは、プロキシを経由して接続されており、そのプロキシがダウンしています。 | エージェントの接続設定を確認し、プロキシを再起動します。
親トピック: コントローラとエージェント間の通信のトラブルシューティング


負荷テスト コントローラ - 3212：エージェント制御サービスを認証できませんでした。

考えられる原因 | 解決策
このエージェントにはパスワードが必要で、暗号化が有効になっています。 このエージェントのサーバー証明書が見つからないか、必須のダイナミック リンク ライブラリ (.dll) が存在しません (たとえば、"ssleay32.dll")。 ただし、これが問題の場合は、エージェント制御サービスの起動時にエラーが報告されないことに注意してください。 | 一番良い方法は、リモート エージェントを再インストールすることです。証明書やダイナミック リンク ライブラリが存在しないということは、このエージェントが正しくインストールされていないことを示しています。
親トピック: コントローラとエージェント間の通信のトラブルシューティング
関連資料
負荷テスト コントローラ - 3213：エージェント制御サービスがエージェントを作成できませんでした。


負荷テスト コントローラ - 3213：エージェント制御サービスがエージェントを作成できませんでした。

考えられる原因 | 解決策
これは、エージェントがパスワードを必要としないこと以外は、3212 と同じタイプのエラーです。 | 「負荷テスト コントローラ - 3212：エージェント制御サービスを認証できませんでした。」を参照してください。
親トピック: コントローラとエージェント間の通信のトラブルシューティング
関連資料
負荷テスト コントローラ - 3212：エージェント制御サービスを認証できませんでした。


負荷テスト コントローラ - 3223：エージェント接続が失われました。

考えられる原因 | 解決策
このエラーは、コントローラとエージェント間の接続が失われたときや、負荷テスト コントローラの通信ユニットが接続に関する問題を報告したときに発生します。 さらに、プロキシ経由でエージェントに接続している場合は、プロキシ自体にバグがあると、このエラーの原因になります。 | コントローラまたはエージェントのホーム ディレクトリに、orbClient_<エージェント名>.log と orbServer_<エージェント名>.log という名前のログファイルがそれぞれ存在するはずです。これを見ると、このエラーに関するログ情報を参照できます。
親トピック: コントローラとエージェント間の通信のトラブルシューティング


負荷テスト コントローラ - 3233：エージェントのバージョンが、コントローラのバージョンと一致しません。

考えられる原因 | 解決策
エージェントのバージョンが、コントローラのバージョンと一致しません。 | 正しいバージョンのリモート エージェントをインストールします。
親トピック: コントローラとエージェント間の通信のトラブルシューティング


負荷テスト コントローラ - 3303：ローカル結果ディレクトリを作成できませんでした。

考えられる原因 | 解決策
これは、アクセス権の問題です。つまり、エージェント プロセスのユーザー アカウントが、ディレクトリを作成するために必要なアクセス権を持っていません。作成したいディレクトリの親ディレクトリが、すべてのアカウントに対して読み取り専用になっている可能性があります。 | 必要なアクセス権を許可します。
親トピック: コントローラとエージェント間の通信のトラブルシューティング


負荷テスト コントローラ - 3304：ローカル結果ディレクトリをクリアできませんでした。

考えられる原因 | 解決策
ローカル結果ディレクトリ内のファイルが開いており、別のプロセス (大抵は perfLtcAgent.exe や perfRun.exe) によって使われています。 通常、これは、前回の負荷テストの終了時に、エージェントまたはランタイム プロセスのいずれかがシャットダウンしなかった (このような状況は起こるべきではない) ことを暗示しています。 | 保留中の perfLtcAgent.exe ファイルや perfRun.exe ファイルをチェックして、それらを手動で終了します。 これが原因ではない場合は、別のプログラムが、ローカル結果ディレクトリ内の開いているファイルを使用しています。 これらのどの方法でも問題が解決しない場合は、リモート エージェントのマシンを再起動します。
親トピック: コントローラとエージェント間の通信のトラブルシューティング


負荷テスト コントローラ - 3305：ローカル データ ディレクトリを作成できませんでした。

考えられる原因 | 解決策
「負荷テスト コントローラ - 3303：ローカル結果ディレクトリを作成できませんでした。」を参照してください。 | 「負荷テスト コントローラ - 3303：ローカル結果ディレクトリを作成できませんでした。」を参照してください。
親トピック: コントローラとエージェント間の通信のトラブルシューティング
関連資料
負荷テスト コントローラ - 3303：ローカル結果ディレクトリを作成できませんでした。


負荷テスト コントローラ - 3306：ローカル データ ディレクトリをクリアできませんでした。

考えられる原因 | 解決策
「負荷テスト コントローラ - 3304：ローカル結果ディレクトリをクリアできませんでした。」を参照してください。 | 「負荷テスト コントローラ - 3304：ローカル結果ディレクトリをクリアできませんでした。」を参照してください。
親トピック: コントローラとエージェント間の通信のトラブルシューティング
関連資料
負荷テスト コントローラ - 3304：ローカル結果ディレクトリをクリアできませんでした。


負荷テスト コントローラ - 3422：コマンド (connect) はタイムアウトしました。

考えられる原因 解決策
通常、コントローラは、次の処理を実行するために 30 秒かかります。
  • リモート エージェント制御サービスに接続する
  • (必要であれば) 認証情報をリモート エージェント制御サービスに渡す
  • エージェント制御サービスにエージェントの作成を依頼する
  • エージェントに接続する
  • リモート エージェントとバージョン情報を交換する
これらのタスクに、デフォルトのタイムアウトの 30 秒よりも長い時間がかかる場合があります。特に、エージェントがプロキシ経由で接続されている場合や、接続が遅い場合です。 		システム設定で、より長いタイムアウト時間を指定します。
親トピック: コントローラとエージェント間の通信のトラブルシューティング
関連タスク
コントロール設定を構成する


Silk Performer - 32：アクセスが拒否されました。認証が必要です。

考えられる原因 | 解決策
エージェントはパスワードを要求していますが、コントローラがパスワードを送信しませんでした (コントローラ側が認証のための情報を出しませんでした)。 | エージェントの接続設定を調整します。
親トピック: コントローラとエージェント間の通信のトラブルシューティング
関連概念
リモート エージェント
関連資料
Silk Performer - 33：認証に失敗しました (パスワードが間違っています)。


Silk Performer - 33：認証に失敗しました (パスワードが間違っています)。

考えられる原因 | 解決策
エージェントはパスワードを要求していますが、コントローラが送信したパスワードが間違っています。 | エージェントの接続設定を調整します。
親トピック: コントローラとエージェント間の通信のトラブルシューティング
関連概念
リモート エージェント
関連資料
Silk Performer - 32：アクセスが拒否されました。認証が必要です。


Silk Performer - 25：同時実行のインスタンスが上限を超えています。

考えられる原因 | 解決策
2 つのエージェントを同じコンピュータ上で同時に実行させることはできません。 ほとんどの場合、そのエージェントは、別のコントローラによって起動された負荷テストに関係しています。 | 他のコントローラが、負荷テストを終了するのを待ってから、再試行します。 これが原因ではない場合は、前の負荷テストの終了時にエージェントが正しく終了なかったので、そのエージェント プロセスを手動で終了する必要があります。
親トピック: コントローラとエージェント間の通信のトラブルシューティング


システム - 2：指定されたファイルが見つかりません。

考えられる原因 | 解決策
エージェントの実行可能ファイル (perfLtcAgent.exe) が見つからなかったか、performerLocal.ini ファイル内のエージェントの実行可能ファイル用のエントリが異なっています。 | performerLocal.ini ファイルをチェックします。 ini ファイルがない場合や、perfLtcAgent.exe が存在しない場合は、エージェントを再インストールします。
親トピック: コントローラとエージェント間の通信のトラブルシューティング


エラー メッセージの概要

Silk Performer のシステム関連エラーは、スクリプトのコンパイル中、または負荷テストの実行中のいずれかで発生します。その結果、負荷テストが失敗する場合もあります。 このようなエラーが発生すると、Silk Performer は、システムレベルのエラーを画面に出力します。 深刻なシステムレベル エラーは、Windows NT のイベント ログに記録されます。

Silk Performer は、システムレベル エラーを次のタイプに分類します。

  • コンパイラ エラー
    • 字句エラー
    • 意味エラー
    • 構文エラー
  • 内部エラー
  • システム制限エラー
  • ランタイム エラー

各エラー メッセージは、連続したエラー番号 (1 つのエラー カテゴリ内では一意) とエラー カテゴリを表す 3 文字のコードによって識別されます。その後には、エラーの詳細を説明した文字列が続きます。

  • コンパイラ エラー
    コンパイル中にエラーが発生した場合、Silk Performer コンパイラは、エラーを検出した位置で停止します。
  • 内部エラー
    Silk Performer は、内部スクリプト エラーを検出します (エラー タイプ COM)。
  • システム制限エラー
    スクリプトのコンパイル中や負荷テスト の実行中に、システム制限エラー (エラー タイプ RES) が発生する場合があります。
  • ランタイム エラー
    ランタイム エラーは、コンパイル中には認識できない、テスト スクリプト内のプログラミング エラーを表します。
親トピック: トラブルシューティング
関連概念
Error-Handling Functions


コンパイラ エラー

コンパイル中にエラーが発生した場合、Silk Performer コンパイラは、エラーを検出した位置で停止します。 エラー メッセージが表示され、エラーの原因になっている行が強調表示されます。

コンパイラは、エラーを次のカテゴリに分類します。

  • 字句エラー (LEX)
  • 意味エラー (SEM)
  • 構文エラー (SYN)
  • 字句エラー
    字句エラー (エラー タイプ LEX) は、コンパイラが、Benchmark Description Language では許されていない字句シンボルを検出した場合に発生します。
  • 意味エラー
    意味エラー (エラー タイプ SEM) は、意味的な条件が Benchmark Description Language の要件に従っていない場合に発生します。
  • 構文エラー
    テスト スクリプトの構文が Benchmark Description Language の構文と一致しない場合は、構文エラー (エラー タイプ SYN) が発生します。
親トピック: エラー メッセージの概要


字句エラー

字句エラー (エラー タイプ LEX) は、コンパイラが、Benchmark Description Language では許されていない字句シンボルを検出した場合に発生します。

例

スクリプトに '{' などの無効な文字が含まれていると、コンパイラが停止して、エラー メッセージが出力されます。

1 benchmark WebTest
2
3 dcluser
4   user    {

出力

compile error LEX 13: not a lexical symbol of BDL
--- compilation was not successful ---
親トピック: コンパイラ エラー


意味エラー

意味エラー (エラー タイプ SEM) は、意味的な条件が Benchmark Description Language の要件に従っていない場合に発生します。

例

宣言されていない変数 (下の例では "i") を使用すると、コンパイラは停止し、次のエラー メッセージが表示されます。

46 dcltrans
47   transaction TMain
48   var
49     artname      : string(40);
50     artno, price : number;
51     result set c1;
52   begin
53     writeln; write("transaction TMain:"); writeln;
54     c1: SelArticle(out artno, price, artname);
56     write("rows found: "); write(rows(c1));
57     fetch c1 all;
58     for i:

出力

compile error SEM 12: variable is not declared
--- compilation was not successful ---
親トピック: コンパイラ エラー


構文エラー

テスト スクリプトの構文が Benchmark Description Language の構文と一致しない場合は、構文エラー (エラー タイプ SYN) が発生します。

例

then 文内で if キーワードを指定しないと、次のエラー メッセージが表示されます。

 8 transaction TMain
 9 var
10   j : number init 1;
11   i : array [500] of number;
12   s : array [5] of string(10);
13 begin
14   if j=1
15   j:

出力

compile error SYN 38: 'then' expected
--- compilation was not successful ---
親トピック: コンパイラ エラー


内部エラー

Silk Performer は、内部スクリプト エラーを検出します (エラー タイプ COM)。 このエラーが発生した場合は、カスタマ ケアにお問い合わせください。

親トピック: エラー メッセージの概要


システム制限エラー

スクリプトのコンパイル中や負荷テスト の実行中に、システム制限エラー (エラー タイプ RES) が発生する場合があります。 テスト の実行中にこのエラーが発生した場合は、テスト が失敗します。 これらのエラーは、システムの制限を超えていることを表します。

親トピック: エラー メッセージの概要


ランタイム エラー

ランタイム エラー (エラー タイプ RUN) を出力するのは、Silk Performer シミュレータのみです。 ランタイム エラーは、コンパイル中には認識できない、テスト スクリプト内のプログラミング エラー (たとえば、配列の範囲外のインデックスの使用など) を表します。 ランタイム エラーが発生すると、画面と .rpt ファイルにエラー メッセージが出力されます。

親トピック: エラー メッセージの概要


Silk Performer の既知の問題

ここでは、Silk Performer の既知の問題と、該当する場合はその回避策について説明します。

  • Silk Performer に関する一般的な問題
  • TrueLog Explorer の問題
  • SAPGUI の問題
  • Citrix に関する問題
  • Oracle Forms の問題
  • ブラウザ駆動型負荷テストの問題
  • Java Over HTTP の問題
親トピック: Silk Performer Workbench 21.0


Silk Performer に関する一般的な問題

  • マルチバイト文字セットのサポート制限
  • Silk Performer のコンテキスト ヘルプを Windows Vista 以降で動作させる方法
  • 以前のバージョンを Silk Performer が削除するときに誤って Silk Launcher Service が削除される
  • Silk Test が Program Files フォルダにインストールされないと GUI レベル テストが機能しない
  • 日本語ライブラリから生成された GUI レベル スクリプトがコンパイルできない
  • System Configuration Manager 項目がツール メニューで無効になる
  • 回復した結果から作成したレポートに誤った値が表示される
  • キーワード駆動テストと Selenium を使用した GUI レベルのテストが Java 8 のみをサポートする
  • カスタム BDH ファイル内の BDL 関数に対するエラー表示
親トピック: Silk Performer の既知の問題


マルチバイト文字セットのサポート制限

問題：

マルチバイト文字セット/UTF-8/EUC-JP のプロトコルおよびテストのサポートは特定のアプリケーションの種類に制限されます。

解決策：

マルチバイト文字セット/UTF-8/EUC-JP のプロトコルおよびテストのサポートは以下のアプリケーションの種類に制限されます。
  • Web アプリケーション テスト（プロトコル レベルおよびブラウザ駆動レベル）
  • SAPGUI テスト
  • Oracle Forms/Oracle Applications テスト
  • Citrix テスト
親トピック: Silk Performer に関する一般的な問題


Silk Performer のコンテキスト ヘルプを Windows Vista 以降で動作させる方法

問題：

Silk Performer のコンテキスト ヘルプを Windows Vista 以降の Windows のバージョンで動作しない

解決策：

Silk Performer では、GUI コントロールを右クリックして、ヘルプ を選択すると、GUI 機能に関する情報が表示されます。このコンテキスト ヘルプは、Windows Vista 以降の Windows のバージョンでは動作しません。これは既知の問題で、Windows Help プログラム WinHlp32.exe が最近の Windows のバージョンに搭載されていないことと関連しています。この問題を解決するには、Microsoft Download Center から対応する .exe ファイルをダウンロードしてください。詳細については次の URL を参照してください：http://support.microsoft.com/kb/917607。

親トピック: Silk Performer に関する一般的な問題


以前のバージョンを Silk Performer が削除するときに誤って Silk Launcher Service が削除される

問題：

システムに複数のバージョンの Silk Performer がインストールされている場合、前のバージョンの Silk Performer を削除するときに、誤って Silk Launcher Service も削除されてしまいます。

解決策：

システムからすべてのバージョンの Silk Performer をアンインストールしてから、必要なバージョンを古い順に再インストールします。

親トピック: Silk Performer に関する一般的な問題


Silk Test が Program Files フォルダにインストールされないと GUI レベル テストが機能しない

問題：

Silk Test が Program Files (Program Files (x86)) フォルダにインストールされない場合、GUI レベル テストが機能しません。

解決策：

ありません。

親トピック: Silk Performer に関する一般的な問題


日本語ライブラリから生成された GUI レベル スクリプトがコンパイルできない

問題：

非 ASCII 文字を使用し名前の Silk Test テストケースをインポートすると、生成したスクリプト スタブをコンパイルできません。

解決策：

Silk Test でテストケース名を ASCII 文字だけを使用するように変更するか、Silk Performer スクリプトで生成したトランザクション名を変更してください。

親トピック: Silk Performer に関する一般的な問題


System Configuration Manager 項目がツール メニューで無効になる

問題：

システムに複数のバージョンの Silk Performer がインストールされている場合、前のバージョンの Silk Performer をアンインストールすると、System Configuration Manager 項目が ツール メニューで無効になる場合があります。

解決策：

現在のバージョンの Silk Performer を再インストールします。

親トピック: Silk Performer に関する一般的な問題


回復した結果から作成したレポートに誤った値が表示される

問題：

回復した結果から作成した要約レポート、詳細レポート、地域概要レポートに、誤った値が表示される場合があります。

解決策：

回復処理には限界があるため、すべての値が完全に回復できるわけではありません。次の問題が発生する可能性があります。
  • 要約データが欠落している。
  • アクティブ ユーザー の数に誤りがある。
  • セッション時間 と セッション ビジー時間 が回復されない。 両方とも常に 0 と表示されます。
  • 平均アクション時間 が回復されない。 常に - と表示されます。
  • エラー の数に誤りがある。
親トピック: Silk Performer に関する一般的な問題


キーワード駆動テストと Selenium を使用した GUI レベルのテストが Java 8 のみをサポートする

問題：

キーワード駆動テストと Selenium を使用した GUI レベルのテストが Java 8 のみをサポートします。

解決策：

これは、Selenium の制限事項です。この問題を回避するには、Java 8 を使用してください。

親トピック: Silk Performer に関する一般的な問題


カスタム BDH ファイル内の BDL 関数に対するエラー表示

問題：

カスタム（ユーザー定義） BDH ファイルを利用すると、メイン BDF ファイルのコンパイルは正常に終了するにも関わらず、コード エディタ上で BDL 関数が 「関数またはイベント ハンドラは宣言されていません」として表示される場合があります。

解決策：

コード エディタの BDL パーサーがメイン BDF ファイルの現在の BDH ファイルの前でどの BDH ファイルがインクルードされたかを判定できないことが原因です。カスタム BDH ファイル内で、インクルードを完結させる必要があります。つまり、すべてのエラー表示の原因となる API 関数に対して、その関数を定義する BDH ファイルに対する use ステートメントを追加します。

親トピック: Silk Performer に関する一般的な問題


TrueLog Explorer の問題

  • アクセス中のウィルス スキャナ ソフトウェアにより TrueLog Explorer がクラッシュすることがある
  • 関連トランザクションがインクルード ファイルにある場合に視覚的なスクリプトの変更に失敗する
  • ビジュアル ユーザー データ カスタマイズ機能がブラウザ レベル スクリプトで機能しない
親トピック: Silk Performer の既知の問題


アクセス中のウィルス スキャナ ソフトウェアにより TrueLog Explorer がクラッシュすることがある

問題：

アクセス中のウィルス スキャナにより TrueLog Explorer がクラッシュすることがあります。

解決策：

ウィルス スキャナ ソフトウェアは、TrueLog Explorer のクラッシュやパフォーマンスの劣化など、さまざまな問題が発生する可能性があります。 負荷テストの間は、エージェント コンピュータおよびコントローラ コンピュータでウィルス スキャナ ソフトウェアを無効にすることを推奨します。

親トピック: TrueLog Explorer の問題


関連トランザクションがインクルード ファイルにある場合に視覚的なスクリプトの変更に失敗する

問題：

関連トランザクションがインクルード ファイルにある場合に、視覚的なスクリプトの変更に失敗します。

解決策：

BDH ファイルにトランザクションを移動しないでください。

親トピック: TrueLog Explorer の問題


ビジュアル ユーザー データ カスタマイズ機能がブラウザ レベル スクリプトで機能しない

問題：

ビジュアル ユーザー データ カスタマイズ機能が、ブラウザ レベル スクリプトで機能しません。

解決策：

この動作は仕様です。HTML フォーム名は HTML フォームおよび BDL フォームと一致している必要があるため、TrueLog Explorer は、WebPageSubmit 呼び出し (ページ ベースのブラウザ レベル API) によって送信されたフォームのみを考慮します。 TrueLog Explorer のビジュアル ユーザー データ カスタマイズ機能を使用してスクリプトをカスタマイズする場合、ページ ベースのブラウザ レベル API スクリプトを記録する必要があります。

親トピック: TrueLog Explorer の問題


SAPGUI の問題

  • コントロール位置情報を SAP から正しく取得できない
親トピック: Silk Performer の既知の問題


コントロール位置情報を SAP から正しく取得できない

問題：

まれに、コントロール位置情報を SAP から正しく取得できないことがあります。 このため、TrueLog Explorer では、選択したコントロール矩形をスクリーンショットの正確な位置に表示できない場合があります。

解決策：

スクリーンショットの代わりにコントロール ツリーを使用します。

親トピック: SAPGUI の問題


Citrix に関する問題

  • Citrix 記録中に既存のセッションに接続すると、使用できないスクリプトが生成される
  • Citrix Receiver または Citrix Workspace アプリを使った負荷テストの制限事項
  • Citrix パス スルー認証がカスタム ツールで有効化されない
  • Citrix プロセスは別のユーザー アカウントによって既に実行中です
親トピック: Silk Performer の既知の問題


Citrix 記録中に既存のセッションに接続すると、使用できないスクリプトが生成される

問題：

Citrix 記録中に既存のセッションに接続すると、使用できないスクリプトが生成されます。

解決策：

既存の Citrix セッションに接続すると、Citrix クライアントではすべてのウィンドウを認識しないので、同期関数はスクリプト化されません。 必ず新しいセッションを記録してください。

親トピック: Citrix に関する問題


Citrix Receiver または Citrix Workspace アプリを使った負荷テストの制限事項

問題：

Citrix Receiver や Citrix Workspace アプリの一部のバージョンには既知のバグがあり、いくつかの問題が発生する可能性があります。

たとえば、
  • Citrix Receiver 4.4, 4.10 以降で Citrix 負荷テストを実行すると、BDL 関数 CitrixConnect が機能しません。
  • Citrix Workspace アプリ 20.8.0.46 (2008) および 20.9.0.3 (2009) では、onmove イベントと onsize イベントが記録されません。

解決策：

Citrix Receiver または Citrix Workspace アプリの他のバージョン (LTSR バージョンをお勧めします) を使用してください。
  • オプション 1：Citrix Receiver (LTSR) 4.9.7 以降を使用します。
  • オプション 2：最新の Citrix Workspace アプリ (LTSR) 19.12.1001.3 を使用します。
親トピック: Citrix に関する問題


Citrix パス スルー認証がカスタム ツールで有効化されない

問題

Citrix パス スルー認証は、カスタム ツールで有効化されません。このため、Silk Performer は、この認証モードを記録または再生することはできません。

解決策

パス スルー認証を有効化しても Citrix の記録と再生は可能で、問題は発生しません。ただ単に、資格情報の入力が求められるだけです。つまり、パス スルー認証を有効化しても、実際はそれが機能ない、ということにご留意ください。

親トピック: Citrix に関する問題


Citrix プロセスは別のユーザー アカウントによって既に実行中です

問題

Citrix 負荷テストの実行時に、次のエラー メッセージが表示されます。Citrix プロセスは別のユーザー アカウントによって既に実行中です。このエラーは、Citrix プロセス wfcrun32.exe が、別のユーザー アカウントによって既に実行されている場合に発生します。たとえば、ユーザー A が Windows セッションを既に使用しているときに、負荷テストを開始して、エージェントが同じ Windows セッションにユーザー B としてログインするとします。このとき、ユーザー B はプロセス wfcrun32.exe を開始しようとしますが失敗し、エラーを Silk Performer に表示します。

解決策

負荷テストを開始する前に、ユーザー A をログアウトして、実行中の Windows セッションを閉じてください。

親トピック: Citrix に関する問題


Oracle Forms の問題

  • 主要な Oracle Forms アプレット クラスをフックした後、そのクラスに依存しているその他の jar ファイルを JInitiator によってロードできない
  • Oracle Forms の記録中にブラウザがクラッシュする
  • Oracle Forms を記録できない
親トピック: Silk Performer の既知の問題


主要な Oracle Forms アプレット クラスをフックした後、そのクラスに依存しているその他の jar ファイルを JInitiator によってロードできない

問題

主要な Oracle Forms アプレット クラスをフックした後、そのクラスに依存しているその他の jar ファイルを JInitiator によってロードできません。

解決策

Oracle Forms または Oracle Applications を記録するときに、JInitiator プロパティ ダイアログで次の Java ランタイム オプションを定義します："-noverify -mx128m" NoVerify を指定することで、このロード問題を回避できます。 また、JInitiator 1.1.7.x のデフォルトの 仮想メモリ サイズ は、16から64 MB です。 オプション -mx128m は、仮想メモリ サイズを 128 MB に増やします。 記録によって追加のメモリ オーバーヘッドが発生するので、この追加メモリが必要になります。 OutOfMemory エラーが発生した場合は、この値をさらに増やすことができます。

親トピック: Oracle Forms の問題


Oracle Forms の記録中にブラウザがクラッシュする

問題

Oracle Forms の記録中にブラウザがクラッシュします。

解決策

Oracle Forms 6i を記録するときは、Java ランタイム設定で Java JIT (Just-In-Time コンパイル) を無効にすることをお勧めします。 この理由は、Java 仮想マシンの JIT ライブラリー (symcjit.dll) が原因でブラウザがクラッシュする可能性があるためです。

Java JIT は、次のいずれかのオプションを使用して無効にできます。

オプション 1：Oracle JInitiator プロパティ ダイアログの Java ランタイム設定で - DJAVA.COMPILER=NONE を定義します。 この操作は、JInitiator と一緒にインストールされる JInitiator コントロール パネルを使用して行う必要があります (Windows コントロール パネルでこのコントロール パネルにアクセスできます)。
  1. JInitiator コントロール パネルを起動します。
  2. DJAVA.COMPILER=NONE を Java 実行時のパラメータ テキスト フィールドに追加します。
  3. 適用 をクリックします。
オプション 2：[Oracle JInitiator プロパティ] ダイアログのチェック ボックスを使用して、Just In Time コンパイラを無効にします (バージョン 1.1.8.x 以降のみ対象)。
  1. JInitiator コントロール パネルを起動します。
  2. 詳細 タブを選択します。
  3. Enable Just In Time Compiler チェック ボックスをオフにします。
  4. 適用 をクリックします。
オプション 3：環境変数 JAVA_COMPILER=NONE を定義します。
  1. マイ コンピュータ を右クリックして、プロパティ を選択します。
  2. 詳細設定 を選択します。
  3. 環境変数 を選択します。
  4. システム環境変数 で 新規 をクリックします。
  5. 変数名 に JAVA_COMPILER を入力します。
  6. 変数値 に NONE を入力します。
  7. OK をクリックしてダイアログを終了します。
親トピック: Oracle Forms の問題


Oracle Forms を記録できない

問題

Oracle Forms を記録しようとすると、次の確認ダイアログが表示されます：「このアプリケーションを実行しますか?」しかし、このダイアログの 実行 ボタンがクリックできないため、記録を続けることができません。この問題は、主に Windows 7 で発生します。

解決策

Silk Performer のインストール ディレクトリにある Essentials フォルダに移動します。たとえば、次のようなパスになります：C:\Program Files (x86)\Silk\Silk Performer <version>\Essentials。対応する Oracle Forms Essentials ファイルを探します：OraForms<version>.sep。.sep ファイルには、DeploymentRuleSet.jar ファイルが含まれています。.sep ファイルを展開して、DeploymentRuleSet.jar を次のディレクトリにコピーします：C:\Windows\Sun\Java\Deployment。Silk Performer を再起動します。これで、記録を開始しても、ダイアログが表示されなくなります。DeploymentRuleSet.jar は、Silk Performer 18.5 以降のバージョンで利用できます。

親トピック: Oracle Forms の問題


ブラウザ駆動型負荷テストの問題

  • ShowModalDialog と ShowModelessDialog が完全にサポートされない
  • 基本の BrowserWindow の WebBrowser コントロールを終了させると不安定になる
  • TrueLog Explorer がブラウザ駆動型テストの解凍データ サイズを表示する
親トピック: Silk Performer の既知の問題


ShowModalDialog と ShowModelessDialog が完全にサポートされない

問題

非標準関数である showModalDialog と showModelessDialog は完全にサポートされません。これらの関数のブラウザ駆動の実装は、Internet Explorer の実装と完全互換ではありません。特にこのようなダイアログで重い JavaScript ページがロードされると関数が正しく機能しない可能性があります。

解決策

このような場合には、GUI レベル テストを使用してみてください。

親トピック: ブラウザ駆動型負荷テストの問題


基本の BrowserWindow の WebBrowser コントロールを終了させると不安定になる

問題

Silk Performer のブラウザ駆動型アプローチは、テストのシナリオ全体を通して、基本の（最初の）BrowserWindow の WebBrowser コントロールに依存しています。あるアプリケーションでは、特定のワークフローを実装するために、新しい子ウィンドウを開き、基本ウィンドウを閉じることがあります。このテスト シナリオにおける閉じたウィンドウが基本の（最初の）BrowserWindow であった場合、Silk Performer のブラウザ駆動エンジンの内部状態が未定義な状態になります。これによって、記録や再生中にアプリケーションが予期しない動作をする場合があります。

解決策

テストにもうひとつ BrowserWindow を追加して、新しい基本ウィンドウとして使用します。基本の（最初の）BrowserWindow は、このシナリオ上では未使用なままにします。記録中に新しいウィンドウを追加するには、ファイル > 新しいタブ をクリックします。記録の最初に、ウィンドウが正しく追加されていることを確認してください。既存のスクリプトの場合は、BrowserCreateWindow ステートメントを、最初の BrowserGetActiveWindow ステートメントの前に追加します。

親トピック: ブラウザ駆動型負荷テストの問題


TrueLog Explorer がブラウザ駆動型テストの解凍データ サイズを表示する

ブラウザ駆動型テスト時に圧縮データを受信した場合、TrueLog Explorer や 仮想ユーザー レポート に、誤った結果が表示されます。TrueLog Explorer の 統計 タブで、受信したレスポンス データ 測定値に解凍データ サイズが表示され、仮想ユーザー レポートには値 0 が表示されます。この問題は、ブラウザ駆動型テストで、テスト中に圧縮データが転送された場合にのみ発生します。

親トピック: ブラウザ駆動型負荷テストの問題


Java Over HTTP の問題

  • 以前の Java over HTTP スクリプトが正しく実行できない場合がある
親トピック: Silk Performer の既知の問題


以前の Java over HTTP スクリプトが正しく実行できない場合がある

問題

以前のバージョンの Silk Performer で記録された Java over HTTP スクリプトが正しく実行できない場合があります。

解決策

サードパーティ コンポーネントの XStream をアップグレードしたため、以前のバージョンの Silk Performer で記録された Java over HTTP スクリプトが、正しく実行できない場合があります。このような場合には、現在のバージョンの Silk Performer を使用してスクリプトを記録しなおしてください。

親トピック: Java Over HTTP の問題


Benchmark Description Language (BDL) Reference

This Help describes the Silk Performer Benchmark Description Language (BDL) and the components included in a test script.

  • Scripting Language Structure and Statements
    Explains the lexical and program structure of Silk Performer's Benchmark Description Language (BDL) and the statements for expressing sequences, selections, and iterations.
  • General Functions
    Lists the functions that set specific simulation options, allocate, read and write memory, handle files, and more.
  • Application Server Functions
    Lists BDL functions for testing application servers and the architectures they are based on.
  • Browser-Driven Web Load Testing Functions
    Lists the functions that are specific to Silk Performer browser-driven Web load testing functionality.
  • Database (DBMS) Functions
    Describes the different levels at which you can create load testing scripts for a database server.
  • ERP/CRM Functions
    Silk Performer provides functions for testing ERP/CRM systems like SAP, Siebel, and PeopleSoft.
  • Internet Functions
    Lists BDL functions for testing Web applications and protocols, such as HTML, FTP, Remedy, SMTP, TCP/IP, and many more.
  • Java Framework Functions
    As a powerful extension to Silk Performer’s Benchmark Description Language, the Java Framework enables you to implement user behavior in Java.
  • JMS Functions Reference
    Silk Performer provides JMS API functions to write and run scripts for testing JMS applications and providers.
  • Monitoring Functions
    Silk Performer provides functions for real-time monitoring server resources via PDCE and SNMP, supported by Performance Explorer.
  • .NET Framework Functions
    Lists the functions that are available for interaction with .NET objects.
  • GUI-Level Testing Functions
    Lists BDL functions for performing GUI-level testing against (fat) client applications.
  • Terminal Services Functions
    Silk Performer provides functions for testing applications that are hosted via terminal services.


Scripting Language Structure and Statements

  • Lexical Structure
    Describes the Silk Performer Benchmark Description Language (BDL) and the components of a load testing script.
  • Program Structure of Load Testing Scripts
    Defines the sections within a load testing script.
  • Statements
    Lists the statements for expressing sequences, selections, and iterations in Silk Performer.
親トピック: Benchmark Description Language (BDL) Reference


Lexical Structure

The scripting language used by Silk Performer is called Benchmark Description Language (BDL). BDL is not case-sensitive.

A BDL load testing script consists of:

  • Keywords
    Lists the keywords reserved for Benchmark Description Language use only.
  • Names
    Provides an overview of names and includes examples of valid and invalid names.
  • Strings
    Describes the syntax for strings within Silk Performer.
  • Escape Sequences In String Constants
    Lists and describes the escape sequences for string constants.
  • Single Characters
    Provides an overview of single-character constants and includes valid and invalid examples.
  • Numbers
    Distinguishes between integers and floating-point numbers and provides valid and invalid examples.
  • Special Characters
    Lists the special characters that Silk Performer uses.
  • Comments
    Describes line, block, and nested comment use in Silk Performer.
親トピック: Scripting Language Structure and Statements


Keywords

All names listed in the table below are reserved Benchmark Description Language keywords. They must not be used as identifiers in any context of a Silk Performer test script.
all | allownull | and | array
begin | benchmark | bin | boolean
callback | char | chr | commit
const | cursor | dclform | dclfunc
dclparam | dclrand | dclsql | dcltrans
dcluser | dll | do | double
dstring | else | elseif | end
eos | exit | explicit | false
fetch | float | for | form
function | halt | handler | if
in | init | inout | into
last | lenspec | long | loop
mod | next | not | number
of | optional | or | ord
out | proc | ptr | rc
Reset | result | return | RndBin
RndExpF | RndExpN | RndFile | RndInd
RndPerN | RndSno | RndStr | RndStream
RndUniF | RndUniI | RndUniN | rollback
row | rows | set | short
sizeof | sizespec | sql | stored
string | then | throw | to
transaction | transactions | true | unicode
union | unique | unsigned | use
user | var | wait | while
write | writeln | @codepage | @deprecated
親トピック: Lexical Structure
関連概念
Syntax of Load Testing Scripts
Program Structure of Load Testing Scripts
関連資料
マルチバイトのサポート


Names

Names are used to identify random variables, named constants, users, transactions, functions, parameters, variables, Web forms, SQL commands, database cursors and the benchmark itself. There is no length limitation for names (except for names identifying users, cursors and SQL commands). Benchmark Description Language does not distinguish between upper-case and lower-case letters (for example, IndX INDX indx).

The table below lists all length restrictions for identifiers in BDL:

Identifier | Maximum length
for SQL command | 18 characters
for user group | 15 characters
for database cursor | 8 characters

Syntax

ident  = letter { letter | digit}

letter =  "abcdefghijklmnopqrstuvwxyz"
          "ABCDEFGHIJKLMNOPQRSTUVWXYZ_@".
digit  =  "0123456789".

Examples

The following names are valid:

  • abc123
  • a
  • _a
  • __1x
  • ABX1
  • _1
  • This_is_a_very_long_name

The following are invalid names:

  • 123
  • 1a

The following names for cursors and users are valid:

  • abc123
  • a
  • usr1
  • cursor1
  • c_1

The following are invalid names for cursors and users:

  • 1a
  • name_is_too_long
  • 12
親トピック: Lexical Structure
関連資料
Special Characters


Strings

String constants are bound with double quotes ("). String constants can exceed line boundaries using the escape sequence "\" (backslash). Any character is a valid character in a string constant. To use a double quote inside a string, you must place a backslash in front of the double quote (\"). To use a backslash inside a string, you must write two backslashes (\\). Multiple string constants bound with double quotes and separated only with white space are treated as one string constant.

This data type represents an object consisting of a memory buffer for holding character data and its length. The memory buffer is always equal or larger than the character data represented by a string variable. You can declare the initial size of the memory buffer, which corresponds to the number of characters a size of the memory buffer, which corresponds to the number of characters a variable of type string can hold without resizing its buffer. During its use, the memory buffer can grow and shrink on demand

If you omit the length specification, the memory buffer is automatically pre-allocated to hold 254 characters including a termination character. A string is terminated by a null character (\0). However, if binary data is stored in the string variable several null characters may occur. The string variable knows the length of the data it is holding.

The elements of a string (single characters) can be referenced by an index beginning at one (1) for the first character in the string.

The string data type is as well designed to hold binary data. If binary data is assigned to a string variable the real length of the binary data is set accordingly.

A string variable implements the so-called NULL-pointer semantics, which means that it can differentiate between an empty string and a null string. A null string can be interpreted as string variable referencing no string object (null). An Empty string is a variable that references a string object, which holds a string without characters (""). In order to investigate or manipulate the current state of a string variable several string manipulation functions are provided.

注: Any string variable, which is declared in any var section is initialized to its declared initial memory buffer size and represents an empty string (not null).

Syntax

string = '"' char { char } '"'.

BDL Example

The following string constants are valid:

dcltrans
  transaction TMain
var
  sString1 : string(40);
  sString2 : string(100);
  sString3 : string;

  sBin1 : string;
  sBin2 : string;
  sBin3 : string;
begin
  sString1 := "This is a string";
  sString2 := sString1;
  sString3 := "Hello" + sString1;

  sBin1 := "\h11223300445566";
  sBin2 := sBin1;
  sBin3 := "Hello " + sBin2 + "\h20";
end TMain;

SQL Example

String constants used in SQL commands are enclosed in single quotes (')

SELECT * FROM article WHERE name = 'pants'
親トピック: Lexical Structure
親トピック: Data Types
関連資料
Single Characters
Escape Sequences In String Constants


Escape Sequences In String Constants

Benchmark Description Language permits the use of escape sequences (for example, \, \n, \t, \n) in formatting string constants. The valid escape sequences match those in the programming language C and extend this set with the hexadecimal sequence \h. The meaning of the escape sequences are as follows:

Escape sequence | Description
\ | line continuation
\n | new line, line feed
\r | carriage return
\t | tabulator
\v | vertical tab
\b | backspace
\a | bell alert
\f | new page, form feed
\\ | backslash
\" | double quote
\h | hexadecimal representation
\x | next character in hexadecimal representation Example: \x2A indicates an asterisk

Example

dcltrans
  transaction TString
  var
    sString1, sString2: string;
  begin
    sString1 := "This is a constant string"
                "split into two lines"
    sString2 := "This is the first line, \
                 this is still the first line\nThis is the second line";
    write(sString1); writeln; write(sString2); writeln;
  end TString;

Example

const
  cbuf1 := "\h4142434A" // "ABCJ" length = 4
           "\h204142434A20" // " ABCJ " length = 6
           "\x20b\x20c\x20d"; // " b c d" length = 6
  // "ABCJ ABCJ b c d" length = 16

dcltrans
  transaction TMain
  const
    c1 := "abc";
  var
    s1 : string;
    n1 : number;
  begin
    s1 := "abc"
          "def";
    s1 := cbuf1;
    n1 := sizeof(cbuf1);
    write("length=" + string(n1)); writeln;
    write("\h4142434A" // "ABCJ" length = 4
          "\h204142434A20" // " ABCJ " length = 6
          "a\x20\x20b\x20c\x20d" // "a b c d" length = 8
    // "ABCJ ABCJ a b c d" length = 18);
    writeln;
    write("length=" + string(sizeof(
          "\h4142434A" // "ABCJ" length = 4
          "\h204142434A20" // " ABCJ " length = 6
          "a\x20\x20b\x20c\x20d") // "a b c d" length = 8
    // "ABCJ ABCJ a b c d" length = 18
    ));
    writeln;
    end TMain;

Output

length=16
ABCJ ABCJ a b c d
length=18

親トピック: Lexical Structure
関連資料
Strings
Single Characters


Single Characters

A single-character constant is bounded with single quotes.

Syntax

char          = "'" noSingleQuote "'".

noSingleQuote = ANY - "'". (any single character
                            except the quote)

Example

The following single characters are valid:

  • '1'
  • 'x'
  • '§'
  • '}'

The following are invalid as single characters:

  • "1"
  • 'xy'
親トピック: Lexical Structure
関連資料
Strings
Special Characters


Numbers

Silk Performer distinguishes between integers and floating-point numbers. The range of integer values is -231 to 231-1 (-2147483648 to 2147483647). The range of floating-point values is 1.7E +/- 308 (15 digits). Integer values can be represented in decimal or in hexadecimal format.

Syntax

number   = digit { digit } | "0x" hexdigit { hexdigit }.
signum   = [ "+" | "-" ] number.
float    = [ "+" | "-" ] digit { digit } "." digit { digit }.
digit    = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
hexdigit = digit | "A" | "B" | "C" | "D" | "E" | "F".

Example

dcltrans
  transaction TMain
  var
    nValue1, nValue2, nValue3:  number;
  begin
    nValue1 := -99;
    nValue3 := nValue2;
  end TMain;

The following numbers are valid:

  • 1
  • 01
  • +1234
  • -2378999
  • 0x1F
  • 0xEFA0
  • 1.0
  • 1.999
  • 20000.00001
  • -1.1

The following are invalid numbers:

  • 1.
  • .01
  • 99999999999
  • 12a
親トピック: Lexical Structure
親トピック: Data Types
関連資料
Strings


Special Characters

Silk Performer uses the following special characters:

Character | Name | Character | Name
: | colon | <> | noteq
; | semicolon | >= | greatereq
( | obracket | > | greater
) | cbracket | - | minus
[ | lbrack | + | plus
] | rbrack | * | asterisk
.. | pointpoint | / | slash
, | comma | . | period
:= | assign | “ | quote
< | less | ’ | single quote
<= | lesseq | | | logical_or
= | eq | & | logical_and
親トピック: Lexical Structure
関連資料
Strings


Comments

Line comments

Silk Performer provides the // operator for managing comments at line level. All the characters of the current line following the // operator are marked as a comment.

Example

// this is a comment line
c1: SelArticle(); // select an article

Block comments

Block comments are bounded between /* and */. Nested comments are also allowed.

Example

/**********************************
* this is a valid comment *
**********************************/
/* this is a valid /* nested */ comment */
注: Comments are not permitted inside a SQL command.
親トピック: Lexical Structure
関連資料
Special Characters


Program Structure of Load Testing Scripts

A Silk Performer load testing script consists of the following sections:

  • Symbols
    • External functions
    • Include files
    • Constants
    • Parameters
    • Variables
    • Random variables
    • Functions
    • Event handlers
  • Workload
  • Transactions
  • Web forms (Silk Performer Web Testing Only)
  • SQL (Silk Performer Database Testing Only)

Silk Performer permits the use of multiple sections for external functions, global variables, constants, random variables, and functions, in any order.

  • Syntax of Load Testing Scripts
    Lists the keywords to use within the sections of a load testing script.
  • Script Structure Sample
    Illustrates the basic structure and syntax of a Silk Performer load testing script.
  • String vs. Binary Data
    Describes why data is defined as string or binary data.
  • Handling Memory Buffers
    Describes how Silk Performer recognizes and works with memory blocks and buffers.
  • Null Pointer Semantics
    Provides an overview of null pointer semantics for Silk Performer.
  • External Functions Section
    Lists all functions that are available through dynamic link libraries.
  • Include Files Section
    Provides an overview of the include file, which you can use to define global constants, DLL functions and helper functions.
  • Constants Section
    Describes the types of constants available and where to use them.
  • Variables Section
    Provides an overview for variables used in a global section or in a transaction.
  • Parameters Section
    Provides an overview of parameters and describes where to use them within a test script.
  • Random Variables Section
    Provides an overview of random variables and describes where to use them within a test script.
  • Functions Section
    Provides an overview of functions and describes where to use them within a test script.
  • Event Handler Section
    Describes how to implement an event handler function to perform clean-up statements after a transaction exit error, or generally catch an error or warning before it gets reported.
  • Workload Section
    Provides an overview of the workload section, which contains the names of user groups and the transactions to be invoked by the user group together with their calling frequency.
  • Transactions Section
    Describes what a transaction is and how transactions are used to define the actions of virtual users in a load test.
  • Web Forms Section
    Provides an overview of the web forms section, which can easily be randomized and is used by WebForm functions.
  • SQL Section
    Provides an overview of the SQL section, which can contain several definitions of SQL commands or stored procedures.
  • Expressions
    Provides an overview of expressions including which type of expressions are supported and the functions that can be used in expressions.
親トピック: Scripting Language Structure and Statements


Syntax of Load Testing Scripts

The various sections of a Silk Performer load testing script must be declared using the following syntax:

  • External functions contained in a dynamic link library that are called from a script must be declared using the keyword dll.
  • Include statements in a script include one or more files during the compilation of a script. Declare include files with the keyword use.
  • Constants are defined using the keyword const. Wherever you can use an integer constant, a floating-point constant, a boolean constant or a string constant, you can likewise use a named constant declared in this section. You do not need to specify the data type when declaring a constant.
  • Variables are defined using the keyword var. Global variables have global scope and therefore can be used in every transaction and as bind or INTO variables in every SQL command. You can also define variables with local scope for any transaction
  • Parameters are variables, which are re-used by the visual script customization wizards. Parameters are (automatically) defined using the keyword dclparam.
  • Random variables are defined using the keyword dclrand.
  • Functions used in a script are defined using the keyword dclfunc.
  • Users to be simulated are defined using the keyword dcluser.
  • Transactions executed by the users specified in the workload section of a script are defined using the keyword dcltrans.
  • Web forms used in transactions in a script are defined using the keyword dclform.
  • SQL commands that are called by transactions in a script are defined using the keyword dclsql.
  • Handler functions are defined using the keyword dclevent.
  • The code page with which a script was recorded is defined by the @codepage keyword.
親トピック: Program Structure of Load Testing Scripts
関連資料
Script Structure Sample
Memory Requirements


Script Structure Sample

The following example illustrates the basic structure and syntax of a Silk Performer load testing script.

Examples

@codepage(1252)

benchmark Sample
use "Kernel.bdh"

dll "kernel32.dll"

"WaitForSingleObject"
    function WaitForSingleObject(in number,
                                                                                in number): number;

const
  NUMBER_CONST  := 1;
  STRING_CONST  := "ABCD";
  BOOLEAN_CONST := true;

var
  nNumber  : number;
  sString  : string;
  bBoolean : boolean;

dclparam
  nNumParam    : number;
  sStringParam : string;
  bBoolParam   : boolean;

dclrand
  rNumber: RndUniN(1..6);

dclfunc
  function Function1
  begin
  end Function1;

dclevent
  handler ErrorHandler <EVENT_RAISE_ERROR>
  begin
  end ErrorHandler;

dcluser
  user
    User1
  transactions
    TMain : 1;

dcltrans
  transaction TMain
  begin
  end TMain;

dclform
  Form1:
    "elem1" := "Value1",
    "elem2" := "Value2";
親トピック: Program Structure of Load Testing Scripts
関連概念
Syntax of Load Testing Scripts


String vs. Binary Data

A string in BDL represents a combination of a memory buffer and the length of the valid data within that buffer. For this reason, the string data type does not depend on a zero termination for its data. Due to the nature of this implementation, a BDL string can be interpreted as a zero-terminated sequence of characters (e.g., a string in C++ or as binary data with a specified length, no matter how many zeros exist within the data).

For backward compatibility reasons, a string is usually interpreted as a zero terminated sequence of characters (C++ string).

Example

transaction TMain
var
  s1 : string;
  s2 : string;
  s3 : string;
begin
  // s1 now holds the string "hello
  s1 := "hello"; "
  // s2 now holds also the string "hello"
  s2 := s1;
  // s3 now holds the concatenation of
  // s1 and s2, or "hellohello";
  s3 := s1 + s2;
end TMain;

When hex notation is used to specify a string, the data is automatically interpreted as binary data. However, if two BDL strings are concatenated with the ‘+’ operator, or if one string is assigned to another string, they will still be interpreted as strings.

Example

transaction TMain
var
  s1 : string;
  s2 : string;
  s3 : string;
begin
  // s1 now holds the binary data "\h110022"
  s1 := "\h110022";
  // s2 now holds the string "\h11"
  s2 := s1;
  // s3 now holds the string concatenation of
  // s1 and s2, or "\h1111"
  s3 := s1 + s2;
end TMain;

To change the way a string is interpreted, the bin() operator must be used. The bin() operator is allowed in conjunction with a string variable or a function call that returns a string. Using the previous example, if the bin() operator is used, the result is quite different.

Example

transaction TMain
var
  s1 : string;
  s2 : string;
  s3 : string;
begin
  // s1 now holds the binary data "\h110022"
  s1 := "\h110022";
  // s2 now holds the string "\h110022"
  s2 := bin(s1);
  // s3 now holds the binary concatenation of
  // s1 and s2, or "\h110022110022";
  s3 := bin(s1) + bin(s2);
end TMain;
注: The bin() operator can be used in string assignments, concatenations, in string comparisons and in the actual parameters of function calls.
親トピック: Program Structure of Load Testing Scripts


Handling Memory Buffers

Occasionally it is necessary to work with raw memory blocks. In such cases the user is responsible for allocating and freeing the memory blocks. However, many API functions can work with not only BDL strings, but also with memory buffers.

A memory block is represented by a handle returned by the Alloc() function. The keyword IN together with the memory handle represent the newly allocated memory buffer. When used as a parameter for an API function, runtime automatically converts the handle into a valid parameter for the external function. The only difference between an ordinary string variable is that the LENSPEC and SIZEPEC parameters are not set automatically by runtime.

Example

dll "some.dll"
  "FillBuffer"
    function FillBuffer(sBuffer : inout string,
                        nBufSize : in number sizespec optional,
                        nDataLen : out number lenspec optional);
  "WriteData"
    function WriteData(sData : in string,
                       nDataLen : in number lenspec optional);
transaction TMain
var
  sBuffer : string;
  hBuffer : number;
  nLen    : number;
begin
  FillBuffer(sBuffer, 1024); // sBuffer is automatically resized and the length is automatically set
  WriteData(sBuffer); // nDataLen is automatically set correctly
  hBuffer := Malloc(1024);
  FillBuffer(in hBuffer, 1024, nLen);
  WriteData(in hBuffer, nLen);  // nDataLen must be set manually
  Free(hBuffer);
end TMain;
注: The IN modifier for actual number parameters requires either a STRING, PTR or DSTRING formal parameter type.
親トピック: Program Structure of Load Testing Scripts


Null Pointer Semantics

Most native string implementations use null pointer semantics, which means that they differentiate between empty strings (pointers to "") and null strings (null pointers).

To write wrapper functions for external functions in BDL that have optional string parameters, null pointer semantics are also implemented for BDL strings.

Example

dll "some.dll"
  "ApiFunc"
    function ApiFunc(in dstring optional);

dclfunc
  function ApiFuncWrapper(theString : string optional)
  begin
    ApiFunc(theString);
  end T1;

dcltrans
  transaction TMain
  begin
    ApiFuncWrapper();
  end TMain;

In cases where the optional parameter is omitted, external functions expect a NULL as the optional dstring parameter. Also if a string variable is set to NULLusing the StrSetNull() function, external functions expect NULL rather than DSTRING objects.

注:
  1. A BDL string can explicitly be set to null: StrSetNull(str)
  2. Declared strings are always initialized to "". StrIsNull() returns false for declared strings, except when StrSetNull has been applied to them.
  3. An optional formal parameter may be a temporary object, as in the example above. In such cases StrIsNull(theString) returns true.
親トピック: Program Structure of Load Testing Scripts
関連資料
StrSetNull Function
StrIsNull Function


External Functions Section

This section lists all functions that are available through dynamic link libraries. All external functions declared in a dynamic link library that are called from the script must be declared before they are used. Use the keyword dll.

Syntax

DllDecl       = "dll" DllName Prototype { Prototype }.

Prototype     = ExtFuncName [ @deprecated [ "(" NewFuncName  ")" ] ] "function" FuncName
                [ "(" ParamList ")" ] [ ":" RetType ].

ParamList     = ParamDecl { "," ParamDecl }.

ParamDecl     = [ ParamName ":" ] [ PassMode ]
                ( BDL_Type | C_Type ) { ParamModifier }.

PassMode      = "in" | "inout" | "out".

ParamModifier = "allownull" | "explicit" |
                  "lenspec" | "sizespec" |
                  "optional"[":=" (signum | float | boolean | ident)].

BDL_Type      = "number" | "float" | "string" | "boolean" | "list".

C_Type        = "ptr" | "dstring" | "union" | "long" |
                "short" | "char" | "unsigned short" |
                "unsigned char" | "double".

RetType       = "number" | "float" | "string" |
                "dstring" | "boolean" | "long" |
                "short" | "char" | "unsigned short" |
                "unsigned char" | "double".
Section | Description
DllName | A constant string that specifies the name of the DLL file that contains the function(s) you want to call
Prototype | The definition of the function prototype of a DLL function you want to call
ExtFuncName | A constant string that specifies the name of the function as used inside the DLL (case-sensitive)
FuncName | An identifier that specifies the name of the function as used inside the BDL script (case-insensitive)
ParamName | An identifier that specifies the name of the parameter (optional).
PassMode | Indicates whether the parameter is passed into the function by reference (out and inout) or by value (in). The default is in. (Optional)
C_Type | The data type of a function parameter specified using C data types
BDL_Type | The data type of a parameter of a function using BDL data types. The BDL data types correspond to the C data types in the table below
RetType | The data type of the return value of the function using BDL data types or C data types, explained in the table below
BDL data type | C data type | Description
number | long | BDL data type number represents a 4-byte signed integer value
float | double | BDL data type float represents an 8-byte floating point value
string | char* | BDL data type string represents a null terminated character string value
boolean | long | BDL data type boolean represents a 4-byte integer value where 1 represents true and 0 represents false

The following table shows valid data type combinations between actual parameters (BDL data types) and formal parameters of external functions using C data types.

Actual BDL parameter type | Formal BDL parameter type | Formal C/C++ parameter type | Internal Type (accessible via rtPlugInLib.lib)
number | char | char | TByte1
number | unsigned, char | unsigned, char | TUByte1
number | short | short | TByte2
number | unsigned, short | unsigned, short | TUByte2
number | number, long | long | TByte4
number | number, long | unsigned, long | TUByte4
number | number, long, ptr | void* | TPointer
float | float | float | Real4
float | double | double | Real8
string, in <number> | string | char* | TString
string, in <number> | ptr | void* | TPointer
string, in <number> | dstring | void* | CBdlStr*
boolean | boolean | int | TBool
boolean, number, float, string, boolean[], number[], float[], string[] | union | void* | CBdlUnion*
注: If you use ptr as data type for your external function, the compiler does not perform a type check between actual and formal parameters. Actual parameters of type number can be passed to DLL functions by reference (default) or by value using the ptr data type for the formal parameter. To pass an argument by value, preface the argument with the in keyword in the call to the DLL function.
注: Functions marked with @deprecated issue a warning during compiling and highlight the new function to use instead.

Example

dll "odbc32.dll"
  "SQLConnect"
    function SqlConnect(in number, in string, in number,
                        in string, in number,
                        in string, in number): short;

dll "testdll.dll"
  "MyStrlen"
    function StrLen(inout string): number;

dcltrans
  transaction TConnect
  const
    SQL_NTS := -3;
  var
    hdbc, retcode : number;
    dsn_name : string;
  begin
    dsn_name := "dsn_sample";
    retcode := SqlConnect(hdbc, dsn_name, SQL_NTS, "u1",
    SQL_NTS, "u1", SQL_NTS);
  end TConnect;
  • Formal Parameter Modifiers
    Lists the formal parameter modifiers that can be used to interpret parameters correctly.
親トピック: Program Structure of Load Testing Scripts
関連資料
Script Structure Sample


Formal Parameter Modifiers

In order for the Silk Performer runtime to interpret parameters correctly, the following formal parameter modifiers can be used. The external function is called with a zero value of the specified type, which is false for Boolean, 0 for integer numbers, 0.0 for floating point numbers, NULL for string types and an empty list of unspecified type, which must not be modified, for lists.

  • Lenspec
    Calculate the length specification for a string or dstring parameter.
  • Sizespec
    Calculates the size specification for buffers or the actual size of string parameters.
  • Allownull
    Indicates that an actual parameter may also be 0.
  • Optional
    Indicates that an actual parameter may not be specified for this formal parameter.
  • Explicit
    Makes the compiler check that an actual parameter is a non-indexed BDL string variable.
親トピック: External Functions Section


Lenspec

Lenspec can be used in combination with numeric formal parameters of type long or number. If specified along with an in or inout parameter, the actual parameter is used as length specification for the next string or dstring parameter on the left. If specified along with an inout or out parameter, the actual parameter variable is used as length specification for the next left string parameter.

Formal in parameters declared with the lenspec modifier allow actual parameters to be 0 or STRING_COMPLETE. If one of these values is used, Silk Performer's runtime calculates the actual length of the next string or dstring parameter on the left and sets this parameter accordingly.

The length of a BDL string variable usually is the number of characters before the first zero termination character. If the string variable is specified using the bin() operator, the binary length of the string variable is used.

注: The validity of the lenspec semantics is always limited to the next string or dstring parameter on the left, no matter if its semantics could be applied or not.

Example

dll "some.dll"
    "Send"
      function Send(sData : in string,
                     nDataLen : in number lenspec optional);

dcltrans
  transaction TMain
  var
    s1 : string;
  begin
    s1 := "\h110022";
    // sData = "\h11", nDataLen = 1
    Send(s1);
    // sData = "\h110022", nDataLen = 3
    Send(bin(s1));
    // sData = "\h11", nDataLen = 1
    Send(s1, STRING_COMPLETE);
    // sData = "\h110022", nDataLen = 3
    Send(bin(s1), STRING_COMPLETE);
  end TMain;
親トピック: Formal Parameter Modifiers
関連資料
Sizespec
Allownull
Optional
Explicit


Sizespec

Sizespec can be used in combination with numeric formal parameters of type long or number. It may only be specified along with an in or inout parameter. The actual value of the sizespec parameter is taken as size specification for buffers. As such, its semantics are only applied to the next inout or out stringformal parameter on the left.

Formal parameters declared with the sizespec modifier allow actual parameters to be 0 or STRING_COMPLETE. If one of these values is used, Silk Performer's runtime calculates the actual size of the next string parameter on the left and sets this parameter accordingly. If the actual parameter specifies a size that is more than the actual size of the corresponding string parameter, the variable is automatically resized to the specified size.

Example

dll "some.dll"
  "GetData"
    function GetData(sBuffer : out string,
                     nBufferLen : in number sizespec
optional);

dcltrans
  transaction TMain
  var
    sBuffer : string;
  begin
    // sBuffer unmodified, nBufferLen = 253
    GetData(sBuffer);
    // sBuffer unmodified, nBufferLen = 253
    GetData(sBuffer, STRING_COMPLETE);
    // sBuffer unmodified, nBufferLen = 12
    GetData(sBuffer, 12);
    // sBuffer is resized, nBufferLen = 40000
    GetData(sBuffer, 40000);
  end TMain;
親トピック: Formal Parameter Modifiers
関連資料
Lenspec
Allownull
Optional
Explicit


Allownull

Allownull indicates that an actual parameter may also be 0. No matter what type the formal parameter is.

Example

dll "some.dll"
  "DoAllowNull"
    function DoAllowNull(nParam1 : out number allownull,
                         nParam2 : in number);

dcltrans
  transaction TMain
  begin
    // although a variable should be set as first parameter,
    // we can also
    // specify 0, as the formal parameter
    // is declared allownull
    DoAllowNull(0, 12);
  end TMain;
親トピック: Formal Parameter Modifiers
関連資料
Lenspec
Sizespec
Optional
Explicit


Optional

Optional indicates that an actual parameter may not be specified for this formal parameter. The external function is called with a zero value of the specified type, which is false for Boolean, 0 for integer numbers, 0.0 for floating point numbers, NULL for string types, and an empty list of unspecified type, which must not be modified, for lists.

注: All formal parameters on the right of an optional must also be optional.

Example

dll "some.dll"
  "DoOptional"
    function DoOptional (nParam1 : out number optional,
                         nParam2 : in number optional);

dcltrans
  transaction TMain
  begin
    // both actual parameters can be omitted
    DoOptional();
  end TMain;
親トピック: Formal Parameter Modifiers
関連資料
Lenspec
Sizespec
Allownull
Explicit


Explicit

Explicit may only be specified along with a dstring formal parameter. The modifier makes the compiler check that an actual parameter is a non-indexed BDL string variable. Any other string notations are not allowed.

Example

dll "some.dll"
  "DoExplicit"
    function DoExplicit(sVar : in dstring explicit);

dcltrans
  transaction TMain
  var
    s1 : string;
    hMem : number;
  begin
    DoExplicit(s1);         // ok
    DoExplicit(s1[2]);      // compiler error
    DoExplicit(in hMem);    // compiler error
    DoExplicit("hello");    // compiler error
    DoExplicit("\h110022"); // compiler error
  end TMain;
親トピック: Formal Parameter Modifiers
関連資料
Lenspec
Sizespec
Allownull
Optional


Include Files Section

Silk Performer supports an include-file technique with a syntax similar to include statements in C. Include files (extension bdh) can contain any code sections of a BDL script. Usually you define global constants, DLL functions and helper functions in include files. This enables you to reuse code written in include files in other BDL scripts. The include file section lists the external files to be included during the compilation of a BDL script. Include files must be declared before the objects they contain are used. Include statements in Silk Performer cause one or more specified files to be included during the compilation of a test script. Multiple sections (dclrand, var, const, dclfunc, dll) in any order are supported in include files.

Include files are declared with the keyword use.

The include file search path order is as follows:
  1. Default Include directory (system setting)
  2. Custom Include directory (system setting)
  3. <actual project directory>\Include (if existing)
  4. <actual project directory>\Custom Include (if existing)
  5. <actual project directory>

Syntax

IncludeStatement = "use" Filename.

FileName: string constant (the name or path of the include file).

Example

The following is an example of a BDL file:

const
  DSN1 := "dsn_oracle";
  DSN2 := "sample";

use "odbc.bdh"
use "test.bdh"

Example

The following is an example of an Include file (ODBC.BDH)

const
  SQL_SUCCESS := 0;

dll "odbc32.dll"
  "SQLAllocEnv" function SqlAllocEnv(out number): number;

use "..\\bdh\\kernel.bdh"
親トピック: Program Structure of Load Testing Scripts
関連資料
Script Structure Sample


Constants Section

Wherever you can use an integer constant, a floating-point constant, a boolean constant, or a string constant, you can likewise use a named constant declared in a constant declaration section. If you want to declare named constants with program scope (global constants), specify these constants at the top of your Silk Performer test script. If you want to declare local constants with transaction scope, specify these constants in a constant declaration section within the transaction.

The global constants used in the script are defined using the keyword const.

Syntax

ConstSection = "const" ConstDecl.

ConstDecl    = Constant { ";" Constant }.

Constant     = IdentList ":="
               ( signum | float | string | boolean
               | ident).

IdentList    = ident { "," ident }.

Example

const
  cnNumber1, cnNumber2 := -21;
  cnNumber3            := -cnNumber1;
  cbBoolean            := true;
  cfFloat              := -1.234;
  csString             := "This is a string constant";
親トピック: Program Structure of Load Testing Scripts
関連資料
Script Structure Sample


Variables Section

Variables used in a load test can be defined in the global section of a Silk Performer test script or in a transaction. Variables defined in the global section have global scope and global life span and therefore can be used in any transaction and as bind or into variables in any SQL command or Web form. Variables of a transaction have local scope but also global life span and therefore can be used only in the transaction where they are defined.

Variables used in a script are defined using the keyword var.

Syntax

VarSection  = "var" VarDecl.

VarDecl     = TVar ";" { TVar ";" }.

TVar        = IdentList ":" (ExplicitSizedType | ImplicitSizedType).

ExplicitSizedType = [ "array" "[" number "]" "of" ] SimpleType.
// "[" [number] "]" is optional, but if not used, init is obligatory

SimpleType     = "number" [ "init" NumList ]
            | "float" [ "init" FloatList ]
            | "boolean" [ "init" BoolList ]
            | "string" [ "(" number ")" ]
                         [ "init" StringList ].

ImplicitSizedType = [ "array" "of" ] SimpleTypeInit).

SimpleTypeInit = "number" "init" NumList
            | "float" "init" FloatList
            | "boolean" "init" BoolList
            | "string" [ "(" number ")" ]
                         "init" StringList.

NumList     = signum { "," signum }.

FloatList   = float { "," float }.

BoolList    = boolean { "," boolean }.

StringList  = string { "," string }.
  • Data Types
    Lists the Silk Performer data types.
  • Arrays
    Provides an overview of arrays and array initialization.
  • Initialization of Variables
    Provides an overview of the initialization of boolean, number, and string transaction variables.
  • Compatibility of Data Types
    Distinguishes between variables used for the same data type versus variables used for different data types.
  • Memory Requirements
    Lists the memory requirements for transaction variables.
  • Sizeof Operator
    Indicates the amount of storage, in bytes, associated with a type, variable, parameter or constant.
  • Callback Operator
    Use the callback operator to enable passing callback functions to API calls.
  • Bin Operator
    Makes the runtime system interpret a string variable or the result of a string returning function as binary data.
親トピック: Program Structure of Load Testing Scripts


Data Types

All variables used in a Silk Performer test script have a data type. Available data types are:

  • Boolean
    Defines the boolean data type.
  • Numbers
    Distinguishes between integers and floating-point numbers and provides valid and invalid examples.
  • Float
    Defines the float data type.
  • Strings
    Describes the syntax for strings within Silk Performer.
  • List
    Defines a List data type.
親トピック: Variables Section
関連概念
Compatibility of Data Types
関連資料
Memory Requirements
Type Conversion


Boolean

A variable of type boolean can have one of two values:
  • true or
  • false

These values are system-defined constants.

Example

dcltrans
  transaction TMain
  var
    bValue1, bValue2:  boolean;
  begin
    bValue1 := true;
    bValue2 := not bValue1;
  end TMain;
親トピック: Data Types


Float

This data type represents an 8-byte floating-point value whose range is +/-1.7E308 with at least 15 digits of precision.

Example

dcltrans
  transaction TMain
  var
    fValue1, fValue2, fValue3:  float;
  begin
    fValue1 := -99.9;
    fValue3 := (fValue2 / fValue1 + 10.7) * 3.99;
  end TMain;
親トピック: Data Types


List

List は、同じ型の変数のコンテナです。サポートされるデータ型は、boolean、number、float、および string です。 配列とは逆に、リストに含まれる要素の数は動的です。 Silk Performer には、リストに使用できる複数の関数が用意されています。 初期化していないリストのサイズは 0 です。 要素を追加すると、リスト サイズが大きくなり、要素を削除するとサイズが小さくなります。
注: リストの中のリストはサポートされていません。

Example

transaction TAList
var
  lstNumber:  list of number;
  lstBoolean: list of boolean;
  lstFloat:  list of float;
  lstString: list of string init "one", "two", "three";
  nrVal: number;
begin
  ListAdd(lstNumber, 1); // first element
  ListAdd(lstNumber, 2); // second element
  ListAdd(lstNumber, 3); // ...
  ListAdd(lstNumber, 5); // lstNumber == { 1, 2, 3, 5 }
  ListInsert(lstNumber, 4, 4); // lstNumber == { 1, 2, 3, 4, 5 }
  ListGetFirst(lstNumber, nrVal); // nrVal == 1
  Print("nrVal: " + string(nrVal));
  ListPrint(lstNumber);

  ListSetAt(lstNumber, 3, 33);
  ListRemoveFirst(lstNumber);
  ListremoveLast(lstNumber);
  Print("**************");
  ListPrint(lstNumber);

  Print("length of the string-list: " + string(ListGetLength(lstString)));
end TAList;

Output

nrVal: 1
element 1: 1
element 2: 2
element 3: 3
element 4: 4
element 5: 5
**************
element 1: 2
element 2: 33
element 3: 4
length of the string-list: 3
親トピック: Data Types
関連概念
リスト関数


Arrays

An array is an ordered list of variables of the same type. Arrays of data type boolean, number, float and string are supported. Elements in an array are referenced via an index on the array beginning at one (1). The number of elements in an array must be set explicitly. Multidimensional arrays are not supported.

Example

dcltrans
  transaction TMain
  var
    nNumber : number;
    bBoolean : boolean;
    sString : string;
    aNumberArray :  array [10] of number;
    aBooleanArray :  array [10] of boolean;
    aStringArray :  array [5] of string(20);
  begin
    nNumber := 5;
    bBoolean := false;
    sString := "This is a string";
    aNumberArray[1] := 2;
    aBooleanArray[aNumberArray[1]] := true;
    aStringArray[nNumber] := simstr;
  end TMain;

Initialization of arrays

If you initialize an array, you need not specify the size of the array. The size is equivalent to the number of initial values. If an array is initialized and its size is specified, all array items not initialized are set to the null value of the data type of the array.

Example

const
  cStr := "Paul";
  cNumber := 8;
  cFloat := 2.5
var
  aStringArray : array [6] of string(9) init cStr, "Jim",
  "John", "George", "Ringo", cStr;
  aNumberArray1 : array of number init cNumber, 1, 2, 3, 4, 5, 6, 7, cNumber;
  aNumberArray2 : array of number init 1;
  aNumberArray3 : array [5] of number init 1, 2, 3;
  aFloatArray : array of float init cFloat, 1.0, 2.0, 3.3, 5.5, 6.6;
  aBooleanArray : array of boolean init true, false, true;
親トピック: Variables Section


Initialization of Variables

Transaction variables of type boolean, number and string can be initialized the first time the transaction where they are declared is called. If you omit an init value, the variable is initialized with the null value of its data type (false for boolean, zero (0) for number, and the empty string "" for strings).

注: You cannot use the keyword init with local variables of type BOOLEAN, NUMBER and FLOAT declared in functions. However, strings may be initialized in functions using the init keyword.

Example

dcltrans
  transaction TMain;
  var
    nNumber : number  init 10;
    fFloat : float  init 123.456;
    bBoolean : boolean  init true;
    sString : string  init "Hello world!";
  begin
    write("number = "); write(nNumber); writeln;
    write("float = "); write(fFloat); writeln;

    if bBoolean then
      write("boolean = true"); writeln
    else
      write("boolean = false"); writeln
    end;

    write("string = "); write(sString); writeln;
  end TMain;

Output

number = 10
float = 123.456
boolean = true
string = Hello world!
親トピック: Variables Section


Compatibility of Data Types

Assignments, comparisons and computations are allowed only for variables (transaction variables, random variables, parameters) of the same data type. To assign variables of different data types, you must use the type conversion functions of Benchmark Description Language.

  • Type Conversion
    Lists the functions for converting data types to permit work with variables of different data types.
親トピック: Variables Section


Type Conversion

To permit work with variables of different data types, Benchmark Description Language offers the following functions for converting data types:
Function | Parameter | Return value | Description
ord | character | ASCII code | Converts a single character to its ASCII value
chr | ASCII code | character | Converts an ASCII value to its corresponding character value
string
  • integer
  • float
  • boolean
 string Converts the value of an expression to a string
number
  • string
  • float
  • boolean
 integer Converts the characters of a string or a floating-point value to an integer value. A boolean value is converted to 0 for invalid expressions (false) or 1 for valid (true) expressions.
float
  • string
  • integer
  • boolean
 float Converts the characters of a string or an integer value to a floating-point value. A boolean value is converted to 0.0 for invalid expressions (false) or 1.0 for valid (true) expressions

Syntax

ConvertFunc = "chr" "(" Expr ")"
            | "ord" "(" Expr ")"
            | "string" "(" Expr ")"
            | "number" "(" Expr ")"
            | "float" "(" Expr ")"
            | "boolean" "(" Expr ")".
  • If number(string) cannot convert the string to a number, it returns zero (0).
  • If string contains a floating-point value, the digits after the decimal point are truncated.
  • If float(string) cannot convert the string to a floating-point number, it returns zero (0.0).

Alphanumeric characters after digits are ignored.

Example

dcltrans
  transaction TMain
  var
    I : number;
    f : float;
    s : string(14) init "ProductName";
    s1 : string(14);
    b1 : boolean;
  begin
    I := ord('x');          // --> i: 120
    s[1] := chr(I+1);       // --> s[1]: 'y'
    I := ord(s[2]);         // --> i: 114
    I := 123;
    s := string(I*10+1000); // --> s: "2230"
    I := number(s);         // --> i: 2230
    s := "-123.99";
    I := number(s);         // --> i: -123
    s := "123aby";
    I := number(s);         // --> i: 123
    s := "x123.99";
    I := number(s);         // --> i: 0
    s := "A" + string(I);   // --> s: "A0"
    s := "-129.77";
    f := float(s);          // --> f: -129.77
    I := 20500;
    f := float(I);          // --> f: 20500.0
    b1 := boolean("TRUE");  // --> b1: true
    s := string(b1);        // --> s: "TRUE"
    i := number(b1);        // --> i: 1
  end TMain;
親トピック: Compatibility of Data Types
関連概念
Syntax of Load Testing Scripts
Data Types
関連資料
Memory Requirements


Memory Requirements

Each transaction that a user calls consumes data memory for its transaction variables. Transactions not used by a certain user do not consume data memory. Every global object (such as a random variable), whether it is used or not, consumes data memory because of its global scope.

Type | Bytes
number | 4
boolean | 4
float | 8
string (n) | n+1
array [m] of number | 4*m
array [m] of boolean | 4*m
array [m] of string (n) | (n+1)*m
親トピック: Variables Section
関連概念
Data Types
Syntax of Load Testing Scripts


Sizeof Operator

Sizeof indicates the amount of storage, in bytes, associated with a type, variable, parameter or constant.

注: The sizeof operator is utilized at compile time. Generally this operator can also be used with arrays. However, when used with function parameter arrays, this operator returns the size of arrays' data types.

Syntax

SizeOf = "sizeof" "(" Expr ")".

Example

dcltrans
  transaction TMain
  var
    nNumber : number;
    fFloat : float;
    sString1 : string(12) init "ProductName";
    sString2 : string;
  begin
    write(sizeof(nNumber));  // --> 4
    write(sizeof(fFloat));   // --> 8
    write(sizeof(sString1)); // --> 13
    write(sizeof(sString2)); // --> 254
    write(sizeof("abcde"));  // --> 5
  end TMain;
注: The terminating null byte for strings is not included.
親トピック: Variables Section
関連概念
Data Types


Callback Operator

Use the callback operator to enable passing callback functions to API calls. In general, the callback operator can only be used on identifiers of functions that are defined with a callback function attribute such as <ASYNC_CALLBACK_FUNCTION>.

Example

dclfunc
  function asyncCallback <ASYNC_CALLBACK_FUNCTION>
  begin
    Print("callback");
  end AsyncCallback;

dcltrans
  transaction TMain
    begin
      WebAsyncPreparePush(callback(AsyncCallback));
  end TMain;

親トピック: Variables Section


Bin Operator

Bin makes the runtime system interpret a string variable or the result of a string returning function as binary data. In this case not the Strlen() function is taken for length calculations but the Binlen() function, which returns the actual binary length of the data.

Syntax

Bin = "bin" "(" String | StringFunc ")".

Example

dclfunc
  function Assert(b : boolean) <API_FUNCTION>
  begin
    if b then
      Print("ok");
    else
      Print("failed");
    end
  end Assert;

  function RetString : string
  begin
    RetString := "\h11002233";
  end RetString;

dcltrans
  transaction TMain
  var
    s1, s2, s3 : string;
  begin
    s1 := "\h11002233";      // "\h11002233"
    s2 := "\h550066";        // "\h550066"
    s3 := s1; // "\h11"
    s3 := s1 + "\h770088";   // "\h11770088"
    s3 := "\h770088" + s1;   // "\h77008811"
    s3 := bin(s1);           // "\h11002233"
    s3 := s1 + s2;           // "\h1155"
    s3 := bin(s1) + s2;      // "\h1100223355"
    s3 := s1 + bin(s2);      // "\h11550066"
    s3 := bin(s1) + bin(s2); // "\h11002233550066"
    s3 := RetString();       // "\h11"
    s3 := bin(RetString());  // "\h11002233"

    // comparisons
    // "\h11" = "\h11"
    Assert(s1 = s1);
    // "\h11" = "\h11002233"
    Assert(not (s1 = bin(s1)));
    // "\h11002233" = "\h11002233"
    Assert(s1 + "\h002233" = bin(s1));

  end TMain;
親トピック: Variables Section
関連概念
Data Types


Parameters Section

Parameters used in load tests must be defined in the global section of Silk Performer test scripts. Generally, parameters are global variables that are re-used by visual customization wizards in Silk Performer and TrueLog Explorer. Parameters have global scope and global life span and therefore can be used in any transaction or function, as bind data, or in variables in SQL commands and Web forms.

Parameters used in scripts are defined using the keyword dclparam.

Syntax

ParamSection = "dclparam" VarDecl.

VarDecl     = TVar ";" { TVar ";" }.

TVar        = IdentList ":" (ExplicitSizedType | ImplicitSizedType).

ExplicitSizedType = [ "array" "[" number "]" "of" ] SimpleType.
// "[" [number] "]" is optional, but if not used, init is obligatory

SimpleType     = "number" [ "init" NumList ]
            | "float" [ "init" FloatList ]
            | "boolean" [ "init" BoolList ]
            | "string" [ "(" number ")" ]
                         [ "init" StringList ].

ImplicitSizedType = [ "array" "of" ] SimpleTypeInit).

SimpleTypeInit = "number" "init" NumList
            | "float" "init" FloatList
            | "boolean" "init" BoolList
            | "string" [ "(" number ")" ]
                         "init" StringList.

NumList     = signum { "," signum }.

FloatList   = float { "," float }.

BoolList    = boolean { "," boolean }.

StringList  = string { "," string }.
親トピック: Program Structure of Load Testing Scripts


Random Variables Section

All random variables used in a Silk Performer test script are defined in the random variables section. Random variables are used for generating random input values, specifying random repetition factors, specifying the probability of running transaction components, and specifying random user times.

One script may include more than one random variables section, although each random variable must be defined before it is used.

Random variables are defined using the keyword dclrand.

注: Certain random types can be used directly within transactions, without the need to define a random variable.

The scope of a random variable is the whole Silk Performer program (global scope). A random variable is defined by its type and its range of values. The type of a random variable is specified by using its random type (distribution type) in its declaration. The range of values of a random variable is specified by the parameters of its random type declaration. Each time a random variable is used, the random type of the random variable generates a new random value.

The use of random variables in BDL is very similar to function declaration and calling in high-level programming languages. Silk Performer distinguishes between two kinds of random types:
  • Random types based on continuous distribution functions
  • Random types based discrete distribution functions

Syntax

RandVarPart = RandVarDcl { RandVarDcl }.

RandVarDcl  = IdentList ":" RandVar ";".

IdentList   = ident { "," ident }.

RandVar     = RndExpF | RndUniF | RndUniN| RndUniI
            | RndStr | RndExpN | RndInd | RndBin
            | RndPerN | RndFile| RndStream.
  • Continuous Random Types
    Describes the continuous random types that generate random floating-point values.
  • Discrete Random Types
    Lists the available discrete random types that are used for generating random input values, specifying random repetition factors, and specifying the probability of running transaction components.
  • Uniform Random Type
    Describes the advantage of using the unique random type, RndUniN.
親トピック: Program Structure of Load Testing Scripts
関連概念
Random Functions


Continuous Random Types

Continuous random types generate random floating-point values. They are used solely in wait statements for generating random user times. The following continuous random types are available:
  • RndExpF: Random type with exponential distribution returning floating-point values.
  • RndUniF: Random type with uniform distribution returning floating-point values.
親トピック: Random Variables Section
関連資料
RndExpF Random Type (exponential distribution)
RndUniF Random Type (for wait statements)


Discrete Random Types

Discrete Random types generate random discrete values of the discrete types integer, boolean or string. They are used for generating random input values, specifying random repetition factors, and specifying the probability of running transaction components. The following discrete random types are available:
  • RndBin: Random type with Bernoulli distribution (binomial distribution) generating boolean values
  • RndUniN: Random type with uniform distribution generating integer values
  • RndUniI: Random type with uniform distribution with intervals generating integer values
  • RndExpN: Random type with exponential distribution generating integer values
  • RndStr: Random type with uniform distribution for alphanumeric values generating string values
  • RndInd: Random type with user-defined distribution generating integer or string values
  • RndPerN: Random type with uniform distribution generating unique integer values
  • RndFile: Random type using a file of values for the generation of random values in which the selection of the values is random
  • RndStream: Sequential type using a file of values for the generation of random values in which the selection of the values is sequential.
親トピック: Random Variables Section
関連資料
RndBin Random Type (binomial distribution)
RndUniN Random Type (uniform distribution)
RndUniI Random Type (uniform distribution with intervals)
RndExpN Random Type (exponential distribution)
RndStr Random Type (alphanumeric values)
RndInd Random Type (individual distribution)
RndPerN Random Type (unique uniform distribution)
RndFile Random Type (strings from a pattern file)
RndStream Random Type (sequential from a pattern file)


Uniform Random Type

The RndUniN type is a unique random type, because you can also use it inside transactions. The advantage of using the RndUniN random type within a transaction rather than in the random variables section is that you can specify variable boundaries for the random values instead of constant boundaries.

Syntax

RndFunc = "RndUniN" "(" Expr ".." Expr ")".

Example

dcltrans
  transaction TMain
  var
    I, j: number init -2;
  begin
    I := RndUniN(j..j*I); /* RndUniN(-2..4) */
  end TMain;
親トピック: Random Variables Section


Functions Section

All functions used in a Silk Performer test script are defined in the functions section. Functions should be used to give your script more structure. The syntax of functions is identical to the syntax of transactions, except for the items mentioned below.
  • Functions are defined using the keyword dclfunc
  • One script may include more than one functions section, although each function must be defined before it is used.
  • You can specify an option optional for the parameters of external and internal functions. This option indicates that the parameter is optional. If an optional parameter has not been passed in, its value will be 0 on entry to the function. For the data types CURSOR, SQL and FORM a value of -1 is passed on entry to the function.
    注: All parameters following the first optional parameter for a function must also be optional.

We distinguish between external and internal functions. External functions are the BDL functions that are readily available for use, like for example WebPageUrl. Internal functions are functions that are implemented within your script. Random variables can be used as parameters of internal and external functions. Both external and internal functions can also be used as parameters of other external and internal functions.

Syntax

FunctionSection = "DCLFUNC" { Function }.

Function        = [ @DEPRECATED [ "(" NewFuncName  ")" ] ] "FUNCTION" ident [ "(" TParList ")" ]
                  [ ":" RType ] [FuncAttribute]
                  [ "CONST" ConstDecl ]
                  [ "VAR" VarDecl ]
                  "BEGIN" StatSeq "END" [ ident ] ";".

TParList        = TParam { ";" TParam }.

TParam          = IdentList ":" PType PModifier.

PType           = ["ARRAY" | "LIST" "OF" ] "STRING" "(" number ")"
                  | ["ARRAY" | "LIST" "OF" ] "NUMBER"
                  | ["ARRAY" | "LIST" "OF" ] "BOOLEAN"
                  | ["ARRAY" | "LIST" "OF" ] "FLOAT"
                  | "SQL"
                  | "FORM".

PModifier       = "allownull" | "optional" [ ":=" (signum | float | boolean | ident)].

RType           = "STRING" "(" number ")"
                  | "NUMBER"
                  | "BOOLEAN"
                  | "FLOAT".

FuncAttribute   = "<" FuncAttributeValue ">"
Section | Description
ident | The name of the function.
ConstDecl | The declarations of the function constants.
VarDecl | The declarations of the function variables.
StatSeq | The statements of the function.
FuncAttributeValue Specifies attributes for the function. The following options are valid:
  • API_FUNCTION: The function behaves like an API function. If an error is raised within this function, the line number and file of the caller is reported.
  • ASYNC_CALLBACK_FUNCTION: The function is used as callback function for the async replay response handling. Whenever response data of an async call is available, the function is called by the replay engine. Functions specified as ASYNC_CALLBACK_FUNCTION must not have parameters.
  • BDL_FUNCTION: (Default) The function behaves like an ordinary BDL function. If an error is raised within this function, the line number and file of where the error occurred is reported.

Example

benchmark BenchmarkName
use "kernel.bdh"

const
  MAX_ARRAY := 5;
// Definition of global variables: string, number, float, boolean, array
var
  sa1 : array [MAX_ARRAY] of string init "string1", "string2",
"string3", "string4", "string5" ;
na1 : array [MAX_ARRAY] of number init 1,2,3,4,5 ;

dclfunc
  function foo1 (psa1 : array of string; pna1: array of number; len :
number):number
  var i : number;
  begin
    for i := 1 to len do
      Print(psa1[i]);
      Print(string(pna1[i]));
    end;
  end foo1;

  function Func1(p1: number; s: number optional): number
  var
    i, j: number;
  begin
    if s = 0 then
      j := 1
    else
      j := s
    end;
    for i := 1 to p1 do
      j := j*i;
    end;
    Func1 := j;
  end Func1;

  function Func2(p1: number)
  var
    i, j: number;
  begin
    j := 1;
    for i := 1 to p1 do
      j := j*i;
    end;
    p1 := j;
  end Func2;

  function Func3
  begin
    write( "TestFunc was sucessfull");
  end Func3;

dcluser
  user
    VirtUser
  transactions
    TestFunc : 1;  // Transactions

dcltrans
  transaction TestFunc
  var
    l, m: number;
  begin
    foo1(sa1,na1,MAX_ARRAY);
    l := Func1(10);
    m := Func1(l);
    Func2(l);
    Func3();
  end TestFunc;
  • Wrapper Functions
    Describes how to make a wrapper function behave like an external function.
  • Characteristics and Limitations of Functions
    Lists the characteristics and limitations of functions.
  • Callback Functions
    Use a callback function when you want a script to execute a part of BDL code to react to one or more particular situations.
親トピック: Program Structure of Load Testing Scripts


Wrapper Functions

Situations may occur, when an external function need to be wrapped by a BDL function, e.g. if always the same modifications to a parameter must be done before the external function call.

Such a BDL function usually should behave like a real external function, which includes line and file reporting of the caller.

In order to make a wrapper function behave like an external, the function attribute <API_FUNCTION> must be specified.

Example

dll "some.dll"
  "ApiFunc"
    function ApiFunc(in dstring optional);

dclfunc
  function ApiFuncWrapper(theString : string optional)
                                      <API_FUNCTION>
  begin
    if StrIsEmpty(theString) then
      ApiFunc("default string");
    else
      ApiFunc(theString);
    end;
  end T1;

dcltrans
  transaction TMain
  var
    s1 : string;
  begin
    ApiFuncWrapper();
    ApiFuncWrapper("hello");
    ApiFuncWrapper(s1);
  end TMain;

In case of an error during the ApiWrapper() external function call, all reports including the output windows of Silk Performer show the line number of where the wrapper function has been called. If the function attribute <API_FUNCTION> has not been specified, the line number of the external function call would be reported.

親トピック: Functions Section


Characteristics and Limitations of Functions

Keep in mind the following when working with functions:
  • You can call functions within transactions or within functions.
  • Variables declared within functions are automatic - not static as in transactions. They are allocated each time you call a function.
  • Only string variables can be initialized with the init keyword.
  • Parameters of functions are called by reference.
  • To return a value, assign the function call to an existing variable.
  • You call functions using the name of the function in an expression or by
  • using the name of the function as a single statement (when you are not interested in the return value of the function or when the function does not have a return value).
  • A return statement used in a function will always exit the function and the transaction that calls the function.
親トピック: Functions Section


Callback Functions

During a script run, you may want the script to execute a part of BDL code to react to one or more particular situations. You can use a callback function to let the script execute that part of BDL code whenever the situation occurs.

Use the attribute ASYNC_CALLBACK_FUNCTION in a callback function for an asynchronous response handling.

Example

benchmark BenchmarkName
use "WebAPI.bdh"

dcluser
  user
    WebUser
  transactions
    TMain : 1;

dclfunc
  function AsyncCallback <ASYNC_CALLBACK_FUNCTION>
  begin
    Print("callback");
  end AsyncCallBack;

dcltrans
  transaction TMain
    begin
      WebAsyncPreparePush(callback(AsyncCallback));
      ...
  end TMain
親トピック: Functions Section


Event Handler Section

During a script run, it is often desired to have the possibility to execute a portion of BDL code in order to react to one or more particular situations (also known as events). Such a portion of BDL code is called event handler function. A typical task of an event handler function is to e.g. perform clean-up statements after a transaction exit error, or generally catch an error or warning before it gets reported.

BDL offers the possibility to define an event handler function for one of the following set of pre-defined events:
BDL event constant | Description
EVENT_RAISE_INFORMATION | Informational message
EVENT_RAISE_WARNING | Warning message
EVENT_RAISE_ERROR | Error message
EVENT_RAISE_TRANS_EXIT | Transaction exit error
EVENT_RAISE_PROC_EXIT | Process exit error
EVENT_TRANS_BEGIN | Transaction begin (within transaction context)
EVENT_TRANS_END | Transaction end (within transaction context)
EVENT_TRANS_FINISHED | Transaction finished (not within transaction context)
EVENT_SUSPEND | Suspending
EVENT_RESUME | Resuming
EVENT_STOP | Stop
EVENT_CITRIXINTERRUPT | Custom Citrix event (see CitrixAddInterrupt)
EVENT_USER_FINISHED | End of test script

A handler function must be defined in an event handler section. Each event handler section begins with the keyword dclevent. There may be more than one dclevent sections in a BDL translation unit.

From the semantic point of view an event handler can be considered as a function without parameters, which is automatically called by the runtime system, if its associated event occurs.

Syntax

EventSection = "DCLEVENT" { Handler }.
Handler = "HANDLER" ident "<"EventConstant">"
          [ "CONST" ConstDecl ]
          [ "VAR" VarDecl ]
          "BEGIN" StatSeq "END" ident ";"
Section | Description
ident | The name of the function.
EventConstant | One of the above BDL event constants
ConstDecl | The declarations of the function constants.
VarDecl | The declarations of the function variables.
StatSeq | The statements of the function.

Example

dclevent
  handler Handler1 <EVENT_RAISE_ERROR>
  begin
    if GetErrorCode(GetLastError()) = 1060 then
      print("caught HTTP: 1060 - HTML Hyperlink not found");
    elseif GetErrorCode(GetLastError()) = 404 then
      print("caught HTTP: 404 - object not found");
    else
      throw;
    end;
  end Handler1;

dcltrans
  transaction TestTrans
  begin
    ...
  end TestTrans;
  • Characteristics and Limitations of Event Handler Functions
    Lists the characteristics and limitations of event handler functions.
親トピック: Program Structure of Load Testing Scripts
関連資料
GetTransactionName Function
GetFunctionName Function
GetLastError Function
GetErrorMsg Function


Characteristics and Limitations of Event Handler Functions

Keep in mind the following when working with event handlers:
  • Variables declared within handler functions are automatic - not static as in transactions. They are allocated each time the handler is invoked.
  • Only string variables can be initialized with the init keyword.
  • You can explicitly call a handler function by using its name as a single statement within a transaction or function.
  • A return statement used in a handler function will always exit the transaction, in which the handler function was called.
  • During the execution of an event handler function, event handling is disabled.
  • A throw statement exits the handler function and returns execution control to the runtime system, which continues the default procedure for the event.
  • If a handler function is defined for one of the following events, the handler function behaves like an exception handler and catches the event. In this case no output is generated in the report files and monitor window.
    • EVENT_RAISE_INFORMATION
    • EVENT_RAISE_WARNING
    • EVENT_RAISE_ERROR
    • EVENT_RAISE_TRANS_EXIT
    • EVENT_RAISE_PROC_EXIT

However, in order to stop handling the event and transfer control to the runtime system for the default procedure of event (e.g. report an error), a throw statement can be used.

親トピック: Event Handler Section


Workload Section

The users to be simulated are defined in the workload section of a test script. A user is described by the transactions to be called and the frequency of those transactions.

注: The workload section in a script must be defined before the transactions section that defines the transactions used in the workload section.

The users to be simulated are defined using the keyword dcluser.

Syntax

Workload      = UserDcl { UserDcl }.

UserDcl       = "user" UserGroupList
                "transactions" TransCount { TransCount }.

UserGroupList = ident { "," ident }.

TransCount    = identifier [ "(" ActTParList ")" ]
                 ":" number ";".

ActParList    = ActPar { "," ActPar }.

ActPar       = identifier | string | signum | float |
                "true" | "false".

The workload section (Workload) of a Silk Performer test script consists of one or more workload descriptions for a user group (UserDcl). A workload description of a user group contains the names of the user groups (ident1), and finally the transactions to be invoked by the user group together with their calling frequency (TransCount).

  • Transactions
    Provides an overview and example of transactions.
  • Startup and Shutdown Transactions
    Describes the special initialization transactions which are called once at the beginning of the simulation of a user and once at the end of the simulation of a user.
親トピック: Program Structure of Load Testing Scripts


Transactions

After the keyword transactions, the transactions a user invokes are specified with their calling frequency (TransCount). TransCount contains the name of the transaction (ident), the actual parameters of the transaction (ActParList), and how often the transaction should be invoked in the simulation time (number). Random variables returning type number, string, boolean or float and constants of these types are valid parameters of a transaction. Number, type and sequence of the actual parameters of a transaction must correspond to number, type and sequence of the formal parameters of the transaction specified in the transactions section of the Silk Performer program. You can use the parameters of a transaction to transfer to a transaction information that is specific to the user of the transaction. Each transaction specified in the workload section must be defined in the transactions section of the Silk Performer program.

Example

dclrand
  rArtNo1 : RndUniN(1..5000);
  rArtNo2 : RndUniN(5001..10000);

dcluser
  user
    User1
  transactions
    Selling(rArtNo1, "user 1") : 100;
    Order                      : 10;
  user
    User2
  transactions
    Selling(rArtNo2, "users 2") : 50;
    StockQuery                  : 20;

dcltrans
  transaction Selling(pArtNo: number; pUser: string)
  begin
    ...
  end Selling;

  transaction StockQuery
  begin
    ...
  end StockQuery;

  transaction Order
  begin
    ...
  end Order;

The example shows a portion of a Silk Performer program. Users belonging to the user group User1 call the transaction Selling 100 times and the transaction Order 10 times. The actual parameters rArtNo1, a random variable, and "user 1", a constant string, are assigned to the transaction Selling.

Users belonging to the user group User2 call the transaction StockQuery 20 times and the transaction Selling 50 times. The actual parameters rArtNo2, a random variable, and "users 2", a constant string, are assigned to the transaction Selling.

親トピック: Workload Section


Startup and Shutdown Transactions

Silk Performer provides a special initialization transaction which is called once at the beginning of the simulation of a user. A transaction is set as a startup transaction by using the keyword begin instead of the transaction frequency parameter.

Silk Performer provides a special termination transaction which is called once at the end of the simulation of a user. A transaction is set as a shutdown transaction by using the keyword end instead of the transaction frequency parameter.

注: There is a profile simulation setting called Call end transactions for stopped virtual users that, when disabled, prevents execution of the end transaction for stopped virtual users.

Example

dcluser
  user
    User1
  transactions
    TInit     : begin;
    TUpdate   : 10;
    TDelete   : 10;
    TPrint    : 10;
    TShutdown : end;
親トピック: Workload Section


Transactions Section

The transactions that are referenced in the workload (dcluser) section, are defined in the transactions (dcltrans) section. Transactions define the actions of virtual users by submitting function calls in order to interact with the application under test, for example calling Web functions to access a Web application published by a Web server. Describing transactions is done using a Pascal-like syntax.

The transactions that are executed by the virtual users, which are specified in the workload section, are defined using the keyword dcltrans.

Syntax

TransSection = Transaction { Transaction }.

Transaction  = "transaction" ident1 [ "(" TParList ")" ]
               [ "const" ConstDecl ]
               [ "var" VarDecl ]
               [ "result" "set" IdentList ";"]
               "begin" StatSeq "end" [ ident1 ] ";".

The name of a transaction (ident1) is defined after the keyword transaction. In TParList the input parameters of the transaction are specified. Random variables and constants are valid input parameters of a transaction.

ConstDecl contains the declarations of the transaction constants. These constants can be used only inside the transaction where they are defined (transaction scope).

In VarDecl the variables of the transaction are declared. These variables can be used only inside the transaction where they are declared. Variables of the simple types number, float, string and boolean are allowed. You can also declare arrays or lists of simple types (ARRAY [numberOfArrayElements] OF simpleType, LIST OF simpleType).

StatSeq contains the statements of the transaction.

Example

transaction TMain
  begin
    WebPageUrl("http://myHost/ShopIt/");
    ...
    // more functions that describe the tasks of this TMain transaction
    ...
    WebPageLink("Products");
  end TMain;

For database load testing only

IdentList defines the scrollable database cursors of the transaction. Cursors that are not scrollable must not be defined after the keywords result set; they are defined implicitly. Result-set cursors and scroll forward cursors cannot share the same names.

  • Characteristics of Transactions
    Lists the characteristics of transactions.
  • Parameters of Transactions
    Specify input parameters for a transaction to send constant values or random variables specific for a user to the transaction.
  • Lifetime and Scope of Variables
    Defines the life span for transaction, random, and global variables.
親トピック: Program Structure of Load Testing Scripts


Characteristics of Transactions

The structure of a transaction is comparable to the structure of a procedure or function of a high-level programming language. Transactions have the following characteristics:
  • Nested block structure is possible
  • Variables of the native types number, float, boolean and string and arrays of simple types (array of number, array of float, array of boolean, array of string) can be used
  • Variables of a transaction have local scope (can only be used inside the transaction) but global life span
  • Transactions cannot call other transactions or themselves
  • Random variables or constants can be used as input parameters of transactions
  • A transaction has no output parameters
  • Full hierarchy of expressions applies with the usual rules of precedence
  • You can use if, while, for and loop statements for flow control
  • SQL commands/FORM commands are not declared in the transactions directly but in their own section (SQL section/FORM section) and are used like variables of special data types
  • Wait statements can be used for specifying user times
  • Random variables can be used for generating random values
親トピック: Transactions Section
関連概念
Lifetime and Scope of Variables
関連資料
Parameters of Transactions


Parameters of Transactions

You can specify input parameters for a transaction to send constant values or random variables specific for a user to the transaction. A transaction has no output parameters. Inside the transaction the input parameters are treated like random variables or constants. Therefore transaction parameters cannot be placed on the left side of assignments.

Syntax

TParList = TParam { ";" TParam }.

TParam   = IdentList ":" PType.

PType    = "string" "(" number ")"
         | "number"
         | "boolean"
         | "float".

TParlist contains the formal input parameters of the transaction. The identifiers in IdentList are parameters of type PType. Random variables returning type number, string, boolean or float and constants of these types are valid parameters of a transaction. Number, type and sequence of the actual parameters of a transaction (defined in the workload section) must correspond to number, type and sequence of the formal parameters of the transaction. Parameters of transactions are passed by reference.

If the actual parameter is a random variable, you must specify the type of the return value of the random variable (number, string, boolean or float), but not the type of the random variable (RndUniN, RndUniI, RndExpF,...), as the type of the formal parameter (PType). The length of the actual parameter must be less than or equal to the length of the formal parameter. If you omit a length specification for a formal parameter of type string, a string parameter of length 253 is defined.

Example

dclrand
  rArtNo1 : RndUniN(1..5000);
  rArtNo2 : RndUniN(5001..10000);

dcluser
  user
    User1
  transactions
    Selling(rArtNo1, "User1") : 100;

  user
    User2
  transactions
    Selling(rArtNo2, "User2") : 50;

dcltrans
  transaction Selling(pArtNo: number; pUser: string)
  var
    i : number init 1;
    j : array [20] of number;
    sName : string;
  begin
    ...
    j[i] := pArtNo;
    sName := pUser;
    ...
    i := i+1;
  end Selling;

The example shows a portion of a Silk Performer program. User1 assigns the actual parameters rArtNo1 (a random variable) and "User1" (a constant string) to the formal parameters pArtNo and pUser of the transaction Selling. User2 assigns the random variable rArtNo2 and the constant string "User2" to the formal parameters pArtNo and pUser of the transaction Selling. The parameter pArtNo is treated like a random variable. Therefore each time pArtNo is used, a new random value is generated.

親トピック: Transactions Section
関連概念
Characteristics of Transactions
Lifetime and Scope of Variables


Lifetime and Scope of Variables

Variables of a transaction are of local scope (they can be used only inside the transaction) but have a global life span (they are created at the beginning of a simulation and are destroyed at the end of the simulation; compare defining a static variable in a C function). Therefore transaction variables are initialized once and can hold their values over multiple calls of the transaction. Global variables are of global scope and global life span.

Random variables are of global scope (they can be used in any transaction, SQL command or workload description). The value of a random variable is refreshed each time the variable is used.

注: Global variables are of global scope to the script where they are defined but of local scope to the users defined in the workload section of the script.
親トピック: Transactions Section
関連概念
Characteristics of Transactions
関連資料
Parameters of Transactions


Web Forms Section

Web forms are the most important interface to exchange data with the Web server. The forms section can easily be randomized and is used by WebForm functions.

The Web forms used by the transactions are defined using the keyword dclform.

The following simple example shows a portion of a Silk Performer program for simulating a form submission. Random variables rsEmail and rsPlatform (RndFile and RndInd) are defined in the random variables section using two different random functions. With each subsequent call to WebFormPost and WebFormGet, the random variables are refreshed and so contain new random values. These random values are used to generate the URL-encoded form string that is automatically sent within the request to the Web server. WebFormPost adds the form content string at the end of the HTTP header, while WebFormGet adds the form content string at the end of the URL separated by an "?".

Example

dclrand
  rsEmail    : RndFile("elname.rnd", 20);
  rsPlatform : RndInd("Windows NT" = 0.4;
                      "Windows 95" = 0.2
                      "Unix"       = 0.3;
                      "other"      = 0.1);

dcltrans
  transaction TWebFormPost
  begin
    WebFormPost("http://www.comp.com/cgi/FormMail.pl",
                CGI_CUST_SUPPORT);
    WebFormGet("http://www.comp.com/cgi/form",
                CGI_CUST_SUPPORT);
    WebThreadWait(WAIT_FORALLTHREADS);
  end TWebFormPost;

dclform
  CGI_CUST_SUPPORT:
    "email"     := rsEmail,
    "sitetype"  := "business",
    "sitelang1" := "english",
    "sitelang2" := "",
    "platform"  := rsPlatform;
  • Web Form Declarations
    Provides an overview of window form declarations including the form name, attributes, and form fields.
親トピック: Program Structure of Load Testing Scripts
関連概念
Syntax of Load Testing Scripts
関連資料
Script Structure Sample
WebFormPost Function
WebFormGet Function


Web Form Declarations

A form declaration consists of a form name with an optional form attribute and a list of form fields.

The form name can be any valid identifier string, for example FORM_NAME. If an attribute is specified, it must consist of an identifier within angle brackets, for example < ENCODE_ESCAPE >. The form name must be separated by a colon from the list of form fields.

The subsequent list specifies the fields of a web form or the parameters of a URL string. The string or variable on the left specifies the name of the field or parameter. An empty string is allowed for nameless URL parameters, such as image map coordinates. The right value specifies the data value of the field or parameter; this can be any expression with return type 'string', 'number' or 'float'.

The expression may use global constants, variables and random variables, BDL functions or external functions.

The list of form fields may be empty, resulting in an empty form. However, if you need an empty form, you can use the predefined empty form called FORM_NULL from the kernel.bdh include file.

Syntax

FormsSection     = { FormsDeclaration }.

FormsDeclaration = ident [ Attr ] ":"
                   [ FormItem { "," FormItem } ] ";".

FormItem         = FormItemName ":="
                   FormItemValue [ Attr ].

FormItemName     = FormExpression.

FormItemValue    = FormExpression.

FormExpression   = numeric expression | string expression

Attr             = "<" ( numeric expressionident ) ">".

Attributes

The optional attributes of a form or a form field must evaluate to a number value. While the compiler accepts any value, only those described herein have an effect. These values are named constants, defined in the kernel.bdh include file. Sometimes it makes sense to combine two or more attribute values using the bitwise-or operator '|'.

There are two groups of attributes: Usage attributes (only applicable for form fields in forms that are used context-full) and encoding attributes. Named constants for attributes are defined in the kernel.bdh include file.

Usage attributes:

Usage attributes specify how the form value in the script is combined with the value from the HTML form on a context-full form submission (WebPageSubmit function). If none of the usage attributes is specified, USE_SCRIPT_VAL is the default. This guarantees backward compatibility for scripts generated with older versions of Silk Performer. Usage attributes are mutually exclusive, meaning it makes no sense to combine two or more of them.
  • USE_SCRIPT_VAL (default): Specifies that the value given in the script must be used.
  • USE_HTML_VAL: Specifies that the value given in the form definition in the HTML form must be used. This is especially useful to make Silk Performer handle session IDs in (hidden) form fields automatically. You can still specify a form field value in the script, but this value is not used.
  • SUPPRESS: Specifies that a form field with the given name must not be submitted, even if the HTML form definition contains such a field. This allows using HTML forms for a WebPageSubmit function call even when the HTML form is not exactly identical to the form that should be submitted, and thus taking advantage of the attribute USE_HTML_VAL for other form fields. This is useful for modeling form submission that are done by client-side JavaScript, and form fields that are removed from a form prior to submitting it. Any field value specified in the script is not used.

Encoding attributes:

Encoding attributes specify how the unsafe characters in a field name or field value must be encoded. This is important to accommodate different encoding strategies used by different browsers in different situations.

Encoding attributes are mutually exclusive. It does not make sense to specify more than one for one form field.
  • ENCODE_FORM (default): This is the default and is used when none of the encoding attributes is specified. ENCODE_FORM encodes unsafe characters according to the mime type "application/x-www-form-urlencoded', see also RFC 1866, chapter 8.2.1. All popular browsers use this encoding for form submissions.
  • ENCODE_ESCAPE: This encodes unsafe characters according to the JavaScript function escape. The main difference to ENCODE_FORM is that blanks are encoded with "%20" instead of "+".
  • ENCODE_BLANKS: This encodes blanks to "%20". No other characters are encoded. Most browsers do this when a link is clicked.
  • ENCODE_NONE: No characters are encoded. This may be useful to accurately simulate applications where client-side Javascript performs HTTP requests without conforming to established standards.
  • ENCODE_CUSTOM: This is a configurable encoding type for special purposes. Use the WebFormDefineEncodeCustom function to specify how this encoding type encodes individual characters.
  • ENCODE_URICOMPONENT: This encodes unsafe characters according to the Microsoft JScript function encodeURIComponent. See http://msdn.microsoft.com/en-us/library/ie/aeh9cef7%28v=vs.94%29.aspx.

Attribute of a form vs. attribute of a form field

The encoding attribute of a form (as a whole) specifies the default-encoding attribute for form fields that have no encoding attribute on their own.

For example, if all form fields should use the attribute ENCODE_ESCAPE, you can specify this attribute after the form name. This encoding attribute is then used for all form fields. You can still override the encoding attribute for individual form fields by specifying another attribute for some fields.

Example

dclform
  CGI_CUST_SUPPORT:
    "email"         := "support@company.com",
    "platform"      := "Windows NT";
  AD_SERVER_PARAMS <ENCODE_NONE>:
    "~userpref"     := "12|34|56",
    "~requesttime"  := "01/01/2002";
  FORM_REDIR_LOGIN <ENCODE_NONE> :
    "~language"     := "EN",
    "~logingroup"   := "GUEST",
    "~transaction"  := "TEST",
    "~exitUrl"      := "http://www.myserver.com/
goodbye.html";
  SHOPIT_KINDOFPAYMENT:
    "choice"        := "Cash",
    "price"         := ""5.90 <USE_HTML_VAL> ,
    "paymentButton" := "" <USE_HTML_VAL> ;
  CGI_BIN_001:
    "BV_SessionID"  := "" <USE_HTML_VAL>,
    "BV_EngineID"   := "" <USE_HTML_VAL>,
    "TargetOID"     := "" <USE_HTML_VAL>;
  LOGIN_FORM_001:
    "username"      := "testuser" + string(GetUserId()),
    "password"      := "testpassword",
    "hash" := "" <USE_HTML_VAL_ENCODE_NONE>,
    "platform"      := "OS: Win2000, Browser: IE5.5,
Timezone: GMT-0300" <ENCODE_NONE>;
親トピック: Web Forms Section
関連概念
Low-Level Web Functions
関連資料
WebFormDefineEncodeCustom Function


SQL Section

The SQL commands that are called by the transactions are defined in the SQL section. They present the reusable component of the Silk Performer program. The SQL commands should already exhibit the form in which they will be used in the transaction of the application program.

Silk Performer supports stored procedures in test scripts. The syntax of defining a stored procedure in the SQL section is very similar to defining a SQL command.

The SQL section is defined using the keyword sql.

Syntax

SqlSection = SqlStatement ";" { SqlStatement ";" }.

SQLStatement = ( ident ":" SqlCommand )
             | ( ident "(" "proc" ")" ":" SqlProcedure ).

An SQL section can contain several definitions of SQL commands or stored procedures (SqlStatement). ident is the name of the SQL command (stored procedure) you are using when calling the SQL command in a transaction. SQLCommand is the current SQL statement in SQL syntax of your DBMS. Each SQL statement must be a valid SQL statement of your DBMS.

SqlProcedure describes the calling conventions for Stored Database Procedures that you want to use in your Silk Performer script. The syntax for calling a stored procedure in a transaction is the same as the syntax for calling a SQL command. You do not write the stored procedure directly in your Silk Performer program; instead you define a call to the stored procedure using ODBC syntax in your SQL section.

The following example shows a portion of a Silk Performer program for simulating a workload. Two random variables (randvar1 and randvar2) with two different random functions (RndUniN and RndStr) are defined in the random variables section. Two users (usr1 and usr2) are defined in the workload section. During a simulation time slice of 3600 seconds, usr1 calls the transaction Selling 100 times and the transaction Order 10 times. usr2 calls the transaction StockQuery 20 times during a simulation time slice of 2000 seconds.

Example

dclrand
  randvar1: RndUniN(1..1000);
  randvar2: RndStr("abcde1234"; 10..20);

dcluser
  user
    usr1
  transactions
    Selling : 100;
    Order   : 10;

  user
    User2
  transactions
    TStockQuery : 20;

The transactions Selling, Order and StockQuery are defined in the transactions section of the Silk Performer program. The transaction Selling calls the SQL command SelArticle and InsSale to access the test database of the application system to be simulated. A transaction can bind a global variable or a random variable to a SQL command (:v_artno). R values of the SQL command can be passed on to other SQL commands (into :v_name,:v_price,:v_agr).

Example

var
  I, v_artno, v_price : number;
  v_name, v_agr       : string;

dcltrans
  transaction TSelling
  begin
    ...
    for I := 1 to 5 do
      artno := randvar1;
      c1: SelArticle();
      c2: InsSale(...);
    end;
  end TSelling;

  transaction TOrder
  begin
    ...
  end TOrder;

  transaction TStockQuery
  begin
    ...
  end TStockQuery

The SQL commands used by the transactions SelArticle and InsSale are defined in the SQL section. Global variables (v_artno, v_name, v_agr and v_price) and random variables can be used in SQL text as bind variables (with a preceding ":").

Example

dclsql
  SelArticle:
    SELECT article_name, price, article_group
    INTO :v_name, :v_price , :v_agr
    FROM article WHERE artno = :v_artno;
    InsSale(...):
    ...
  • Support For Stored Procedures
    Provides an overview of stored procedure support and describes where to use them within a test script.
  • Binding Data (bind variables)
    Describes bind variables and where to use them within atestscript.
  • Dynamic SQL
    Expand your bind values at run time every time a SQL statement is called.
  • Setting SELECT Buffers (into variables)
    Describes how to receive data from a SQL select command by setting areas within the Silk Performer program that will receive the data.
  • Compatibility With ODBC Data Types
    Lists the data type mapping for Silk Performer data types, ODBC C data types, and ODBC SQL data types and describes when to use mapping.
  • Access Cycle of ODBC Functions
    Describes the sequence ODBC operations must be executed in to perform a SQL command in an ODBC application.
  • Optimized Access Cycle of Silk Performer
    Explains the optimized access cycle, where Silk Performer calls only ODBC functions that are absolutely necessary to perform the SQL commands.
  • User-Controlled Access Cycle of Silk Performer
    Describes how the reprepare, autocommit, and dynamic SQL parameters control the ODBC access cycle.
親トピック: Program Structure of Load Testing Scripts
関連概念
Syntax of Load Testing Scripts
関連資料
RndUniN Random Type (uniform distribution)
RndStr Random Type (alphanumeric values)
Calling SQL Commands
Commit Statement


Support For Stored Procedures

Silk Performer supports stored procedures in your Silk Performer programs. You can use in, out and in/out parameters in your stored procedures. Likewise you can use fetchable procedures that use fetch statements to get multiple-row results of the procedure (similar to select commands returning multiple rows using into variables and fetch statements). The syntax of calling a stored procedure in a transaction is the same as the syntax of calling a SQL command. The syntax of defining a stored procedure in the SQL section is very similar to defining a SQL command. You define stored procedures (more precisely, calls to stored procedures) in the SQL section of your Silk Performer program. You do not write the stored procedure directly in your Silk Performer program; instead you write stored procedures in the environment of your DBMS and only call the stored procedure inside your Silk Performer script using ODBC syntax.

Syntax

StoredProc = ident "(" "proc" ")" ":" SqlProc.

SqlProc = "{" [ bindvar "=" ] "call" ProcName
          [ BindVar [ "in" | "out" | "inout" ]
          { "," BindVar [ "in" | "out" | "inout"] } ] "}"
          [ "into" BindVar { "," BindVar } ].

BindVar = ":" ident.

ProcName = [ ident "." ] ident.

Example

var
  v1, v2, v3, v4, v5, v6: number;

dcltrans
  transaction TestProc
  begin
    v1 := 1; v2 := 2;
    c1: SpTest();
    while not eos(c1) do
      fetch c1 next 1;
    end;
  end TestProc;

dclsql
  SpTest(proc):
    { :v3=CALL MyProc(:v1 IN, :v2 INOUT, :v4 OUT) }
    INTO :v5, :v6;
親トピック: SQL Section
関連概念
Database (DBMS) Functions
User-Controlled Access Cycle of Silk Performer
Optimized Access Cycle of Silk Performer
関連資料
Binding Data (bind variables)
Dynamic SQL
Setting SELECT Buffers (into variables)
Access Cycle of ODBC Functions


Binding Data (bind variables)

In a SQL command, you can use a bind variable to represent the value of a column. A bind variable in a SQL command indicates that data will be bound to (associated with) the command each time the command executes. A bind variable in a SQL command must be associated (bound) to a random variable defined in the random variables section or to a global variable of the Silk Performer test script. The bind variable name begins with a colon (:) and is followed by the name of the random variable or global variable associated with it.

Example

var
  v1, v_price : number;

dclrand
  r1 : RndSno(1);
  r2 : RndInd("trousers"  = 0.3; "jackets" = 0.1;
              "pullovers" = 0.1; "shirts" = 0.1;
              "stockings" = 0.1; "skirts" = 0.1;
              "gloves"    = 0.2);
  r3 : RndStr(10..40);
  r4 : RndExpN(10..5000:500.0);
  r5 : RndUniN(1..500);
  r6 : RndUniN(10..50);

dcltrans
  transaction TMain
  begin
    ...
    c1: InsArticle(
    ...
    price := r4;
    g1 := r5;
    c1: UpdArticle();
    ...
  end TMain;

dclsql
  InsArticle:
    INSERT INTO article(articlenumber, articlegroup,
                        articlename, price, stock, quantity)
    VALUES(:r1, :r2, :r3, :r4, 20, 100);

  UpdArticle:
    UPDATE article
    SET price = :v_price * 0.9, quantity = :r6
    WHERE articlenumber = :g1;
親トピック: SQL Section
関連概念
Database (DBMS) Functions
User-Controlled Access Cycle of Silk Performer
Optimized Access Cycle of Silk Performer
関連資料
Support For Stored Procedures
Dynamic SQL
Setting SELECT Buffers (into variables)
Access Cycle of ODBC Functions


Dynamic SQL

If you want to expand your bind values at run time every time a SQL statement is called, you can use the following feature of Silk Performer. If a program variable starts with two colons, Silk Performer detects dynamic binding and does not call the ODBC function SQLBindParameter for this program variable. The value of the program variable is copied into the SQL statement at run time every time the statement is called.

Examples

The following is an example of Dynamic SQL:

SELECT * FROM article
WHERE a_no >= ::vAno AND a_cat like '::vCat'
for
vAno = 99
vCat = 'trousers'
expands to
SELECT * FROM article
WHERE a_no >= 99 AND a_cat LIKE 'trousers'

The following is an example of Normal Binding:

SELECT * FROM article
WHERE a_no >= :vAno AND a_cat LIKE :vCat
expands to
SELECT * FROM article
WHERE a_no >= ? AND a_cat LIKE ?
plus two additional calls to the ODBC function SQLBindParameter.
親トピック: SQL Section
関連概念
Database (DBMS) Functions
User-Controlled Access Cycle of Silk Performer
Optimized Access Cycle of Silk Performer
関連資料
Support For Stored Procedures
Binding Data (bind variables)
Setting SELECT Buffers (into variables)
Access Cycle of ODBC Functions


Setting SELECT Buffers (into variables)

To be able to receive data from a SQL select command, you must set the areas within the Silk Performer program that will receive that data. These areas are called into variables. You must specify the into variables in the into clause of a SQL select command. An into variable in a SQL command must be associated with (bound to) a global variable. Into variable names begin with a colon (:) and are followed by the name of the corresponding global variable.

If certain columns specified in the select clause of the SQL select command will not be used in your transaction, you can use asterisks (*) instead of into variables to receive the values of these columns. Columns associated with an asterisk will be received in a special buffer of Silk Performer. You cannot use this buffer inside your transactions. Asterisks serve the purpose of place holders. You must not omit them, because you want to simulate and measure the performance of your final system. The number of into variables and asterisks in the into clause must match with the number of columns in the select clause of the SQL command.

The into clause of a select statement can be omitted if the Silk Performer program does not process result values. In this case all values of the select list are automatically bound to the internal buffer of Silk Performer.

Example

dclrand
  rArtNo: RndUniN(1..500);

var
  v_artno, v_stock, v_quant: number;

dcltrans
  transaction TMain
  begin
    v_artno := rArtNo;
    c1: SelArticle();
    if v_stock < v_quant then
      ...
    end
  end TMain;

dclsql
  SelArticle:
    SELECT articlename, articlegroup, quantity, stock
    INTO *, *, :v_quant, :v_stock
    FROM article WHERE articlenumber = :v_artno;

The example above shows the SQL SELECT command SelArticle selecting the database columns articlename, articlegroup, quantity and stock. The database columns articlename and articlegroup are associated with (bound to) with the Silk Performer data buffer (*) because their values will not be used in the transaction calling the SQL command. The database columns quantity and stock are associated with the into variables :v_quant and :v_stock.

親トピック: SQL Section
関連概念
Database (DBMS) Functions
User-Controlled Access Cycle of Silk Performer
Optimized Access Cycle of Silk Performer
関連資料
Support For Stored Procedures
Binding Data (bind variables)
Dynamic SQL
Access Cycle of ODBC Functions


Compatibility With ODBC Data Types

You can use the Silk Performer data types number, float and string to exchange values between a Silk Performer program and your DBMS. Silk Performer uses the following default data type mapping for Silk Performer data types, ODBC C data types, and ODBC SQL data types.

Silk Performer data type | ODBC C data type | ODBC SQL data type
number | SQL_C_LONG | SQL_INTEGER
float | SQL_C_DOUBLE | SQL_FLOAT
string <= 254 | SQL_C_CHAR | SQL_CHAR
string > 254 | SQL_C_CHAR | SQL_LONGVARCHAR

Silk Performer uses this mapping for binding input values into values with the ODBC functions SQLBindParameter and SQLBindCol.

You can use the Silk Performer data type number for associating with any numeric data types of your DBMS. The Silk Performer data type number represents integer values. Therefore floating-point values received from a DBMS data type like number, decimal, float or real are rounded to an integer value. To avoid this, you should bind numeric DBMS data types that are noninteger to the Silk Performer data type float.

You can use the Silk Performer data type string for associating with any numeric and non-numeric data type of your DBMS (for example., DATE data types). You need only assure that the values you want to exchange correspond to the type and length requirements of the Silk Performer and the DBMS data type. You can also associate any DBMS data type to the Silk Performer data buffer.

親トピック: SQL Section


Access Cycle of ODBC Functions

To perform a SQL command in an ODBC application, the following sequence of ODBC operations must be executed:

  1. Connect to the data source (ODBC functions SQLAllocEnv,SQLAllocConnect, SQLConnect)
  2. Allocate a cursor/statement handle (ODBC function SQLAllocStmt)
  3. Prepare the SQL command (ODBC function SQLPrepare, orSQLExecDirect for direct prepare and execute)
  4. Bind program data to SQL data (ODBC functions SQLBindParameter for binding parameter markers to program data and SQLBindCol for binding selected columns to program data)
  5. Execute the SQL command (ODBC function SQLExecute orSQLExecDirect for direct prepare and execute)
  6. Fetch rows if the SQL command is a select (ODBC function SQLFetch or SQLExtendedFetch for scrollable cursors)
  7. Commit or roll back the transaction (ODBC function SQLTransact)
  8. Free the cursor/statement handle (ODBC function SQLFreeStmt)
  9. Disconnect from the database (ODBC functions SQLDisconnect, SQLFreeConnect, SQLFreeEnv)

The main steps in performing a SQL command are: connect to the database, prepare the SQL command, execute the SQL command, fetch the results if it is a SQL select command, and disconnect from the database.

To perform a SQL command repeatedly or to perform multiple SQL commands, it is not necessary (and not appropriate) to execute all operations listed above every time you want to perform a SQL command. The sequence of the ODBC functions for performing SQL commands repeatedly is called the access cycle of ODBC functions.

親トピック: SQL Section
関連概念
Database (DBMS) Functions
User-Controlled Access Cycle of Silk Performer
Optimized Access Cycle of Silk Performer
関連資料
Support For Stored Procedures
Binding Data (bind variables)
Dynamic SQL
Setting SELECT Buffers (into variables)


Optimized Access Cycle of Silk Performer

To perform a SQL command in a Silk Performer program, all you have to do is to call the SQL command at the position in the program where you want to execute it. Silk Performer manages all operations (ODBC function calls) necessary to process the SQL command for you. By default, Silk Performer uses an optimized access cycle (calling only ODBC functions that are absolutely necessary to perform the SQL commands).

Silk Performeruses the following access cycle of ODBC function calls:

The connection to the database is established once at the beginning of a simulation and is closed at the end of a simulation. Also, all cursors/statement handles used in a simulation are allocated at the beginning of the simulation and are freed at the end of the simulation. At the end of a transaction Silk Performer automatically performs a commit. A SQL command is prepared only if it is not already active on the related cursor (the related cursor is the cursor that preceded the call of the SQL statement).

A SQL command is active on a cursor if:

  • it already has been prepared on the same cursor

(and)

  • no other SQL command has been prepared and executed on the same cursor in the meantime.

(and)

  • there was no commit or rollback statement between the current call of the SQL command and the last call

(or)

  • there was a commit or a rollback and the two options of the DBMS are set to SQL_CB_CLOSE or SQL_CB_PRESERVE.
    • SQL_CURSOR_COMMIT_BEHAVIOR (and)
    • SQL_CURSOR_ROLLBACK_BEHAVIOR

Silk Performer is designed to remove ODBC overhead that could skew actual results on the database under test.

  • Cursor Behavior
    Describes how Silk Performer determines whether the SQL statement has to be prepared before it can be executed.
親トピック: SQL Section
関連概念
Database (DBMS) Functions
User-Controlled Access Cycle of Silk Performer
関連資料
Support For Stored Procedures
Binding Data (bind variables)
Dynamic SQL
Setting SELECT Buffers (into variables)
Access Cycle of ODBC Functions


Cursor Behavior

Silk Performer queries the cursor behavior of the DBMS to which it is connected, in order to be able to decide whether the SQL statement has to be prepared before it can be executed.

  • SQL_CURSOR_COMMIT_BEHAVIOR indicates how a commit operation affects cursors and prepared statements.
  • SQL_CURSOR_ROLLBACK_BEHAVIOR indicates how a rollback operation affects cursors and prepared statements.
  • SQL_CB_DELETE (0) indicates that the DBMS closes cursors and deletes prepared SQL statements. To use the cursor again, the application must reprepare and re-execute the SQL statement.
  • SQL_CB_CLOSE (1) indicates that the DBMS closes cursors. For prepared SQL statements, the application can execute the SQL statement without repreparing it.
  • SQL_CB_PRESERVE (2) indicates that the DBMS preserves cursors. The application can continue to fetch data or it can close the cursor and reexecute the SQL statement without re-preparing it.

For a detailed description of SQL_CURSOR_COMMIT_BEHAVIOUR and SQL_CURSOR_ROLLBACK_BEHAVIOUR, see your ODBC documentation.

親トピック: Optimized Access Cycle of Silk Performer


User-Controlled Access Cycle of Silk Performer

You can control the ODBC access cycle of Silk Performer with the following parameters:

Reprepare

The reprepare parameter can be enabled/disabled in the Silk Performer ODBC settings (menu Settings/ODBC Settings/Reprepare SQL commands). If the reprepare parameter is enabled, Silk Performerprepares a SQL statement (using the ODBC function SQLPrepare) every time it is called, regardless of whether it is active. The setting of reprepare is effective over the whole Silk Performer script. On default the reprepare parameter is disabled.

Autocommit

The autocommit parameter can be enabled/disabled in the Silk PerformerODBC settings (menu Settings/ODBC Settings/Auto commit). If the autocommit parameter is enabled, the database is committed automatically after each SQL command. Otherwise, the database is committed only after an explicit commit statement or at the end of a Silk Performer transaction. The parameter setting is effective over the whole Silk Performer script.

Dynamic SQL

If you are using a dynamic SQL statement, Silk Performer uses the ODBC function SQLExecDirect to execute the SQL statement instead of using SQLPrepare and SQLExecute. For how to use dynamic SQL in Silk Performer, see Dynamic SQL.

親トピック: SQL Section
関連概念
Database (DBMS) Functions
Optimized Access Cycle of Silk Performer
関連資料
Support For Stored Procedures
Binding Data (bind variables)
Dynamic SQL
Setting SELECT Buffers (into variables)
Access Cycle of ODBC Functions


Expressions

An expression is a combination of constants, variables, random variables, functions, parentheses and operators that yields a single value. Silk Performer distinguishes among the following expressions:

  • Relational expressions
  • Boolean expressions
  • Numeric expressions
  • String expressions

The following special Silk Performer functions can be used in expressions:

  • Type conversion functions (chr, ord, string, number, float)
  • High-level database functions (rows, rc, eos)
  • Random types (RndUniN)
  • Operators
    Provides an overview of operators and lists the operator symbols, types, and types of operands.
  • Increment and Decrement Operators
    Describes the increment (--) and decrement (++) operators, which are supported for number varibles.
  • Precedence Rules
    Describes the precedence rules that apply to operators used in Silk Performer test scripts.
  • Concatenate Operator
    Use the + operator to concatenate strings and single characters.
  • Valid Expressions
    Lists the expressions that are valid for use in Silk Performer test scripts.
親トピック: Program Structure of Load Testing Scripts


Operators

An operator is a symbol or word that represents an operation to be performed on one or more values.

Operator symbol | Operator type | Type of operands
+ - * / | numeric | number, float
| | bitwise or | number
& | bitwise and | number
mod | numeric | number
= <> > < >= <= | relational | number, string, char, boolean, float
and or not | boolean | boolean
+ | concatenate string | string, char, number, float, boolean
  • The operands of an operator must be of the same data type. Operands are casted automatically for string concatenations.
  • mod is the Modulo operator. The left operand of the mod operator is the dividend; the right operand is the divisor.
  • You cannot use arrays without an index in an expression.
  • Expressions with multiple and operators (or or operators) are evaluated from left to right. Evaluation for and/or stops as soon as the result is known.
親トピック: Expressions
関連資料
Precedence Rules


Increment and Decrement Operators

For number variables, BDL supports an increment (--) and a decrement (++) operator. The increment operator increases a number by one, the decrement operator decreases a number by one.

Syntax

Stat = ident [ "[" Expr2 "]" ] [ "++" | "--" ] .

Example

transaction demo
var
  i : number init 2;
begin
  i++; // i is now 3
  i--; // i is now 2
end;
親トピック: Expressions


Precedence Rules

The following precedence rules apply to operators used in Silk Performer test scripts:

  • *, /, MOD are evaluated before +,-.
  • AND is evaluated before OR.
  • *, /, MOD, +, -, AND, OR, NOT are evaluated before relational operators.
親トピック: Expressions
関連資料
Operators


Concatenate Operator

You can use the + operator to concatenate strings, single characters, numbers, floats and boolean values.

Example

var
sString : string;
sString1, sString2 : string;
i : number init 42;
f : float init 23.5;
b : boolean init true;

begin
sString1 := "The ";
sString2 := "sun ";
sString  := sString1 + sString2 + "is " + "r" + 'I' +
            's' + "ing" + '.';
write(sString); writeln;
writeln("number: " + i);
println("float: " + f);
println("boolean: " + b);

end;

Output

The sun is rising.
number: 42
float: 23.50000
boolean: TRUE
親トピック: Expressions


Valid Expressions

The following types of expression are valid in Silk Performer test scripts:

I > j
I <> p1
j >= r1

I * j = p1
I * j + 1

I mod j + 1
j / (I + k)

b1 = (I < j)
(I <= j) and b1 or not (b2 or b1)
((k+I*(I+1))/(k+k*a[2]))/199 <> (k+I*(j+1))/j-j

s1 = s2
s1[i] => s2[j+1]
as[2] = s2
as[3] = "tomorrow"
as[4] = r2
s1[1] = chr(r1)

ord(chr(r1))
ord(s1[a[i]])
ord('a') + 10
chr(ord('a'))

s1 + as[i] + r1 + "yesterday" + ';'
親トピック: Expressions


Statements

Just as high-level programming languages do, Silk Performer offers statements for expressing sequences, selections, and iterations. The following statements are available:

  • Assignments
  • If statement
  • While statement
  • For statement
  • Loop statement
  • Exit statement
  • Return statement
  • Write statement

Special simulation statements

  • Wait statement
  • Halt statement
  • Throw statement

Database access statements

  • SQL call
  • Commit statement
  • Rollback statement
  • Fetch statement
  • Sequence of Statements
    Describes a sequence of statements.
  • Assignments
    Assigns a value (Expr1) to a variable (Ref) of a transaction.
  • Exit Statement
    Terminates the loop (while, for, or loop) in which it is directly nested.
  • For Statement
    Acts as a loop that repeats the statements in StatSeq until Ident is greater than Expr2.
  • If Statement
    Expresses branches.
  • Loop Statement
    Repeats the statements enclosed between loop and end until an exit or a return statement is executed.
  • Return Statement
    Terminates the execution of a transaction or the simulation of the user executing the current transaction.
  • Throw Statement
    Terminates the execution of an event handler function by passing execution control to the runtime system.
  • While Statement
    Acts as a loop that repeats the statements in StatSeq until the expression Expr becomes false.
  • Write Statement
    Outputs the value of Expr1 with field width Expr2 and precision Expr3 to the WRT file of the user executing the write statement.
  • Database Server Access Statements
    Lists the database server access statements and provides access to the related background information.
  • Special Simulation Statements
    Lists the special simulation statements that Silk Performer supports.
親トピック: Scripting Language Structure and Statements


Sequence of Statements

A transaction consists of several statements. Statements are separated by semicolons and can be empty.

Syntax

StatSeq = Stat { ";" Stat }.

Example

dcltrans
  transaction TInit
  var
    bOk: boolean;
  begin
    write("initializing..."); writeln;
    bOk := InitBuffer(512);
    if bOk then
      writeln("successfully initialized")
    else
      writeln("failure")
    end
  end TInit;

Output

initializing...
successfully initialized
親トピック: Statements


Assignments

The assignment statement assigns a value (Expr1) to a variable (Ref) of a transaction. If the variable is an array, you must reference the element of the array via an index. You can only assign elements of an array, not the whole array. If the variable is a string, you can assign single characters to the string by referencing the string variable via an index.

Syntax

Stat = Ref ":=" Expr1 .
Ref  = ident [ "[" Expr2 "]" ] .

For numerical variables additional assignment operators are allowed:

Stat = Ref [ "+=" | "-=" | "*=" | "/=" ] Expr1 .
Ref = ident [ "[" Expr2 "]" ] .

Example

The following assignments are valid:

dclrand
  r1 : RndUniN(0..255);
  r2 : RndStr(2..10);
  ...

dcltrans
  transaction t1(p1: number):
  var
    i, j, k : number init 1;
    a       : array[10] of number;
    b1, b2  : boolean;
    s1      : string(20);
    s2      : string(10);
    as      : array [5] of string(14);
    f       : float init 1.0;

  begin
    a[1] :=1;
    i := i*j+1;
    k := i modj+1;
    i := j/(i+k);
    i := ((k+i*(i+1))/(k+k*a[2]))/199;
    j := -j;
    i := ord(chr (r1));
    j := ord(s1[a[i]]);
    k := ord('a')+10;
    a[i] := p1;
    b2 := true;
    b1 := i>j;
    b2 := i<>p1;
    b1 := j>=r1;
    b2 := i*j=p1;
    b2 := b1=(i<j);
    b1 := (i<=j) and b1 or not (b2 or b1);
    s1 := s2;
    s2 := r2;
    s1[i] := s2[j+1];
    s2[10] :='x';
    as[2] := s2;
    as[3] :="Silk Performer";
    as[4] := r2;
    s1[1] :=chr(r1);
    s1[1] :=chr(ord('a'))

    j += 2; // is the same as j := j + 2;
    j -= 2; // is the same as j := j - 2;
    j *= 2; // is the same as j := j * 2;
    j /= 2; // is the same as j := j / 2;

    f += 2.0; // is the same as f := f + 2.0;
    f -= 2.0; // is the same as f := f - 2.0;
    f *= 2.0; // is the same as f := f * 2.0;
    f /= 2.0; // is the same as f := f / 2.0;

  end t1;
親トピック: Statements
関連資料
Sequence of Statements


Exit Statement

Terminates the loop (while, for, or loop) in which it is directly nested.

Syntax

Stat = "exit".

Example

dcltrans
  transaction TInit
  var
    I : number;
    a : array[100] ofnumber;
  begin
    I := 1;
  loop
    a[i] := I;
    if I = 100 then exit end;
    I := I+1
    end;
  end TInit;
親トピック: Statements
関連資料
Sequence of Statements


For Statement

Acts as a loop that repeats the statements in StatSeq until Ident is greater than Expr2. Expr1 and Expr2 are expressions of type number. Ident is a variable of type number. The first time the loop is entered, Ident is set to Expr1. Ident is incremented by 1 each time the loop is executed. Expr2 is only evaluated the first time the loop is entered.

Syntax

Stat = "for" [Ident | "var" Ident] ":=" Expr1 "to" Expr2 "do" StatSeq "end".

The for loop is equivalent to the following while loop:

Example

dcltrans
  transaction t1
  const
    MAX_IND := 100;
  var
    I : number;
    a : array [MAX_IND] of number;
  begin
    ...
    for I := 1 to MAX_IND do
      a[i] := i;
    end;
  end t1;
親トピック: Statements
関連資料
Sequence of Statements


If Statement

Expresses branches. If Expr1 is true, SatSeq1 is executed; otherwise, if Expr2 is true, StatSeq2 is executed; if none of the expressions in the if statement is true, StatSeq3 is executed. Multiple elseif parts are allowed. The elseif part and the else part of the if statement are optional.

Syntax

Stat = "if" Expr1 "then" StatSeq1
       { "elseif" Expr2 "then" StatSeq2 }
       [ "else" StatSeq3 ]
       "end".

Example

dcltrans
  transaction TMain
  var
    I, j : number;
    a, b : boolean;
  begin
    if b then
      I := I+1;
      j := j*2
    elseif a then
      I := I-1
    else
      I := I-2
    end;

    if (I < j) and not b then
      b := true;
    end;
  end TMain;
親トピック: Statements
関連資料
Sequence of Statements


Loop Statement

Repeats the statements enclosed between loop and end until an exit or a return statement is executed.

Syntax

Stat = "loop" StatSeq "end".

Example

dcltrans
transaction TCount
var
  i: number;
begin
  I := 0;
  loop
  if I >= 3 then exit end;
    I := I+1;
    write("hello world! "); write(I); writeln;
end;
end TCount

Output

hello world! 1
hello world! 2
hello world! 3
親トピック: Statements
関連資料
Sequence of Statements


Return Statement

Terminates the execution of a transaction or the simulation of the user executing the current transaction. In conjunction with the execution of a return statement, Silk Performer executes a commit of the transaction unless a rollback was executed before when using Silk Performer's high-level database functions (implicitly, for example, because of a deadlock or explicitly because of a rollback statement in the transaction).

Executing a return statement in a Silk Performer function has the same effect: it terminates the transaction from which the function was called and not only the function itself.

Syntax

Stat = "return" [ ( number | "(" number ")"].

  • If number is 0, the termination status of the transaction is set to OK. The current transaction is terminated.

  • If number is 1, the termination status of the transaction is set to CA (=canceled). The current transaction is terminated.

  • If number is 2, the transaction will not be considered in the result report. The current transaction is terminated and the simulation of the user will be stopped immediately (equivalent to a halt statement).

Example

dcltrans
  transaction TMain
  var
    I : number;
    a : array [100] of number;
    badEvent : boolean;
  begin
    ...
    if badEvent then
      rollback;
      return 1
    end;

    I := 1;
    loop
    a[i] := I;
    if I=100 then return end;
      I := I+1
    end;
  end TMain;
親トピック: Statements
関連資料
Sequence of Statements


Throw Statement

Terminates the execution of an event handler function by passing execution control to the runtime system. The runtime system continues with the default procedure for the event.

The throw keyword is only allowed in event handler functions. If the throw semantics is not applicable in a handler when called as a function, it finishes handler code execution.

Syntax

Stat = "throw".

Example

dclevent
  handler Handler1 <EVENT_RAISE_ERROR>
  begin
    if GetLastError() = 317 then
      writeln("Error 317 caught");
    else
      throw;
    end;
  end Handler1;

dcltrans
  transaction TestTrans
  begin
    ...
  end TestTrans;
親トピック: Statements
親トピック: Runtime Functions
関連概念
Characteristics and Limitations of Event Handler Functions
関連資料
Sequence of Statements
Event Handler Section


While Statement

Acts as a loop that repeats the statements in StatSeq until the expression Expr becomes false.

Syntax

Stat = "while" Expr "do" StatSeq "end".

Example

dcltrans
transaction TMain
var
I : number;
a : array [100] of number;
begin
I := 1;
while I <= 100 do
a[i] := I;
I := I+1
end;
end TMain;
親トピック: Statements
関連資料
Sequence of Statements


Write Statement

Outputs the value of Expr1 with field width Expr2 and precision Expr3 to the WRT file of the user executing the write statement. You can write expressions of type string, char, float or number. Specification of the field width and the precision is optional. The precession argument (Expr3) is only valid for floating-point values; it is a non-negative integer that specifies the number of decimal places to be printed. If the number of characters in the output value is greater than the width specification, output values of type string are truncated. Output values of type string and char are printed left-justified. Output values of type number and float are printed right-justified.

The writeln statement advances to a new line in the output file.

Syntax

Stat = "write" "(" Expr1 [ "," Expr2 [ ","Expr3 ] ] ")"
| "writeln" [ "(" Expr1 [ "," Expr2 [ ","Expr3 ] ] ")" ].

Example

dcltrans
  transaction TMain
  var
    I : number;
    a : array [10] of float;
  begin
    for I := 1 to 10 do
      a[i] := float(I)+0.5;

      if I mod 5 = 1 then
        writeln;
        write("Array a["); write(I, 2); write(" to ");
        write(I+4, 2); write("]: ");
      end;

      write(a[i], 6, 1);
    end;
  end TMain;

Output

Array a[ 1 to 5]: 1.5 2.5 3.5 4.5 5.5
Array a[ 6 to 10]: 6.5 7.5 8.5 9.5 10.5
親トピック: Statements
親トピック: Logging Functions Overview
関連概念
出力ファイル
関連資料
Sequence of Statements


Database Server Access Statements

Silk Performer supports the following database server access statements:

  • Commit statements
  • Rollback statements
  • Fetch statements
  • Calling SQL Commands
    Explains how Silk Performer calls SQL commands.
  • Database Cursors
    Provides an overview of when database cursors are used.
  • Result Set Cursors (scrollable cursors)
    Declare a cursor for result set mode operation.
  • Commit Statement
    Performs a SQL commit command inside a transaction.
  • Rollback Statement
    Performs a SQL rollback command inside a transaction.
  • Fetch Statements
    Describes how Fetch statements work with result sets.
  • Querying the State of Database Operations
    Lists the functions for querying the state of database operations.
親トピック: Statements


Calling SQL Commands

SQL commands are not embedded directly in the body of a transaction. In Silk Performer they are called like procedures. Silk Performer uses a calling mechanism for SQL commands that is quite similar to the calling mechanism of procedures in a high-level programming language like Pascal. To exchange values with SQL commands, you can use global variables or random variables.

Syntax

SQLCall = Ident1 ":" Ident2.

Ident1 is the name of the database cursor that the SQL command uses (for more information about database cursors, see Database cursors). Ident2 is the name of the SQL command that is declared in the SQL section of the .bdf file.

Example

dclrand
  rArtNo: RndUniN(1..1000);

var
  v_artno, v_stock, v_quantity: number;

dcltrans
  transaction TMain
  begin
    v_artno := rArtNo;
    c1: SelArticle();
    if v_stock = 0 then
      c2: InsOrder();
    end
  end TMain;

dclsql
  SelArticle:
  SELECT stock,quantity
  INTO :v_stock, :v_quantity
  FROM article
  WHERE articlenumber = :v_artno;
  InsOrder:
  INSERT INTO order(articlenumber, quantity)
  VALUES(:v_artno, :v_quantity);

The example above shows a portion of a Silk Performer program focusing on the use of SQL in Silk Performer. Transaction t1 calls the SQL command named SelArticle. SelArticle uses the database cursor named c1. The SQL command SelArticle is declared in the SQL section of the Silk Performer program. The global variable v_artno is used as a bind variable in the SQL command. The global variables v_stock and v_quantity are used as INTO variables (INTO :v_stock, :v_quantity) in the SQL command.

If the value of stock retrieved is equal to zero (0), the transaction executes the SQL command InsOrder using the global variables v_artno and v_quantity as bind variables. InsOrder uses the database cursor named c2.

親トピック: Database Server Access Statements
関連概念
Syntax of Load Testing Scripts
関連資料
SQL Section


Database Cursors

Database cursors are used in Silk Performer for the following tasks:

  • Establishing a connection to a database

  • Relating SQL commands to a database connection

  • Querying the results of database operation

  • Fetching result sets (scrollable cursors)

CURRENT-OF cursor operations

Database cursors as used in Silk Performer are equivalent to ODBC statement handles; we use the terms synonymously.

You need not declare a database cursor explicitly. Cursors are declared implicitly by using the cursor. The scope of a cursor is global. Transactions share cursors with identical names.

You cannot use the name of a cursor defined as a result-set cursor in any transaction other than a scroll forward cursor.

Silk Performer establishes as many ODBC statement handles to the database(s) as database cursors are applied by the transactions of the user.

親トピック: Database Server Access Statements
関連資料
Result Set Cursors (scrollable cursors)
SQL Section


Result Set Cursors (scrollable cursors)

Direct positioning requires the cursor used with the query to be set to result-set mode (also called scroll mode). You can declare a cursor for result set mode operation as follows:

Example

dcltrans
  transaction TMain
  var
    i: number;
    result set c1;
  begin
    ...
    c1: SelArticle();
    ...
  end TMain;

If you are using result-set cursors in your Silk Performer script, the corresponding statement handles will be set with the ODBC function SQLSetStmtOption, thereby setting the options SQL_CONCURRENCY and SQL_CURSOR_TYPE. The values for these options are read from your ODBC settings (menu Settings/ODBC Settings).

Valid values for SQL_CONCURRENCY are:

  • SQL_CONCUR_READONLY: Read Only Cursor.

  • SQL_CONCUR_LOCK: Cursor uses the lowest level of locking.

  • SQL_CONCUR_ROWVER: Cursor uses optimistic concurrency control, comparing row versions (for example, ROWID).

  • SQL_CONCUR_VALUES: Cursor uses optimistic concurrency control, comparing values.

Valid values for SQL_CURSOR_TYPE are:

  • SQL_CURSOR_FORWARD_ONLY: The cursor only scrolls forward.

  • SQL_CURSOR_KEYSET_DRIVEN: The driver saves and uses the keys for the rows in the entire result set.

  • SQL_CURSOR_DYNAMIC: The driver saves and uses the keys for the rows in the row set; the row set size is 1.

  • SQL_CURSOR_STATIC: The data in the result set is static.

For result-set cursors, Silk Performer uses the ODBC function SQLExtendedFetch instead of SQLFetch for scrolling the result set.

親トピック: Database Server Access Statements
関連概念
Database Cursors
Database (DBMS) Functions
関連資料
SQL Section


Commit Statement

Performs a SQL commit command inside a transaction. You need not specify a commit statement at the end of a transaction because Silk Performer automatically executes a SQL commit at the end of a transaction. The commit statement permanently sets all changes to the database since the last commit; you cannot undo these changes with a rollback statement (just as you cannot rollback committed statements with any databases using native tools). The commit statement commits the work of all cursors (statement handles) that the transaction has connected to the database.

If you use a commit statement inside a transaction, you will not be able to undo (roll back) the whole transaction. Depending on the capabilities of your DBMS, result sets may be destroyed after a commit, and subsequent execution of a fetch statement without reselecting will cause an error.

Syntax

Stat = "commit".

Example

dclrand
  rArtNo: RndUniN(1..1000);

var
  v_artno, v_stock, v_quantity: number;

dcltrans
  transaction TMain
  begin
    v_artno := rArtNo;
    c1: SelArticle();
    if v_stock = 0 then
       c2: InsOrder();
    end;

    commit;
  end TMain;

dclsql
  SelArticle:
  SELECT stock,quantity
  INTO :v_stock, :v_quantity
  FROM article
  WHERE articlenumber = :v_artno;
  InsOrder:
  INSERT INTO order(articlenumber, quantity)
  VALUES(:v_artno, :v_quantity);
親トピック: Database Server Access Statements
関連概念
Database (DBMS) Functions
関連資料
Calling SQL Commands


Rollback Statement

Performs a SQL rollback command inside a transaction. The rollback statement rolls back all work done since the last SQL commit command for all cursors that the transaction has connected to the database.

Depending on the capabilities of your DBMS, result sets may be destroyed after rollbacks and subsequent execution of a fetch statement without reselecting will cause an error.

Syntax

Stat = "rollback".

Example

dclrand
rArtNo: RndUniN(1..1000);
var
v_artno, v_stock, v_quantity: number;
dcltrans
transaction TMain
begin
v_artno := rArtNo;
c1: SelArticle();
if v_stock = 0 then
c2: InsOrder();
end;
rollback;
end TMain;
dclsql
SelArticle:
SELECT stock,quantity
INTO :v_stock, :v_quantity
FROM article
WHERE articlenumber = :v_artno;
InsOrder:
INSERT INTO order(articlenumber, quantity)
VALUES(:v_artno, :v_quantity);
親トピック: Database Server Access Statements
関連概念
Database (DBMS) Functions
関連資料
SQL Section


Fetch Statements

A result set (or result table) is a set of table rows that is produced by a query (SQL SELECT command). Fetch statements are used to work with result sets. After the execution of a query in Silk Performer (the call of a SQL SELECT command), the result set is formed and the current position in the result set (cursor position) is set to the first row. We distinguish between two classes of fetch statements:

Fetch statements for sequentially fetching:

  • Fetch next
  • Fetch all

Fetch statements for direct positioning:

  • Fetch row
  • Fetch set
  • Fetch last
  • Fetch-All Statement
    Fetches all rows of a result set starting from the current row position in the result set and moving sequentially forward, and sets the row position behind the last row (eos condition is true).
  • Fetch-Next Statement
    Fetches sequentially forward beginning at the current position (cursor position) in the result set and sets the cursor position to the last row fetched.
  • Fetch-Last Statement (for scrollable cursors)
    Sets the current row position of the result set to the last row fetched by a previous sequential fetch-next statement.
  • Fetch-Row Statement (for scrollable cursors)
    Sets the row position of the result set to the position indicated by Expr and fetches the row.
  • Fetch-Set Statements (for scrollable cursors)
    Sets the row position to a randomly selected position within the set of rows actually fetched by fetch-next or fetch-last statements.
  • Expr Option
    Restrict the number of rows to be fetched to Expr rows.
  • Unique Option
    Ensures that no row will be fetched twice by the same fetch-set statement.
親トピック: Database Server Access Statements
関連概念
Database (DBMS) Functions
関連資料
Calling SQL Commands
Result Set Cursors (scrollable cursors)
SQL Section


Fetch-All Statement

Fetches all rows of a result set starting from the current row position in the result set and moving sequentially forward, and sets the row position behind the last row (eos condition is true). Ident is the name of the cursor used for the corresponding SQL SELECT command.

Syntax

Stat = "fetch" Ident "all".

Example

var
sArtname : string;
nArtno, nPrice : number;
dcltrans
transaction TMain
begin
c1: SelArticle();
fetch c1 all;
end TMain;
dclsql
SelArticle:
SELECT articlenumber, price, name
INTO :nArtno, :nPrice, :sArtname
FROM article WHERE price > 100
ORDER BY price DESC;

After execution of the SQL command SelArticle, a result set is created containing all articles where the price is greater than 100. The row position is set to the first row in the result set. At this time the values of the first row are bound to the variables v_artno, v_price and v_artname. The fetch c1 all statement fetches all rows of the result set sequentially forward starting from the current row position. The eos condition for the cursor used for the result set is set to true.

親トピック: Fetch Statements
関連概念
Database (DBMS) Functions
関連資料
SQL Section


Fetch-Next Statement

The fetch-next statement fetches sequentially forward beginning at the current position (cursor position) in the result set and sets the cursor position to the last row fetched. After the execution of a query (SQL SELECT command), the cursor position is set to the first row of the result set. Ident is the name of the cursor used with the respective SQL SELECT command. Expr is an integer expression that specifies the number of rows to be fetched sequentially. If no more rows can be fetched, the eos condition (end of selection) is set for the cursor used in the fetch statement.

注: To fetch the first row of a result set, no fetch-next statement must be called. Silk Performer automatically fetches the first row when a SQL SELECT command is called.

Syntax

Stat = "fetch" Ident "next" Expr.

Example

var
  v_artname : string;
  v_artno, v_price : number;

dcltrans
  transaction TMain
  begin
    c1: SelArticle();
    fetch c1 next 5;
  end TMain;

dclsql
  SelArticle:
  SELECT articlenumber, price, name
  INTO :v_artno, :v_price, :v_artname
  FROM article
  WHERE price > 100
  ORDER BY price DESC;

After execution of the SQL command SelArticle, a result set is formed containing all articles where the price is greater than 100. The row position is set to the first row in the result set. At this time the values of the first row are bound to the variables v_artno, v_price and v_artname. The fetch c1 next 5 statement fetches 5 rows sequentially forward starting from the current row position. The row position after the fetch statement is set to the sixth row in the result set. At this time the values of the sixth row are bound to the variables v_artno, v_price and v_artname.

親トピック: Fetch Statements
関連資料
SQL Section
Result Set Cursors (scrollable cursors)


Fetch-Last Statement (for scrollable cursors)

Syntax

Stat = "fetch" ident "last".

The fetch-last statement sets the current row position of the result set to the last row fetched by a previous sequential fetch-next statement. The fetch-last statement is needed to be able to continue with a fetch-next statement at the row position that was fetched last by a previous fetch-next statement. This must be done when fetch-next statements were interrupted by fetch-row or fetch-set statements that updated the current row position.

Example

pos: current row position in result set
max: last row in result set fetched by a
fetch-next statement
c1:SelArticle... /* max = 1; pos= 1 */
fetch c1 next 20; /* max = 21; pos= 21
*/
fetch c1 row 10; /* max = 21; pos= 10 */
fetch c1 last; /* max = 21; pos= 21 */
fetch c1 next 20; /* max = 41; pos= 41
*/
fetch c1 row 1; /* max = 41; pos= 1 */
fetch c1 next 20; /* max = 21; pos= 21
*/

Example: Fetch-all; Fetch-set

var
v_artname : string;
v_artno, v_price : number;
dcltrans
transaction TMain
var
artname : string;
artno, price : number;
result set c1;
begin
c1: SelArticle();
fetch c1 all;
fetch c1 set;
c2: UpdCurArticle();
end TMain;
dclsql
SelArticle:
SELECT articlenumber, price, name
INTO :v_artno, :v_price, :v_artname
FROM article
WHERE price > 1000
ORDER BY price DESC;
UpdCurArticle:
UPDATE article
SET price = price*0.9
WHERE CURRENT OF c1;

The example shows a transaction that simulates displaying all rows of the result set of the SQL SELECT command SelArticle (fetch c1 all). Subsequently one row of the result set is selected randomly (fetch c1 set) and the selected row is updated with the SQL UPDATE command UpdCurArticle.

Example: Fetch-all; Fetch-set-unique

var
v_artname : string;
v_artno, v_price : number;
dcltrans
transaction TMain
var
i: number;
result set c1;
begin
c1: SelArticle();
fetch c1 all;
for I := 1 to 3 do
fetch c1 set unique;
if eos(c1) then exit end;
c2: UpdCurArticle();
end;
end TMain;
dclsql
SelArticle:
SELECT articlenumber, price, name
INTO :v_artno, :v_price, :v_artname
FROM article
WHERE price > 1000
ORDER BY price DESC;
UpdCurArticle:
UPDATE article
SET price = price*0.9
WHERE CURRENT OF c1;

The example shows a transaction that simulates displaying all rows of the result set of the SQL SELECT command SelArticle (fetch c1 all). Subsequently three different rows of the result set are selected randomly (fetch c1 set) and the selected rows are updated with the SQL UPDATE command UpdCurArticle. If there are no rows left to update (eos(c1)=true), the for loop is canceled.

Example: Fetch-next; Fetch-set; Fetch-last

var
v_artname : string;
v_artno, v_price : number;
dcltrans
transaction TMain
var
I : number;
result set c1;
begin
c1: SelArticle();
while not eos(c1) do
fetch c1 next 20;
for I := 1 to 3 do
fetch c1 set 20 unique;
if eos(c1) then exit end;
c2: UpdCurArticle();
end;
end TMain;
dclsql
SelArticle:
SELECT articlenumber, price, name
INTO :v_artno, :v_price, :v_artname
FROM article
WHERE price > 1000
ORDER BY price DESC;
UpdCurArticle:
UPDATE article
SET price = price*0.9
WHERE CURRENT OF c1;

The example shows a transaction which simulates displaying 20 rows of the result set of the SQL SELECT command SelArticle (fetch c1 next 20). Subsequently three different rows of the displayed rows are selected randomly (fetch c1 set 20 unique) and the selected rows are updated with the SQL UPDATE command UpdCurArticle. Then the next 20 rows of the result set are displayed (fetch c1 next 20). This proceeding is repeated until no rows are left in the result set (while not eos(c1)).

Example: Updating/deleting multiple rows of a result set

dclrand
rUpdEvent: RndBin(0.25);
dcltrans
transaction TMain
var
i: number;
result set c1;
begin
c1: SelArticle();
fetch c1 all;
/* simulate time for user input actions
*/
wait 10.0;
for I := 1 to rows(c1) do
if rUpdEvent then
fetch c1 row I;
c2: UpdCurArticle();
end;
end;
end TMain;
dclsql
SelArticle:
SELECT articlenumber, price, name
INTO *, *, *
FROM article WHERE articlenumber <= 50
ORDER BY articlenumber;
UpdCurArticle:
UPDATE article
SET price = price*0.9
WHERE CURRENT OF c1;

The example shows a transaction that simulates displaying all rows of the result set formed by the SQL SELECT command SelArticle. Subsequently a wait statement is used to simulate user times for entering input data. The random variable rUpdEvent specifies the probability for updating a row in the result set (25% of all rows in the result set should be updated). If a row is to be updated (if rUpdEvent), the row position is set to the row to be updated (fetch c1 row I) and a SQL UPDATE command with a CURRENT OF cursor is executed (UpdCurArticle).

Example: Updating/deleting multiple rows without using scrollable cursors

dclrand
rDelEvent: RndBin(0.1);
var
v_artno: number;
dcltrans
transaction TMain
const
MAX_ROWS := 100;
var
rowCount, I : number;
anoArr : array[MAX_ROWS] of number;
begin
rowCount := 0;
c1: SelArticle2();
while not eos(c1) and (rowCount<MAX_ROWS)
do
rowCount := rowCount+1;
anoArr[rowCount] := v_artno;
fetch c1 next 1;
end;
wait 10.0; /* simulate user think time */
for I := 1 to rowCount do
if rDelEvent then
v_artno := anoArr[i];
c2: DelArticle();
end;
end;
end TMain;
dclsql
SelArticle2:
SELECT articlenumber, price, name
INTO :v_artno, *, *
FROM article
WHERE articlenumber <= 50
ORDER BY articlenumber;
DelArticle:
DELETE FROM article WHERE articlenumber
= :v_artno;

The example shows a transaction that simulates displaying up to MAX_ROWS rows of the result set formed by the SQL SELECT command SelArticle2. The transaction does not use scrollable cursors for result set operations. So the articlenumber of a row in the result set is used to reselect rows in the result set. The while loop fetches the article numbers for the rows into the array anoArr. Subsequently a wait statement is used to simulate user times for entering input data. The random variable rDelEvent specifies the probability for deleting a row in the result set (10% of all rows in the result set are to be deleted). To select the row to be deleted, use the array anoArr.

親トピック: Fetch Statements
関連資料
SQL Section
Result Set Cursors (scrollable cursors)


Fetch-Row Statement (for scrollable cursors)

The fetch-row statement sets the row position of the result set to the position indicated by Expr and fetches the row. The first row in a result set is position 1. Ident is the name of the cursor used for the corresponding SQL SELECT command. The cursor used in the fetch-row statement must be declared in the same transaction as a scrollable cursor (result set cursorname). If no row with position Expr is in the result set, the eos condition is set to true.

Syntax

Stat = "fetch" Ident "row" Expr.

Example

var
v_artname : string;
v_artno, v_price : number;

dcltrans
transaction TMain
begin
c1: SelArticle();
fetch c1 next 5;
end TMain;

dclsql
SelArticle:
SELECT articlenumber, price, name
INTO :v_artno, :v_price, :v_artname
FROM article
WHERE price > 100
ORDER BY price DESC;

After execution of the SQL command SelArticle, a result set is formed containing all articles where the price is greater than 100. The row position is set to the first row in the result set. At this time the values of the first row are bound to the variables v_artno, v_price and v_artname. The fetch c1 next 5 statement fetches 5 rows sequentially forward starting from the current row position. The row position after the fetch statement is set to the sixth row in the result set. At this time the values of the sixth row are bound to the variables v_artno, v_price and v_artname.

親トピック: Fetch Statements
関連資料
Result Set Cursors (scrollable cursors)
SQL Section


Fetch-Set Statements (for scrollable cursors)

The fetch-set statement sets the row position to a randomly selected position within the set of rows actually fetched by fetch-next or fetch-last statements. The cursor used in the fetch-set statement must be declared in the same transaction as a scrollable cursor (result set cursorname).

Fetch-set statements are only applicable to cursors that have previously executed fetch-next or fetch-all statements.

Syntax

Stat = "fetch" ident "set" [ Expr ] ["unique" ].
親トピック: Fetch Statements
関連資料
SQL Section


Expr Option

With the optional specification of an integer expression (Expr) in a fetch-set statement, you can restrict the number of rows to be fetched to Expr rows. The last row of the restricted result set is the last row fetched by a previous sequential fetch-next or fetch-all statement. The first row of the restricted result set is calculated as follows:

first row in restricted result set := maximum(1, last row number sequentially fetched - Expr)

Thus fetch-set statements with the Expr option are only useful in conjunction with sequential fetch-next statements.

親トピック: Fetch Statements
関連資料
SQL Section


Unique Option

If you specify the unique option in a fetch-set statement, no row will be fetched twice by the same fetch-set statement. If all rows have already been fetched with the fetch-set-unique statement, a subsequent call of the fetch-set-unique statement will set the eos condition and no row will be fetched.

親トピック: Fetch Statements
関連資料
SQL Section


Querying the State of Database Operations

Silk Performer supports the following functions for querying the state of database operations:

  • EOS Function
    Returns the value of the end of selection condition of the last SQL SELECT command or the last fetch statement associated with a cursor.
  • RC Function
    Gets the return code of the most recent ODBC function call associated with a cursor.
  • Rows Function
    Returns the number of rows affected by the most recent SQL command if the SQL command executed with the cursor is an UPDATE, a DELETE or an INSERT command.
親トピック: Database Server Access Statements


EOS Function

Action

Returns the value of the end of selection condition of the last SQL SELECT command or the last fetch statement associated with a cursor. This function returns true if the result set created by a SQL SELECT command is empty or if a fetch statement sets the current row position out of the result set.

Syntax

eos ( in cCursor : cursor ) : boolean

Return value

value of the end of selection condition

Parameter | Description
cCursor | Cursor with which the command or statement is associated

Example

var
  v_artno, v_stock, v_quantity:
number;

dcltrans
  transaction TMain
  begin
    c1: SelArticle();

    if eos (c1) then
      write("no articles found");
      return 1;
    end;

    while not eos (c1) do
      write(v_artno);
      ...
      fetch c1 next 1;
    end;
  end TMain;

dclsql
  SelArticle:
    SELECT stock, quantity
    INTO :v_stock, :v_quantity
    FROM article
    WHERE articlenumber = :v_artno;
親トピック: Querying the State of Database Operations
関連概念
Fetch Statements
関連資料
Calling SQL Commands
SQL Section


RC Function

Action

Gets the return code of the most recent ODBC function call associated with a cursor. If this function returns zero, the most recent SQL command or fetch statement was executed successfully; otherwise, rc returns a nonzero value.

注: This function only works with Silk Performer's high-level database access interface. If you use it with the medium- or native-level interface, the return value of the rc-function will be undefined.

Syntax

rc( in cCursor : cursor ):number;

Return value

zero if the most recent SQL command or fetch statement was executed successfully, otherwise the return code of the most recent ODBC function call.

Parameter | Description
cCursor | Cursor with which the function call is associated

Example

var
v_artno, v_stock, v_quantity: number;

dcltrans
  transaction TMain
  begin
    c1: SelArticle();
    write("return code: ");
    write (rc(c1));
  end TMain;

dclsql
  SelArticle:
    SELECT stock, quantity
    INTO :v_stock, :v_quantity
    FROM article
    WHERE articlenumber = :v_artno;
親トピック: Querying the State of Database Operations
関連概念
Fetch Statements
関連資料
SQL Section
Calling SQL Commands


Rows Function

Action

Returns the number of rows affected by the most recent SQL command if the SQL command executed with the cursor is an UPDATE, a DELETE or an INSERT command.

Syntax

rows( in cCursor : cursor ):number;

Return value

Number of rows affected by the most recent SQL command.

If the most recent SQL command executed with the cursor ident is a SELECT command, it returns the number of rows actually fetched by fetch-next or fetch-all statements associated with the SELECT command.

This function does not return the number of rows in a result set unless the rows have previously been fetched.

Parameter | Description
cCursor | Cursor with which the SQL command is associated

Example

 var
  v_artno, v_stock, v_quantity: number;

dcltrans
  transaction TMain
  begin
    c1: SelArticle();
    fetch c1 all;
    write("number of articles found: ");
    write(rows(c1));
  end TMain;

dclsql
  SelArticle:
    SELECT stock,quantity
    INTO :v_stock, :v_quantity
    FROM article
    WHERE articlenumber = :v_artno;
親トピック: Querying the State of Database Operations
関連概念
Fetch Statements
関連資料
Calling SQL Commands
SQL Section


Special Simulation Statements

Silk Performer supports the following special simulation statements:

  • Halt Statement
    Terminates the simulation of the current user.
  • Wait Statement
    Simulates waiting periods produced by the user of a transaction (for example, the time for entering input data).
親トピック: Statements


Halt Statement

Terminates the simulation of the current user.

Syntax

Stat = "halt".

Example

dcltrans
  transaction TMain
  begin
    gHdbc1 := DB_Connect(CONNECT_STRING);
    if gHdbc1 = 0 then
      halt;
    end;
  end TMain;
親トピック: Special Simulation Statements
親トピック: Runtime Functions
関連概念
Statements
関連資料
Sequence of Statements


Wait Statement

Wait statements are used in Silk Performer test scripts to simulate waiting periods produced by the user of a transaction (for example, the time for entering input data). Expr is the waiting period in seconds. Expr is a constant floating-point value or a random variable returning a floating-point value.

Syntax

Stat = "wait" Expr.

Example

dclrand
  r1 : RndExpF(5.5);
  r2 : RndUniF(0.5..10.0);
  ...

dcluser
  user
    b1
  transactions
    TMain(r2) : 20;

dcltrans
  transaction TMain(p1: float)
  var
    artname : string(40);
    artno, price, I : number;
    result set c1;
  begin
    wait r1;
    c1: SelArticle();
    fetch c1 all;

    for I := 1 to 3 do
      wait p1;
      fetch c1 set unique;

      if eos(c1) then exit end;

      wait 2.5;
      c2: UpdCurArticle();
  end;
end TMain;
親トピック: Special Simulation Statements
親トピック: Runtime Functions
関連概念
Statements
関連資料
Sequence of Statements


General Functions

Silk Performer provides specific functions to perform the following general operations:

  • Data Structure Functions
    Provides an introduction to the data structure functions.
  • Date Functions
    Lists the functions to get the current date and time from the operating system, and to generate random dates and time intervals.
  • Error-Handling Functions
    Provides an overview of error handling and lists the functions available.
  • File Functions
    Lists the functions to create, read, write, and delete files.
  • リスト関数
    List データ型で使用できる関数の一覧を示します。
  • Load Test Control Functions
    Lists the functions that retrieve information about the load test currently running.
  • Logging Functions Overview
    Provides an overview of the logging functions.
  • Measurement Functions
    Provides an overview of the measurement functions and a list of those functions.
  • Memory Functions
    Lists the predefined functions for the allocation of dynamic buffers.
  • Process Control Functions
    Lists the process control functions.
  • Synchronization Functions
    Provides an overview of the functions that serialize or synchronize transactions in your testing scripts in order to better control the timing of loads in your simulation.
  • Random Functions
    Lists the random functions that Silk Performer provides to use directly within transactions without having to define a random variable.
  • Random Types
    Lists the random types that Silk Performer provides.
  • Runtime Functions
    Lists the runtime functions including terminating users and the event handler and simulating thinking periods and waiting periods.
  • Simulation Setting Functions
    Lists the simulation setting functions.
  • String Functions
    Lists the string functions.
  • Regular Expressions
    Introduces an advanced technique for checking syntax of strings or for parsing values out of strings.
  • System Information Functions
    Lists functions for retrieving system information.
  • Attributes Manipulation Functions
    Lists the functions that set and retrieve values of user attributes.
  • XML Functions
    Lists the functions that allow you to work with XML documents and parse and verify XML values of web response documents.
親トピック: Benchmark Description Language (BDL) Reference


Data Structure Functions

Unlike the programming language C, Benchmark Description Language (BDL) does not support structured data types. Instead, BDL uses a series of type-dependent Get and Set functions to access data in external C data structures.

The following example illustrates a C data structure:

typedef struct Struct1 {
  char myChar;       // size: 1 byte pos: 1
  short myShort;     // size: 2 bytes pos: 2
  long myLong;       // size: 4 bytes pos: 4
  double myDouble;   // size: 8 bytes pos: 8
  float myFloat;     // size: 4 bytes pos: 16
  ushort myUShort;   // size: 2 bytes pos: 20
  char myString[10]; // size: 10 bytes pos: 22
  uchar myUChar;     // size: 1 byte pos: 32
}
// size of Struct1: 32 bytes
注: This data structure is used in all examples accompanying the help for the Get and Set functions that access C data structures.

To access the elements of a C data structure, you must first declare a corresponding BDL string as follows in order to map the C structure into BDL:

const
  SIZE_STRUCT := 32;
var
  myBDLstring: string(SIZE_STRUCT);

This allocates the same amount of storage space for the BDL string as for the original C data structure.

You can use BDL strings as actual parameters to external C functions where the external function expects a pointer to a data structure as parameter:

// C code
extern void ExtCFunc1(Struct1 *pStruct)
{
    pStruct->myChar = 1;
    ...
    ...
    pStruct->myUChar = 10;
}

// BDL function prototype
DLL "ExtFunc.DLL"
  "ExtCFunc1" function ExtCFunc(inout string);
// BDL usage
begin
  SetChar(myBDLstring, 1, ord('A'));
  ExtCFunc1(myBDLstring);
  ...
  ...
end;

In the examples, the starting positions for the function examples correspond to the respective data types in Struct1. The starting positions in the BDL string are given at the right next to “pos:” in the C data structure above.

  • SetChar Function
    Copies a one-byte signed character into a data structure at a specified position.
  • GetChar Function
    Retrieves a one-byte signed character from a specified data structure at a specified position.
  • SetDouble Function
    Copies a double value (8-byte floating-point value) into a data structure at a certain position.
  • GetDouble Function
    Retrieves a double value (8-byte floating-point value) from a specified data structure at a specified position.
  • SetFloat Function
    Copies a float value (4-byte floating-point value) into a data structure at a specified position.
  • GetFloat Function
    Retrieves a float value (4-byte floating-point value) from a specified data structure at a specified position.
  • SetLong Function
    Copies a long value (4-byte signed integer value) into a data structure at a specified position.
  • GetLong Function
    Retrieves a long value (4-byte signed integer value) from a specified data structure at a specified position.
  • SetMem Function
    Copies a specified number of bytes at a specified position into a string.
  • GetMem Function
    Copies a specified number of bytes from a specified position in a source string to a destination string.
  • SetShort Function
    Copies a short value (2-byte signed integer value) into a data structure at a specified position.
  • GetShort Function
    Retrieves a short value (2-byte signed integer value) from a specified data structure at a specified position.
  • SetString Function
    Copies a string at a specified position into a string.
  • GetString Function
    Extracts a substring starting at a specified position in a specified source string.
  • SetUChar Function
    Copies a one-byte unsigned character into a data structure at a specified position.
  • GetUChar Function
    Retrieves a one-byte unsigned character from a specified data structure at a specified position.
  • SetUShort Function
    Copies an unsigned short value (2-byte unsigned integer value) into a data structure at a specified position.
  • GetUShort Function
    Retrieves an unsigned short value (2-byte unsigned integer value) from a specified data structure at a specified position.
  • SetWideChars Function
    Copies a sequence of wide characters to a specified position within a buffer.
  • ZipCompressGzip Function
    Compresses a data buffer in gzip format.
  • ZipUncompressGzip Function
    Uncompresses a gzipped data buffer which was compressed with the ZipCompressGzip function.
  • ZipCompressGzip2 Function
    Compresses a data buffer in gzip format. The resulting zipped buffer can be unzipped with the ZipUncompressGzip2 function or any gzip unzipper tool.
  • ZipUncompressGzip2 Function
    Uncompresses a gzipped data buffer which was compressed with the ZipCompressGzip2 function.
  • ZipCompressZlib Function
    Compresses a data buffer in zLib format.
  • ZipCompressZlib2 Function
    Compresses a data buffer in zLib format.
  • ZipUncompressZlib Function
    Uncompresses a zipped data buffer, which was compressed with the ZipCompressZlib function.
  • ZipUncompressZlib2 Function
    Uncompresses a zipped data buffer, which was compressed with the ZipCompressZlib2 function.
親トピック: General Functions


SetChar Function

Action

Copies a one-byte signed character into a data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

SetChar( inout sString : string,
         in    nPos : number,
         in    nChar : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Insert position in the BDL string, where the first position is 1 (not 0)
nChar | Signed character, specified as ASCII code

Example

dcltrans
  transaction TSetChar
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Set a one-byte signed character at position 1
    // in the BDL string myBDLstring and thereby (through mapping)
    // set the element myChar in Struct1
    bOk := SetChar(myBDLstring, 1, ord('A'));
    if bOk then
      write("myChar successfully set to 'A'"); writeln;
    else
      write("error setting myChar"); writeln;
    end;
  end TSetChar;

Output

myChar successfully set to 'A'
親トピック: Data Structure Functions
関連資料
GetChar Function


GetChar Function

Action

Retrieves a one-byte signed character (ASCII number) from a specified data structure at a specified position. You must declare a BDL string before using this function. Use the chr function to convert the retrieved ASCII number to a character.

Include file

Kernel.bdh

Syntax

GetChar( in sString : string, in nPos  : number ): number;

Return value

signed character (ASCII number)

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Position of character in the BDL string, where the first position is 1 (not 0)

Example

dcltrans
  transaction TGetChar
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    nChar       : number;
  begin
    ...
    // Retrieve a one-byte signed character from position 1
    // in the BDL string myBDLstring and thereby (through mapping)
get
    // the element myChar in Struct1
    nChar := GetChar(myBDLstring, 1);
    write("myChar = "); write(chr(nChar)); writeln;
  end TGetChar;

Output

myChar = A
親トピック: Data Structure Functions
関連資料
SetChar Function


SetDouble Function

Action

Copies a double value (8-byte floating-point value) into a data structure at a certain position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

SetDouble( inout sString :string,
             in    nPos    : number,
             in    fDouble : float ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Insert position in the BDL string, where the first position is 1 (not 0)
fDouble | Double value

Example

dcltrans
  transaction TSetDouble
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Set an 8-byte floating point value at position 8
    // in the BDL string myBDLstring and thereby (through mapping)
set
    // the element myDouble in Struct1
    bOk := SetDouble(myBDLstring, 8, 12345.99);
    if bOk then
      write("myDouble successfully set to 12345.99"); writeln;
    else
      write("error setting myDouble"); writeln;
    end;
  end TSetDouble;

Output

myDouble successfully set to 12345.99
親トピック: Data Structure Functions
関連資料
GetDouble Function


GetDouble Function

Action

Retrieves a double value (8-byte floating-point value) from a specified data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

GetDouble( in sString : string,in nPos : number ): float;

Return value

double value

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Starting position in the BDL string, where the first position is 1 (not 0)

Example

dcltrans
  transaction TGetDouble
  const    SIZE_STRUCT := 32;
  var    myBDLstring : string(SIZE_STRUCT);
    fValue : float;
  begin
    ...
    // Retrieve an 8-byte floating point value from position 8
    // in the BDL string myBDLstring and thereby (through mapping)
get
    // the element myDouble in Struct1
    fValue := GetDouble(myBDLstring, 8);
    write("myDouble = "); write(fValue); writeln;
  end TGetDouble;

Output

myDouble = 754.294000
親トピック: Data Structure Functions
関連資料
SetDouble Function


SetFloat Function

Action

Copies a float value (4-byte floating-point value) into a data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

SetFloat( inout sString : string,
            in    nPos    : number,
            in    fFloat  : float ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Insert position in the BDL string, where the first position is 1 (not 0)
fFloat | Float value

Example

dcltrans
  transaction TSetFloat  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Set a 4-byte floating point value at position 16
    // in the BDL string myBDLstring and thereby (through mapping)
set
    // the element myFloat in Struct1
    bOk := SetFloat(myBDLstring, 16, 12345.99);
    if bOk then
      write("myFloat successfully set to 12345.99");writeln;
    else
      write("error setting myFloat"); writeln;
    end;
  end TSetFloat;

Output

myFloat successfully set to 12345.99
親トピック: Data Structure Functions
関連資料
GetFloat Function


GetFloat Function

Action

Retrieves a float value (4-byte floating-point value) from a specified data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

GetFloat( in sString : string,
          in nPos    : number ): float;

Return value

float value

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Starting position in the BDL string, where the first position is 1 (not 0)

Example

dcltrans
  transaction TGetFloat
  const    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    fFloat : float;
  begin
    ...
    // Retrieve a 4-byte floating point value from position 16
    // in the BDL string myBDLstring and thereby (through mapping)
get
    // the element myFloat in Struct1
    fFloat := GetFloat(myBDLstring, 16);
    write("myFloat = "); write(fFloat); writeln;
  end TGetFloat;

Output

myFloat = 14.098000
親トピック: Data Structure Functions
関連資料
SetFloat Function


SetLong Function

Action

Copies a long value (4-byte signed integer value) into a data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

SetLong( inout sString    : string,
         in    nPos       : number,
         in    nLong      : number,
         in    nByteOrder : number optional ) :boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Insert position in the BDL string, where the first position is 1 (not 0)
nLong | Long value
nByteOrder

Specifies the byte order that is applied when a value is set (optional). This parameter can be one of the following:

  • OPT_LITTLE_ENDIAN. Microsoft byte order (default).

  • OPT_BIG_ENDIAN. Network, Apple, Java byte order.

Example

dcltrans
  transaction TSetLong
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Set a 4-byte signed integer value at position 4
    // in the BDL string myBDLstring and thereby (through mapping)
set
    // the element myLong in Struct1
    bOk := SetLong(myBDLstring, 4, -12345);
    if bOk then
      write("myLong successfully set to -12345"); writeln;
    else
      write("error setting myLong"); writeln;
    end;
  end TSetLong;

Output

myLong successfully set to -12345
親トピック: Data Structure Functions
関連資料
GetLong Function


GetLong Function

Action

Retrieves a long value (4-byte signed integer value) from a specified data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

GetLong(in sString : string,
in nPos : number,
in nByteOrder : number optional): number;

Return value

number

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Starting position in the BDL string, where the first position is 1 (not 0)
nByteOrer

Specifies the byte order that is applied when a value is retrieved (optional). This parameter can be one of the following:

  • OPT_LITTLE_ENDIAN. Microsoft byte order (default).

  • OPT_BIG_ENDIAN. Network, Apple, Java byte order.

Example

dcltrans
transaction TGetLong
constSIZE_STRUCT := 32;
var
myBDLstring : string(SIZE_STRUCT);
nLong : number;
begin...// Retrieve a 4-byte signed integer value from position 4
// in the BDL string myBDLstring and thereby (through mapping) get
// the element myLong in Struct1
nLong := GetLong(myBDLstring, 4);
write("myLong = "); write(nLong); writeln;
end TGetLong;

Output

myLong = 497202
親トピック: Data Structure Functions
関連資料
SetLong Function


SetMem Function

Action

Copies a specified number of bytes at a specified position into a string.

Include file

Kernel.bdh

Syntax

SetMem( inout sDest     : string,
        in    nPosition : number,
        in    sSource   : string,
        in    nLen      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sDest | Identifies the destination string.
nPosition | Specifies the position where to copy into sDest, where the first position in a string is 1 (not 0)
sSource | Identifies the string to copy
nLen | Length to copy (optional).

Example

dcltrans
  transaction TSetMem
  const
    SIZE_STRUCT := 32; // hexadecimal notation
    CONST_VAL   := "\hAF0034F5FF01";// of 6 bytes
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Copy sizeof(CONST_VAL) bytes = 6 from CONST_VAL
    // into myBDLstring starting at position 2 and thereby
    // (through mapping) set the elements myShort and myLong
    // in Struct1
    bOk := SetMem(myBDLstring, 2, CONST_VAL);
    if bOk then
      write("myShort and myLong successfully set");writeln;
    else
      write("error setting myShort and myLong"); writeln;
    end;
  end TSetMem;

Output

myShort and myLong successfully set
親トピック: Data Structure Functions
関連資料
GetMem Function


GetMem Function

Action

Copies a specified number of bytes from a specified position in a source string to a destination string.

Include file

Kernel.bdh

Syntax

GetMem( in    sSource   : string,
        in    nPosition : number,
        inout sDest     : string,
        in    nLen      : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Contains the string to copy from
nPosition | Specifies the position to start copying from in sSource, where the first position in a string is 1 (not 0)
sDest | Contains the destination string
nLen | Length to copy

Example

dcltrans
  transaction TGetMem
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    sString     : string(6);
    bOk         : boolean;
  begin
...
    // Copy sizeof(sString) = 6 bytes from myBDLString starting
    // at position 2 into sString and thereby (through mapping) get the
    // elements myShort and myLong in Struct1
    bOk := GetMem(myBDLstring, 2, sString, STRING_COMPLETE);

    if bOk then
      write("myShort and myLong successfully retrieved"); writeln;
    else
      write("error getting myShort and myLong"); writeln;
    end;
  end TGetMem;

Output

myShort and myLong successfully retrieved
親トピック: Data Structure Functions
関連資料
SetMem Function


SetShort Function

Action

Copies a short value (2-byte signed integer value) into a data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

SetShort( inout sString    : string,
          in    nPos       : number,
          in    nShort     : number,
          in    nByteOrder : number optional ) :boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Insert position in the BDL string, where the first position is 1 (not 0)
nShort | Short value
nByteOrder

Specifies the byte order that is applied when a value is set (optional). This parameter can be one of the following:

  • OPT_LITTLE_ENDIAN. Microsoft byte order (default).

  • OPT_BIG_ENDIAN. Network, Apple, Java byte order.

Example

dcltrans
  transaction TSetShort
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Set a 2-byte signed integer value at position 2
    // in the BDL string myBDLstring and thereby (through mapping)
set
    // the element myShort in Struct1
    bOk := SetShort(myBDLstring, 2, -12);
    if bOk then
      write("myShort successfully set to -12"); writeln;
    else
      write("error setting myShort"); writeln;
    end;
  end TSetShort;

Output

myShort successfully set to -12
親トピック: Data Structure Functions
関連資料
GetShort Function


GetShort Function

Action

Retrieves a short value (2-byte signed integer value) from a specified data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

GetShort( in sString : string,
          in nPos : number,
          in nByteOrder : number optional ) : number;

Return value

short value

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Starting position in the BDL string, where the first position is 1 (not 0)
nByteOrder

Specifies the byte order that is applied when a value is retrieved (optional). This parameter can be one of the following:

  • OPT_LITTLE_ENDIAN. Microsoft byte order (default).

  • OPT_BIG_ENDIAN. Network, Apple, Java byte order.

Example

dcltrans
  transaction TGetShort
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    nShort : number;
  begin
  ...
    // Retrieve a 2-byte signed integer value from position 2
    // in the BDL string myBDLstring and thereby (through mapping) get
    // the element myShort in Struct1
    nShort := GetShort(myBDLstring, 2);
    write("myShort = "); write(nShort); writeln;
  end TGetShort;

Output

myShort = 209
親トピック: Data Structure Functions
関連資料
SetShort Function


SetString Function

Action

Copies a string at a specified position into a string.

注: This function can be used to access pointers.

Include file

Kernel.bdh

Syntax

SetString( inout sDest     : string,
           in    nPosition : number,
           in    sSource   : string,
           in    nMaxLen   : number optional,
           in    sFillChar : string optional ):boolean;

Return value

  • true if successful

  • false if string to copy terminated or failure

Parameter | Description
sDest | Identifies the destination string
nPosition | Specifies the position to copy to in aSrcString, where the first position in a string is 1 (not 0)
sSource | Identifies the string to copy
nMaxLen | Maximum number of characters to copy (optional). If this parameter is omitted, the whole source string is copied to the destination string
sFillChar | Specifies a character sequence used to fill the remaining bytes if the copied string is shorter than nMaxLen (optional). If this parameter is passed to the function, no NULL termination is inserted into the destination string
注: If the length of sSource is larger than nMaxLen, only nMaxLen bytes are copied to sDest, including a NULL termination byte. If the optional parameter sFillChar is passed to the function, then no NULL termination is inserted into sDest.

Example

dcltrans
  transaction TSetString
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring    : string(SIZE_STRUCT);
    sString, sDest : string;
  begin
    // Copy a string from sString into myBDLstring starting
    // at position 22 and thereby (through mapping)set
    // the element myString in Struct1
    sString := "Holidays";
    SetString(myBDLstring, 22, sString);
    SetString(sDest, 1, sString, 20, "_");
    write(sDest);
  end TSetString;

Output

Holidays____________
親トピック: Data Structure Functions
関連資料
GetString Function


GetString Function

Action

Extracts a substring starting at a specified position in a specified source string.
注: This function can be used to access pointers.

Include file

Kernel.bdh

Syntax

GetString( in  sSource   : string,
           in  nPos      : number,
           out sDest     : string,
           in  nDestSize : number ): boolean;

Return value

  • true if successful

  • false = string to copy terminated or failure

Parameter | Description
sSource | Source string
nPos | Specifies the position to copy from in sSource, where the first position is 1 (not 0)
sDest | Destination string
nDestSize | Maximum number of characters to copy
注: If nMaxLen extends beyond the end of sSource, the actual length of substring sValue is adjusted downward to stop at the end of sSource.

Example

dcltrans
  transaction TGetString
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    sString     : string(9);
    bOk         : boolean;
  begin
    SetString(myBDLstring, 22, "hello");
    // Copy a string from myBDLstring starting at position 22
    // into sString and thereby (through mapping)get
    // the element myString in Struct1
    bOk := GetString(myBDLstring, 22, sString,STRING_COMPLETE);
    write("myString = "); write(sString); writeln;
  end TGetString;

Output

myString = hello
親トピック: Data Structure Functions
関連資料
SetString Function


SetUChar Function

Action

Copies a one-byte unsigned character into a data structure at a specified position. You must declare a BDL string before using this function; see Data Structure Functions for further information.

This function can also be used to convert an ASCII representation of a hexadecimal string to a hexadecimal string by using a custom function. See the example below.

Include file

Kernel.bdh

Syntax

SetUChar( inout sString : string,
          in    nPos    : number,
          in    nChar   : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Insert position in the BDL string, where the first position is 1 (not 0)
nChar | Unsigned character

Example

dcltrans
  transaction TSetUChar
  const    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Set a one-byte unsigned character at position 32
    // in the BDL string myBDLstring and thereby (through mapping) set
    // the element myUChar in Struct1
    bOk := SetUChar(myBDLstring, 32, 255);
    if bOk then
      write("myUChar successfully set to 255"); writeln;
    else
      write("error setting myUChar"); writeln;
    end;
  end TSetUChar;

Output

myUChar successfully set to 255

Converting ASCII Representation of Hex String to Hex String Example

benchmark MyBenchmarkName

use "Kernel.bdh"

dcluser
  user
    VUser
  transactions
    TMain        : 1;

//converts each char to decimal value

dclfunc
  function GetDecFromAsciiHexStr(sAsciiHex: string): number
  var
    nDecPart : number;
    sTemp    : string;
    i, j     : number;
    nDec     : number;
    nFactor  : number;
  begin

    nDec := 0;
    for i:=1 to 2 do
      sTemp[1]:=sAsciiHex[i];

      if sTemp="0" then
        nDecPart := 0;
      elseif sTemp="1" then
        nDecPart := 1;
      elseif sTemp="2" then
        nDecPart := 2;
      elseif sTemp="3" then
        nDecPart := 3;
      elseif sTemp="4" then
        nDecPart := 4;
      elseif sTemp="5" then
        nDecPart := 5;
      elseif sTemp="6" then
        nDecPart := 6;
      elseif sTemp="7" then
        nDecPart := 7;
      elseif sTemp="8" then
        nDecPart := 8;
      elseif sTemp="9" then
        nDecPart := 9;
      elseif sTemp="A" then
        nDecPart := 10;
      elseif sTemp="B" then
        nDecPart := 11;
      elseif sTemp="C" then
        nDecPart := 12;
      elseif sTemp="D" then
        nDecPart := 13;
      elseif sTemp="E" then
        nDecPart := 14;
      elseif sTemp="F" then
        nDecPart := 15;
      end;

      if i=1 then
        nDecPart := nDecPart*16;
      end;

      nDec := nDec + nDecPart;
    end;

    GetDecFromAsciiHexStr := nDec;
  end GetDecFromAsciiHexStr;

dcltrans

  transaction TMain
  var
    sStringWithHexVal: string;
    nLengthS         : number;
    sAsciiHex        : string;
    sHex             : string;
    nDec             : number;
    i, j             : number;
  begin

    //example of string to convert
    sStringWithHexVal := "03CA00000041";

    print("sStringWithHexVal: "+ sStringWithHexVal);

    nLengthS := strlen(sStringWithHexVal);
    print("nLengthS: "+string(nLengthS));

    i := 1;
    j := 1;
    while i < nLengthS do   //rebuild string in hex using decimal values
      sAsciiHex := sStringWithHexVal[i]+sStringWithHexVal[i+1];
      nDec := GetDecFromAsciiHexStr(sAsciiHex);
      print(string(i)+": " + sAsciiHex + " -> " + string(nDec));
      SetUChar(sHex, j, nDec);
      j:= j + 1;
      i:= i + 2;
    end;

    writedata(sHex, BinLen(sHex), OPT_WRITEDATA_HEX); //result string

  end TMain;
親トピック: Data Structure Functions
関連資料
GetUChar Function


GetUChar Function

Action

Retrieves a one-byte unsigned character from a specified data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

GetUChar( in sBuffer : string,
          in nPos    : number ): number;

Return value

unsigned character

Parameter | Description
sBuffer | BDL string corresponding to the data structure
nPos | Starting position in the BDL string, where the first position is 1 (not 0)

Example

dcltrans
  transaction TGetUChar
  const
    SIZE_STRUCT := 32;
  var    myBDLstring : string(SIZE_STRUCT);
    nChar : number;
  begin
    ...
    // Retrieve a one-byte unsigned character from position 32
    // in the BDL string myBDLstring and thereby (through mapping) get
    // the element myUChar in Struct1
    nChar := GetUChar(myBDLstring, 32);
    write("myUChar = "); write(nChar); writeln;
  end TGetUChar;

Output

myUChar = 22
親トピック: Data Structure Functions
関連資料
SetUChar Function


SetUShort Function

Action

Copies an unsigned short value (2-byte unsigned integer value) into a data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

SetUShort( inout sString    :string,
           in    nPos       : number,
           in    nShort     : number,
           in    nByteOrder : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | BDL string corresponding to the data structure
nPos | Insert position in the BDL string, where the first position is 1 (not 0)
nShort | Unsigned short value
nByteOrder

Specifies the byte order that is applied when a value is set (optional). This parameter can be one of the following:

  • OPT_LITTLE_ENDIAN. Microsoft byte order (default).

  • OPT_BIG_ENDIAN. Network, Apple, Java byte order.

Example

dcltrans
  transaction TSetUShort
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    bOk         : boolean;
  begin
    // Set a 2-byte unsigned character at position 20
    // in the BDL string myBDLstring and thereby (through mapping) set
    // the element myUShort in Struct1
    bOk := SetUShort(myBDLstring, 20, 64000);
    if bOk then
      write("myUShort successfully set to 64000");writeln;
    else
      write("error setting myUShort"); writeln;
    end;
  end TSetUShort;

Output

myUShort successfully set to 64000
親トピック: Data Structure Functions
関連資料
GetUShort Function


GetUShort Function

Action

Retrieves an unsigned short value (2-byte unsigned integer value) from a specified data structure at a specified position. You must declare a BDL string before using this function.

Include file

Kernel.bdh

Syntax

GetUShort( in sBuffer    :string,
           in nPos       : number
           in nByteOrder : number optional ): number;

Return value

unsigned short value

Parameter | Description
sBuffer | BDL string corresponding to the data structure
nPos | Starting position in the BDL string, where the first position is 1 (not 0).
nByteOrder

Specifies the byte order that is applied when a value is retrieved (optional). This parameter can be one of the following:

  • OPT_LITTLE_ENDIAN. Microsoft byte order (default)

  • OPT_BIG_ENDIAN. Network, Apple, Java byte order.

Example

dcltrans
  transaction TGetUShort
  const
    SIZE_STRUCT := 32;
  var
    myBDLstring : string(SIZE_STRUCT);
    nShort      : number;
  begin
    ...
    // Retrieve a 2-byte unsigned character from position 20
    // in the BDL string myBDLstring and thereby (through mapping)
    // get the element myUShort in Struct1
    nShort := GetUShort(myBDLstring, 20);
    write("myUShort = "); write(nShort); writeln;
  end TGetUShort;

Output

myUShort = 189
親トピック: Data Structure Functions
関連資料
SetUShort Function


SetWideChars Function

Action

Copies a sequence of wide characters to a specified position within a buffer.

Include file

tuxedo.bdh

Syntax

SetWideChars(
   in nBuffer    : number,
   in nStartPos  : number,
   in sSource    : string,
   in nMaxChars  : number,
   in nCharWidth : number,
   in nFillChar  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nBuffer | Address of the destination buffer to which the sequence of wide characters should be copied.
nStartPos | Offset within the destination buffer to which the sequence of wide characters should be copied.
sSource | Sequence of characters that is to be copied to the destination buffer.
nMaxChars | Number of wide characters that should be copied to the destination buffer.
nCharWidth | Width of a wide character.
nFillChar | Character for filling the rest of the destination buffer (optional). This parameter is relevant if the amount of data you pass to the function is less than the number of wide characters you specify should be copied to the destination buffer.

Example

dcltrans
  transaction TMain
  var
    sSource, sDest, sResult : string;
    i : number;
  begin
    sSource := "Hello world!";
    SetWideChars(Adr(sDest),1, sSource,12,1);
    writeln(sDest);
    SetWideChars(Adr(sDest),1, sSource,12,2);
    sResult := "";
    for i := 1 to 24 do
      if sDest[i] = chr(0) then
        sResult := sResult + "_";
      else
        sResult := sResult + sDest[i];
      end;
    end;    writeln(sResult);
  end TMain;
親トピック: Data Structure Functions


ZipCompressGzip Function

Action

Compresses a data buffer in gzip format. The resulting zipped buffer can be unzipped with the ZipUncompressGzip function or any gzip unzipper tool. The ZipCompressGzip function uses the deflate compression algorithm.

Include file

Zip.bdh

Syntax

ZipCompressGzip( in  sSource    : string,
                 in  nSrcLen    : number,
                 out sDest      : string,
                 in  nDstLen    : number optional,
                 out nOutLen    : number optional,
                 in  nCompLevel : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be compressed in gzip format.
nSrcLen | Length of source buffer.
sDest | Destination buffer used to store the compressed data.
nDstLen | Length of destination buffer (optional).
nOutLen | Number of bytes used in the destination buffer to store the compressed data (optional).
nCompLevel

Level of compression. The compression level must be ZIP_COMPRESSION_DEFAULT, or between 0 and 9 (optional):

  • 1 gives best speed
  • 9 gives best compression
  • 0 gives no compression at all
  • ZIP_COMPRESSION_DEFAULT means a default compromise between speed and compression (currently equivalent to level 6).

Example

transaction TMain
var
  sUnzipped : string;
  sZipped   : string;
  i         : number;
  nUnzipped : number;
begin
  nUnzipped := sizeof(sUnzipped);
  for i := 1 to nUnzipped do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;
  ZipCompressGzip(sUnzipped, STRING_COMPLETE, sZipped);
  WriteLn("Size of unzipped buffer: " + string(Binlen(sUnzipped)));
  WriteLn("Size of zipped buffer: " + string(Binlen(sZipped)));
  ZipUncompressGzip(sZipped, binlen(sZipped), sUnzipped);

  WriteData(sUnzipped);
end TMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   49

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip2 Function
ZipCompressZlib2 Function
ZipCompressZlib Function
ZipUncompressGzip2 Function
ZipUncompressGzip Function
ZipUncompressZlib2 Function
ZipUncompressZlib Function


ZipUncompressGzip Function

Action

Uncompresses a gzipped data buffer which was compressed with the ZipCompressGzip function.

Include file

Zip.bdh

Syntax

ZipUncompressGzip( in  sSource   : string,
                   in  nSrcLen   : number,
                   out sDest     : string,
                   in  nDstLen   : number optional,
                   out nOutLen   : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be uncompressed.
nSrcLen | Length of source buffer.
sDest | Destination buffer used to store the uncompressed data.
nDstLen | Length of destination buffer (optional).
nOutLen | Number of bytes used in the destination buffer to store the uncompressed data (optional).

Example

transaction TMain
var
  sUnzipped: string;
  sZipped  : string;
  i        : number;
  nUnzipped: number;
  nZipped  : number;
begin
  nUnzipped := sizeof(sUnzipped);
  for i := 1 to nUnzipped do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;
  ZipCompressGzip(sUnzipped, STRING_COMPLETE, sZipped);

  nZipped := sizeof(sZipped);
  WriteLn("Size of unzipped buffer: " + string(nUnzipped));
  WriteLn("Size of zipped buffer: " + string(nZipped));
  ZipUncompressGzip(sZipped, binlen (sZipped), sUnzipped);

  WriteData(sUnzipped);
end TMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   49

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip2 Function
ZipCompressGzip Function
ZipCompressZlib2 Function
ZipCompressZlib Function
ZipUncompressGzip2 Function
ZipUncompressZlib2 Function
ZipUncompressZlib Function


ZipCompressGzip2 Function

Action

Compresses a data buffer in gzip format. The resulting zipped buffer can be unzipped with the ZipUncompressGzip2 function or any gzip unzipper tool. The ZipCompressGzip2 function uses the deflate compression algorithm.

Include file

Zip.bdh

Syntax

ZipCompressGzip2( in  sSource    : string,
                  out sDest      : string,
                  in  nCompLevel : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be compressed in gzip format.
sDest | Destination buffer used to store the compressed data.
nCompLevel

Level of compression. The compression level must be ZIP_COMPRESSION_DEFAULT, or between 0 and 9 (optional):

  • 1 gives best speed
  • 9 gives best compression
  • 0 gives no compression at all
  • ZIP_COMPRESSION_DEFAULT means a default compromise between speed and compression (currently equivalent to level 6).

Example

transaction TMain
var
  sUnzipped : string;
  sZipped   : string;
  i         : number;

begin
  for i := 1 to nUnzipped do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;

  ZipCompressGzip2(sUnzipped, sZipped);
  WriteLn("Size of unzipped buffer: " + string(Binlen(sUnzipped)));
  WriteLn("Size of zipped buffer: " + string(Binlen(sZipped)));
  ZipUncompressGzip2(sZipped, binlen(sZipped), sUnzipped);

  WriteData(sUnzipped)
endTMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   49

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip Function
ZipCompressZlib2 Function
ZipCompressZlib Function
ZipUncompressGzip2 Function
ZipUncompressGzip Function
ZipUncompressZlib2 Function
ZipUncompressZlib Function


ZipUncompressGzip2 Function

Action

Uncompresses a gzipped data buffer which was compressed with the ZipCompressGzip2 function.

Include file

Zip.bdh

Syntax

ZipUncompressGzip2( in  sSource   : string,
                    out sDest     : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be uncompressed.
sDest | Destination buffer used to store the uncompressed data.

Example

transaction TMain
var
  sUnzipped: string;
  sZipped  : string;
  i        : number;
  nUnzipped: number;
  nZipped  : number;

begin
  nUnzipped := sizeof(sUnzipped);
  for i := 1 to sizeof(sUnzipped) do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;
  ZipCompressGzip2(sUnzipped, sZipped);

  nZipped := sizeof(sZipped);
  WriteLn("Size of unzipped buffer: " + string(nUnzipped));
  WriteLn("Size of zipped buffer: " + string(nZipped));
  ZipUncompressGzip2(sZipped,sUnzipped);

  WriteData(sUnzipped);
endTMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   49

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip2 Function
ZipCompressGzip Function
ZipCompressZlib2 Function
ZipCompressZlib Function
ZipUncompressGzip Function
ZipUncompressZlib2 Function
ZipUncompressZlib Function


ZipCompressZlib Function

Action

Compresses a data buffer in zLib format. The resulting zipped buffer can be unzipped with the ZipUncompressZlib function. The ZipCompressZlib function uses the deflate compression algorithm and prepends the zLib header.

Include file

Zip.bdh

Syntax

ZipCompressZLib( in  sSource    : string,
                 in  nSrcLen    : number,
                 out sDest      : string,
                 in  nDstLen    : number optional,
                 out nOutLen    : number optional,
                 in  nCompLevel : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be compressed in zLib format.
nSrcLen | Length of source buffer.
sDest | Destination buffer used to store the compressed data.
nDstLen | Length of destination buffer (optional).
nOutLen | Number of bytes used in the destination buffer to store the compressed data (optional).
nCompLevel

Level of compression. The compression level must be ZIP_COMPRESSION_DEFAULT, or between 0 and 9 (optional):

  • 1 gives best speed
  • 9 gives best compression
  • 0 gives no compression at all
  • ZIP_COMPRESSION_DEFAULT means a default compromise between speed and compression (currently equivalent to level 6).

Example

transaction TMain
var
  sUnzipped: string;
  sZipped  : string;
  i        : number;
  nUnzipped: number;

begin
  nUnzipped := sizeof(sUnzipped);
  for i := 1 to nUnzipped do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;
  ZipCompressZlib(sUnzipped, STRING_COMPLETE, sZipped);
  WriteLn("Size of unzipped buffer: " + string (Binlen(sUnzipped)));
  WriteLn("Size of zipped buffer: " + string (Binlen(sZipped)));
  ZipUncompressZlib(sZipped, binlen(sZipped), sUnzipped);

  WriteData(sUnzipped);
end TMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   37

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip2 Function
ZipCompressGzip Function
ZipCompressZlib2 Function
ZipUncompressGzip2 Function
ZipUncompressGzip Function
ZipUncompressZlib2 Function
ZipUncompressZlib Function


ZipCompressZlib2 Function

Action

Compresses a data buffer in zLib format. The resulting zipped buffer can be unzipped with the ZipUncompressZlib2 function. The ZipCompressZlib2 function uses the deflate compression algorithm and prepends the zLib header.

Include file

Zip.bdh

Syntax

ZipCompressZlib2( in  sSource    : string,
                  out sDest      : string,
                  in  nCompLevel : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be compressed in zLib format.
sDest | Destination buffer used to store the compressed data.
nCompLevel

Level of compression. The compression level must be ZIP_COMPRESSION_DEFAULT, or between 0 and 9 (optional):

  • 1 gives best speed
  • 9 gives best compression
  • 0 gives no compression at all
  • ZIP_COMPRESSION_DEFAULT means a default compromise between speed and compression (currently equivalent to level 6).

Example

transaction TMain
var
  sUnzipped: string;
  sZipped  : string;
  i        : number;
begin
  for i := 1 to sizeof(sUnzipped) do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;
  ZipCompressZlib2(sUnzipped, sZipped);
  WriteLn("Size of unzipped buffer: " + string(Binlen(sUnzipped)));
  WriteLn("Size of zipped buffer: " + string(Binlen(sZipped)));
  ZipUncompressZlib2(sZipped, sUnzipped);

  WriteData(sUnzipped)
endTMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   37

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip2 Function
ZipCompressGzip Function
ZipCompressZlib Function
ZipUncompressGzip2 Function
ZipUncompressGzip Function
ZipUncompressZlib2 Function
ZipUncompressZlib Function


ZipUncompressZlib Function

Action

Uncompresses a zipped data buffer, which was compressed with the ZipCompressZlib function.

Include file

Zip.bdh

Syntax

ZipUncompressZlib( in  sSource   : string,
                   in  nSrcLen   : number,
                   out sDest     : string,
                   in  nDstLen   : number optional,
                   out nOutLen   : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be uncompressed.
nSrcLen | Length of source buffer.
sDest | Destination buffer used to store the uncompressed data.
nDstLen | Length of destination buffer (optional).
nOutLen | Number of bytes used in the destination buffer to store the uncompressed data (optional).

Example

transaction TMain
var
  sUnzipped: string;
  sZipped  : string;
  i        : number;
  nUnzipped: number;

begin
  nUnzipped := sizeof(sUnzipped);
  for i := 1 to nUnzipped do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;
  ZipCompressZlib(sUnzipped, STRING_COMPLETE, sZipped);
  WriteLn("Size of unzipped buffer: " + string (Binlen(sUnzipped)));
  WriteLn("Size of zipped buffer: " + string (Binlen(sZipped)));
  ZipUncompressZlib(sZipped, binlen(sZipped), sUnzipped);

  WriteData(sUnzipped);
end TMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   37

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip2 Function
ZipCompressGzip Function
ZipCompressZlib2 Function
ZipCompressZlib Function
ZipUncompressGzip2 Function
ZipUncompressGzip Function
ZipUncompressZlib2 Function


ZipUncompressZlib2 Function

Action

Uncompresses a zipped data buffer, which was compressed with the ZipCompressZlib2 function.

Include file

Zip.bdh

Syntax

ZipUncompressZlib2( in  sSource   : string,
                    out sDest     : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSource | Source buffer to be uncompressed.
sDest | Destination buffer used to store the uncompressed data.

Example

transaction TMain
var
  sUnzipped: string;
  sZipped  : string;
  i        : number;

begin
  for i := 1 to sizeof(sUnzipped) do
    sUnzipped[i] := chr(ord('a') + ((i-1) mod 26));
end;
  ZipCompressZlib2(sUnzipped, sZipped);
  WriteLn("Size of unzipped buffer: " + string (Binlen(sUnzipped)));
  WriteLn("Size of zipped buffer: " + string (Binlen(sZipped)));
  ZipUncompressZlib2(sZipped, sUnzipped);

  WriteData(sUnzipped);
end TMain;

Output:

Size of unzipped buffer: 254

Size of zipped buffer:   37

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst
親トピック: Data Structure Functions
関連資料
ZipCompressGzip2 Function
ZipCompressGzip Function
ZipCompressZlib2 Function
ZipCompressZlib Function
ZipUncompressGzip2 Function
ZipUncompressGzip Function
ZipUncompressZlib Function


Date Functions

Silk Performer provides a number of functions to get the current date and time from the operating system, and to generate random dates and time intervals.

  • FormatDate Function
    Converts a date into the specified format.
  • FormatDateTime Function
    Converts date and time into the specified format.
  • GetCurrentDate Function
    Returns the (local) current date in a YYYYMMDD format.
  • GetCurrentTime Function
    Returns the (local) time of the current day in seconds.
  • GetTime Function
    Returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970 likewise as GMT or local time.
  • GetTimeStamp Function
    Returns the number of seconds or milliseconds elapsed since midnight (00:00:00), January 1, 1970 likewise as GMT or local time.
  • IncDate Function
    Adds a certain number of days to a date.
  • GetTickCount Function
    Retrieves the number of milliseconds that have elapsed since Windows was started.
  • IncFormatDate Function
    Adds a certain number of days to a date and converts it into the specified format.
  • RndDate Function
    Adds a random number of days between 0 and nDays to a date.
  • RndFormatDate Function
    Adds a random number of days between 0 and nDays to a date and formats this date into the specified format.
親トピック: General Functions


FormatDate Function

Action

Converts a date into the specified format.

Include file

Kernel.bdh

Syntax

FormatDate( in nDate      :number,
            in sFormat    : string,
            in bLocalized : boolean optional) : string;

Return value

formatted date string

Parameter | Description
nDate | Integer input date with format YYYYMMDD, for example, 19980501 (May 1, 1998)
sFormat

Format control string. Possible format characters for date formatting:

  • %a. Abbreviated weekday name

  • %A. Full weekday name

  • %b. Abbreviated month name

  • %B. Full month name

  • %c. Locally appropriate date and time representation

  • %d. Day of month as decimal number (01 - 31)

  • %H. Hour in 24-hour format (00 - 23)

  • %I. Hour in 12-hour format (01 - 12)

  • %j. Day of year as decimal number (001 - 366)

  • %m. Month as decimal number (01 - 12)

  • %M. Minute as decimal number (00 - 59)

  • %p. Current locale’s A.M./P.M. indicator for 12-hour clock

  • %S. Second as decimal number (00 - 59)

  • %U. Week of year as decimal number, with Sunday as first day of week (00 - 51)

  • %w. Weekday as decimal number (0 - 6; Sunday is 0)

  • %W. Week of year as decimal number, with Monday as first day of week (00 - 51)

  • %x. Date representation for current locale

  • %X. Time representation for current locale

  • %y. Year without century, as decimal number (00 - 99)

  • %Y. Year with century, as decimal number

  • %z, %Z. Time-zone name or abbreviation; no characters if time zone is unknown

Default format strings:

  • DATE_YYYY_MM_DD = "%Y-%m-%d"

  • DATE_DEFAULT = "%x"

  • DATE_ODBC = "{d '%Y-%m-%d' }"

  • TIMESTAMP_ODBC = "{ts '%Y-%m-%d %H:%M:%S' }"

bLocalized | If True, returns the localized date format (optional).

Example

dcltrans
  transaction TFormatDate
  var
    nDate : number;
    sDate : string;
    sWeekday : string;
  begin
    nDate := GetCurrentDate();
    sDate := FormatDate(nDate, "%m/%d/%Y");
    sWeekday := FormatDate(nDate, "%A");
    print("Current Date: " + sDate);
    print("Today is " + sWeekday);
  end TFormatDate;

Output

Current Date: 08/27/2012
Today is Monday
親トピック: Date Functions
関連資料
FormatDateTime Function


FormatDateTime Function

Action

Converts date and time into the specified format.

Include file

Kernel.bdh

Syntax

FormatDateTime( in  nDate      : number,
                in  nTime      : number,
                in  sFormat    : string,
                out sDate      : string,
                in  bLocalized : boolean optional ): string;

Return value

formatted date string

Parameter | Description
nDate | Input date with format YYYYMMDD.
nTime | Input time of current day in seconds.
sFormat | Format control string. See FormatDate function for a description of all format control strings.
sDate | Formatted date string.
bLocalized | If True, returns the localized date format (optional).

Example

dcltrans
  transaction TFormatDateTime
  var
  sDateTime: string;
begin
  FormatDateTime(19961015, 110, "%Y-%m-%d %H:%M:%S", sDateTime);
  write("datetime = "); write(sDateTime);
  writeln;
end TFormatDateTime;

Output

datetime = 1996-10-15 00:01:50

Sample scripts

MutexLogin.bdf

親トピック: Date Functions
関連資料
FormatDate Function
GetCurrentDate Function


GetCurrentDate Function

Action

Returns the (local) current date in a YYYYMMDD format.

Include file

Kernel.bdh

Syntax

GetCurrentDate(): number;

Return value

Returns the (local) current date in a YYYYMMDD format.

Example

dcltrans
  transaction TGetCurrentDate
var
  nDate : number;
  sDateString : string;
begin
  nDate := GetCurrentDate();
  sDateString := FormatDate(nDate, DATE_DEFAULT);

  write("date = "); write(nDate); writeln;
  write("datestring = "); write(sDateString); writeln;
end TGetCurrentDate;

Output

date = 19980831datestring = 08/31/98
親トピック: Date Functions
関連資料
GetCurrentTime Function
GetTickCount Function
FormatDateTime Function
GetTime Function
GetTimeStamp Function
IncDate Function
IncFormatDate Function
RndDate Function
RndFormatDate Function


GetCurrentTime Function

Action

Returns the (local) time of the current day in seconds.

Include file

Kernel.bdh

Syntax

GetCurrentTime(): number;

Return value

Returns the (local) time of the current day in seconds.

Example

dcltrans
  transaction TGetCurrentTime
var
  nDate, nTime : number;
  sDateTime : string;
begin
  nDate := GetCurrentDate();
  nTime := GetCurrentTime();
  FormatDateTime(nDate, nTime, "%x %X", sDateTime);

  write("date = "); write(nDate); writeln;
  write("time = "); write(nTime); writeln;
  write("datetime = "); write(sDateTime); writeln;
end TGetCurrentTime;

Output

date = 19980831
time = 37741
datetime = 08/31/98 10:29:01

Sample scripts

MutexLogin.bdf

親トピック: Date Functions
関連資料
GetCurrentDate Function
GetTickCount Function
GetTime Function
GetTimeStamp Function


GetTime Function

Action

Returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970 likewise as GMT or local time.

Include file

Kernel.bdh

Syntax

GetTime( in nFlags : number optional ): number;

Return value

The number of seconds elapsed since midnight, January 1, 1970.

Parameter Description
nFlags

This parameter can be one of the following flags (optional):

  • TIME_GMT: Returns GMT time (also known as UTC time; default).

  • TIME_LOCAL: Returns local time.

Example

transaction TTime
  var
    sTime : string;
    nTime : number;
  begin
    sTime := GetTimeStamp(TIMESTAMP_GMT | TIMESTAMP_IN_SEC);
    Print(sTime);
    nTime := GetTime(TIME_GMT);
    Print(string(nTime));
  end TTime;

Output

Number of seconds elapsed since January 1, 1970, GMT.

親トピック: Date Functions
関連資料
GetTimeStamp Function
GetCurrentDate Function
GetCurrentTime Function


GetTimeStamp Function

Action

Returns the number of seconds or milliseconds elapsed since midnight (00:00:00), January 1, 1970 likewise as GMT or local time.

Include file

Kernel.bdh

Syntax

GetTimeStamp( in nFlags : number ): string;

Return value

String representation of the number of seconds or milliseconds.

Parameter Description
nFlags

Several combination of the following options are possible.

  • TIMESTAMP_GMT. Return GMT time.

  • TIMESTAMP_LOCAL. Return local time.

  • TIMESTAMP_IN_MS. Return time in milliseconds.

  • TIMESTAMP_IN_SEC. Return time in seconds.

  • TIMESTAMP_IN_HEX_LOWER. Return value in lowercase Hex. (for example: 0x0a)

  • TIMESTAMP_IN_HEX_UPPER. Return value in uppercase Hex. (for example: 0Ah)

Example

dcltrans
  transaction TRaiseError
  begin
    write(GetTimeStamp(TIMESTAMP_GMT | TIMESTAMP_IN_MS));
  end TRaiseError;
親トピック: Date Functions
関連資料
GetTime Function
GetCurrentDate Function
GetCurrentTime Function


IncDate Function

Action

Adds a certain number of days to a date.

Include file

Kernel.bdh

Syntax

IncDate( in nDate: number,
         in nDays: number ): number;

Return value

increased date

Parameter | Description
nDate | Input date with format YYYYMMDD
nDays | Number of added days

Example

dcltrans
  transaction TIncDate
  var
    nNewDate: number;
  begin
    nNewDate := IncDate(19961015, 45);
    write("newdate = "); write(nNewDate); writeln;
  end TIncDate;

Output

newdate = 19961129
親トピック: Date Functions
関連資料
IncFormatDate Function
GetCurrentDate Function


GetTickCount Function

Action

Retrieves the number of milliseconds that have elapsed since Windows was started. The function is limited to a resolution of about 25 milliseconds.

Include file

Kernel.bdh

Syntax

GetTickCount(): number;

Return value

number of milliseconds that have elapsed since Windows was started

Example

dcltrans
transaction TGetTickCount
var
nTickCount: number;
begin
nTickCount := GetTickCount();
write("Windows was started about "); write (nTickCount/60000);
write(" minutes ago.");
end TGetTickCount;

Output

Windows was started about 78 minutes ago.
親トピック: Date Functions
関連資料
GetCurrentDate Function
GetCurrentTime Function


IncFormatDate Function

Action

Adds a certain number of days to a date and converts it into the specified format.

Include file

Kernel.bdh

Syntax

IncFormatDate( in nDate      :number,
                                  in nDays      :number,
                                  in sFormat    : string,
                                  in bLocalized : boolean optional ): string;

Return value

formatted date string

Parameter | Description
nDate | Input date with format YYYYMMDD
nDays | Number of added days
sFormat | Format control string (see FormatDate).
bLocalized | If True, returns the localized date format.

Example

dcltrans
  transaction TFormatDate
  var
    sNewDate: string;
  begin
    sNewDate := IncFormatDate(19961015, 45,
DATE_YYYY_MM_DD);
    write("newdate = "); write(sNewDate);
writeln;
  end TFormatDate;

Output

newdate = 1996-11-29
親トピック: Date Functions
関連資料
IncDate Function
GetCurrentDate Function


RndDate Function

Action

Adds a random number of days between 0 and nDays to a date. The random values generated are distributed uniformly.

Include file

Kernel.bdh

Syntax

RndDate( in nDate : number,
         in nDays : number ): number;

Return value

increased date

Parameter | Description
nDate | Input date with format YYYYMMDD
nDays | Upper boundary of random interval for days to add

Example

dcltrans
  transaction TRndDate
  var
    nDate: number;
  begin
    // add 0 - 20 days to 19961015
    nDate := RndDate(19961015, 20);
    write("date = "); write(nDate); writeln;
  end TRndDate;

Output

date = 19961022
親トピック: Date Functions
関連資料
RndFormatDate Function
GetCurrentDate Function


RndFormatDate Function

Action

Adds a random number of days between 0 and nDays to a date and formats this date into the specified format. The random values generated are distributed uniformly.

Include file

Kernel.bdh

Syntax

RndFormatDate( in nDate      : number,
               in nDays      : number,
               in sFormat    : string,
               in bLocalized : boolean optional ): string;

Return value

formatted date string

Parameter | Description
nDate | Input date with format YYYYMMDD
nDays | Upper boundary of random interval for days to add
sFormat | Format control string (see FormatDate)
bLocalized | If True, returns the localized date format (optional).

Example

dcltrans
  transaction TRndFormatDate
  var
    sNewDate: string;
  begin
    // add 0 - 20 days to 19961015 and format it to "1996-11-10"
    sNewDate := RndFormatDate(19961015, 20, DATE_YYYY_MM_DD);
    write("newdate = "); write(sNewDate); writeln;
  end TRndFormatDate;

Output

newdate = 1996-10-30

Sample scripts

OraSample.bdf, DBApi01.bdf

親トピック: Date Functions
関連資料
RndDate Function
GetCurrentDate Function


Error-Handling Functions

Silk Performer offers several functions to handle unexpected situations during a load or verification test. Unexpected situations mostly end up in warnings or errors.

A commonly used mechanism to query the current state during a virtual user run is the last error. The last error describes not more than the last error that occurred.

If several errors occurred at about the same time, only the last one is stored and can therefore be retrieved. Silk Performer goes a step beyond and lets the user access not only the last error but also some relevant errors that occurred before the last error. Each virtual user holds a so-called error stack where it stores errors for each erroneous function call.

The error stack is per function call and enables you to retrieve not only the last error but all errors of one erroneous function call. A next function call clears that error stack of the last function.

To step through the error stack the following error functions are provided:

  • GetFirstError: Retrieves the first error from the error stack.
  • GetNextError: Retrieves the next error from the error stack.
  • GetLastError: Retrieves the last error from the error stack.

An error consists of an error code, a facility and a severity.

The severity of an error can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

The error facility is provided as a way to categorize errors in respect to the area or module in which they originate.

To retrieve further information about a particular error the following functions are provided:

  • GetErrorCode: Retrieves error number (code).
  • GetErrorFacility: Retrieves the name of the severity level.
  • GetErrorSeverity: Retrieves the severeness level of an error.
  • GetErrorMsg: Retrieves the error message corresponding to an error code.

To create an error code and raise an error use the following functions:

  • CreateErrorCode: Creates an error code using severity, facility, and error number within the facility as parameters.
  • RaiseError: This function can be used to raise an error.

Silk Performer offers the possibility to redefine (overwrite) the default severity of an error. This is useful in several scenarios. For example, the simulator is reporting an error with severity SEVERITY_ERROR but the user does not want to consider it to be a real error. In this case the user is able to overwrite the default severity with SEVERITY_INFORMATIONAL. This affects the simulator also, which does not increase the error count if this particular error occurs.

Functions, which allow severity manipulations, are:

  • ErrorAdd: Defines the severity of a particular problem.
  • ErrorRemove: Removes the custom severity definition for a particular problem.

Facility values:

Facility value | Numeric value
FACILITY_SILKPERFORMER | 1
FACILITY_WEBENGINE | 2
FACILITY_HTTP | 3
FACILITY_IIOP | 4
FACILITY_COMMONLIB | 5
FACILITY_WINSOCK | 6
FACILITY_SSL | 7
FACILITY_POP | 8
FACILITY_SMTP | 9
FACILITY_LDAP | 10
FACILITY_ODBC | 11
FACILITY_EVENTLOG | 13
FACILITY_SCRIPTENGINE | 14
FACILITY_PERFORB | 15
FACILITY_FTP | 16
FACILITY_SERVICE | 17
FACILITY_ORA | 20
FACILITY_PROXYENGINE | 21
FACILITY_PERFORMANCE | 22
FACILITY_TUXEDO | 23
FACILITY_OCI | 24
FACILITY_REPO | 25
FACILITY_RT | 26
FACILITY_PERFLM | 27
FACILITY_JOLT | 28
FACILITY_COM | 29
FACILITY_LTC | 30
FACILITY_PDH | 31
FACILITY_PERFSYSCONF | 32
FACILITY_RESERR | 33
FACILITY_COMERR | 34
FACILITY_RUNERR | 35
FACILITY_XML | 36
FACILITY_IPC | 37
FACILITY_PDCE | 38
FACILITY_COMREPLAY | 39
FACILITY_SAL | 40
FACILITY_TSD | 41
FACILITY_WAP | 42
FACILITY_REMOTESETUP | 43
FACILITY_EXECMANAGER | 44
FACILITY_CHARTENGINE | 45
FACILITY_XMLLAUNCHERLIB | 46
FACILITY_XMLDOMLIB | 47
FACILITY_DOTNETLIB | 48
FACILITY_RECORDERCONTROL | 49
FACILITY_PMI | 50
FACILITY_SILKVISION | 51
FACILITY_DBREPLAY | 52
FACILITY_PERFSERVLET | 53
FACILITY_CUSTOM_API | 54
FACILITY_ORACLE_FORMS | 55
FACILITY_CITRIXENGINE | 56
FACILITY_OCRLIB | 57
FACILITY_SHUNRALOADMANAGER | 58
FACILITY_SAPGUI | 59
FACILITY_MAPI | 60
FACILITY_COMPILER | 61
FACILITY_GUILEVEL_TESTING_REPLAY | 66
FACILITY_BROWSERENGINE | 71
FACILITY_NATIVE_HTTP | 1001
FACILITY_NATIVE_JAVA | 1002
FACILITY_NATIVE_JOLT | 1003
FACILITY_NATIVE_LDAP | 1004
FACILITY_NATIVE_MEDIASTREAM | 1005
FACILITY_NATIVE_OCI | 1006
FACILITY_NATIVE_WAP | 1007
FACILITY_NATIVE_REALSTREAM | 1008
FACILITY_NATIVE_ATMI | 1009
FACILITY_NATIVE_FML | 1010
  • ErrorAdd Function
    Defines the severity of a particular problem.
  • ErrorRemove Function
    Removes the custom severity definition for a particular problem.
  • GetErrorCode Function
    Retrieves error number (code).
  • GetErrorFacility Function
    Retrieves the facility of an error.
  • GetErrorSeverity Function
    Retrieves the severity level of an error.
  • GetErrorMsg Function
    Retrieves the error message corresponding to an error code.
  • GetFirstError Function
    Retrieves the first error from the error stack.
  • GetNextError Function
    Retrieves the next error from the error stack.
  • GetLastError Function
    Retrieves the last error from the error stack.
  • CreateErrorCode Function
    Creates an error code using severity, facility, and error number within the facility as parameters.
  • RaiseError Function
    Raises an error.
  • SetErrorsSeverity Function
    Sets the severity of a whole facility.
  • ResetErrorsSeverity Function
    Resets the severity of a facility to its default value.
親トピック: General Functions
関連概念
Logging Functions Overview
エラー メッセージの概要


ErrorAdd Function

Action

Defines the severity of a particular problem. If the problem occurs during a test, Silk Performer terminates either the current transaction or the entire simulation, depending on the severity that you have defined for the problem.

Include file

Kernel.bdh

Syntax

ErrorAdd( in nFacility : number,
          in nCode     : number,
          in nSeverity : number );
Parameter | Description
nFacility | Specifies the module that can cause the problem for which you define the severity.
nCode | Error code of the problem for which you want to define the severity. For a list of error codes, select Settings/Active Profile from the Silk Performer menu bar, select the Replay category, click the Simulation icon, switch to the Errors tab, and click Add. In the ensuing dialog, select the respective module from the Module drop-down list to see a list of error codes.
nSeverity Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  begin
    ErrorAdd(FACILITY_HTTP,401, SEVERITY_INFORMATIONAL);
    WebPageUrl("http://standardhost/","Home");
    ErrorRemove(FACILITY_HTTP, 401);
  end TMain;
親トピック: Error-Handling Functions


ErrorRemove Function

Action

Removes the custom severity definition for a particular problem.

Include file

Kernel.bdh

Syntax

ErrorRemove( in Facility : number,
                 in nCode    : number );
Parameter | Description
nFacility | Specifies the module that can cause the problem for which you remove the severity definition.
nCode | Error code of the problem for which you want to remove the severity definition. For a list of error codes, select Settings/Active Profile from the Silk Performer menu bar, select the Replay category, click the Simulation icon, switch to the Errors tab, and click Add. In the ensuing dialog, select the respective module from the Module drop-down list to see a list of error codes.

Example

dcltrans
  transaction TMain
  begin
    ErrorAdd(FACILITY_HTTP,401, SEVERITY_INFORMATIONAL);
    WebPageUrl("http://standardhost/","Home");
    ErrorRemove(FACILITY_HTTP,401);
  end TMain;
親トピック: Error-Handling Functions


GetErrorCode Function

Action

Retrieves error number (code).

An error code consits of the following three units:

  • severity

  • facility

  • error number

This function returns the error number part of it.

Include file

Kernel.bdh

Syntax

GetErrorCode( in nError : number ): number;

Return value

The error number (code).

Parameter | Description
nError | Specifies the error code.

Example

dclfunc
  function PrintErrorStack
  var
    sError : string;
    sErrorNumber : string;
    sFacility : string;
    sSeverity : string;
    x : number;
    y : number;
  begin
    // get last error
    x := GetLastError();

    sErrorNumber := String(GetErrorCode(x));
    sFacility := String(GetErrorFacility(x));
    sSeverity := String(GetErrorSeverity(x));
    Print("Last Error: (Error Nr.: " + sErrorNumber + ", Facility: " + sFacility + ", Severity: " + sSeverity + ")");
    Print(" = " + GetErrorMsg(x));

    // get error stack
    x := GetFirstError(y, 0, 0, sError);
    while x <> 0 do
      Print("Stack: " + String(x) + "; " + sError + "; " + String(y));
      Print(" = " + GetErrorMsg(x));
      x := GetNextError(y, 0, 0, sError);
    end;
  end PrintErrorStack;

Output

Last Error: (Error Nr.: 5, Facility: 5, Severity: 3) = SYSTEM: 5 - The handle is incorrect.
親トピック: Error-Handling Functions


GetErrorFacility Function

Action

Retrieves the facility of an error.

An error code consists of the following three units:

  • severity

  • facility

  • error number

This function returns the facility part of it.

Include file

Kernel.bdh

Syntax

GetErrorFacility( in nError : numbe ): number;

Return value

The facility of an error.

Parameter | Description
nError | Specifies the severity value (NOT the error code).

Example

dclfunc
  function PrintErrorStack
  var
    sError : string;
    sErrorNumber : string;
    sFacility : string;
    sSeverity : string;
    x : number;
    y : number;
  begin
    // get last error
    x := GetLastError();
    sErrorNumber := String(GetErrorCode(x));
    sFacility    := String(GetErrorFacility(x));
    sSeverity    := String(GetErrorSeverity(x));
    Print("Last Error: (Error Nr.: " + sErrorNumber + ", Facility: " + sFacility + ", Severity: " + sSeverity + ")");
    Print(" = " + GetErrorMsg(x));

    // get error stack
    x := GetFirstError(y, 0, 0, sError);
    while x <> 0 do
      Print("Stack: " + String(x) + "; " + sError + "; " + String(y));
      Print(" = " + GetErrorMsg(x));
      x := GetNextError(y, 0, 0, sError);
    end;
  end PrintErrorStack;

Output

Last Error: (Error Nr.: 5, Facility: 5, Severity: 3) = SYSTEM: 5 - The handle is incorrect.
親トピック: Error-Handling Functions


GetErrorSeverity Function

Action

Retrieves the severity level of an error.

An error code consits of the following three units:

  • severity

  • facility

  • error number

This function returns the severity part of it.

Include file

Kernel.bdh

Syntax

GetErrorSeverity( in nError: number ): number;

Return value

The severity level of an error.

Parameter | Description
nError | Specifies the Error code (usually retrieved with GetLastError()).

Example

dclfunc
  function PrintErrorStack
  var
    sError : string;
    sErrorNumber : string;
    sFacility : string;
    sSeverity : string;
    x : number;
    y : number;
  begin
    // get last error
    x := GetLastError();

    sErrorNumber := String(GetErrorCode(x));
    sFacility := String(GetErrorFacility(x));
    sSeverity := String(GetErrorSeverity(x));
    Print("Last Error: (Error Nr.: " + sErrorNumber + ", Facility: " + sFacility + ", Severity: " + sSeverity + ")");
    Print(" = " + GetErrorMsg(x));

    // get error stack
    x := GetFirstError(y, 0, 0, sError);

    while x <> 0 do
      Print("Stack: " + String(x) + "; " + sError + "; " + String(y));
      Print(" = " + GetErrorMsg(x));
      x := GetNextError(y, 0, 0, sError);
    end;
  end PrintErrorStack;

Output

Last Error: (Error Nr.: 5, Facility: 5, Severity: 3) = SYSTEM: 5 - The handle is incorrect.
親トピック: Error-Handling Functions


GetErrorMsg Function

Action

Retrieves the error message corresponding to an error code.

Include file

Kernel.bdh

Syntax

GetErrorMsg( in  nErrorCode   : number,
             out sErrorMsg    : string optional,
             in  nMaxErrorMsg : number optional): string;

Return value

Corresponding error message

Parameter | Description
nErrorCode | Error code
sErrorMsg | String buffer receiving the corresponding error message (optional)
nMaxErrorMsg | Length of the string buffer (optional)

Example

dcltrans
  transaction TMain
  var
    i : number;
    sErrorMsg : string;
  begin
    for i := 0 to 10 do
      write(GetErrorMsg(i)); writeln;
    end;

    for i := 11 to 20 DO
      GetErrorMsg(i, sErrorMsg);
      write(sErrorMsg); writeln;
    end;
  end TMain;

Output

System: 0 - The operation completed successfully.
System: 1 - Incorrect function.
System: 2 - The system cannot find the file specified.
System: 3 - The system cannot find the path specified.
System: 4 - The system cannot open the file.
System: 5 - Access is denied.
...

Sample scripts

WebRegularExpressions01.bdf

親トピック: Error-Handling Functions
関連資料
Event Handler Section


GetFirstError Function

Action

Retrieves the first error from the error stack.

Certain conditions can be specified by the first two parameters for the retrieval of an error.

Include file

Kernel.bdh

Syntax

GetFirstError( out nCustomSeverity : number optional,
               in  nFacility       : number optional,
               in  nSeverityFlags  : number optional,
               out sAddInformation : string optional,
               in  nAddInfoSize    : number optional,
               out nLine           : number optional,
               out sFilename       : string optional,
               in  nFileNameSize   : number optional ) : number;

Return value

error code. 0 if no error could be found.

Parameter | Description
nCustomSeverity | Receives the custom level of severity. If the custom level was not set, then the original severity of the error is returned.
nFacility | If this parameter is > 0 then the facility of the returned error must match.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
sAddInformation | Specifies the buffer to receive additional information.
nAddInfoSize | Specifies the length of the buffer, which receives the additional information.
nLine | Receives the line number in the script where the error occured.
sFilename | Specifies the buffer to receive the script file name.
nFileNameSize | Specifies the length of the buffer, which receives the script file name.

Example

dclfunc
  function PrintErrorStack
  var
    sError       : string;
    sErrorNumber : string;
    sFacility    : string;
    sSeverity    : string;
    nResult      : number;

    x : number;
    y : number;
  begin
    // get last error
    x := GetLastError();
    sErrorNumber := String(GetErrorCode(x));
    sFacility := String(GetErrorFacility(x));
    sSeverity := String(GetErrorSeverity(x));
    Print("Last Error: (Error Nr.: " + sErrorNumber + ", Facility: " + sFacility + ", Severity: " + sSeverity + ")");
    Print(" = " + GetErrorMsg(x));
    // get error stack
    WebVerifyTitle("Buy It");
    WebVerifyContent("Html", 3, "Right", WEB_VER_FLAG_CONTENT_SMALLER, SEVERITY_ERROR, true, nResult);
    WebPageUrl ("http://mycompany.com/frame/framea.html");
    x := GetFirstError(y, 0, 0, sError);

    while x <> 0 do
      Print("Stack: " + String(x) + "; " + sError + "; " + String(y));
      Print(" = " + GetErrorMsg(x));
      x := GetNextError(y, 0, 0, sError);
    end;
  end PrintErrorStack;

Output

Last Error: (Error Nr.: 5, Facility: 5, Severity: 3) = SYSTEM: 5 - The handle is incorrect.
親トピック: Error-Handling Functions


GetNextError Function

Action

Retrieves the next error from the error stack.

Certain conditions can be specified by the first two parameters for the retieval of an error.

Include file

Kernel.bdh

Syntax

GetNextError( out nCustomSeverity : number optional,
              in  nFacility       : number optional,
              in  nSeverityFlags  : number optional,
              out sAddInformation : string optional,
              in  nAddInfoSize    : number optional,
              out nLine           : number optional,
              out sFilename       : string optional,
              in  nFileNameSize   : number optional ) : number;

Return value

error code. 0 if no error could be found.

Parameter | Description
nCustomSeverity | Receives the custom level of severity. If the custom level was not set, then the original severity of the error is returned.
nFacility | If this parameter is > 0 then the facility of the returned error must match.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
sAddInformation | Specifies the buffer to receive additional information.
nAddInfoSize | Specifies the length of the buffer, which receives the additional information.
nLine | Receives the line number in the script where the error occured.
sFilename | Specifies the buffer to receive the script file name.
nFileNameSize | Specifies the length of the buffer, which receives the script file name.

Example

dclfunc
  function PrintErrorStack
  var
    sError       : string;
    sErrorNumber : string;
    sFacility    : string;
    sSeverity    : string;
    nResult      : number;

    x : number;
    y : number;
  begin
    // get last error
    x := GetLastError();
    sErrorNumber := String(GetErrorCode(x));
    sFacility := String(GetErrorFacility(x));
    sSeverity := String(GetErrorSeverity(x));
    Print("Last Error: (Error Nr.: " + sErrorNumber + ", Facility: " + sFacility + ", Severity: " + sSeverity + ")");
    Print(" = " + GetErrorMsg(x));
    // get error stack
    WebVerifyTitle("Buy It");
    WebVerifyContent("Html", 3, "Right", WEB_VER_FLAG_CONTENT_SMALLER, SEVERITY_ERROR, true, nResult);
    WebPageUrl ("http://mycompany.com/frame/framea.html");
    x := GetFirstError(y, 0, 0, sError);

    while x <> 0 do
      Print("Stack: " + String(x) + "; " + sError + "; " + String(y));
      Print(" = " + GetErrorMsg(x));
      x := GetNextError(y, 0, 0, sError);
    end;
  end PrintErrorStack;

Output

Last Error: (Error Nr.: 5, Facility: 5, Severity: 3) = SYSTEM: 5 - The handle is incorrect.
親トピック: Error-Handling Functions
関連概念
Error-Handling Functions
Logging Functions Overview


GetLastError Function

Action

Retrieves the last error from the error stack.

Certain conditions can be specified by the first two parameters for the retrieval of an error.

Include file

Kernel.bdh

Syntax

GetLastError( out nCustomSeverity : number optional,
              in  nFacility       : number optional,
              in  nSeverityFlags  : number optional,
              out sAddInformation : string optional,
              in  nAddInfoSize    : number optional,
              out nuLine          : number optional,
              out sFilename       : string optional,
              in  uFileNameSize   : number optional ) : number;

Return value

error code. 0 if no error could be found.

Parameter | Description
nCustomSeverity | Receives the custom level of severity. If the custom level was not set, then the original severity of the error is returned.
nFacility | If this parameter is > 0 then the facility of the returned error must match.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
sAddInformation | Specifies the buffer to receive additional information.
nAddInfoSize | Specifies the length of the buffer, which receives the additional information.
nLine | Receives the line number in the script where the error occured.
sFilename | Specifies the buffer to receive the script file name.
uFileNameSize | Specifies the length of the buffer, which receives the script file name.

Example

dclfunc
  function PrintErrorStack
  var
    sError       : string;
    sErrorNumber : string;
    sFacility    : string;
    sSeverity    : string;
    nResult      : number;

    x : number;
    y : number;
  begin
    // get last error
    x := GetLastError();
    sErrorNumber := String(GetErrorCode(x));
    sFacility := String(GetErrorFacility(x));
    sSeverity := String(GetErrorSeverity(x));
    Print("Last Error: (Error Nr.: " + sErrorNumber + ", Facility: " + sFacility + ", Severity: " + sSeverity + ")");
    Print(" = " + GetErrorMsg(x));
    // get error stack
    WebVerifyTitle("Buy It");
    WebVerifyContent("Html", 3, "Right", WEB_VER_FLAG_CONTENT_SMALLER, SEVERITY_ERROR, true, nResult);
    WebPageUrl ("http://mycompany.com/frame/framea.html");
    x := GetFirstError(y, 0, 0, sError);

    while x <> 0 do
      Print("Stack: " + String(x) + "; " + sError + "; " + String(y));
      Print(" = " + GetErrorMsg(x));
      x := GetNextError(y, 0, 0, sError);
    end;
  end PrintErrorStack;

Output

Last Error: (Error Nr.: 5, Facility: 5, Severity: 3) = SYSTEM: 5 - The handle is incorrect.
親トピック: Error-Handling Functions


CreateErrorCode Function

Action

Creates an error code using severity, facility, and error number within the facility as parameters.

Include file

Kernel.bdh

Syntax

CreateErrorCode( in nFacility : number,
                 in nCode     : number,
                 in nSeverity : number ) : number;

Return value

The created error code.

Parameter | Description
iFacility | Specifies the module that can cause the problem for which you define the error code.
nCode | Specifies the error code that you want to create.
nSeverity
Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    hIiop0 : number;
  begin
    IiopObjectCreate(hIiop0, "IDL:Object:1.0", "1.2","someserver", 12345, "key", 3);
    IiopRequest(hIiop0, "ReturnNoData");
    IiopGetBoolean(hIiop0); // generates an "Out of data" error.
  end TMain;

dclevent
  handler OnError <EVENT_RAISE_WARNING>
  begin
    // catch "IIOP 21 - Out of data" and report a user friendly error message
    if GetLastError() = CreateErrorCode (FACILITY_IIOP, 21, SEVERITY_ERROR) then
      RaiseError(0, "IIOP stream parsing error.", SEVERITY_ERROR);
    else
      throw;
    end;
  end OnError;
親トピック: Error-Handling Functions


RaiseError Function

Action

This function can be used to raise an error.

Include file

Kernel.bdh

Syntax

RaiseError( in nErrorCode      : number,
            in sMessage        : string optional,
            in nCustomSeverity : number optional := SEVERITY_ERROR );
Parameter | Description
nErrorCode

Specifies the error code that you want to raise. Specify 0 to refer to the last error. The following predefined error codes exist:

  • CUSTOM_MESSAGE: default severity ‘informational’

  • CUSTOM_ERROR: default severity ‘error’

Custom error codes can be created with the CreateErrorCode function.

sMessage | Specifies the message for the raised error. Optional parameter.
nCustomSeverity

Custom severity of the problem. Can be specified if the error should not use the standard severity for the specified error code (optional parameter).

  • SEVERITY_SUCCESS - Success, no error
  • SEVERITY_INFORMATIONAL - Informational
  • SEVERITY_WARNING - Warning
  • SEVERITY_ERROR - Error, simulation continues
  • SEVERITY_TRANS_EXIT - Error, the active transaction is aborted
  • SEVERITY_PROCESS_EXIT - Error, the simulation is aborted.

Example

dcltrans
  transaction TMain
  var
    hIiop0 : number;
  begin
    IiopObjectCreate(hIiop0, "IDL:Object:1.0", "1.2", "someserver", 12345, "key", 3);
    IiopRequest(hIiop0, "ReturnNoData");
    IiopGetBoolean(hIiop0); // generates an "Out of data" error.
  end TMain;

dclevent
  handler OnError <EVENT_RAISE_WARNING>
  begin
    // catch "IIOP 21 - Out of data" and report a user friendly error message
    if GetLastError() = CreateErrorCode (FACILITY_IIOP, 21, SEVERITY_ERROR) then
      RaiseError(0, "IIOP stream parsing error.", SEVERITY_ERROR);
    else
      throw;
    end;
  end OnError;
親トピック: Error-Handling Functions


SetErrorsSeverity Function

Action

Sets the severity of a whole facility.

Include file

kernel.bdh

Syntax

SetErrorsSeverity( in eFacility    : number,
                   in eNewSeverity : number,
                   in eOldSeverity : number optional := SEVERITY_ERROR );
Parameter Description
eFacility The following facilities are valid:
  • FACILITY_SILKPERFORMER
  • FACILITY_WEBENGINE
  • FACILITY_HTTP
  • FACILITY_IIOP
  • FACILITY_COMMONLIB
  • FACILITY_WINSOCK
  • FACILITY_SSL
  • FACILITY_POP
  • FACILITY_SMTP
  • FACILITY_LDAP
  • FACILITY_ODBC
  • FACILITY_EVENTLOG
  • FACILITY_SCRIPTENGINE
  • FACILITY_PERFORB
  • FACILITY_FTP
  • FACILITY_SERVICE
  • FACILITY_ORA
  • FACILITY_PROXYENGINE
  • FACILITY_PERFORMANCE
  • FACILITY_TUXEDO
  • FACILITY_OCI
  • FACILITY_REPO
  • FACILITY_RT
  • FACILITY_JOLT
  • FACILITY_COM
  • FACILITY_LTC
  • FACILITY_PDH
  • FACILITY_PERFSYSCONF
  • FACILITY_RESERR
  • FACILITY_COMERR
  • FACILITY_RUNERR
  • FACILITY_XML
  • FACILITY_IPC
  • FACILITY_PDCE
  • FACILITY_COMREPLAY
  • FACILITY_SAL
  • FACILITY_TSD
  • FACILITY_WAP
  • FACILITY_REMOTESETUP
  • FACILITY_EXECMANAGER
  • FACILITY_CHARTENGINE
  • FACILITY_XMLLAUNCHERLIB
  • FACILITY_XMLDOMLIB
  • FACILITY_DOTNETLIB
  • FACILITY_RECORDERCONTROL
  • FACILITY_PMI
  • FACILITY_SILKVISION
  • FACILITY_DBREPLAY
  • FACILITY_PERFSERVLET
  • FACILITY_CUSTOM_API
  • FACILITY_ORACLE_FORMS
  • FACILITY_CITRIXENGINE
  • FACILITY_OCRLIB
  • FACILITY_SHUNRALOADMANAGER
  • FACILITY_SAPGUI
  • FACILITY_MAPI
  • FACILITY_COMPILER
  • FACILITY_GUILEVEL_TESTING_REPLAY
  • FACILITY_BROWSERENGINE
eNewSeverity The following severities are valid:
  • SEVERITY_SUCCESS
  • SEVERITY_INFORMATIONAL
  • SEVERITY_WARNING
  • SEVERITY_ERROR
  • SEVERITY_TRANS_EXIT
  • SEVERITY_PROCESS_EXIT
eOldSeverity The following severities are valid:
  • SEVERITY_SUCCESS
  • SEVERITY_INFORMATIONAL
  • SEVERITY_WARNING
  • SEVERITY_ERROR
  • SEVERITY_TRANS_EXIT
  • SEVERITY_PROCESS_EXIT
親トピック: Error-Handling Functions


ResetErrorsSeverity Function

Action

Resets the severity of a facility to its default value.

Include file

kernel.bdh

Syntax

ResetErrorsSeverity( in eFacility : number );
親トピック: Error-Handling Functions


File Functions

Silk Performer provides a number of functions to create, read, write, and delete files. For example, you can use these functions to read binary files and send them to a server.

When a file is created or opened, the corresponding function returns a handle that can be used as a reference to the file. Depending on the access options, data can be read from or written to any open file. Additional functions provide status information about a file, for example its size or whether it is currently open. Eventually each open file has to be closed.

  • EnableUNCAccess Function
    Enables a virtual user to access files that are located on UNC paths.
  • FAttribute Function
    Checks, sets, and removes attributes for the specified file.
  • FClear Function
    Clears all data of a file and sets the file size to zero.
  • FClose Function
    Closes a file.
  • FCurrentPositionGet Function
    Returns the current position of the file pointer.
  • FCurrentPositionSet Function
    Moves the file pointer of an open file.
  • FDelete Function
    Deletes the specified file.
  • FEOFSet Function
    Sets the end-of-file (EOF) position for a specified file to the current position of the file pointer.
  • FExists Function
    Checks whether a specified file exists.
  • FFindString Function
    Searches for the first occurrence of the specified string and, if found, sets the current position of the file pointer to the first character of the found string.
  • FFlush Function
    Flushes buffered data to the file.
  • FIsOpen Function
    Checks whether a specified file is currently open.
  • FlushResultFile Function
    Flushes the buffer of the specified result file.
  • FlushTrueLogOnError Function
    Writes the current, actual stored TrueLog to disk.
  • FOpen Function
    Opens or creates a file with the specified filename and returns a handle to the opened file.
  • FRead Function
    Reads data from a file, starting at the position indicated by the file pointer.
  • FRemoveNBytes Function
    Removes data at the current position of the file pointer.
  • FSizeGet Function
    Returns the size of a specified file.
  • FWrite Function
    Writes data to a file, starting at the position indicated by the file pointer.
  • Extended File Functions
    Provides an overview of the functions that you can use to read and access files in CSV format (comma-separated format) or a fixed-length format.
親トピック: General Functions


EnableUNCAccess Function

Action

Enables a virtual user to access files that are located on UNC paths. Call this function in the initial transaction of your test script.

Include file

Kernel.bdh

Syntax

EnableUNCAccess( in sHost     : string,
                 in sUserName : string,
                 in sPassword : string ): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
sHost | Name of the computer where the file is located.
sUserName | Name of a Windows NT/2000 domain user. For remote access, a user who has appropriate permissions on the remote computer must be specified.
sPassword | Password of the Windows NT/2000 domain user.

Example

dcltrans
  transaction TInit
  begin
    EnableUNCAccess("lab13", "testdomain\\user1", "pass1");
  end TInit;

  transaction AccessUncPath
  var
    hFile : number;
    sOutput : string;
  begin
    // create new file
    FOpen(hFile, "\\\\lab13\\exportdir\\dummyfile.txt",
    OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    writeln("new file created");

    // write string to file
    sOutput := "Hello world!";
    FWrite(hFile, sOutput);
    writeln("string written to file");

    // close file
    FClose(hFile);
    writeln("file closed");
  end AccessUncPath;
親トピック: File Functions


FAttribute Function

Action

Checks, sets, and removes attributes for the specified file.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory, and in the project directory.

Include file

Kernel.bdh

Syntax

FAttribute( in sFileName   : string,
            in nAttributes : number,
            in nOperation  : number ): boolean;

Return value

  • true if the check operation was performed and the attribute was set or if the attribute was successfully added or removed.

  • false otherwise

Parameter | Description
sFileName | Name of the file
nAttributes

Attributes of the specified file. Any combination of the following flags is valid:

  • OPT_FILE_ATTRIB_ARCHIVE

  • OPT_FILE_ATTRIB_HIDDEN

  • OPT_FILE_ATTRIB_READONLY

  • OPT_FILE_ATTRIB_SYSTEM
nOperation

Specifies whether to check, set or remove attributes. Possible values are:

  • OPT_FILE_ATTRIB_GET

  • OPT_FILE_ATTRIB_ADD

  • OPT_FILE_ATTRIB_REMOVE

Example

dcltrans
  transaction TMain
  const
    scFileName := "c:\\temp\\dummyfile.txt";
  begin
    // check whether system file is hidden
    if FAttribute("c:\\io.sys",OPT_FILE_ATTRIB_HIDDEN, OPT_FILE_ATTRIB_GET) then
    write("hidden"); writeln;
    else
      write("visible"); writeln;
    end;

    // set read-only attribute for test file
    FAttribute(scFileName, OPT_FILE_ATTRIB_READONLY, OPT_FILE_ATTRIB_ADD);
    write("test file is now read-only"); writeln;
    // remove read-only attribute again
    FAttribute(scFileName, OPT_FILE_ATTRIB_READONLY, OPT_FILE_ATTRIB_REMOVE);
    write("read-only attribute removed"); writeln;
  end TMain;

Output

hidden
test file is now read-only
read-only attribute removed
親トピック: File Functions


FClear Function

Action

Clears all data of a file and sets the file size to zero.

Include file

Kernel.bdh

Syntax

FClear( in hFile: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.

Example

dcltrans
  transaction TMain
  var
    hFile : number;
    sOutput : string;
  begin
    // create new file and write string to file
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    sOutput := "Hello world!";
    FWrite(hFile, sOutput);
    write("new file created"); writeln;

    // clear file
    FClear(hFile);
    write("file cleared"); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;
  end TMain;

Output

new file created
file cleared
file closed
親トピック: File Functions
関連資料
FRead Function
FRemoveNBytes Function
FWrite Function


FClose Function

Action

Closes a file.

Include file

Kernel.bdh

Syntax

FClose( inout hFile: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.

Example

dcltrans
  transaction TMain
  var
    hFile : number;
    sOutput : string;
  begin
    // create new file
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    write("new file created"); writeln;

    // write string to file
    sOutput := "Hello world!";
    FWrite(hFile, sOutput);
    write("string written to file"); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;
  end TMain;

Output

new file created
string written to file
file closed

Sample scripts

WebFileUpload01.bdf

親トピック: File Functions
関連資料
FIsOpen Function
FOpen Function
FFlush Function
FWrite Function


FCurrentPositionGet Function

Action

Returns the current position of the file pointer.

Include file

Kernel.bdh

Syntax

FCurrentPositionGet( in  hFile : number,
                     out nPos  : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.
nPos | Variable receiving the current position of the file pointer

Example

dcltrans
  transaction TMain
  var
    hFile, nPos : number;
    sOutput     : string;
  begin
    // create new file and write string to file
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    sOutput := "Hello world!";
    FWrite(hFile, sOutput);
    write("new file created"); writeln;

    // get current file position
    FCurrentPositionGet(hFile, nPos);
    write("current pos = "); write(nPos); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;
  end TMain;

Output

new file created
current pos = 12
file closed
親トピック: File Functions
関連資料
FCurrentPositionSet Function
FSizeGet Function
FEOFSet Function


FCurrentPositionSet Function

Action

Moves the file pointer of an open file by a specified number of bytes from the start of the file or from the current position (thereby setting it to a given position), or moves the file pointer to the end of the file.

Include file

Kernel.bdh

Syntax

FCurrentPositionSet( in hFile       : number,
                     in nShift      : number,
                     in nMoveMethod : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.
nShift | Number of bytes to shift the file position
nMoveMethod Specifies the start position of the move operation. Possible values are:

  • OPT_FILE_BEGIN. Beginning of the file

  • OPT_FILE_CURRENT. Current file position

  • OPT_FILE_END. End of the file

Example

dcltrans
  transaction TMain
  var
    hFile : number;
    sOutput : string;
  begin
    // create new file and write string to file
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    sOutput := "Hello world!";
    FWrite(hFile, sOutput);
    write("new file created"); writeln;

    // set file position to end of word "Hello"
    FCurrentPositionSet(hFile, 5, OPT_FILE_BEGIN);
    write("current position set to 5"); writeln;

    // set EOF to current position
    FEOFSet(hFile);
    write("EOF set, file contains only the word 'Hello'"); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;

  end TMain;

Output

new file created
current position set to 5
EOF set, file contains only the word 'Hello'
file closed
親トピック: File Functions
関連資料
FCurrentPositionGet Function
FSizeGet Function
FEOFSet Function


FDelete Function

Action

Deletes the specified file.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory, and in the project directory.

Include file

Kernel.bdh

Syntax

FDelete( in sFileName: string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sFileName | Name of the file

Example

dcltrans
  transaction TMain
  const
    scFileName := "c:\\temp\\dummyfile.txt";
  var
    hFile: number;
  begin
    // create new file
    FOpen(hFile, scFileName, OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    FClose(hFile);
    write("new file created"); writeln;
    // delete file
    FDelete(scFileName);
    write("file deleted"); writeln;
  end TMain;

Output

new file created
file deleted
親トピック: File Functions
関連資料
FExists Function


FEOFSet Function

Action

Sets the end-of-file (EOF) position for a specified file to the current position of the file pointer.

Include file

Kernel.bdh

Syntax

FEOFSet( in hFile: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.

Example

dcltrans
  transaction TMain
  var
    hFile   : number;
    sOutput : string;
  begin
    // create new file and write string to file
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    sOutput := "Hello world!";
    FWrite(hFile, sOutput, Strlen(sOutput));
    write("new file created"); writeln;

    // set file position to end of word "Hello"
    FCurrentPositionSet(hFile, 5, OPT_FILE_BEGIN);
    write("current position set to 5"); writeln;

    // set EOF to current position
    FEOFSet(hFile);
    write("EOF set, file contains only the word 'Hello'"); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;
  end TMain;

Output

new file created
current position set to 5
EOF set, file contains only the word 'Hello'
file closed
親トピック: File Functions
関連資料
FCurrentPositionGet Function
FCurrentPositionSet Function
FSizeGet Function


FExists Function

Action

Checks whether a specified file exists.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory and in the project directory.

Include file

Kernel.bdh

Syntax

FExists(in sFileName: string): boolean;

Return value

  • true if the file exists

  • false otherwise

Parameter | Description
sFileName | Name of the file

Example

dcltrans
  transaction TMain
  begin
    // check whether the file "autoexec.bat" exists
    // in the C root directory
    if FExists("c:\\autoexec.bat") then
      write("file autoexec.bat exists"); writeln;
    else
      write("no autoexec.bat file"); writeln;
    end;
  end TMain;

Output

file autoexec.bat exists
親トピック: File Functions
関連資料
FDelete Function


FFindString Function

Action

Searches for the first occurrence of the specified string and, if found, sets the current position of the file pointer to the first character of the found string.

Include file

Kernel.bdh

Syntax

FFindString( in hFile      :number;
             in sSearchStr : string ): boolean;

Return value

  • true if the string was found

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.
sSearchStr | String to search for

Example

dcltrans
  transaction TMain
  const
    scFileName := "c:\\temp\\dummyfile.txt";
  var
    hFile            : number;
    sOutput, sSearch : string;
  begin
    // create a file and store a string
    FOpen(hFile, scFileName, OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    sOutput := "Hope the weather will be fine tomorrow!";
    FWrite(hFile, sOutput);
    FClose(hFile);
    write("new file created"); writeln;

    // search for the word "weather" in the file
    FOpen(hFile, scFileName);
    sSearch := "weather";
    if FFindString(hFile, sSearch) then
      write("word found"); writeln;
    else
      write("word not found"); writeln;
    end;

    // close file
    FClose(hFile);
    write("file closed");
    writeln;
  end TMain;

Output

new file created
word found
file closed
親トピック: File Functions


FFlush Function

Action

Flushes buffered data to the file.

Include file

kernel.bdh

Syntax

FFlush( in hFile : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.

Example

transaction TMain
var
  hFile : number;
begin
  // create new file and write string to file
  FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACESS_READWRITE, OPT_FILE_CREATE);
  FWrite(hFile, "Hello World");
  // flush data to file
  FFlush(hFile);
  // close file
  FClose(hFile);
end TMain;
親トピック: File Functions
関連資料
FWrite Function
FClose Function


FIsOpen Function

Action

Checks whether a specified file is currently open.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory, and in the project directory.

Include file

Kernel.bdh

Syntax

FIsOpen( in sFileName: string ): boolean;

Return value

  • true if the specified file is currently open

  • false otherwise

Parameter | Description
sFileName | Name of the file

Example

const
  scFileName := "c:\\temp\\dummyfile.txt";

dclfunc
  function DisplayFileStatus
  begin
    if FIsOpen(scFileName) then
      write("file is currently open"); writeln;
    else
      write("file is currently closed"); writeln;
    end;
  end DisplayFileStatus;

dcltrans
  transaction TMain
  var
    hFile: number;
  begin
    // check whether file is currently open
    DisplayFileStatus();
    // open file
    FOpen(hFile, scFileName, OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    write("file opened"); writeln;
    // check whether file is currently open
    DisplayFileStatus();
    // close file
    FClose(hFile);
    write("file closed"); writeln;
    // check whether file is currently open
    DisplayFileStatus();
  end TMain;

Output

file is currently closed
file opened
file is currently open
file closed
file is currently closed
親トピック: File Functions


FlushResultFile Function

Action

Flushes the buffer of the specified result file.

Include file

Kernel.bdh

Syntax

FlushResultFile( in nResultFile : number,
                 in bClose      : boolean optional ): boolean;

Return value

  • true if the file could be flushed.

  • false otherwise.

Parameter Description
nResultFile

Following result files can be flushed.

  • RESULT_FILE_ERR. Flushes the error log.

  • RESULT_FILE_LOG. Flushes the log files.

  • RESULT_FILE_RPT. Flushes the report file.

  • RESULT_FILE_WRT. Flushes the user output file.

  • RESULT_FILE_XLG. Flushes the .xlg. result files.

  • RESULT_FILE_TSD. Flushes time series data.

  • RESULT_FILE_ALL. Flushes all result files.
bClose (optional)

Specifies whether the results file should be closed after flushing. The default value is FALSE.

Example

dcltrans
  transaction TRaiseError
  begin
    ...
    FlushResultFile(RESULT_FILE_RPT);
    FlushResultFile(RESULT_FILE_XLG);
  end TRaiseError;
親トピック: File Functions


FlushTrueLogOnError Function

Action

Writes the current, actual stored TrueLog to disk.

Include file

WebAPI.bdh

Syntax

FlushTrueLogOnError();

Return value

  • none

親トピック: File Functions


FOpen Function

Action

Opens or creates a file with the specified filename and returns a handle to the opened file.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory and in the project directory.

If you are going to use remote agents for the load test, you should store your data files in the Data directory or in the directory where the test script is located. Note that in any case you have to add the data files to your load-testing project.

Include file

Kernel.bdh

Syntax

FOpen( out hFile       : number,
       in  sFileName   : string,
       in  nAccessMode : number optional,
       in  nOpenMode   : number optional,
       in  nShareMode  : number optional ):boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Variable receiving the file handle.
sFileName | Name of the file.
nAccessMode

Access options (optional). Possible values are:

  • OPT_FILE_ACCESS_READ. Open the file for reading (default).

  • OPT_FILE_ACCESS_READWRITE. Open the file for reading and writing.
nOpenMode

Specifies whether to create or open the file (optional). Possible values are:

  • OPT_FILE_CREATE. Create the file. If the file already exists, it is overwritten.

  • OPT_FILE_OPEN. Open the file (default).

  • OPT_FILE_OPENCREATE. Open the file and create it if it does not exist.
nShareMode

Share options (optional). Possible values are:

  • OPT_FILE_SHARE_NONE. No sharing.

  • OPT_FILE_SHARE_READ. Shared reading access (default).

  • OPT_FILE_SHARE_READWRITE. Shared reading and writing access.

Example

dcltrans
  transaction TMain
  var
    hFile   : number;
    sOutput : string;
  begin
    // create new file
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    write("new file created"); writeln;

    // write string to file
    sOutput := "Hello world!";
    FWrite(hFile, sOutput);
    write("string written to file"); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;
  end TMain;

Output

new file created
string written to file
file closed

Sample scripts

WebFileUpload01.bdf

親トピック: File Functions
関連資料
FClose Function
FIsOpen Function


FRead Function

Action

Reads data from a file, starting at the position indicated by the file pointer.

Include file

Kernel.bdh

Syntax

FRead(in hFile : number,
      out sData : string,
      in nDataSize : number,
      out nRead : number optional): boolean;

Return value

  • true if the number of bytes that were actually read is equal to the number of bytes that you specified should be read.

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.
sData | Buffer that receives the data
nDataSize | Number of bytes to read
nRead | Variable receiving the number of bytes actually read (optional)

Example

dcltrans
  transaction TMain
  var
    hFile, nRead : number;
    sData : string;
  begin
    // open text file for reading
    FOpen(hFile, "c:\\temp\\dummyfile.txt");
    write("file opened"); writeln;
    // read the first 5 bytes and display them
    FRead(hFile, sData, 5, nRead);
    write(nRead); write(" bytes read"); writeln;
    write(sData); writeln;
    // close file
    FClose(hFile);
  end TMain;

Output

file opened
5 bytes read
Hello

Sample scripts

WebFileUpload01.bdf

親トピック: File Functions
関連資料
FClear Function
FRemoveNBytes Function
FWrite Function


FRemoveNBytes Function

Action

Removes data at the current position of the file pointer.

Include file

Kernel.bdh

Syntax

FRemoveNBytes( in  hFile    : number,
               in  nBytes   : number,
               out nRemoved : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.
nBytes | Number of bytes to remove. If this parameter contains a negative value, all characters between the current file position and the end of the file are removed. After the function call this parameter contains the number of bytes actually removed.
nRemoved | Variable receiving the actual number bytes removed from the file (optional)

Example

dcltrans
  transaction TMain
  var
    hFile   : number;
    sOutput : string;
  begin
    // create new file and write string to file
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    sOutput := "Hello beautiful world!";
    FWrite(hFile, sOutput);
    write("new file created"); writeln;

    // remove word "beautiful"
    FCurrentPositionSet(hFile, 6, OPT_FILE_BEGIN);
    FRemoveNBytes(hFile, 10);
    write("word 'beautiful' removed"); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;
  end TMain;

Output

new file created
word 'beautiful' removed
file closed
親トピック: File Functions
関連資料
FRead Function
FClear Function
FWrite Function


FSizeGet Function

Action

Returns the size of a specified file.

Include file

Kernel.bdh

Syntax

FSizeGet( in  hFile : number,
          out nSize : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.
nSize | Variable receiving the file size

Example

dcltrans
  transaction TMain
  var
    hFile, nSize : number;
    sOutput      : string;
  begin
    // create a file and store a string
    FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
    sOutput := "Hello world!";
    FWrite(hFile, sOutput);
    write("new file created"); writeln;

    // display current file size
    FSizeGet(hFile, nSize);
    write("file size = "); write(nSize); writeln;

    // close file
    FClose(hFile);
    write("file closed"); writeln;
  end TMain;

Output

new file created
file size = 12
file closed

Sample scripts

WebFileUpload01.bdf

親トピック: File Functions
関連資料
FCurrentPositionGet Function
FCurrentPositionSet Function
FEOFSet Function


FWrite Function

Action

Writes data to a file, starting at the position indicated by the file pointer.

Include file

Kernel.bdh

Syntax

FWrite( in  hFile      : number,
        in  sData      : string,
        in  nDataSize  : number optional,
        in  nWriteMode : number optional,
        out nWritten   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Valid handle to an open file. This handle must have been returned from a previous call to FOpen.
sData | Buffer containing data to write
nDataSize | Number of bytes to write (optional, default = STRING_COMPLETE).
nWriteMode

Specifies how the data is written to the file (optional). Possible values are:

  • OPT_FILE_APPEND. Appends the data at the end of the file

  • OPT_FILE_INSERT. Inserts the data at the current position

  • OPT_FILE_OVERWRITE. Overwrites the data at the current position (default)
nWritten | Variable receiving the number of bytes actually written (optional)

Example

dcltrans
  transaction TMain
var
  hFile, nWritten  : number;
  sOutput          : string;
begin
  // create a file in the temporary directory
  FOpen(hFile, "c:\\temp\\dummyfile.txt", OPT_FILE_ACCESS_READWRITE, OPT_FILE_CREATE);
  write("new file created"); writeln;

  // write string to open file
  sOutput := "Hello world!";
  FWrite(hFile, sOutput, STRING_COMPLETE, OPT_FILE_APPEND, nWritten);
  write (nWritten); write(" bytes written to file"); writeln;

  // close file
  FClose(hFile);
  write("file closed"); writeln;
end TMain;

Output

new file created
12 bytes written to file
file closed
親トピック: File Functions
関連資料
FRead Function
FClear Function
FRemoveNBytes Function
FFlush Function
FClose Function


Extended File Functions

Extended file functions read and access files in CSV format (comma-separated format) or a fixed-length format. You can use them to read multi-column values in sequential or random order. They are very useful when you want to parameterize your workload with values that are stored in files. For example, you can use these functions to read a Web Server log and use the URL strings stored in the log inside your Web transactions; or you can use them to load valid pairs of multi column data from a file to parameterize data values in your script (for example, valid user/password pairs).

  • FileCSVLoad Function
    Reads a file in CSV format (comma-separated format) into memory.
  • FileCSVLoadGlobal Function
    Reads a file in CSV format (comma-separated format) into memory.
  • FileFixedLoad Function
    Reads a file in a fixed-length ASCII format into memory.
  • FileFixedLoadGlobal Function
    Reads a file in a fixed-length ASCII format into memory.
  • FileGetCol Function
    Retrieves the value of the column specified by nColumn of the current row.
  • FileGetFirstRow Function
    Sets the current row pointer to the first row in the file.
  • FileGetNextRow Function
    Sets the row pointer to the row after the current row.
  • FileGetNextUniqueRow Function
    Sets the test-wide unique row pointer to the row after the current row.
  • FileGetNumRows Function
    Returns the number of rows of a file previously opened and read with a FileLoad function.
  • FileGetRndRow Function
    Sets the row pointer to a randomly selected row within a file.
  • FileGetRow Function
    Sets the current row pointer to the row number specified.
  • FileRemoveRow Function
    Removes the last returned unique row of a virtual user from the specified file.
  • FileUnload Function
    Closes a file handle previously opened with a FileLoad function.
  • GetFileContent Function
    Reads a file sFilename and returns its content as string.
親トピック: File Functions


FileCSVLoad Function

Action

Reads a file in CSV format (comma-separated format) into memory. After the file has been read, the whole file is accessible without further I/O. The file is read into shared memory only once at a client machine, even if it is read by multiple virtual users. Usually you will use this function only once in your script for each file you load for example, in a start up transaction that initializes your simulation.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory and in the project directory.

If you are going to use remote agents for the load test, you should store your data files in the Data directory or in the directory where the test script is located. Note that in any case you have to add the data files to your load-testing project.
注: The values for sSeparator and sDelimiter may not be equal. The sSeparator parameter is used to separate data cells, while the sDelimiter parameter is used to encapsulate a data cell if the value used for the separator is used as data itself. If these parameters are set to the same value, the parser will fail.

Include file

Kernel.bdh

Syntax

FileCSVLoad( out hFile      : number,
             in  sFileName  : string,
             in  sSeparator : string optional,
             in  sDelimiter : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Variable receiving the file handle used to access the file
sFileName | Specifies the path and file name of the file to read. If you specify a file name without path information, Silk Performer searches for the file in the user data directory specified in the Directories tab of the System Settings - Workbench dialog.
sSeparator | Specifies the separator of the columns you want to use (optional). Usually the separator for CSV-formatted files is the comma (",").
sDelimiter | Specifies the delimiter you want to use for identifying a separator/delimiter sign within a data field (optional). By default the delimiter is the double quotes sign (").

Sample columns

Name | Nickname | Address | City
John Smith | John ““The Tester”” | “Fast Lane, 1432” | Test City

Since double quotes are the delimiter, the double quotes in the Nickname need to be preceded by the delimiter itself (in this case the delimiter has the same functionality as for example a backslash has in BDL code).

The address field includes a comma, which is usually the separator. To prevent FileCSVLoad from using this comma as a separator, the value of John Smith’s address must be encompassed by the delimiter (“…”).

Example

var
  hFile, r: number;
dcltrans
  transaction TInit
  begin
    ...
     FileCSVLoad(hFile, "login.csv", ",", "\"");
  end TInit;

  transaction TMain
  begin
    r := FileGetNextRow(hFile);
...
  end TMain;
親トピック: Extended File Functions


FileCSVLoadGlobal Function

Action

Reads a file in CSV format (comma-separated format) into memory. The function is equivalent to the FileCSVLoad function except that the pointer to the current row is maintained globally between virtual users at one machine. This means that all virtual users of the file at one machine use the same global row pointer for the current row. Therefore you can sequentially access a file from multiple virtual users.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory and in the project directory.

If you are going to use remote agents for the load test, you should store your data files in the Data directory or in the directory where the test script is located. Note that in any case you have to add the data files to your load-testing project.
注: The values for sSeparator and sDelimiter may not be equal. The sSeparator parameter is used to separate data cells, while the sDelimiter parameter is used to encapsulate a data cell if the value used for the separator is used as data itself. If these parameters are set to the same value, the parser will fail.

Include file

Kernel.bdh

Syntax

FileCSVLoadGlobal( out hFile      :number,
                   in  sFileName  : string,
                   in  sSeparator : string optional,
                   in  sDelimiter : string optional ):boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Variable receiving the file handle used to access the file
sFileName | Specifies the path and file name of the file to read. If you specify a file name without path information, Silk Performer searches for the file in the user data directory specified in the Directories tab of the System Settings - Workbench dialog.
sSeparator | Specifies the separator of the columns you want to use (optional). Usually the separator for CSV-formatted files is the comma (",").
sDelimiter | Specifies the delimiter you want to use for identifying a separator/delimiter sign within a data field (optional). By default the delimiter is the double quotes sign (").

Sample columns

Name | Nickname | Address | City
John Smith | John ““The Tester”” | “Fast Lane, 1432” | Test City

Since double quotes are the delimiter, the double quotes in the Nickname need to be preceded by the delimiter itself (in this case the delimiter has the same functionality as for example a backslash has in BDL code).

The address field includes a comma, which is usually the separator. To prevent FileCSVLoad from using this comma as a separator, the value of John Smith’s address must be encompassed by the delimiter (“…”).

Sample scripts

RandomLogin.bdf

親トピック: Extended File Functions
関連資料
FileCSVLoad Function


FileFixedLoad Function

Action

Reads a file in a fixed-length ASCII format into memory. Each row of the file is delimited with CR or CRLF (carriage return or carriage return + linefeed characters). After the file has been read, the whole file is accessible without further I/O. The file is read into shared memory only once at a client machine, even if it is read by multiple virtual users. Usually, you will use this function in only once in your script for each file you load for example, in a start up transaction that initializes your simulation.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory and in the project directory.

If you are going to use remote agents for the load test, you should store your data files in the Data directory or in the directory where the test script is located. Note that in any case you have to add the data files to your load-testing project.
注: This function assumes that a particular column has the same width in each row.

Include file

Kernel.bdh

Syntax

FileFixedLoad( out hFile         : number,
               in  sFileName     : string,
               in  sFormatString : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Variable receiving the file handle used to access the file
sFileName | Specifies the path and file name of the file to read. If you specify a file name without path information, Silk Performer searches for the file in the user data directory specified in the Directories tab of the System Settings - Workbench dialog.
sFormatString | Specifies the format of a row in the file. For each column in one row you specify the starting position and the ending position of the column (beginning with 1 as the first position in the row). You need not to specify all columns in a row, and you can specify columns that overlap with other columns. Syntax of the format string Format = Startpos ".." Endpos { ";" Startpos ".." Endpos }.

Example

var
  hFile, r: number;

dcltrans
  transaction TMain
  begin
    ...

    FileFixedLoad(hFile, "login.csv", "1..20;21..40");
  end TMain;

  transaction tra1
  begin
    r := FileGetNextRow(hFile);
    ...
  end tra1;
親トピック: Extended File Functions


FileFixedLoadGlobal Function

Action

Reads a file in a fixed length ASCII format into memory. The function is equivalent to the FileFixedLoad function except that the pointer to the current row is maintained globally between virtual users at one machine. That means that all virtual users of the file at one machine use of the same global row pointer for the current row. Therefore you can sequentially access a file from multiple virtual users.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer searches for the file in the directory where the test script is located, in the data directory, in the results directory and in the project directory.

If you are going to use remote agents for the load test, you should store your data files in the Data directory or in the directory where the test script is located. Note that in any case you have to add the data files to your load-testing project.

Include file

Kernel.bdh

Syntax

FileFixedLoadGlobal( out hFile        : number,
                     in sFileName     : string,
                     in sFormatString : string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Variable receiving the file handle used to access the file
sFileName | Specifies the path and file name of the file to read. If you specify a file name without path information, Silk Performer searches for the file in the user data directory specified in the Directories tab of the System Settings - Workbench dialog.
sFormatString | Specifies the format of a row in the file. For each column in one row you specify the starting position and the ending position of the column (beginning with 1 as the first position in the row). You need not to specify all columns in a row, also you can specify columns that overlap with other columns. Syntax of the format string Format = Startpos ".." Endpos { ";" Startpos ".." Endpos }.
親トピック: Extended File Functions
関連資料
FileFixedLoad Function


FileGetCol Function

Action

Retrieves the value of the column specified by nColumn of the current row.

Include file

Kernel.bdh

Syntax

FileGetCol( in hFile   : number,
            in nColumn : number,
            in nMaxLen : number optional ): string;

Return value

value of the column

Parameter | Description
hFile | Specifies the file handle that is used to access the file.
nColumn | Number of the column beginning with 1 for the first column. If you set nColumn to 0, the whole row is retrieved.
nMaxLen | (optional, default = STRING_COMPLETE) Maximum length of the return value including the terminating null character. If a column value including terminating null character is larger than this value, the return value is truncated accordingly.

Example

dcltrans
  transaction TMain
  const
    MAX_LEN := 254;
  var
    hFile, i : number;
    sRowBuffer, sColumn1, sColumn2 : string;
  begin
    ...
    FileFixedLoad(hFile, "login.csv", "1..20;21-40");

    for i := 1 to 100 do
      FileGetRow(hFile, i);
      sRowBuffer := FileGetCol(hFile, 0, MAX_LEN);
      sColumn1   := FileGetCol(hFile, 1, MAX_LEN);
      sColumn2   := FileGetCol(hFile, 2, MAX_LEN);
    end;
    ...
  end TMain;

Sample scripts

RandomLogin.bdf

親トピック: Extended File Functions


FileGetFirstRow Function

Action

Sets the current row pointer to the first row in the file. After the current row pointer is set with FileGetFirstRow, you can access the columns of the row with the GetCol function. If the file is opened with a global FileLoad function (FileCSVLoadGlobal or FileFixedLoadGlobal), the current row pointer is set for all virtual users that access this file. Otherwise the current row pointer is set only for the virtual user calling the function.

Include file

Kernel.bdh

Syntax

FileGetFirstRow(in hFile: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFile | Specifies the file handle that is used to access the file

Example

dcltrans
  transaction TMain
  const
    MAX_LEN := 254;
  var
    hFile : number;
    sColumn : string;
  begin
    ...
    FileFixedLoad(hFile, "login.csv", "1..20;21-40");
    FileGetFirstRow(hFile);
    sColumn := FileGetCol(hFile, 1, MAX_LEN);
    ...
  end TMain;
親トピック: Extended File Functions
関連資料
FileGetNextRow Function
FileGetNumRows Function
FileGetRndRow Function
FileGetRow Function
FileGetNextUniqueRow Function


FileGetNextRow Function

Action

Sets the row pointer to the row after the current row. If the current row is the last row in a file, then the current row is set to the first row of the file. After the current-row pointer is set with FileGetNextRow, you can access the columns of the row with the FileGetCol function. If the file is opened with a global FileLoad function (FileCSVLoadGlobal or FileFixedLoadGlobal), the current row pointer is set for all virtual users that access this file. Otherwise, the current row pointer is set only for the virtual user calling the function.

注: You do not necessarily need to call the FileGetFirstRow function prior to the first FileGetNextRow function call. After a file has been opened, the file pointer is set to the first row automatically.

Include file

Kernel.bdh

Syntax

FileGetNextRow(in hFile: number): number;

Return value

row number for the current row (beginning with 1 for the first row of a file)

Parameter | Description
hFile | Specifies the file handle that is used to access the file

Example

dcltrans
  transaction TMain
  const
    MAX_LEN := 254;
  var
    hFile, i : number;
    sColumn : string;
  begin
    FileFixedLoad(hFile, "login.csv", "1..20;21-40");
    for i := 1 to 100 do
      FileGetNextRow(hFile);
      sColumn := FileGetCol(hFile, 1, MAX_LEN);
    end;
    ...
  end TMain;

Sample scripts

RandomLogin.bdf

親トピック: Extended File Functions
関連資料
FileGetFirstRow Function
FileGetNumRows Function
FileGetRndRow Function
FileGetRow Function
FileGetNextUniqueRow Function


FileGetNextUniqueRow Function

Action

Sets the test-wide unique row pointer to the row after the current row. If the current row is the last row in a file, the unique row pointer will be reset to the first row. All rows that have not been removed through the function FileRemoveRow or through the parameter bRemoveUsedRow are again available. If no more rows are available, the requesting virtual user is stopped. After the current-row pointer is set with FileGetNextUniqueRow, you can access the columns of the row with the FileGetCol function.

The test-wide unique row pointer is maintained for all virtual users on all agents regardless of whether the file is opened with a regular (FileCSVLoad or FileFixedLoad) or global (FileCSVLoadGlobal or FileFixedLoadGlobal) function. Therefore, all virtual users are essentially sharing test-wide sequential access to the same data file, ensuring that every virtual user gets a unique data row on each FileGetNextUniqueRow function call.

注: Do not use the FileGetFirstRow, FileGetRow or FileGetNextRow functions when using the FileGetNextUniqueRow function.

After a file has been opened, the file pointer is set to the first row in the first FileGetNextUniqueRow call of the virtual user who makes the call.

注: Using FileGetRow or FileGetNextRow with FileGetNextUniqueRow may yield unexpected results.

Include file

Kernel.bdh

Syntax

FileGetNextUniqueRow( in hFile          : number
                      in bRemoveUsedRow : boolean optional ): number;

Return value

row number for the current row (beginning with 1 for the first row of a file)

Parameter | Description
hFile | Specifies the file handle that is used to access the file
bRemoveUsedRow | Optional: Specifies whether used data rows shall be removed. The default value is false. If this parameter is set to true, used data rows are removed in any case. Even if the test execution is stopped due to a lack of data rows. If the parameter is set to false, you can use the function FileRemoveRow to remove rows.

Example

dcltrans
  transaction TInit
  begin
    if FileCSVLoadGlobal(hFile,"login.csv",",")=false then
      write("File open error\n");
    end;

    FileGetNextUniqueRow(hFile);
    write("UserName: "+FileGetCol(hFile,1,20)+"\n");
    write("Password: "+FileGetCol(hFile,2,20)+"\n");
    // Insert here your connection code
  end TInit;

  transaction TMain
  begin
    // Insert here your transaction code
  end TMain;

Sample scripts

UniqueLogin.bdf

親トピック: Extended File Functions
関連資料
FileGetFirstRow Function
FileGetNextRow Function
FileGetNumRows Function
FileGetRndRow Function
FileGetRow Function


FileGetNumRows Function

Action

Returns the number of rows of a file previously opened and read with a FileLoad function (FileCSVLoad, FileFixedLoad, FileCSVLoadGlobal or FileFixedLoadGlobal).

Include file

Kernel.bdh

Syntax

FileGetNumRows(in hFile: number): number;

Return value

number of rows in the file

Parameter | Description
hFile | Specifies the file handle that is used to access the file

Example

var
  hFile, nMaxRows: number;
dcltrans
  transaction TMain
  begin
    ...
    FileFixedLoad(hFile, "login.csv", "1..20;21-40");
    nMaxRows := FileGetNumRows(hFile);
    ...
  end TMain;
親トピック: Extended File Functions
関連資料
FileGetFirstRow Function
FileGetNextRow Function
FileGetRndRow Function
FileGetRow Function
FileGetNextUniqueRow Function


FileGetRndRow Function

Action

Sets the current row pointer to a randomly selected row between the first row and the maximum rows of the file. After the current row pointer is set with FileGetRndRow you can access the columns of the row with the FileGetCol function.

Include file

Kernel.bdh

Syntax

FileGetRndRow(in hFile: number): number;

Return value

row number of the current row (beginning with 1 for the first row of a file)

Parameter | Description
hFile | Specifies the file handle that is used to access the file

Example

dcltrans
  transaction TMain
  const
    MAX_LEN := 254;
  var
    hFile, i : number;
    sColumn : string;
  begin
    ...
    FileFixedLoad(hFile, "login.csv", "1..20;21-40");
      for i := 1 to 100 do
      FileGetRndRow(hFile);
      sColumn := FileGetCol(hFile, 1, MAX_LEN);
    end;
    ...
  end TMain;
親トピック: Extended File Functions
関連資料
FileGetFirstRow Function
FileGetNextRow Function
FileGetNumRows Function
FileGetRow Function
FileGetNextUniqueRow Function


FileGetRow Function

Action

Sets the current row pointer to the row number specified. After the current row pointer is set with FileGetRow you can access the columns of the row with the FileGetCol function.

Include file

Kernel.bdh

Syntax

FileGetRow(in hFile : number,
             in nRow  : number): number;

Return value

Row number of the current row (beginning with 1 for the first row of a file). If an invalid row number is specified, this function returns 0 and does not modify the row pointer.

Parameter | Description
hFile | Specifies the file handle that is used to access the file
nRow | Row number to be set

Example

dcltrans
  transaction TMain
  const
    MAX_LEN := 254;
  var
    hFile, i : number;
    sColumn : string;
  begin
    ...
    FileFixedLoad(hFile, "login.csv", "1..20;21-40");
    for i := 1 to 100 do
      FileGetRow(hFile, i);
      sColumn := FileGetCol(hFile, 1, MAX_LEN);
    end;
    ...
  end TMain;
親トピック: Extended File Functions
関連資料
FileGetFirstRow Function
FileGetNextRow Function
FileGetNumRows Function
FileGetRndRow Function
FileGetNextUniqueRow Function


FileRemoveRow Function

Action

Removes the last returned unique row of a virtual user from the specified file. This function only takes effect if the parameter bRemoveUsedRows of the function FileGetNextUniqueRow is set to false. If this parameter is set to true, used rows are removed anyway.

Include file

Kernel.bdh

Syntax

FileRemoveRow( in hFile : long );

Parameter | Description
hFile | Specifies the file handle that is used to access the file

Example

transaction DemoTrans
begin
  FileGetNextUniqueRow(hWebProject_81, false);
  psWebProject_8Column11 := FileGetCol(hWebProject_81, 1, STRING_COMPLETE);

  if (GetUserId() mod 2 = 0) then
    FileRemoveRow(hWebProject_81);
  end;
end DemoTrans;
親トピック: Extended File Functions


FileUnload Function

Action

Closes a file handle previously opened with a FileLoad function (FileCSVLoad, FileFixedLoad, FileCSVLoadGlobal or FileFixedLoadGlobal). If all file handles from all virtual users for a specific file are closed, the file is discarded from shared memory. When ending a simulation this function is performed automatically. Therefore you need not call this function if you want to close a file handle at the end of a simulation.

Include file

Kernel.bdh

Syntax

FileUnload( inout hFile: number );
Parameter | Description
hFile | Specifies the file handle that is used to access the file

Example

dcltrans
  transaction TFileUnload
  var
    hFile: number;
  begin
    FileFixedLoad(hFile, "login.csv", "1..20;21-40");
    FileUnload(hFile);
  end TFileUnload;

Sample scripts

RandomLogin.bdf

親トピック: Extended File Functions


GetFileContent Function

Action

Reads a file sFilename and returns its content as string.

Include file

kernel.bdh

Syntax

GetFileContent( in sFilename : string ) : string;
Parameter | Description
sFilename | Absolute filename of file to read.
親トピック: Extended File Functions


リスト関数

List は、同じ型の変数のコンテナです。サポートされるデータ型は、boolean、number、float、および string です。 配列とは逆に、リストに含まれる要素の数は動的です。 Silk Performer には、リストに使用できる複数の関数が用意されています。 初期化していないリストのサイズは 0 です。 要素を追加すると、リスト サイズが大きくなり、要素を削除するとサイズが小さくなります。
注: リストの中のリストはサポートされていません。
  • ListAdd Function
    Appends a value to a list.
  • ListClear Function
    Removes all elements of a list.
  • ListClone Function
    Makes a copy of a list.
  • ListConcat Function
    Concatenates two lists into a destination list.
  • ListContains Function
    Checks if a specific value is in a list or not.
  • ListExtract Function
    Copies a part of a list into another list.
  • ListGetAt Function
    Returns a copy of the element at a specified position of a list.
  • ListGetFirst Function
    Returns a copy of the first element of a list.
  • ListGetLast Function
    Returns a copy of the last element of a list.
  • ListGetLength Function
    Returns the length of a list.
  • ListGetType Function
    Returns the type of a list.
  • ListIndexOf Function
    Returns the index of the first occurrence of an element.
  • ListInsert Function
    Inserts a value into a list.
  • ListIsEqual Function
    Checks if two lists are identical.
  • ListLastIndexOf Function
    Returns the index of the last occurrence of an element.
  • ListPrint Function
    Prints all elements of a list.
  • ListRemoveAt Function
    Removes an element at a specific position of a list.
  • ListRemoveFirst Function
    Removes the first element of a list.
  • ListRemoveLast Function
    Removes the last element of a list.
  • ListReplaceAll Function
    Replaces all elements of a list with a specific value by another value.
  • ListSetAt Function
    Sets a specified value at a specific position of a list.
  • ListWriteBin Function
    Writes all elements of a string list to the .wrt file.
親トピック: General Functions
関連資料
List


ListAdd Function

Action

Appends a value to a list.

Include file

List.bdh

Syntax

ListAdd(
   inout theList: list,
   in element: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string, which contains a copy of the newly added element as an out parameter.
element | Number, boolean, float or string. Has to conform with the type of theList.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListAdd
var
  lstNumber: list of number init 1, 2, 3, 4, 5;
  retVal1, retVal2: boolean;
  nr: number;
begin
  nr := 6;
  retVal1 := ListAdd(lstNumber, nr);
  retVal2 := ListAdd(lstNumber, 7);
  if(retVal1 = true) and (retVal2 = true) then
    ListGetAt(lstNumber, 6, nr);
    writeln("element at position 6: " + string(nr));
    writeln("length of list: " + string(ListGetLength(lstNumber)));
  else
    writeln("ListAdd did not work!");
  end;
end TAListAdd;

Output

element at position 6: 6
length of list: 7
親トピック: リスト関数


ListClear Function

Action

Removes all elements of a list.

Include file

List.bdh

Syntax

ListClear(
   inout theList: list) : boolean;
Parameter | Description
theList | List of number, boolean, float or string, which is empty as an out parameter.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListClear
var
  lstNumber: list of number init 1, 2, 3, 4, 5, 6;
  retVal1: boolean;
begin
  retVal1 := ListClear(lstNumber);
  if(retVal1 = true) then
    writeln("length of list: " + string(ListGetLength(lstNumber)));
  else
    writeln("ListClear did not work!");
  end;
end TAListClear;

Output

length of list: 0
親トピック: リスト関数


ListClone Function

Action

Makes a copy of a list. The origin and the target list parameters have to be of the same type. The elements of the target list are removed before the elements of the origin list are copied.

Include file

List.bdh

Syntax

ListClone(
   in theList: list,
   inout resultList: list) : boolean;
Parameter | Description
theList | List of number, boolean, float or string.
resultList | List of number, boolean, float or string. The type of this list must be the same as the type of theList. resultList contains a copy of all elements of theList as an out parameter.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListClone
var
  lstNumber: list of number init 1, 2, 3, 4, 5, 6;
  lstCopy: list of number init 33, 44, 55;
  retVal1: boolean;
begin
  retVal1 := ListClone(lstNumber, lstCopy);
  if(retVal1 = true) then
    ListPrint(lstCopy);
  else
    writeln("ListClone did not work!");
  end;
end TAListClone;

Output

element 1: 1
element 2: 2
element 3: 3
element 4: 4
element 5: 5
element 6: 6
親トピック: リスト関数


ListConcat Function

Action

Concatenates two lists into a destination list. All three lists must be of the same type. All elements of the destination list are deleted before the elements of the other lists are copied into it.

Include file

List.bdh

Syntax

ListConcat(
   in firstList: list,
   in secondList: list,
   inout resultList: list) : boolean;
Parameter | Description
firstList | List of number, boolean, float or string.
secondList | List of number, boolean, float or string.
resultList | List of number, boolean, float or string, which contains all elements of firstList and secondList as an out parameter.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListConcat
var
  lstFirst: list of number init 1, 2, 3;
  lstSecond: list of number init 4, 5, 6;
  lstResult: list of number init 33, 44, 55;
  retVal1: boolean;
begin
  retVal1 := ListConcat(lstFirst, lstSecond, lstResult);
  if(retVal1 = true) then
    ListPrint(lstResult);
  else
    writeln("ListConcat did not work!");
  end;
end TAListConcat;

Output

element 1: 1
element 2: 2
element 3: 3
element 4: 4
element 5: 5
element 6: 6
親トピック: リスト関数


ListContains Function

Action

Checks if a specific value is in a list or not.

Include file

List.bdh

Syntax

ListContains(
   in theList: list,
   in element: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string.
element | Element to be searched in theList.

Return value

  • true if the element is found
  • false otherwise

Example

transaction TAListContains
var
  lstNumber: list of number init 1, 2, 3;
  retVal1: boolean;
  nrVal: number init 2;
begin
  retVal1 := ListContains(lstNumber, nrVal);
  writeLn("2 is element of the list: " + string(retVal1));
  retVal1 := ListContains(lstNumber, 4);
  writeLn("4 is element of the list: " + string(retVal1));
end TAListContains;

Output

2 is element of the list: TRUE
4 is element of the list: FALSE
親トピック: リスト関数


ListExtract Function

Action

Copies a part of a list, defined by two indices, from one list to another. The elements of the target list are removed before the elements of the origin list are copied.

Include file

List.bdh

Syntax

ListExtract(
   in listFrom: list,
   in fromIndex: number,
   in toIndex: number,
   inout listExtracted: list) : boolean;
Parameter | Description
listFrom | List of number, boolean, float or string.
fromIndex | Number, defining the first element to be copied.
toIndex | Number, defining the last element to be copied.
listExtracted | List of number, boolean, float or string, which contains the specified elements of listFrom as an out parameter.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListExtract
var
  lstNumber: list of number init 1, 2, 3, 4, 5, 6;
  lstResult: list of number init 555, 555;
  retVal: boolean;
begin
  retVal := ListExtract(lstNumber, 2, 5, lstResult);
  if(retVal) then
    ListPrint(lstResult);
  end;
end TAListExtract;

Output

element 1: 2
element 2: 3
element 3: 4
element 4: 5
親トピック: リスト関数


ListGetAt Function

Action

Returns a copy of the element at a specified position of a list.

Include file

List.bdh

Syntax

ListGetAt(
   in theList: list,
   in index: number,
   inout retElement: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string.
index | Index of theList.
retElement | Number, boolean, float or string, which contains a copy of the element at position index of theList as an out parameter. Has to conform with the type of theList.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListGetAt
var
  lstNumber: list of number init 10, 20, 30;
  numberElem: number;
  stringElem: string;
  retVal: boolean;
begin
  retVal := ListGetAt(lstNumber, 2, numberElem);
  if((retVal = true) and (numberElem = 20)) then
    writeln("ListGetAt worked! Value of numberElem: " + string(numberElem));
  end;
  retVal := ListGetAt(lstNumber, 2, stringElem);
  if(retVal = false) then
    writeln("ListGetAt did not work, the types do not match!");
  end;
  retVal := ListGetAt(lstNumber, 4, numberElem);
  if(retVal = false) then
    writeln("ListGetAt did not work. Index does not exist!");
  end;
end TAListGetAt;

Output

ListGetAt worked! Value of numberElem: 20
ListGetAt did not work, the types do not match!
ListGetAt did not work. Index does not exist!
親トピック: リスト関数


ListGetFirst Function

Action

Returns a copy of the first element of a list.

Include file

List.bdh

Syntax

ListGetFirst(
   in theList: list,
   inout retElement: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string.
retElement | Number, boolean, float or string, which contains a copy of the first element of theList as an out parameter. Has to conform with the type of theList.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListGetFirst
var
  lstNumber: list of number init 10, 20, 30;
  numberElem: number;
  stringElem: string;
  retVal: boolean;
begin
  retVal := ListGetFirst(lstNumber, numberElem);
  if((retVal = true) and (numberElem = 10)) then
    writeln("ListGetFirst worked! Value of numberElem: " + string(numberElem));
  end;
  retVal := ListGetFirst(lstNumber, stringElem);
  if(retVal = false) then
    writeln("ListGetFirst did not work, the types do not match!");
  end;
end TAListGetFirst;

Output

ListGetFirst worked! Value of numberElem: 10
ListGetFirst did not work, the types do not match!
親トピック: リスト関数


ListGetLast Function

Action

Returns a copy of the last element of a list.

Include file

List.bdh

Syntax

ListGetLast(
   in theList: list,
   inout retElement: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string.
retElement | Number, boolean, float or string, which contains a copy of the last element of theList as an out parameter. Has to conform with the type of theList.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListGetLast
var
  lstNumber: list of number init 10, 20, 30;
  numberElem: number;
  stringElem: string;
  retVal: boolean;
begin
  retVal := ListGetLast(lstNumber, numberElem);
  if((retVal = true) and (numberElem = 30)) then
    writeln("ListGetLast worked! Value of numberElem: " + string(numberElem));
  end;
  retVal := ListGetLast(lstNumber, stringElem);
  if(retVal = false) then
    writeln("ListGetLast did not work, the types do not match!");
  end;
end TAListGetLast;

Output

ListGetLast worked! Value of numberElem: 30
ListGetLast did not work, the types do not match!
親トピック: リスト関数


ListGetLength Function

Action

Returns the length of a list.

Include file

List.bdh

Syntax

ListGetLength(
   in theList: list) : number;
Parameter | Description
theList | List of number, boolean, float or string.

Return value

  • the length of the list

Example

transaction TAListGetLength
var
  lstNumber:  list of number init 10, 20, 30;
  lstBoolean: list of boolean init true, false, true, false;
  lstFloat:   list of float init 1.1, 2.2, 3.3, 4.4, 5.5;
  lstString:  list of string init "one", "two", "three", "four", "five", "six";
begin
  writeln("ListGetLength(lstNumber)  == " + string(ListGetLength(lstNumber)));
  writeln("ListGetLength(lstBoolean) == " + string(ListGetLength(lstBoolean)));
  writeln("ListGetLength(lstFloat)   == " + string(ListGetLength(lstFloat)));
  writeln("ListGetLength(lstString)  == " + string(ListGetLength(lstString)));
end TAListGetLength;

Output

ListGetLength(lstNumber)  == 3
ListGetLength(lstBoolean) == 4
ListGetLength(lstFloat)   == 5
ListGetLength(lstString)  == 6
親トピック: リスト関数


ListGetType Function

Action

Returns the type of a list as a number, where the return values represent the following list types:
  • 1: number
  • 2: float
  • 3: boolean
  • 4: string

Include file

List.bdh

Syntax

ListGetType(
   in theList) : number;
Parameter | Description
theList | List of number, boolean, float or string.

Return value

  • data type of theList (1, 2, 3, or 4)

Example

transaction TAListGetType
var
  lstNumber: list of number;
  lstFloat:  list of float;
  lstBoolean: list of boolean;
  lstString:  list of string;
begin
  writeln("number:  " + string(ListGetType(lstNumber)));
  writeln("float:   " + string(ListGetType(lstFloat)));
  writeln("boolean: " + string(ListGetType(lstBoolean)));
  writeln("string:  " + string(ListGetType(lstString)));
  writeln("number-constant:  " + string(LIST_TYPE_NUMBER));
  writeln("float-constant:   " + string(LIST_TYPE_FLOAT));
  writeln("boolean-constant: " + string(LIST_TYPE_BOOLEAN));
  writeln("string-constant:  " + string(LIST_TYPE_STRING));
end TAListGetType;

Output

number:  1
float:   2
boolean: 3
string:  4
number-constant:  1
float-constant:   2
boolean-constant: 3
string-constant:  4
親トピック: リスト関数


ListIndexOf Function

Action

Returns the index of the first occurrence of an element.

Include file

List.bdh

Syntax

ListIndexOf(
   in theList: list,
   in element: union): number;
Parameter | Description
theList | List of number, boolean, float or string.
element | Number, boolean, float or string. Has to conform with the type of theList.

Return value

  • the index of the first occurrence of element

Example

transaction TAListIndexOf
var
  lstNumber: list of number init 111, 2, 3, 111, 2, 3;
  retVal: number;
begin
  retVal := ListIndexOf(lstNumber, 111);
  writeLn("index of 111: " + string(retVal));

  ListRemoveAt(lstNumber, 1);
  retVal := ListIndexOf(lstNumber, 111);
  writeLn("index of 111: " + string(retVal));
end TAListIndexOf;

Output

index of 111: 1
index of 111: 3
親トピック: リスト関数


ListInsert Function

Action

Inserts a value into a list at a specific position.

Include file

List.bdh

Syntax

ListInsert(
   inout theList: list,
   in index: number,
   in element: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string, which contains a copy of element at position index as an out parameter.
index | The position at which element will be inserted.
element | Number, boolean, float or string. Has to conform with the type of theList.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListInsert
var
  lstNumber: list of number init 1, 2, 4, 5;
  retVal1: boolean;
  nr: number;
begin
  nr := 3;
  retVal1 := ListInsert(lstNumber, 3, nr);
  if(retVal1 = true) then
    nr := -1;
    ListGetAt(lstNumber, 3, nr);
    writeln("element at position 3: " + string(nr));
    writeln("length of list: " + string(ListGetLength(lstNumber)));
  else
    writeln("ListInsert did not work!");
  end;
end TAListInsert;

Output

element at position 3: 3
length of list: 5
親トピック: リスト関数


ListIsEqual Function

Action

Checks if two lists have the same elements, the same type, and the same length.

Include file

List.bdh

Syntax

ListIsEqual(
   in leftList: list,
   in rightList: list): boolean;
Parameter | Description
leftList | List of number, boolean, float or string.
rightList | List of number, boolean, float or string.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListIsEqual
var
  lstNumber: list of number init 1, 2, 3;
  lstNumber2: list of number init 1, 2, 3;
  retVal1: boolean;
begin
  retVal1 := ListIsEqual(lstNumber, lstNumber2);
  writeLn("the lists are equal: " + string(retVal1));
  ListAdd(lstNumber, 4);
  retVal1 := ListIsEqual(lstNumber, lstNumber2);
  writeLn("the lists are equal: " + string(retVal1));
end TAListIsEqual;

Output

the lists are equal: TRUE
the lists are equal: FALSE
親トピック: リスト関数


ListLastIndexOf Function

Action

Returns the index of the last occurrence of an element.

Include file

List.bdh

Syntax

ListLastIndexOf(
   in theList: list,
   in element: union): number;
Parameter | Description
theList | List of number, boolean, float or string.
element | Number, boolean, float or string. Has to conform with the type of theList.

Return value

  • the index of the last occurrence of element

Example

transaction TAListLastIndexOf
var
  lstNumber: list of number init 1, 2, 333, 4, 5, 333;
  retVal: number;
begin
  retVal := ListLastIndexOf(lstNumber, 333);
  writeLn("index of 333: " + string(retVal));

  ListRemoveAt(lstNumber, 6);
  retVal := ListLastIndexOf(lstNumber, 333);
  writeLn("index of 333: " + string(retVal));
end TAListLastIndexOf;

Output

index of 333: 6
index of 333: 3
親トピック: リスト関数


ListPrint Function

Action

Prints all elements of a list.

Include file

List.bdh

Syntax

ListPrint(
   theList: list) : boolean;
Parameter | Description
theList | List of number, boolean, float or string.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListPrint
var
  lNumber: list of number init 1, 2, 3;
  lString: list of string init "one", "two", "three";
  b: boolean;
begin
  b := ListPrint(lNumber);
  Print(string(b));
  b := ListPrint(lString);
  Print(string(b));
end TAListPrint;

Output

element 1: 1
element 2: 2
element 3: 3
TRUE
element 1: one
element 2: two
element 3: three
TRUE
親トピック: リスト関数


ListRemoveAt Function

Action

Removes an element at a specific position of a list.

Include file

List.bdh

Syntax

ListRemoveAt(
   inout theList: list,
   in index: number) : boolean;
Parameter | Description
theList | List of number, boolean, float or string, which contains one element less as an out parameter.
index | Index of theList.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListRemoveAt
var
  lstNumber: list of number init 1, 2, 3, 666, 4, 5;
  retVal1: boolean;
  nr: number;
begin
  retVal1 := ListRemoveAt(lstNumber, 4);
  if(retVal1 = true) then
    nr := -1;
    ListGetAt(lstNumber, 4, nr);
    writeln("element at position 4: " + string(nr));
    writeln("length of list: " + string(ListGetLength(lstNumber)));
  else
    writeln("ListRemoveAt did not work!");
  end;
end TAListRemoveAt;

Output

element at position 4: 4
length of list: 5
親トピック: リスト関数


ListRemoveFirst Function

Action

Removes the first element of a list.

Include file

List.bdh

Syntax

ListRemoveFirst(
   inout theList: list) : boolean;
Parameter | Description
theList | List of number, boolean, float or string, which contains one element less as an out parameter.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListRemoveFirst
var
  lstNumber: list of number init 111, 1, 2, 3, 4, 5;
  retVal1: boolean;
  nr: number;
begin
  retVal1 := ListRemoveFirst(lstNumber);
  if(retVal1 = true) then
    nr := -1;
    ListGetFirst(lstNumber, nr);
    writeln("element at position 1: " + string(nr));
    writeln("length of list: " + string(ListGetLength(lstNumber)));
  else
    writeln("ListRemoveFirst did not work!");
  end;
end TAListRemoveFirst;

Output

element at position 1: 1
length of list: 5
親トピック: リスト関数


ListRemoveLast Function

Action

Removes the last element of a list.

Include file

List.bdh

Syntax

ListRemoveLast(
   inout theList: list) : boolean;
Parameter | Description
theList | List of number, boolean, float or string, which contains one element less as an out parameter.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListRemoveLast
var
  lstNumber: list of number init 1, 2, 3, 4, 5, 555;
  retVal1: boolean;
  nr: number;
begin
  retVal1 := ListRemoveLast(lstNumber);
  if(retVal1 = true) then
    nr := -1;
    ListGetLast(lstNumber, nr);
    writeln("element at last position: " + string(nr));
    writeln("length of list: " + string(ListGetLength(lstNumber)));
  else
    writeln("ListRemoveLast did not work!");
  end;
end TAListRemoveLast;

Output

element at last position: 5
length of list: 5
親トピック: リスト関数


ListReplaceAll Function

Action

Replaces all elements of a list with a specific value by another value.

Include file

List.bdh

Syntax

ListReplaceAll(
   inout theList: list,
   in elementFromVal: union,
   in elementToVal: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string, which contains elements with value elementToVal instead of elementFromVal as an out parameter.
elementFromVal | Number, boolean, float or string to be replaced.
elementToVal | Number, boolean, float or string to replace elementFromVal with. Has to conform with the type of elementFromVal and theList

Return value

  • true if successful
  • false otherwise

Example

transaction TAListReplaceAll
var
  lstNumber: list of number init 111, 2, 3, 111, 2, 3, 111;
  retVal: boolean;
begin
  retVal := ListReplaceAll(lstNumber, 111, 1);
  if(retVal) then
    ListPrint(lstNumber);
  end;
end TAListReplaceAll;

Output

element 1: 1
element 2: 2
element 3: 3
element 4: 1
element 5: 2
element 6: 3
element 7: 1
親トピック: リスト関数


ListSetAt Function

Action

Sets a specified value at a specific position of a list.

Include file

List.bdh

Syntax

ListSetAt(
   in theList: list,
   in index: number,
   in val: union) : boolean;
Parameter | Description
theList | List of number, boolean, float or string.
index | Position of theList at which to replace the value.
val | Number, boolean, float or string value to replace at index. Has to conform with the type of theList.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListSetAt
var
  lstNumber: list of number init 1, 2, 3, 4, 5;
  retVal1, retVal2: boolean;
  nr: number;
begin
  retVal1 := ListSetAt(lstNumber, 3, 333);
  retVal2 := ListGetAt(lstNumber, 3, nr);
  if(retVal1 = true) and (retVal2 = true) then
    writeln("element at position 3: " + string(nr));
  else
    writeln("ListSetAt or ListGetAt did not work!");
  end;
end TAListSetAt;

Output

element at position 3: 333
親トピック: リスト関数


ListWriteBin Function

Action

Writes all elements of a string list to the .wrt file.

Include file

List.bdh

Syntax

ListWriteBin(
   theList: list of string) : boolean;
Parameter | Description
theList | List of string.

Return value

  • true if successful
  • false otherwise

Example

transaction TAListWriteBin
var
  lStringBin: list of string init "\h001122", "\h334455", "\h667788";
  lString: list of string init "abc", "ABC";
begin
  ListWriteBin(lStringBin);
  ListWriteBin(lString);
end TAListWriteBin;

Output

00000000  ++"               00 11 22
00000000  3DU               33 44 55
00000000  fw+               66 77 88
00000000  abc               61 62 63
00000000  ABC               41 42 43
親トピック: リスト関数


Load Test Control Functions

Silk Performer provides a number of functions that retrieve information about the currently active load test. For example, to get the user name, or the name of the computer where the simulation of the user has been started.

  • GetAgent Function
    Retrieves the agent name.
  • GetAgentId Function
    Retrieves a unique agent ID.
  • GetController Function
    Retrieves the controller name for the current simulation.
  • GetDataFilePath Function
    Returns the absolute path to a file in the data files section of a load-test script.
  • GetDefinedUserTypeVus Function
    Returns the maximum number of virtual users defined for the specified user type in the current workload.
  • GetDirectory Function
    Retrieves the directory where specified types of Silk Performer files are located.
  • GetFunctionName Function
    Returns the name of the currently executing BDL function.
  • GetLoadtest Function (Deprecated)
    Retrieves the number of the load test generated for the current simulation.
  • GetLoadtestName Function
    Returns the output directory name specified on starting the load test.
  • GetProfile Function
    Retrieves the name of the settings profile that the current virtual user uses.
  • GetProject Function
    Retrieves the name of the current load-test project.
  • GetRuntimes Function
    Retrieves the number of virtual users scheduled for the load test.
  • GetScriptName Function
    Returns the name of the currently executing BDL script.
  • GetTransactionName Function
    Returns the name of the currently executing transaction.
  • GetUser Function
    Retrieves the user name.
  • GetUsergroup Function
    Retrieves the name of the user group to which the current virtual user belongs.
  • GetUserId Function
    Retrieves a unique ID (number) for each current virtual user in a load-test.
  • GetUserIdOnAgent Function
    Retrieves a unique ID (number) per current virtual user on an agent (machine).
  • GetWorkload Function
    Retrieves the name of the active workload which the current virtual user executes.
  • GetWorkloadModel Function
    Retrieves the name of the active workload which the current virtual user executes.
親トピック: General Functions


GetAgent Function

Action

Retrieves the agent name. The agent name is the name of the computer where the simulation for the current user has been started.

Include file

Kernel.bdh

Syntax

GetAgent(): string;

Return value

The name of the agent.

Example

dcltrans
  transaction TGetAgent
  var
    sAgent: string;
  begin
    sAgent := GetAgent();
    write("agent = "); write(sAgent); writeln;
  end TGetAgent;

Output

agent = LocalHost
親トピック: Load Test Control Functions


GetAgentId Function

Action

Retrieves a unique ID for the agent running the benchmark.

Include file

Kernel.bdh

Syntax

GetAgentId() : number;

Return value

Unique identification number for the agent running the benchmark. The ID is 0 for the first agent, 1 for the second agent, and n-1 for the nth agent.

Example

dcltrans
  transaction TMain
  var
    nAgentId: number;
  begin
    nAgentId := GetAgentId();
    write("agent ID = "); write(nAgentId); writeln;
  end TMain;
親トピック: Load Test Control Functions


GetController Function

Action

Retrieves the controller name for the current simulation. The controller name is the name of the controller computer from which all agents were started.

Include file

Kernel.bdh

Syntax

GetController(): string;

Return value

The name of the controller.

Example

dcltrans
  transaction TGetController
  var
    sController: string;
    beginsController := GetController();write("controller = "); write(sController); writeln;
  end TGetController;

Output

controller = BEATLE
親トピック: Load Test Control Functions


GetDataFilePath Function

Action

This method returns the absolute path to a file in the data files section of a load-test script. As there are different locations for the data files depending on where the load-test is executed (localhost or agent) this function always returns the absolute path to a data file.

Include file

Kernel.bdh

Syntax

GetDataFilePath( in  sDataFile  : string,
                 out sPath      : string,
                 in  nSize      : number optional ): boolean;

Return value

  • true if successfully

  • false otherwise

Parameter | Description
sDataFile | Name of the data file of which the absolute path should be returned.
sPath | String buffer that will receive the absolute path of the file.
nSize | Size of the string buffer passed in sPath (optional).

Example

dcltrans
  transaction TMain
  var
    sPath : string;
    hFile : number;
  begin
    GetDataFilePath("testdata.txt", sPath);
    FileCSVLoad(hFile, sPath, ",");
    ...
  end TMain;
親トピック: Load Test Control Functions


GetDefinedUserTypeVus Function

Action

Returns the maximum number of virtual users defined for the specified user type in the current workload, specified by script name, user group name, and profile name. The function returns 0 if the user type is disabled in the workload.

Include file

Kernel.bdh

Syntax

GetDefinedUserTypeVus(ScriptName    : in string,
                      UsergroupName : in string,
                      ProfileName   : in string) : number;

Return value

Maximum number of virtual users defined for the specified user type in the current workload

Parameter | Description
ScriptName | Script name as defined in the user type.
UsergroupName | User group name as defined in the user type.
ProfileName | Profile name as defined in the user type.

Example

dcltrans
  transaction TMain
  var
  begin
    Print(string(GetDefinedUserTypeVus("DefaultScript.bdf", "VUser", "Profile1")));
  end TMain;

Output

40
親トピック: Load Test Control Functions


GetDirectory Function

Action

Retrieves the directory where specified types of Silk Performer files are located. Do not use GetDirectory to locate data files that are referenced by the project. Use the function GetDataFilePath instead.

Include file

Kernel.bdh

Syntax

GetDirectory( in  nDirectory : number,
              out sDir       : string,
              in  nDirSize   : number optional );
Parameter | Description
nDirectory

Specifies which directory setting to retrieve. This parameter can be one of the following flags:

  • DIRECTORY_HOME. Retrieves the Silk Performer home directory.

  • DIRECTORY_SOURCE. Retrieves the default directory for opening and saving load-test scripts.

  • DIRECTORY_RESULT. Retrieves the directory where all result files are saved.

  • DIRECTORY_INCLUDE. Retrieves the directory where all include files are located.

  • DIRECTORY_CUSTOM_INCLUDE. Retrieves the directory where all the custom include files are located.

  • DIRECTORY_DATA. Retrieves the directory where all user data files, certificate files and random data files are located.

  • DIRECTORY_CUSTOM_DATA. Retrieves the directory where all custom user data files, certificate files and random data files are located.

  • DIRECTORY_PROJECT. Retrieves the directory where the project file is located. This location is different on controller and agent machine.

  • DIRECTORY_TEMP. Retrieves the directory where temporary files can be stored during a load test. This directory will be automatically deleted after the test run.

注: Agent computers create temporary directories for load test execution. Only the parameters DIRECTORY_HOME, DIRECTORY_SOURCE, and DIRECTORY_INCLUDE will return the same results from an agent as from the controller computer.
sDir | String receiving the directory.
nDirSize | Number of characters to copy into sDir. (optional, default is STRING_COMPLETE)

Example

dcltrans
  transaction TMain
  var
    sDirectory: string;
  begin
    GetDirectory(DIRECTORY_HOME, sDirectory);
    writeln(sDirectory),
  end TMain;
親トピック: Load Test Control Functions


GetFunctionName Function

Action

Returns the name of the currently executing BDL function. If it is called within an error handler, it will return the name of the function where the error was raised.

Include file

Kernel.bdh

Syntax

GetFunctionName( ) : string;

Return value

The name of the function.

Example

dclevent
  handler ErrorHandler <EVENT_RAISE_ERROR>
  var
    sTrac : string;
    sFunc : string;
  begin
    sTrac := GetTransactionName();
    sFunc := GetFunctionName();
    write("error raised in transaction " + sTrac + " in function " + sFunc);
    throw;
  end ErrorHandler;

dclfunc
  function f1
  begin
    // WebPageUrl will raise an error
    WebPageUrl("http://Does.not.exist");
  end f1;

dcltrans
  transaction TRaiseError
  var
    sBuf : string;
  begin
    f1();
  end TRaiseError;

Output

Error raised in transaction TRAISEERROR in function F1.
親トピック: Load Test Control Functions
関連資料
Event Handler Section
GetTransactionName Function


GetLoadtest Function (Deprecated)

Action

Retrieves the number of the load test generated for the current simulation. All results in the repository of the current load test are associated with this ID number.
注: This function only returns a valid number if the Silk Performer repository (deprecated) is installed, otherwise it returns 0, since the ID number of a load test is repository-specific. To retrieve a list of the load test names however, you can use the GetDirectory function with the DIRECTORY_RESULT parameter. This function only returns meaningful results when used on the controller machine.

Include file

Kernel.bdh

Syntax

GetLoadtest() : number;

Return value

The ID number of the load test.

Example

dcltrans
  transaction TGetLoadtest
  var
    nLoadtest : number;
  begin
    nLoadtest := GetLoadtest();
    write("load test = "); write(nLoadtest); writeln;
  end TGetLoadtest;

Output

load test = 57
親トピック: Load Test Control Functions


GetLoadtestName Function

Action

Returns the output directory name specified on starting the load test.

If the test runs on the local machine, this info could be extracted from the result of GetDirectory(DIRECTORY_RESULT). On an agent machine, however, GetDirectory(DIRECTORY_RESULT) returns a local directory on the agent machine.

Include file

Kernel.bdh

Syntax

GetLoadtestName( out sName     : string,
                 in  nNameSize : number optional );
Parameter | Description
sName | String receiving the load test name.
nNameSize | Number of characters to copy into sDir (optional, default is STRING_COMPLETE).

Example

dcltrans
  transaction TMain
  var
    sName: string;
  begin
    GetLoadtestName(sName);
    writeln(sName),
  end TMain;
親トピック: Load Test Control Functions


GetProfile Function

Action

Retrieves the name of the settings profile that the current virtual user uses.

Include file

Kernel.bdh

Syntax

GetProfile(): string;

Return value

The name of the profile.

Example

dcluser
  user
    TestUser
  transactions
    TGetProfile : 1;
  dcltrans

  transaction TGetProfile
  var
    sProfile: string;
  begin
    sProfile := GetProfile();
    write("profile = "); write(sProfile); writeln;
  end TGetProfile;

Output

profile = Loadtest
親トピック: Load Test Control Functions


GetProject Function

Action

Retrieves the name of the current load-test project.

Include file

Kernel.bdh

Syntax

GetProject(): string;

Return value

The name of the project.

Example

dcltrans
  transaction TGetProject
  var
    sProject: string;
  begin
    sProject := GetProject();
    write("project = "); write(sProject); writeln;
  end TGetProject;
親トピック: Load Test Control Functions


GetRuntimes Function

Action

Retrieves the number of virtual users scheduled for the load test. The number is not decreased when a virtual user is stopped or finished.

Include files

Kernel.bdh

Syntax

GetRuntimes(): number;

Return value

The number of virutal users scheduled for the load test.

Example

dcluser
  user
    TestUser
  transactions
    TMain : 1;
  dcltrans
  transaction TMain
  var
    nRuntimes: number;
  begin
    nRuntimes := GetRuntimes();
    write("number of simulators started: ");
    write(nRuntimes); writeln;
  end TMain;
親トピック: Load Test Control Functions


GetScriptName Function

Action

Returns the name of the currently executing BDL script with the path and the extension.

Include file

Kernel.bdh

Syntax

GetScriptName( in uOptions : number optional ): string;

Return value

The name of the currently executing BDL script.

Parameter Description
uOptions

(optional)

  • FILENAME_FULL: (default) Returns expanded absolute filename of the script.

  • FILENAME_NOPATH: Returns script filename without path.

  • FILENAME_NOEXTENSION: Returns absolute filename without the BDF extension.

  • FILENAME_SIMPLE: Returns script filename without path and extension.

Example

dclevent
  handler ErrorHandler <EVENT_RAISE_ERROR>
  var
    sTrac   : string;
    sFunc   : string;
    sScript : string;
  begin
    sTrac   := GetTransactionName();
    sFunc   := GetFunctionName();
    sScript := GetScriptName();
    print("error raised in transaction " + sTrac + " in function " + sFunc + " in script " + sScript);
    throw;
  end ErrorHandler;

dclfunc
  function f1
  begin
    //WebPageUrl will raise an error
    WebPageUrl("http://Does.not.exist");
  end f1;

dcltrans
  transaction TRaiseError
  begin
    f1();
  end TRaiseError;

Output

error raised in transaction TRaiseError in function f1 in script c:\tests\ScriptName\ScriptName.bdf
親トピック: Load Test Control Functions


GetTransactionName Function

Action

Returns the name of the currently executing transaction. If it is called within an error handler, it will return the name of the transaction where the error was raised.

Include file

Kernel.bdh

Syntax

GetTransactionName(  ): string;

Return value

The name of the transaction.

Example

dclevent
  handler ErrorHandler <EVENT_RAISE_ERROR>
  var
    sBuf : string;
  begin
    sBuf := GetTransactionName();
    write("error raised in transaction " + sBuf);
    throw;
  end ErrorHandler;

dcltrans
  transaction TRaiseError
  begin
    // WebPageUrl will raise an error
    WebPageUrl("http://Does.not.exist");
  end TRaiseError;

Output

Error raised in transaction TRaiseError.
親トピック: Load Test Control Functions
関連資料
Event Handler Section
GetFunctionName Function


GetUser Function

Action

Retrieves the name of the current user. The user name returned consists of the name of the user group defined in the workload section of the script concatenated with a serial number indicating the number of the user within the user group, with the two joined by an underscore character.

Include file

Kernel.bdh

Syntax

GetUser(): string;

Return value

The name of the current user.

Example

dcluser
  user
    TestUser
  transactions
    TGetUser : 1;

dcltrans
  transaction TGetUser
  var
    sUser: string;
  begin
    sUser := GetUser();
    write("user = "); write(sUser); writeln;
  end TGetUser;

Output

user = TestUser-<ProfileName>_1
親トピック: Load Test Control Functions


GetUsergroup Function

Action

Retrieves the name of the user group to which the current virtual user belongs.

Include file

Kernel.bdh

Syntax

GetUsergroup(): string;

Return value

The name of the user group.

Example

dcluser
  user
    TestUser
  transactions
    TGetUsergroup : 1;
  dcltrans

  transaction TGetUsergroup
  var
    sUsergroup: string;
  begin
    sUsergroup := GetUsergroup();
    write("user group = "); write(sUsergroup); writeln;
  end TGetUsergroup;

Output

user group = TestUser
親トピック: Load Test Control Functions


GetUserId Function

Action

Retrieves a unique ID (number) for each current virtual user in a load-test. The ID is 1 for the first virtual user, 2 for the second and n for the nth virtual user.

Include file

Kernel.bdh

Syntax

GetUserId(): number;

Return value

The unique identification number of the user.

Example

dcluser
  user
    TestUser
  transactions
    TGetUserId : 1;
dcltrans
  transaction TGetUserId
  var
    nUserId: number;
  begin
    nUserId := GetUserId();
    write("user ID = "); write(nUserId); writeln;
  end TGetUserId;

Output

user ID = 1
親トピック: Load Test Control Functions


GetUserIdOnAgent Function

Action

Retrieves a unique ID (number) per current virtual user on an agent (machine). The ID is 1 for the first virtual user, 2 for the second and n for the nth virtual user. The number is unique per agent, but not across agents.

Include file

Kernel.bdh

Syntax

GetUserIdOnAgent(): number;

Return value

The unique identification number of the user.

Example

dcluser
  user
    TestUser
  transactions
    TGetUserIdOnAgent : 1;
dcltrans
  transaction
    TGetUserIdOnAgent
  var
    nUserIdOnAgent: number;
  begin
    nUserIdOnAgent := GetUserIdOnAgent();
    write("user ID on agent = "); write(nUserIdOnAgent); writeln;
  end TGetUserIdOnAgent;

Output

user ID on agent = 1
親トピック: Load Test Control Functions


GetWorkload Function

Action

Retrieves the name of the active workload which the current virtual user executes.

Include file

Kernel.bdh

Syntax

GetWorkload(): string;

Return value

The name of the workload.

Example

dcluser
  user
    TestUser
  transactions
    TGetWorkload : 1;
dcltrans
  transaction TGetWorkload
  var
    sWorkload: string;
  begin
    sWorkload := GetWorkload();
    write("active workload = "); write(sWorkload); writeln;
  end TGetWorkload;

Output

active workload = LoadTest
親トピック: Load Test Control Functions
関連資料
GetWorkloadModel Function


GetWorkloadModel Function

Action

Retrieves the type of the active workload which the current virtual user executes.

Include file

Kernel.bdh

Syntax

GetWorkloadModel( out sWorkloadType :string optional,
                  in  nCopy         : number ptional ): number;

Return value

The workload model type as a numeric constant value. Possible return values are:

  • WORKLOAD_STEADYSTATE

  • WORKLOAD_INCREASING

  • WORKLOAD_DYNAMIC

  • WORKLOAD_QUEUING

  • WORKLOAD_MONITORING

  • WORKLOAD_ALLDAY

  • WORKLOAD_VERIFICATION

  • WORKLOAD_SINGLEUSER

Parameter | Description
sWorkloadType | Buffer to receive the workload type string.
nCopy | Number of characters to copy to the buffer (optional, default is STRING_COMPLETE).
注: If GetWorkloadModel returns WORKLOAD_QUEUING, the inout parameter sWorkloadType may not always carry the string "Queuing". The workload models "Try-Script" and "Baseline Test" are as well handled as a queuing workload.

Example

dcluser
  user
    TestUser
  transactions
    TGetWorkload : 1;

dcltrans
  transaction TGetWorkload
  var
    sWorkload: string;
  begin
    if GetWorkloadModel(sWorkload) = WORKLOAD_QUEUING then
      write("active workload type = "); write (sWorkload); writeln;
    else
      write("No queuing workload set.")
    end
  end TGetWorkload;

Output

active workload type = Try Script
親トピック: Load Test Control Functions
関連資料
GetWorkload Function


Logging Functions Overview

Depending on how you configure Silk Performer, log files can be generated during a test. These files report all function calls invoked by the transactions during the simulation and can be useful for debugging your test scripts. Each user writes a separate log file. These files are text files named as follows:

<agentname>_<usergroupname>_<usernumber>.log

A log file may contain the following types of session and error information:

  • Session ID

  • Data received in Kb

  • Elapsed session time

  • Function / Error / Comment

  • チェックポイント関数
    スクリプト内のチェックポイントを定義して、負荷テスト中に単一ユーザーのテストが成功したかどうかを監視できます。
  • GetLogLevel Function
    Retrieves the simulation log level.
  • GetLogOption Function
    Retrieves the current logging options.
  • Print Function
    Prints additional information to the output.
  • PrintData Function
    Prints additional information (data) to the output.
  • PrintFunction Function
    Prints additional information to the output.
  • PrintInfo Function
    Prints additional information to the output.
  • RepMessage Function
    Writes a message to the repository.
  • SetLogOption Function
    Specifies logging options.
  • SetLogLevel Function
    Sets the simulation log level.
  • TrueLogInfo Function
    Logs an informational string to a synthetic TrueLog node of the virutal users TrueLog file.
  • TrueLogSection Function
    Adds additional structure to complex scripts.
  • Write Statement
    Outputs the value of Expr1 with field width Expr2 and precision Expr3 to the WRT file of the user executing the write statement.
  • WriteData Function
    Writes a specified number of bytes to the output file (.wrt) of the current virtual user.
  • WriteErr Function
    Writes to the error file of the current virtual user.
  • WriteLog Function
    Writes to the log file of the current user.
親トピック: General Functions
関連概念
Error-Handling Functions


チェックポイント関数

アクション

負荷テスト中に単一ユーザーの進捗状況と成否を、仮想ユーザーのすべての出力を表示する方法よりも正確な方法で監視できるようにするには、チェックポイントを使用して、ユーザーが定義したセクションにトランザクションを分類します。 チェックポイントのメッセージは、Try Scripts の実行中および単一の仮想ユーザーの出力が有効な場合は負荷テスト中に出力ウィンドウに表示されます。 チェックポイントのメッセージの出力は、監視ツールバーの チェックポイント ボタンを使用して有効または無効にできます。

チェックポイントによって出力ウィンドウに表示されるメッセージを指定できます。 また、チェックポイントのタイマを設定して、先行するチェックポイントからチェックポイント関数の呼び出しまでの時間を測定できます。 トランザクションの最初のチェックポイントは、トランザクションの開始時間からチェックポイント関数の呼び出し時間までの時間を測定します。 エラー、警告、または正常に実行されたことを伝えるメッセージが、先行するチェックポイントからチェックポイント関数の呼び出しまでの間に発生した場合、チェックポイント メッセージのアイコンで、この間隔に発生したすべてのメッセージの中で最も高い深刻度のものが強調表示されます (エラー > 警告 > 正常)。
重要: チェックポイント名は、負荷テストの中で一意である必要があります。

インクルード ファイル

kernel.bdh

構文

    Checkpoint(
      sCheckpointName : in string,
      sMessage : in string optional,
      bUseTimer : in boolean optional) : boolean;

パラメータ | 説明
sCheckpointName | チェックポイントの名前です。 すべての負荷テストの中で一意である必要があります。
sMessage | 出力ウィンドウおよびログ ファイルに表示される追加メッセージです。
bUseTimer | true の場合は、チェックポイント名が付いたタイマが作成されます。 タイマは、先行するチェックポイントからチェックポイント関数の呼び出しまでの時間を測定します。 トランザクションの最初のチェックポイントは、トランザクションの開始時間からチェックポイント関数の呼び出し時間までの時間を測定します。

戻り値

  • true (成功した場合)
  • false (それ以外の場合)

例

benchmark BenchmarkName

use "kernel.bdh"
use "webapi.bdh"

dcluser
  user
    VirtUser
  transactions
    TMain       : 1;

dcltrans

  transaction TMain
  begin
    Checkpoint("checkpoint1s", "Hello World!", true);

    PrintData("hello", "the data");
    PrintFunction("func", "info");

    RaiseError(CUSTOM_ERROR, "This is a warning!", SEVERITY_WARNING);
    ThinkTime(2.0);

    MeasureStart("commonMeasure");
    Wait(0.5);
    MeasureStop("commonMeasure");

    Checkpoint("checkpoint2w", "2", true);

    ThinkTime(3.0);

    RaiseError(CUSTOM_ERROR, "This is an error!", SEVERITY_ERROR);

    Checkpoint("checkpoint3e", "this line should be displayed in red", true);

    ThinkTime(0.5);

    Checkpoint("checkpoint4s", "");

  end TMain;
親トピック: Logging Functions Overview


GetLogLevel Function

Action

Retrieves the actual simulation log level. The log level determines the level of detail of information written to .log files. Values between 0 (no logging) and 4 (logging all details) are valid.

注: This function will be removed in future versions and therefore should not be used.

Include file

Kernel.bdh

Syntax

GetLogLevel(): number;

Return value

current logging level (see Logging Levels)

Example

dcltrans
  transaction TGetLogLevel
  var
    nLogLevel: number;
  begin
    nLogLevel := GetLogLevel();
    write("log level = "); write(nLogLevel); writeln;
  end TGetLogLevel;

Output

log level = 2
親トピック: Logging Functions Overview


GetLogOption Function

Action

Retrieves the current setting whether to generate log files (.log), and if so, which kind of information to write to the files. Log files contain information about timers, transactions performed by a user, and function calls invoked by the transactions.

Include file

Kernel.bdh

Syntax

GetLogOption(): number;

Return value

Current logging option. See the SetLogOption function for a description of all flags this function may return.

Example

dcltrans
  transaction TMain
  var
    nOption: number;
  begin
    nOption := GetLogOption();
    if nOption & OPT_LOG_TRANSACTIONS = OPT_LOG_TRANSACTIONS then
      write("transactions are included in the log file")
    else
      write("transactions are not included in the log file")
    end;
  writeln;
end TMain;
親トピック: Logging Functions Overview
関連資料
SetLogOption Function


Print Function

Action

Prints additional information to the output that displays on the Virtual User tab in the Output pane. Additionally, the data is written to the log file.

Include file

Kernel.bdh

Syntax

Print( in sMsg         : string,
       in nDisplayType : number optional,
       in nColor       : number optional);
Parameter | Description
sMsg | The information (message) that is printed in the Text column of the Virtual User tab in the Output pane.
nDisplayType

Specifies which option(s) must be set in the upper part of the Monitor window so that the information is generated (optional). If the message does not display on the Virtual User tab in the Output pane, make sure to enable all respective filters.

  • OPT_DISPLAY_ERRORS

  • OPT_DISPLAY_TRANSACTIONS

  • OPT_DISPLAY_TIMERS

  • OPT_DISPLAY_FUNCTIONS

  • OPT_DISPLAY_INFO

  • OPT_DISPLAY_DATA

  • OPT_DISPLAY_ALL. Generates the message independent of the Monitor window settings (default).

nColor

Color used to print the information (optional). Defined colors are:

  • TEXT_BLUE

  • TEXT_RED

  • TEXT_BLACK

  • TEXT_MAGENTA (default)

  • TEXT_GREEN

  • TEXT_GRAY

Example

dcltrans
  transaction TPrint
  begin
    ...
    // display the message in red
    Print("Error executing SQL command", OPT_DISPLAY_ALL, TEXT_RED);
  end TPrint;

Output

Error executing SQL command

Sample scripts

Trans.bdf, MutexLogin.bdf

親トピック: Logging Functions Overview


PrintData Function

Action

Prints additional information (data) to the output that displays on the Virtual User tab in the Output pane. Additionally, the data is written to the log file.

Include file

Kernel.bdh

Syntax

PrintData( in sFuncName : string,
           in sData     : string );
Parameter | Description
sFuncName | The function name that is printed in the Text column of the Virtual User tab in the Output pane.
sData | The information that is printed in the Info column of the Virtual User tab in the Output pane.

Example

dcltrans
  transaction TMain
  begin
    ...
    PrintFunction("MyFunction", "function info in green");
    PrintInfo("MyFunction", "additional info in magenta");
    PrintData("MyFunction", "additional info in blue");
  end TMain;
親トピック: Logging Functions Overview


PrintFunction Function

Action

Prints additional information to the output that displays on the Virtual User tab in the Output pane. Additionally, the data is written to the log file.

Include file

Kernel.bdh

Syntax

PrintInfo( in sFuncName  : string,
           in sInfo      : string );
Parameter | Description
sFuncName | The function name that is printed in the Text column of the Virtual User tab in the Output pane.
sInfo | The information that is printed in the Info column of the Virtual User tab in the Output pane.

Example

dcltrans
  transaction TMain
  begin
    ...
    PrintFunction("MyFunction", "function info in green");
    PrintInfo("MyFunction", "additional info in magenta");
    PrintData("MyFunction", "additional info in blue");
  end TMain;
親トピック: Logging Functions Overview


PrintInfo Function

Action

Prints additional information to the output that displays on the Virtual User tab in the Output pane. Additionally, the data is written to the log file.

Include file

Kernel.bdh

Syntax

PrintInfo( in sFuncName  : string,
           in sInfo      : string );
Parameter | Description
sFuncName | The function name that is printed in the Text column of the Virtual User tab in the Output pane.
sInfo | The information that is printed in the Info column of the Virtual User tab in the Output pane.

Example

dcltrans
  transaction TMain
  begin
    ...
    PrintFunction("MyFunction", "function info in green");
    PrintInfo("MyFunction", "additional info in magenta");
    PrintData("MyFunction", "additional info in blue");
  end TMain;
親トピック: Logging Functions Overview


RepMessage Function

Action

Writes a message to the following files:

  • .ERR file (if severity is SEVERITY_ERROR, SEVERITY_TRANS_EXIT, or SEVERITY_PROCESS_EXIT)

  • .LOG file

  • .RPT file

The message will be counted as an error if SEVERITY_ERROR is the selected severity.

Include file

Kernel.bdh

Syntax

RepMessage( in sMessage  : string,
            in nSeverity : number optional := SEVERITY_ERROR );
Parameter | Description
sMessage | Message that will be written to the file.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
  begin
    ...
    RepMessage("Data successfully transferred", SEVERITY_SUCCESS);
  end TMain;
親トピック: Logging Functions Overview


SetLogOption Function

Action

Specifies whether to generate log files (.log), and if so, which kind of information to write to the files. Log files contain information about timers, transactions performed by a user, and function calls invoked by the transactions. A separate log file is generated for each virtual user.

注: This function overrides the settings in the General tab of the Profile Settings - Results dialog.

Include file

Kernel.bdh

Syntax

SetLogOption( in nOption : number );
Parameter Description
nOption

Logging option. If this parameter is set to 0, no log files are generated. Otherwise, if any combination of the following flags is passed to the function, a separate log file for each virtual user is generated.

  • OPT_LOG_ALL. Include all available types of information

  • OPT_LOG_TRANSACTIONS. Include an overview of all transactions a user performs

  • OPT_LOG_TIMERS. Include information of automatic and custom timers

  • OPT_LOG_APICALLS. Include an overview of all Silk Performer API calls a user performs

  • OPT_LOG_INFORMATIONAL. Include additional information, for example, connection information

  • OPT_LOG_DATA. Include data exchanged with the server

  • OPT_LOG_NONPRINTABLECHAR. Display in the log file all nonprintable characters as dots.

Example

dcltrans
  transaction TInit
  begin
    // include in the log file all transaction and
    // API function calls a user performs
    SetLogOption(OPT_LOG_TRANSACTIONS | OPT_LOG_APICALLS);
  end TInit;
親トピック: Logging Functions Overview
関連資料
GetLogOption Function


SetLogLevel Function

Action

Sets the simulation log level. The log level determines the level of detail of information written to .log files. Values between 0 (no logging) and 4 (logging all details) are valid.

注: This function will be removed in future versions and therefore should not be used.

Include file

Kernel.bdh

Syntax

SetLogLevel( in nLogLevel : number );
Parameter | Description
nLogLevel | Logging level (see Logging Levels)

Example

dcltrans
  transaction TSetLogLevel
  begin
    SetLogLevel(2);
    write("log level set to 2"); writeln;
  end TSetLogLevel;

Output

log level set to 2
親トピック: Logging Functions Overview


TrueLogInfo Function

Action

Logs an informational string to a synthetic TrueLog node of the virtual users TrueLog file. You can specify the name of the TrueLog node with the sNodeName parameter. When the node is selected in TrueLog Explorer, the informational string is analyzed and TrueLog Explorer automatically chooses the rendering method for the informational string. For example: When passing XML data to the function, TrueLog Explorer will use the XML view to display the string.

The informational string is used for logging to the TrueLog, like the print or write functions. It is especially useful for debugging and visualization purposes.

Include file

kernel.bdh

Syntax

TrueLogInfo( in sInfo     : string,
             in sNodeName : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sInfo | Informational string displayed by TrueLog Explorer
sNodeName | The name of the node in the TrueLog Explorer tree

Example

benchmark SilkPerformerRecorder

use "WebAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans
  transaction TMain
  var
    sData: string;
  begin

    TrueLogInfo("some information");

    TrueLogInfo("some more information", "more information");

    TrueLogInfo("<Object>"
                  "<Array>"
                    "<Integer>1</Integer>"
                    "<Integer>2</Integer>"
                    "<Integer>3</Integer>"
                    "<Integer>4</Integer>"
                  "</Array>"
                "</Object>", "xml data");

    WebParseDataBoundEx(sData);
    WebPageUrl("http://demo.borland.com/");
    TrueLogInfo(sData, "html data");

  end TMain;
親トピック: Logging Functions Overview


TrueLogSection Function

Action

Adds structure to complex scripts and helps to logically divide scripts into smaller named parts. These named parts can be individually expanded and collapsed in the TrueLog Explorer tree, hereby reducing complexity and simplifying the visual structure of a TrueLog file.

Additionally, a comment and/or screenshot can be added to a TrueLogSection. This additional content will also be rendered by TrueLog Explorer. TrueLogSection names do not need to be unique. Silk Performer automatically adds TrueLog sections during recording.

To manually add a TrueLog section, click Insert TrueLog Section on the Silk Performer Recorder. To add a recording screenshot, check the Store screenshot check box in the TrueLog Section dialog, and click OK. When you close the dialog, a screenshot with a unique ID is stored in the Record TrueLog. During replay, a reference to this screenshot is stored in the Replay TrueLog.

Include file

kernel.bdh

Syntax

TrueLogSection( in sSectionName  : string,
                in sComment      : string optional,
                in sScreenshotId : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSectionName | The name of the TrueLog section.
sComment | An optional message that is displayed in the output window and the log file.
sScreenshotId | Id of a screenshot that was taken during recording.

Example

benchmark SilkPerformerRecorder

use "WebAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans
  transaction TMain
  var
  begin
    WebPageUrl("http://demo.borland.com/", "Unnamed page");

    TrueLogSection("Section: Web Service", "The Borland sample Web Service\r\n");

    WebPageLink("Borland Sample Web Service", "Service1 Web Service");
    WebPageLink("A_ReadMeFirst", "Service1 Web Service (#1)");

    WebPageBack(2);

    TrueLogSection("Section: Test Sites", "entering test sites", "Screenshot_6133563");

    WebPageLink("Test Sites", "SilkPerformer Test Site");
    WebPageLink("ShopIt V 6.0", "ShopIt - Greetings");
  end TMain;
親トピック: Logging Functions Overview


WriteData Function

Action

Writes a specified number of bytes to a new line of the output file (.wrt) of the virtual user. This function can be used to write binary data in a readable notation.

注: Output files (.wrt) are generated only if the generation of these files is enabled in the General tab of the Profile Settings - Results dialog.

Include file

Kernel.bdh

Syntax

WriteData( in sData    : string,
           in nDataLen : number optional,
           in nOption  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sData | String buffer containing the data to write to the output file.
nDataLen | Number of bytes to be written to the output file (optional).
nOption

Specifies the format used for writing (optional). Can be one of the following:

  • OPT_WRITEDATA_PRINTABLE (default). If the string buffer contains only printable characters, the ASCII representation of the data is printed. Otherwise, a mixed notation is used

  • OPT_WRITEDATA_HEX. A mixed notation is used for writing

  • OPT_WRITEDATA_HEXONLY. The data is printed in hexadecimal notation

Example

transaction TMain
  var
    s1: string;
  begin
    SetMem(s1, 1, "\h20212223243040414243444546" "Micro Focus Software Corporation", 27);
    write("Default: <");
    WriteData(s1);
    writeln(">");
    write("OPT_WRITEDATA_PRINTABLE: <");
    WriteData(s1, STRING_COMPLETE, OPT_WRITEDATA_PRINTABLE);
    writeln(">");
    write("OPT_WRITEDATA_HEX: <");
    WriteData(s1, STRING_COMPLETE, OPT_WRITEDATA_HEX);
    writeln(">");
    write("OPT_WRITEDATA_HEXONLY: <");
    WriteData(s1, STRING_COMPLETE, OPT_WRITEDATA_HEXONLY);
    writeln(">");
  end TMain;
親トピック: Logging Functions Overview
関連資料
Write Statement


WriteErr Function

Action

Writes to the .err file of the current virtual user.

注: Error files (.err) are written only if the Virtual user report on error files (.rpt) option is enabled in the General tab of the Profile Settings - Results dialog.

Include file

Kernel.bdh

Syntax

WriteErr( in sErrMsg : string );
Parameter | Description
sErrMsg | String containing the message to write to the .err file

Example

WriteErr("Function MyFunc failed");
親トピック: Logging Functions Overview


WriteLog Function

Action

Writes to the .log file of the current user.

注: Log files (.log) are written only if the generation of these files is enabled in the General tab of the Profile Settings - Results dialog.

Include file

Kernel.bdh

Syntax

WriteLog( in sLogMsg : string );
Parameter | Description
sLogMsg | String containing the message to write to the .log file

Example

WriteLog("Info: Successfully connected");
親トピック: Logging Functions Overview


Measurement Functions

Measures and timers are user-defined measurement periods for which time measurements are included in the results repository and individual result files. You should create measures or timers for each component of a transaction of which you wish to analyze performance.

Measures and timers enable you to analyze the following:

  • Throughput information. The rate at which a given measure or timer is processed on average by the server. This allows you to analyze performance from the point of view of the server.

  • Response time information. The total time to process a given measure or timer. This provides application performance information from the point of view of the client computer.

Silk Performer automatically performs time measurements for transactions, Web forms, Web errors, SQL commands, and SQL errors.

  • Measure Function
    Specifies whether to perform measurements.
  • MeasureStart Function
    Starts a custom time measure in a transaction or a function.
  • MeasurePause Function
    Pauses a custom time measure.
  • MeasureResume Function
    Restarts a custom time measure.
  • MeasureStop Function
    Stops a custom time measure.
  • MeasureInc Function
    Increments a custom counter.
  • MeasureIncFloat Function
    Increments the value of a custom counter by a floating-point value.
  • MeasureGet Function
    Retrieves a specified value from a Silk Performer simulation measurement or a user-defined measure.
  • MeasureSet Function
    Sets the value of a counter/time.
  • MeasureSetBound Function
    Sets the bound values for a user-defined time measure.
  • MeasureSetFloat Function
    Sets the value of a counter/timer.
  • MeasureSetOption Function
    Set different options for a measure or measure group.
  • MeasureSetRaw Function
    Sets the raw values of a counter/timer.
  • MeasureSetTimer Function
    Sets the value of a timer.
  • MeasureTimeseries Function
    Determines whether to generate time series data for specific Silk Performer simulation measurements.
  • MeasureCalculateRawPercentiles Function
    Enables the collection of quantile data for the measure.
  • MeasureCalculatePercentiles Function (Deprecated)
    Calls the MeasureCalculateRawPercentiles function.
  • MeasureGetPercentile Function
    Retrieves the quantile value of a measure.
  • MeasureCollectRawData Function
    Enables the collection of raw data for a certain measure.
親トピック: General Functions


Measure Function

Action

Specifies whether to perform measurements. This function turns the generation of results that are written to report files and the result repository on or off. Calling this function is only successful if neither a warm-up time nor a measurement time is specified in the workload settings.
注: This function does not affect the creation of time series data files.

Include file

Kernel.bdh

Syntax

Measure( in nStatus: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nStatus

Specifies whether to enable or disable measurements. This parameter must contain one of the following flags:

  • MEASURE_ON. Enables measurements

  • MEASURE_OFF. Disables measurements

Example

dclrand
  rWait: RndUniF(0.0 .. 1.0);

dcltrans
  transaction TInit
  begin
    Measure(MEASURE_OFF);
  end TInit;

  transaction TMain
  var
    nCount: number init 0;
  begin
    nCount := nCount + 1;
    if nCount = 10 then Measure(MEASURE_ON) end;
    if nCount = 20 then Measure(MEASURE_OFF) end;
  end TMain;
親トピック: Measurement Functions


MeasureStart Function

Action

Starts a custom time measure in a transaction or a function with a specified measure name.

The results of the time measurements are reported in the result files and the result database of Silk Performer. You need not define time measures for SQL commands, Web forms, entire transactions, and wait statements because Silk Performer automatically measures the time for these statements.

Include file

Kernel.bdh

Syntax

MeasureStart( in sMeasure : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sMeasure | Measure name used to identify the measure when calling additional measure functions and when analyzing the results written to both the results repository and individual result files

Example

dcltrans
  transaction TMain
  var
    fValue : float;
    nTime : number;
  begin
    MeasureStart("TimeMeasure");
    wait 1.0;
    MeasurePause("TimeMeasure");
    wait 2.0;
    MeasureResume("TimeMeasure");
    wait 3.0;
    nTime := MeasureStop("TimeMeasure");
    MeasureGet("TimeMeasure", MEASURE_TIMER_RESPONSETIME, MEASURE_KIND_SUM, fValue);
    write("time = "); write(nTime); writeln;
    write("value = "); write(fValue); writeln;
  end TMain;

Sample scripts

Measure01.bdf, Measure02.bdf, Measure03.bdf, OraArrayFetch.bdf, OraSample.bdf, DBApi01.bdf, Trans.bdf, MutexLogin.bdf, WebMeasure01.bdf, WebTimer01.bdf

親トピック: Measurement Functions
関連資料
MeasureStop Function
MeasurePause Function
MeasureResume Function


MeasurePause Function

Action

Pauses a custom time measure until the MeasureResume function is called, and returns the current value of the time measure.

Include file

Kernel.bdh

Syntax

MeasurePause( in sMeasure : string ): number;

Return value

Current value of the custom time measure in 1/1000 secs.

Parameter | Description
sMeasure | Measure name identifying the custom time measure to pause

Example

dcltrans
  transaction TMain
  var
    fValue : float;
    nTime : number;
  begin
    MeasureStart("TimeMeasure");
    wait 1.0;
    MeasurePause("TimeMeasure");
    wait 2.0;
    MeasureResume("TimeMeasure");
    wait 3.0;
    nTime := MeasureStop("TimeMeasure");
    MeasureGet("TimeMeasure", MEASURE_TIMER_RESPONSETIME,
    MEASURE_KIND_SUM, fValue);
    write("time = "); write(nTime); writeln;
    write("value = "); write(fValue); writeln;
  end TMain;
親トピック: Measurement Functions
関連資料
MeasureStart Function
MeasureStop Function
MeasureResume Function


MeasureResume Function

Action

Restarts a custom time measure that was paused with the MeasurePause function. The time will be added to the time measured before the MeasurePause function was called.

Include file

Kernel.bdh

Syntax

MeasureResume( in sMeasure : string ): number;

Return value

Current value of the custom time measure in 1/1000 secs.

Parameter | Description
sMeasure | Measure name identifying the custom time measure to resume

Example

dcltrans
  transaction TMain
  var
    fValue : float;
    nTime : number;
  begin
    MeasureStart("TimeMeasure");
    wait 1.0;
    MeasurePause("TimeMeasure");
    wait 2.0;
    MeasureResume("TimeMeasure");
    wait 3.0;
    nTime := MeasureStop("TimeMeasure");
    MeasureGet("TimeMeasure", MEASURE_TIMER_RESPONSETIME, MEASURE_KIND_SUM, fValue);
    write("time = "); write(nTime); writeln;
    write("value = "); write(fValue); writeln;
  end TMain;
親トピック: Measurement Functions
関連資料
MeasurePause Function
MeasureStart Function
MeasureStop Function


MeasureStop Function

Action

Stops a custom time measure started with the MeasureStart function and returns the value of the time measure. It waits for all running threads (WebThreadWait) and stops the page timer.

The results of the measurements are reported in the result files and the result database of Silk Performer. You need not define measures for SQL commands, Web forms, entire transactions, or wait statements because Silk Performer automatically measures the time for these statements.

Include file

Kernel.bdh

Syntax

MeasureStop( in sMeasure       :string
             in bIgnoreOnError : boolean optional ): number;

Return value

Final value of the custom time measure in 1/1000 secs.

Parameter | Description
sMeasure | Measure name identifying the custom time measure to stop
bIgnoreOnError | When enabled, measured time is included in calculations if no error has occurred since the timer started (optional). The default value is false.

Example

dcltrans
  transaction TMain
  var
    fValue : float;
    nTime : number;
  begin
    MeasureStart("TimeMeasure");
    wait 1.0;
    MeasurePause("TimeMeasure");
    wait 2.0;
    MeasureResume("TimeMeasure");
    wait 3.0;
    nTime := MeasureStop("TimeMeasure");
    MeasureGet("TimeMeasure", MEASURE_TIMER_RESPONSETIME,
    MEASURE_KIND_SUM, fValue);
    write("time = "); write(nTime); writeln;
    write("value = "); write(fValue); writeln;
  end TMain;

Sample scripts

Measure01.bdf, Measure02.bdf, Measure03.bdf, OraArrayFetch.bdf, OraSample.bdf, DBApi01.bdf, Trans.bdf, MutexLogin.bdf, WebMeasure01.bdf, WebTimer01.bdf

親トピック: Measurement Functions
関連資料
MeasureStart Function
MeasurePause Function
MeasureResume Function


MeasureInc Function

Action

Increments the value of a custom counter. When this function is called for a specified custom counter for the first time, the counter is automatically allocated and initialized. You do not need to call any other measure functions when using a Silk Performer measure for counting purposes.

Include file

Kernel.bdh

Syntax

MeasureInc( in sMeasure : string,
            in nInc     : number optional,
            in nType    : number optional): number;

Return value

The value of the custom counter after the increment operation.

Parameter | Description
sMeasure | Measure name identifying the custom counter to increment
nInc

Increment value (optional). If this parameter is omitted, the custom counter is incremented by 1.

This parameter must not be negative or zero.
nType

Specifies the type of the custom counter. By default, this function adds up all values that are passed on successive calls.

Pass the MEASURE_KIND_AVERAGE flag to the function to calculate the average value instead of the sum. In this case, treat the custom counter as an average counter when you retrieve its value with the MeasureGet function.

Example

dcluser
  user
    TestUser
  transactions
    TInit : begin;
    TMain : 10;
    TShutdown : end;

dcltrans
  transaction TInit
  begin
    // start custom time measurement
    MeasureStart("TimeMeasure");
  end TInit;

  transaction TMain
  begin
    // increment custom counter
    MeasureInc("TranCounter");
    wait 0.3;
  end TMain;

  transaction TShutdown
  var
    fValue: float;
  begin
    // stop custom time measurement
    MeasureStop("TimeMeasure");
    MeasureGet("TimeMeasure", MEASURE_TIMER_RESPONSETIME, MEASURE_KIND_SUM, fValue);
    write("Transaction execution took "); write(fValue);
    write(" seconds"); writeln;
    MeasureGet("TINIT", MEASURE_TRANS_TRANSOK, MEASURE_KIND_COUNT, fValue);
    write("TInit transaction was executed "); write(fValue);
    write(" times"); writeln;
    MeasureGet("TranCounter", MEASURE_COUNTER_CUSTOMCOUNTER, MEASURE_KIND_SUM, fValue);
    write("TMain transaction was executed "); write(fValue);
    write(" times"); writeln;
  end TShutdown;

Sample scripts

Measure02.bdf

親トピック: Measurement Functions
関連資料
MeasureGet Function


MeasureIncFloat Function

Action

Increments the value of a custom counter by a floating-point value. When this function is called for a specified custom counter for the first time, the counter is automatically allocated and initialized. You do not need to call any other measure functions when using a Silk Performer measure for counting purposes.

Include file

Kernel.bdh

Syntax

MeasureIncFloat( in sMeasure : string,
                 in fValue   : float,
                 in sUnit    : string optional,
                 in nUsage   : number optional ):float;

Return value

The value of the custom counter after the increment operation.

Parameter | Description
sMeasure | Measure name identifying the custom counter to increment.
fValue | Increment value. This parameter may be negative or zero.
sUnit | String that specifies the measurement unit (optional). The length of this string is limited to 19 characters.
nUsage

Defines the way in which Performance Explorer displays the counter by default (optional). This parameter can be one of the following.

  • MEASURE_USAGE_TIMER. The average value is displayed by default.

  • MEASURE_USAGE_SUM_COUNTER: The sum is displayed by default (default).

  • MEASURE_USAGE_AVG_COUNTER: The average value is displayed by default.

  • MEASURE_USAGE_SUMONLY_COUNTER: The sum is displayed as default. In this case you cannot choose a different data source.

  • MEASURE_USAGE_EVENT_COUNTER: The count value is displayed by default.

  • MEASURE_USAGE_AVGONLY_COUNTER: The average is displayed by default. In this case you cannot choose a different data source.

Example

dcltrans
  transaction TMain
  begin
    ...
    MeasureIncFloat("Custom Counter", 0.5, NULL, MEASURE_USAGE_SUMONLY_COUNTER);
    ...
  end TMain;
親トピック: Measurement Functions
関連資料
MeasureInc Function


MeasureGet Function

Action

Retrieves a specific Silk Performer measure value, for example, the maximum, the minimum or the average value of a specified measure performed during the simulation of the current virtual user, or the standard deviation of the collected measure values.

Using this function, you can do the following:

  • Retrieve the value of a custom time measurement performed using the MeasureStart and the MeasureStop function.

  • Retrieve the counter value of a custom counter accessed using the MeasureInc function.

  • Check how often specific transactions have been executed successfully, and how often given transactions have been canceled.

  • Retrieve response times and throughput information concerning SQL commands, Web forms, CORBA objects, and TUXEDO services.

Include file

Kernel.bdh

Syntax

MeasureGet( in  sName  : string,
            in  nClass : number,
            in  nKind  : number,
            out fTime  : float,
            in  bAll   : boolean optional):boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName

Name of the object concerned with the measurement. Must be one of the following:

  • Custom time measure. Pass to the function exactly the same name as to the MeasureStart and the MeasureStop function

  • Custom counter. Pass to the function exactly the same name as to the MeasureInc function

  • Transaction. Specify the transaction name as declared in the load testing script.

  • SQL command. Make sure to specify the SQL command identifier (defined in the dclsql section of the test script) in capital letters.

  • Web form. Make sure the specify the Web form identifier (defined in the dclform section of the test script) in capital letters.

  • CORBA object

  • TUXEDO service

nClass

Specifies the type of measure to retrieve.

To retrieve the value of a custom time measure, pass the MEASURE_TIMER_RESPONSETIME parameter to the function.

To retrieve the value of a custom counter, pass the MEASURE_COUNTER_CUSTOMCOUNTER parameter to the function.

To retrieve the value of an average counter, pass the MEASURE_COUNTER_AVERAGE parameter to the function.

In any other case, pass any of the following parameters to the function, depending on the type of information you are interested in.

  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)

  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)

  • MEASURE_PAGE_PAGEBYTES

  • MEASURE_PAGE_EMBEDDEDBYTES

  • MEASURE_PAGE_DOCDOWNLOAD

  • MEASURE_PAGE_SERVERBUSY

  • MEASURE_IIOP_ROUNDTRIP

  • MEASURE_IIOP_SERVERBUSY

  • MEASURE_SQL_SQLPARSE

  • MEASURE_SQL_SQLEXEC

  • MEASURE_SQL_SQLEXECDIRECT

  • MEASURE_TRANS_TRANSOK

  • MEASURE_TRANS_TRANSERR

  • MEASURE_TRANS_TRANSCA

  • MEASURE_FORM_BYTESSENT

  • MEASURE_FORM_BYTESRECEIVED

  • MEASURE_FORM_HITSOK

  • MEASURE_FORM_HITSERR

  • MEASURE_FORM_ROUNDTRIP

  • MEASURE_FORM_SERVERBUSY

  • MEASURE_TUXEDO_BYTESSENT

  • MEASURE_TUXEDO_BYTESRECEIVED

  • MEASURE_TUXEDO_RESPONSETIME

nKind

Specifies the type of measure value to retrieve. The following options are possible:

  • MEASURE_KIND_SUM. Retrieves the sum of all measure values, for example, the total time for executing all transactions

  • MEASURE_KIND_COUNT. Retrieves the number how often an action was performed, for example, how often a counter was incremented, or how often a transaction was executed

  • MEASURE_KIND_AVERAGE. Returns the average of all measure values, for example, the average time required for a CORBA operation call.

  • MEASURE_KIND_MIN. Returns the minimum of all measure values

  • MEASURE_KIND_MAX. Returns the maximum of all measure values

  • MEASURE_KIND_LAST. Returns the last value set for the measure

  • MEASURE_KIND_SQSUM. Calculates for each measure value the square value, and sums up all square values.

  • MEASURE_KIND_STDEVIATION. Returns the standard deviation of all measured values

fTime | Variable receiving the measure value
bAll

Specifies the time interval used for measurement value calculation (optional).

  • If this parameter is set to true, the measure value is calculated based on all measurements performed during the simulation.

  • Otherwise, if this parameter is set to false, the measure value is calculated based only on the measurements performed during the measurement interval (default).

Example

dcluser
  user
    TestUser
  transactions
    TInit : begin;
    TMain : 10;
    TShutdown : end;

dcltrans
  transaction TInit
  begin
    // start custom time measurement
    MeasureStart("TimeMeasure");
  end TInit;

  transaction TMain
  begin
    // increment custom counter
    MeasureInc("TranCounter");
    wait 0.3;
  end TMain;

  transaction TShutdown
  var
    fValue: float;
  begin
    // stop custom time measurement
    MeasureStop("TimeMeasure");
    MeasureGet("TimeMeasure", MEASURE_TIMER_RESPONSETIME, MEASURE_KIND_SUM, fValue);
    write("Transaction execution took "); write(fValue);
    write(" seconds"); writeln;
    MeasureGet("TInit", MEASURE_TRANS_TRANSOK, MEASURE_KIND_COUNT, fValue);
    write("TInit transaction was executed ");
    write(fValue);
    write(" times"); writeln;
    MeasureGet("TranCounter", MEASURE_COUNTER_CUSTOMCOUNTER, MEASURE_KIND_COUNT, fValue);
    write("TMain transaction was executed ");
    write(fValue);
    write(" times"); writeln;
  end TShutdown;

Sample scripts

Measure01.bdf, WebMeasure01.bdf

親トピック: Measurement Functions
関連資料
MeasureStart Function
MeasureStop Function
MeasureSetFloat Function
MeasureSet Function


MeasureSet Function

Action

Sets the value of a counter/timer identified by sName and nClass. When this function is called for a specified counter/timer for the first time, the counter is automatically allocated and initialised.

Predefined measures are using following units:

  • for timers: milliseconds.

  • for capacities: bytes.

Include file

Kernel.bdh

Syntax

MeasureSet(in sName     :string,
           in nClass    : number,
           in nValue    : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
sName

Name of the object concerned with the measurement. Must be one of the following:

  • Custom time measure.

  • Custom counter.

  • Transaction. Specify the transaction name as declared in the load testing script.

  • SQL command. Make sure to specify the SQL command identifier (defined in the dclsql section of the test script) in capital letters.

  • Web form. Make sure that the specified Web form identifier (defined in the dclform section of the test script) is in capital letters.

  • CORBA object

  • TUXEDO service

nClass

Specifies the type of measure to set.

To set the value of a custom time measure, pass the MEASURE_TIMER_RESPONSETIME parameter to the function.

To set the value of a custom counter, pass the MEASURE_COUNTER_CUSTOMCOUNTER parameter to the function.

To set the value of an average counter, pass the MEASURE_COUNTER_AVERAGE parameter to the function.

In any other case, pass any of the following parameters to the function, depending on the type of information you are interested in.

  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)

  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)

  • MEASURE_PAGE_PAGEBYTES

  • MEASURE_PAGE_EMBEDDEDBYTES

  • MEASURE_PAGE_DOCDOWNLOAD

  • MEASURE_PAGE_SERVERBUSY

  • MEASURE_IIOP_ROUNDTRIP

  • MEASURE_IIOP_SERVERBUSY

  • MEASURE_SQL_SQLPARSE

  • MEASURE_SQL_SQLEXEC

  • MEASURE_SQL_SQLEXECDIRECT

  • MEASURE_TRANS_TRANSOK

  • MEASURE_TRANS_TRANSERR

  • MEASURE_TRANS_TRANSCA

  • MEASURE_FORM_BYTESSENT

  • MEASURE_FORM_BYTESRECEIVED

  • MEASURE_FORM_HITSOK

  • MEASURE_FORM_HITSERR

  • MEASURE_FORM_ROUNDTRIP

  • MEASURE_FORM_SERVERBUSY

  • MEASURE_TUXEDO_BYTESSENT

  • MEASURE_TUXEDO_BYTESRECEIVED

  • MEASURE_TUXEDO_RESPONSETIME

nValue

Value to set. Predefined measures are using following units:

  • for timers: milliseconds.

  • for capacities: bytes.

Example

dcltrans
  transaction TMain
  var
    fValue :  float;
  begin
    MeasureSet("measure2", MEASURE_COUNTER_CUSTOMCOUNTER, 22);
    ...
    MeasureSet("measure2", MEASURE_COUNTER_CUSTOMCOUNTER, 22);
    ...
    MeasureGet("measure2", MEASURE_COUNTER_CUSTOMCOUNTER,
               MEASURE_KIND_SUM, fValue);
    Print("Val: " + string(fValue)); // expected value: 44
  end TMain;
親トピック: Measurement Functions
関連資料
MeasureGet Function
MeasureSetFloat Function
MeasureSetBound Function
MeasureSetRaw Function
MeasureSetTimer Function


MeasureSetBound Function

Action

Determines the bound value for a specified time measure or the default bound value for a specified time measure type. Result reports list the percentage of all time measure values within the time bound specified. A time bound is commonly set to the amount of time that represents the goal for the completion of, for example, the transaction being tested. An optional severity level value may be specified for a bound exceeding message, which is reported whenever this bound is exceeded by a value.

Ideally, this function is called before a measure is created and/or used.

Include file

Kernel.bdh

Syntax

MeasureSetBound( in sName     : string allownull,
                 in nClass    : number,
                 in nBound    : number,
                 in fValue    : float,
                 in nSeverity : number optional := SEVERITY_ERROR ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Measure name identifying the measure. If this parameter is set to NULL or "" the default bound is set for the provided measure type.
nClass Measure class or measure type, must be one of the following:

  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)

  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)

  • MEASURE_PAGE_PAGEBYTES

  • MEASURE_PAGE_EMBEDDEDBYTES

  • MEASURE_PAGE_DOCDOWNLOAD

  • MEASURE_PAGE_SERVERBUSY

  • MEASURE_IIOP_ROUNDTRIP

  • MEASURE_IIOP_SERVERBUSY

  • MEASURE_TIMER_RESPONSETIME

  • MEASURE_COUNTER_CUSTOMCOUNTER

  • MEASURE_SQL_SQLPARSE

  • MEASURE_SQL_SQLEXEC

  • MEASURE_SQL_SQLEXECDIRECT

  • MEASURE_TRANS_TRANSOK

  • MEASURE_TRANS_TRANSERR

  • MEASURE_TRANS_TRANSCA

  • MEASURE_FORM_BYTESSENT

  • MEASURE_FORM_BYTESRECEIVED

  • MEASURE_FORM_HITSOK

  • MEASURE_FORM_HITSERR

  • MEASURE_FORM_ROUNDTRIP

  • MEASURE_FORM_SERVERBUSY

  • MEASURE_TUXEDO_BYTESSENT

  • MEASURE_TUXEDO_BYTESRECEIVED

  • MEASURE_TUXEDO_RESPONSETIME

nBound

Number of the measure bound specified through the fValue parameter.

If this parameter is set to 1, measure bound 1 will be set to fValue. Otherwise, if this parameter is set to 2, measure bound 2 will be set to fValue

fValue

Bound value for the specified measure (in seconds)

注: If the value for bound 1 is higher than the value for bound 2, the measure is regarded with inverse logic: the higher the measured value the better.

For example: If a measure monitors a resource pool, a healthy value is one above bound 1. If the value falls below bound 1 but still is above bound 2, a warning might be triggered.

As a consequence, always define both bounds to avoid unwanted reporting behavior.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  begin
    MeasureSetBound("Bank/AccountManager",
                    MEASURE_IIOP_ROUNDTRIP, 1, 5.0);
    MeasureSetBound("Bank/AccountManager",
                    MEASURE_IIOP_ROUNDTRIP, 2, 10.0,
                    SEVERITY_WARNING);
    MeasureSetBound("Bank/AccountManager",
                    MEASURE_IIOP_SERVERBUSY, 1, 3.0,
                    SEVERITY_WARNING);
    MeasureSetBound("Bank/AccountManager",
                    MEASURE_IIOP_SERVERBUSY, 2, 5.0,
                    SEVERITY_ERROR);

    ...
  end TMain;

Sample scripts

Measure03.bdf, WebMeasure01.bdf

親トピック: Measurement Functions
関連資料
MeasureGet Function
MeasureSetFloat Function
MeasureSet Function
MeasureSetRaw Function
MeasureSetTimer Function


MeasureSetFloat Function

Action

Sets the value of a counter/timer identified by sName and nClass. When this function is called for a specified counter/timer for the first time, the counter is automatically allocated and initialised.

Predefined measures are using following units:

  • for timers: milliseconds.

  • for capacities: bytes.

Include file

Kernel.bdh

Syntax

MeasureSetFloat( in sName  : string,
                 in nClass : number,
                 in fValue : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
sName

Name of the object concerned with the measurement. Must be one of the following:

  • Custom time measure.

  • Custom counter.

  • Transaction. Specify the transaction name as declared in the load testing script.

  • SQL command. Make sure to specify the SQL command identifier (defined in the dclsql section of the test script) in capital letters.

  • Web form. Make sure that the specified Web form identifier (defined in the dclform section of the test script) is in capital letters.

  • CORBA object

  • TUXEDO service

nClass

Specifies the type of measure to set.

To set the value of a custom time measure, pass the MEASURE_TIMER_RESPONSETIME parameter to the function.

To set the value of a custom counter, pass the MEASURE_COUNTER_CUSTOMCOUNTER parameter to the function.

To set the value of an average counter, pass the MEASURE_COUNTER_AVERAGE parameter to the function.

In any other case, pass any of the following parameters to the function, depending on the type of information you are interested in.

  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)

  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)

  • MEASURE_PAGE_PAGEBYTES

  • MEASURE_PAGE_EMBEDDEDBYTES

  • MEASURE_PAGE_DOCDOWNLOAD

  • MEASURE_PAGE_SERVERBUSY

  • MEASURE_IIOP_ROUNDTRIP

  • MEASURE_IIOP_SERVERBUSY

  • MEASURE_SQL_SQLPARSE

  • MEASURE_SQL_SQLEXEC

  • MEASURE_SQL_SQLEXECDIRECT

  • MEASURE_TRANS_TRANSOK

  • MEASURE_TRANS_TRANSERR

  • MEASURE_TRANS_TRANSCA

  • MEASURE_FORM_BYTESSENT

  • MEASURE_FORM_BYTESRECEIVED

  • MEASURE_FORM_HITSOK

  • MEASURE_FORM_HITSERR

  • MEASURE_FORM_ROUNDTRIP

  • MEASURE_FORM_SERVERBUSY

  • MEASURE_TUXEDO_BYTESSENT

  • MEASURE_TUXEDO_BYTESRECEIVED

  • MEASURE_TUXEDO_RESPONSETIME

fValue

Value to set. Predefined measures are using following units:

  • for timers: milliseconds.

  • for capacities: bytes.

Example

dcltrans
  transaction TMain
  var
    fValue : float;
  begin
    MeasureSetFloat("measure2", MEASURE_COUNTER_CUSTOMCOUNTER, 22.2);
    ...
    MeasureSetFloat("measure2", MEASURE_COUNTER_CUSTOMCOUNTER, 22.2);
    ...
    MeasureGet("measure2", MEASURE_COUNTER_CUSTOMCOUNTER,
               MEASURE_KIND_SUM, fValue);
    Print("Val: " +string(fValue)); // expected value: 44.4
  end TMain;

Sample scripts

Measure03.bdf, WebMeasure01.bdf

親トピック: Measurement Functions
関連資料
MeasureGet Function
MeasureSet Function


MeasureSetOption Function

Action

Set different options for a measure or measure group. You can enable or disable raw measure data or time series data collection. In addition, you can enable and configure the generation of quantile data, and you can enable real-time data collection so that you can see the measures in Performance Explorer during a test in real-time.

Include file

Kernel.bdh

Syntax

MeasureSetOption( in sName   : string,
                  in eClass  : number,
                  in eOption : number,
                  in uValue  : union): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Measure name that identifies the measure. When this parameter is set to NULL or "", the option is set for all measures of the provided measure type.
eClass Specifies the type of measure type.
  • MEASURE_IIOP_ROUNDTRIP
  • MEASURE_IIOP_SERVERBUSY
  • MEASURE_TIMER_RESPONSETIME
  • MEASURE_COUNTER_CUSTOMCOUNTER
  • MEASURE_SQL_SQLPARSE
  • MEASURE_SQL_SQLEXEC
  • MEASURE_SQL_SQLEXECDIRECT
  • MEASURE_TRANS_TRANSOK
  • MEASURE_TRANS_TRANSERR
  • MEASURE_TRANS_TRANSCA
  • MEASURE_FORM_BYTESSENT
  • MEASURE_FORM_BYTESRECEIVED
  • MEASURE_FORM_HITSOK
  • MEASURE_FORM_HITSERR
  • MEASURE_FORM_ROUNDTRIP
  • MEASURE_FORM_SERVERBUSY
  • MEASURE_TUXEDO_BYTESSENT
  • MEASURE_TUXEDO_BYTESRECEIVED
  • MEASURE_TUXEDO_RESPONSETIME
  • MEASURE_COUNTER_AVERAGE
  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)
  • MEASURE_PAGE_DOCDOWNLOAD
  • MEASURE_PAGE_SERVERBUSY
  • MEASURE_PAGE_PAGEBYTES
  • MEASURE_PAGE_EMBEDDEDBYTES
  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)
  • MEASURE_TRANS_TRANSBUSYOK
  • MEASURE_TRANS_TRANSBUSYERR
  • MEASURE_TRANS_TRANSBUSYCA
eOption Specifies the option which a value is set for.
  • MEASURE_OPT_REALTIME: Set the uValue parameter to true or false to enable or disable the collection of measure data for real-time view in Performance Explorer. The real-time measure data collection is disabled for all measures by default.
    注: To enable real-time measure data in general, make sure to check the Enable real-time measures check box on the Workload Configuration dialog.
  • MEASURE_OPT_PERCENTILES: Set the uValue parameter to true or false to enable or disable percentile reporting for the specified measure or measure group.
  • MEASURE_OPT_PERCENTILES_GRANULARITY: Set the uValue parameter to the percentile granularity for the specified measure or measure group. The default value is OPT_PERCENTILES_GRANULARITY_10_PER_MIL. For a full list of granularity values see the topic MeasureCalculateRawPercentiles Function.
  • MEASURE_OPT_TIMESERIES: Set the uValue parameter to true or false to enable or disable time series data collection for the specified measure or measure group. The default value is defined by the corresponding profile setting.
  • MEASURE_OPT_RAWDATA: Set the uValue parameter to true or false to enable or disable raw data collection for the specified measure or measure group. The default value is defined by the corresponding profile setting.
uValue

The value related to the selected option. See the description of the eOption parameter for valid values.

Example

dcltrans
  transaction TMain
  var
    fValue :  float;
  begin
      MeasureSetOption("Measure1", MEASURE_PAGE_PAGETIME, MEASURE_OPT_REALTIME, true);

      MeasureSetOption("", MEASURE_PAGE_PAGETIME, MEASURE_OPT_RAWDATA, true);

      MeasureSetOption("", MEASURE_ALL, MEASURE_OPT_TIMESERIES, false);

      MeasureSetOption("Measure1", MEASURE_COUNTER_CUSTOMCOUNTER, MEASURE_OPT_PERCENTILES, true);
      MeasureSetOption("Measure1", MEASURE_COUNTER_CUSTOMCOUNTER, MEASURE_OPT_PERCENTILES_GRANULARITY, OPT_PERCENTILES_GRANULARITY_1_PER_MIL);

  end TMain;
親トピック: Measurement Functions
関連資料
MeasureCalculateRawPercentiles Function
MeasureTimeseries Function
MeasureCollectRawData Function


MeasureSetRaw Function

Action

Sets the raw values of a counter/timer identified by sName and nClass. When this function is called for a specified counter/timer for the first time, the counter/timer is automatically allocated and initialised.

Predefined measures are using following units:

  • for timers: milliseconds.

  • for capacities: bytes.

Include file

Kernel.bdh

Syntax

MeasureSetRaw( in sName        : string,
               in nClass       : number,
               in nCount       : number,
               in fSum         : float,
               in fSqSum       : float,
               in fMin         : float,
               in fMax         : float,
               in nBelowBound1 : number optional,
               in nBelowBound2 : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName

Name of the object concerned with the measurement. Must be one of the following:

  • Custom time measure.

  • Custom counter.

  • Transaction. Specify the transaction name as declared in the load testing script.

  • SQL command. Make sure to specify the SQL command identifier (defined in the dclsql section of the test script) in capital letters.

  • Web form. Make sure that the specified Web form identifier (defined in the dclform section of the test script) is in capital letters.

  • CORBA object

  • TUXEDO service

nClass

Specifies the type of measure to set.

To set the value of a custom time measure, pass the MEASURE_TIMER_RESPONSETIME parameter to the function.

To set the value of a custom counter, pass the MEASURE_COUNTER_CUSTOMCOUNTER parameter to the function.

To set the value of an average counter, pass the MEASURE_COUNTER_AVERAGE parameter to the function.

In any other case, pass any of the following parameters to the function, depending on the type of information you are interested in.

  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)

  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)

  • MEASURE_PAGE_PAGEBYTES

  • MEASURE_PAGE_EMBEDDEDBYTES

  • MEASURE_PAGE_DOCDOWNLOAD

  • MEASURE_PAGE_SERVERBUSY

  • MEASURE_IIOP_ROUNDTRIP

  • MEASURE_IIOP_SERVERBUSY

  • MEASURE_SQL_SQLPARSE

  • MEASURE_SQL_SQLEXEC

  • MEASURE_SQL_SQLEXECDIRECT

  • MEASURE_TRANS_TRANSOK

  • MEASURE_TRANS_TRANSERR

  • MEASURE_TRANS_TRANSCA

  • MEASURE_FORM_BYTESSENT

  • MEASURE_FORM_BYTESRECEIVED

  • MEASURE_FORM_HITSOK

  • MEASURE_FORM_HITSERR

  • MEASURE_FORM_ROUNDTRIP

  • MEASURE_FORM_SERVERBUSY

  • MEASURE_TUXEDO_BYTESSENT

  • MEASURE_TUXEDO_BYTESRECEIVED

  • MEASURE_TUXEDO_RESPONSETIME

nCount | Number of values for this measure that are set with this call.
fSum | Sum of the measure values.
fSqSum | Sqare sum of the measure values.
fMin | The minimum measure value.
fMax | The maximum measure value.
nBelowBound1 | Number of values for this measure that are below the time bound 1.
nBelowBound2 | Number of values for this measure that are below the time bound 2.

Example

transaction TMeasure
var
  fValue : float;
begin
  MeasureSetRaw("measure1", MEASURE_COUNTER_CUSTOMCOUNTER,
                10, 100.0, 1000.0, 9.0, 10.0);
  ...
  MeasureSetRaw("measure1", MEASURE_COUNTER_CUSTOMCOUNTER,
                2, 6.0, 12.0, 1.0, 4.0);
  ...
  MeasureGet("measure1", MEASURE_COUNTER_CUSTOMCOUNTER, MEASURE_KIND_COUNT, fValue);
  // expected value: 12
  Print("Measure Count: " + string(fValue));
  MeasureGet("measure1", MEASURE_COUNTER_CUSTOMCOUNTER, MEASURE_KIND_SUM, fValue);
  // expected value: 106
  Print("Sum of all measures: " + string(fValue));
  MeasureGet("measure1", MEASURE_COUNTER_CUSTOMCOUNTER, MEASURE_KIND_MIN, fValue);
  // expected value: 1
  Print("Minimum value of all measures: " + string(fValue));
end TMeasure;
親トピック: Measurement Functions
関連資料
MeasureGet Function
MeasureSetFloat Function
MeasureSet Function
MeasureSetBound Function
MeasureSetTimer Function
MeasureSet Function


MeasureSetTimer Function

Action

Sets the value of a timer identified by sName. When this function is called for a specified timer for the first time, the counter is automatically allocated and initialized.

Include file

Kernel.bdh

Syntax

MeasureSetTimer( in sName  : string,
                 in nValue : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the timer concerned with the measurement.
nValue | Value to set. In milliseconds.

Example

dcltrans
  transaction TMain
  var
    fValue : float;
  begin
    MeasureSetTimer("TimeMeasure", 2000);
    ...
    MeasureGet("TimeMeasure", MEASURE_TIMER_RESPONSETIME,
               MEASURE_KIND_SUM, fValue);
    Print("Val: " + string(fValue));
  end TMain;
親トピック: Measurement Functions
関連資料
MeasureGet Function
MeasureSetFloat Function
MeasureSet Function
MeasureSetBound Function
MeasureSetRaw Function
MeasureSet Function


MeasureTimeseries Function

Action

Determines whether to generate time series data for a specified Silk Performer measurement.

If time series data generation is enabled, data will be written to the corresponding file (.tsd) and can be analyzed with Silk Performer Performance Explorer.

Include file

Kernel.bdh

Syntax

MeasureTimeseries( in nType : number,
                   in bTimeseries : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nType

Specifies the type of measurement for which to generate time series data. Silk Performer measure types are:

  • MEASURE_IIOP

  • MEASURE_TIMER

  • MEASURE_COUNTER

  • MEASURE_SQL

  • MEASURE_TRANS

  • MEASURE_FORM

  • MEASURE_TUXEDO

  • MEASURE_ALL

  • MEASURE_IIOP_ROUNDTRIP

  • MEASURE_IIOP_SERVERBUSY

  • MEASURE_TIMER_RESPONSETIME

  • MEASURE_COUNTER_CUSTOMCOUNTER

  • MEASURE_SQL_SQLPARSE

  • MEASURE_SQL_SQLEXEC

  • MEASURE_SQL_SQLEXECDIRECT

  • MEASURE_TRANS_TRANSOK

  • MEASURE_TRANS_TRANSERR

  • MEASURE_TRANS_TRANSCA

  • MEASURE_FORM_BYTESSENT

  • MEASURE_FORM_BYTESRECEIVED

  • MEASURE_FORM_HITSOK

  • MEASURE_FORM_HITSERR

  • MEASURE_FORM_ROUNDTRIP

  • MEASURE_FORM_SERVERBUSY

  • MEASURE_TUXEDO_BYTESSENT

  • MEASURE_TUXEDO_BYTESRECEIVED

  • MEASURE_TUXEDO_RESPONSETIME

bTimeseries | If this parameter is set to true, Silk Performer generates time series data for the specified measure type.

Example

dcltrans
  transaction TInit
  begin
    // generate time series data for CORBA operation calls
    MeasureTimeseries(MEASURE_IIOP, true);
    // generate time series data for executed SQL commands
    MeasureTimeseries(MEASURE_SQL, true);
    // no time series data for anything else
    MeasureTimeseries(MEASURE_TIMER, false);
    MeasureTimeseries(MEASURE_COUNTER, false);
    MeasureTimeseries(MEASURE_TRANS, false);
    MeasureTimeseries(MEASURE_FORM, false);
    MeasureTimeseries(MEASURE_TUXEDO, false);
    MeasureTimeseries(MEASURE_ALL, false);
  end TInit;
親トピック: Measurement Functions
関連資料
MeasureSetOption Function
MeasureCalculateRawPercentiles Function
MeasureCollectRawData Function


MeasureCalculateRawPercentiles Function

Action

Enables the collection of quantile data for the measure identified by sName and nClass. Collected quantile data is shown in the overview report.

This function can be used before a measure is created and/or used, and must be located in the TInit transaction.

Due to memory limitations, Silk Performer does not collect absolute measurements. Instead, a limited set of categories is created and Silk Performer counts how often a certain category is hit. The size of a category is 1 millisecond for small measurements, for bigger measurements the upper boundary of the categories increases. To calculate the upper boundaries, the following formula is used (B stands for boundary):

B(n) = B(n-1) x (1+uGranularity)

This is the whole formula:

B(1) = 1ms
B(n) = max(B(n-1) + 1ms, B(n-1) x (1+uGranularity))

For example: If the granularity is 1 percent and the upper boundary of a certain category is 1000 milliseconds, the next category will range from 1000 to 1010 milliseconds.

The maximum error of a measurement of 1000 milliseconds is 1 percent or 10 milliseconds.

Include file

Kernel.bdh

Syntax

MeasureCalculateRawPercentiles( in sName        : string allownull,
                                in nClass       : number,
                                in bDisable     : boolean optional,
                                in uGranularity : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Measure name that identifies the measure. When this parameter is set to NULL or "", quantile data collection is enabled for all measures of the provided measure type.
nClass Specifies the type of measure to retrieve.

To retrieve the value of a custom time measure, pass the MEASURE_TIMER_RESPONSETIME parameter to the function.

To retrieve the value of a custom counter, pass the MEASURE_COUNTER_CUSTOMCOUNTER parameter to the function.

To retrieve the value of an average counter, pass the MEASURE_COUNTER_AVERAGE parameter to the function.

In any other case, pass any of the following parameters to the function, depending on the type of information you are interested in.

  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)
  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)
  • MEASURE_PAGE_PAGEBYTES
  • MEASURE_PAGE_EMBEDDEDBYTES
  • MEASURE_PAGE_DOCDOWNLOAD
  • MEASURE_PAGE_SERVERBUSY
  • MEASURE_IIOP_ROUNDTRIP
  • MEASURE_IIOP_SERVERBUSY
  • MEASURE_SQL_SQLPARSE
  • MEASURE_SQL_SQLEXEC
  • MEASURE_SQL_SQLEXECDIRECT
  • MEASURE_TRANS_TRANSOK
  • MEASURE_TRANS_TRANSERR
  • MEASURE_TRANS_TRANSCA
  • MEASURE_FORM_BYTESSENT
  • MEASURE_FORM_BYTESRECEIVED
  • MEASURE_FORM_HITSOK
  • MEASURE_FORM_HITSERR
  • MEASURE_FORM_ROUNDTRIP
  • MEASURE_FORM_SERVERBUSY
  • MEASURE_TUXEDO_BYTESSENT
  • MEASURE_TUXEDO_BYTESRECEIVED
  • MEASURE_TUXEDO_RESPONSETIME
bDisable | Optional: Specifies whether percentiles calculation should be disabled or enabled (default is FALSE).
uGranularity Optional: Precision of the quantile measurement in per mil. Can be one of the following values:
  • OPT_PERCENTILES_GRANULARITY_1_PER_MIL
  • OPT_PERCENTILES_GRANULARITY_3_PER_MIL
  • OPT_PERCENTILES_GRANULARITY_5_PER_MIL
  • OPT_PERCENTILES_GRANULARITY_10_PER_MIL
  • OPT_PERCENTILES_GRANULARITY_30_PER_MIL
  • OPT_PERCENTILES_GRANULARITY_50_PER_MIL
Lower granularity enables a more precise percentile calculation, but consumes more memory on each agent computer. The default setting of OPT_PERCENTILES_GRANULARITY_10_PER_MIL (1 percent) consumes up to 8kb memory per measure and virtual user container executable.
重要: With lower granularity settings, memory consumption grows exponentially.

Example

benchmark MeasureBenchmarkName
use "kernel.bdh"

dclrand
  r2 : RndUniF(5.0..55.0);

dcluser
  user
    User1
  transactions
    TInit        : begin;
    TMain        : 1;

dcltrans
  transaction TInit
  begin
    // enable quantile data for a custom measure
    MeasureCalculateRawPercentiles("measure1", MEASURE_COUNTER_CUSTOMCOUNTER,
    false, OPT_PERCENTILES_GRANULARITY_1_PER_MIL);
  end TInit;

  transaction TMain
  var
    i      : number;
    f, fV  : float;
  begin
    // get 500 random numbers in the range of 5.0 to 55.0
    for i := 1 to 500 do
      MeasureSetFloat("measure1", MEASURE_COUNTER_CUSTOMCOUNTER , r2);
    end;

    // show percentile estimation for 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%
    f:= 0.1;
    while f < 1.01 do
      MeasureGetPercentile("measure1", MEASURE_COUNTER_CUSTOMCOUNTER, f, fV);
      Print(string(f) + " = " + string(fV));
      f := f + 0.1;
    end;
  end TMain;
親トピック: Measurement Functions
関連資料
MeasureCalculatePercentiles Function (Deprecated)
MeasureGetPercentile Function
MeasureGet Function
MeasureSetFloat Function
MeasureSet Function
MeasureSetBound Function
MeasureSetRaw Function
MeasureSetTimer Function
MeasureSetOption Function
MeasureTimeseries Function
MeasureCollectRawData Function


MeasureCalculatePercentiles Function (Deprecated)

Action

This function has been deprecated. If you use this function in a script, it will internally call the MeasureCalculateRawPercentiles function with default parameters instead.

親トピック: Measurement Functions
関連資料
MeasureCalculateRawPercentiles Function


MeasureGetPercentile Function

Action

Retrieves the quantile value of a measure identified by sName and nClass for a given percentage (3rd parameter).
注: The function returns the percentile value aggregated by the process that hosts the virtual user(s). This process is the perfRun.exe. Thus, the returned percentile value is based on all virtual users running in that process.

Include file

Kernel.bdh

Syntax

MeasureGetPercentile( in  sName  : string,
                      in  nClass : number,
                      in  fP     : float,
                      out fValue : float ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Measure name that identifies the measure.
nClass

Specifies the type of measure to retrieve.

To retrieve the value of a custom time measure, pass the MEASURE_TIMER_RESPONSETIME parameter to the function.

To retrieve the value of a custom counter, pass the MEASURE_COUNTER_CUSTOMCOUNTER parameter to the function.

To retrieve the value of an average counter, pass the MEASURE_COUNTER_AVERAGE parameter to the function.

In any other case, pass any of the following parameters to the function, depending on the type of information you are interested in.

  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)

  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)

  • MEASURE_PAGE_PAGEBYTES

  • MEASURE_PAGE_EMBEDDEDBYTES

  • MEASURE_PAGE_DOCDOWNLOAD

  • MEASURE_PAGE_SERVERBUSY

  • MEASURE_IIOP_ROUNDTRIP

  • MEASURE_IIOP_SERVERBUSY

  • MEASURE_SQL_SQLPARSE

  • MEASURE_SQL_SQLEXEC

  • MEASURE_SQL_SQLEXECDIRECT

  • MEASURE_TRANS_TRANSOK

  • MEASURE_TRANS_TRANSERR

  • MEASURE_TRANS_TRANSCA

  • MEASURE_FORM_BYTESSENT

  • MEASURE_FORM_BYTESRECEIVED

  • MEASURE_FORM_HITSOK

  • MEASURE_FORM_HITSERR

  • MEASURE_FORM_ROUNDTRIP

  • MEASURE_FORM_SERVERBUSY

  • MEASURE_TUXEDO_BYTESSENT

  • MEASURE_TUXEDO_BYTESRECEIVED

  • MEASURE_TUXEDO_RESPONSETIME

fP | The percentage must be in the range of 0.0 to 1.0.
fValue | Retrieves the quantile value.

Example

benchmark MeasureBenchmarkName
use "kernel.bdh"

dclrand
  r2 : RndUniF(5.0..55.0);

dcluser
  user
    User1
  transactions
    TInit        : begin;
    TMain        : 1;

dcltrans
  transaction TInit
  begin
    // enable quantile data for a custom measure
    MeasureCalculatePercentiles("measure1", MEASURE_COUNTER_CUSTOMCOUNTER);
  end TInit;

  transaction TMain
  var
    i      : number;
    f, fV  : float;
  begin
    // get 500 random numbers in the range of 5.0 to 55.0
    for i := 1 to 500 do
      MeasureSetFloat("measure1", MEASURE_COUNTER_CUSTOMCOUNTER, r2);
    end;

    // show percentile estimation for 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%
    f:= 0.1;
    while f < 1.01 do
      MeasureGetPercentile("measure1", MEASURE_COUNTER_CUSTOMCOUNTER, f, fv);
      Print(string(f) + " = " + string(fV));
      f := f + 0.1;
    end;
  end TMain;
親トピック: Measurement Functions
関連資料
MeasureCalculateRawPercentiles Function


MeasureCollectRawData Function

Action

Enables the collection of raw measure data for the measure identified by sName and eType. Raw measure data will be stored in CSV files in the result directory of the corresponding load test.

Include file

Kernel.bdh

Syntax

MeasureCollectRawData( in bEnable : boolean,
                       in sName   : string optional,
                       in eType   : number optional ): boolean;
Parameter | Description
bEnable | true/false
sName | The measure name
eType Specifies the measure type:
  • MEASURE_IIOP_ROUNDTRIP
  • MEASURE_IIOP_SERVERBUSY
  • MEASURE_TIMER_RESPONSETIME
  • MEASURE_COUNTER_CUSTOMCOUNTER
  • MEASURE_SQL_SQLPARSE
  • MEASURE_SQL_SQLEXEC
  • MEASURE_SQL_SQLEXECDIRECT
  • MEASURE_TRANS_TRANSOK
  • MEASURE_TRANS_TRANSERR
  • MEASURE_TRANS_TRANSCA
  • MEASURE_FORM_BYTESSENT
  • MEASURE_FORM_BYTESRECEIVED
  • MEASURE_FORM_HITSOK
  • MEASURE_FORM_HITSERR
  • MEASURE_FORM_ROUNDTRIP
  • MEASURE_FORM_SERVERBUSY
  • MEASURE_TUXEDO_BYTESSENT
  • MEASURE_TUXEDO_BYTESRECEIVED
  • MEASURE_TUXEDO_RESPONSETIME
  • MEASURE_COUNTER_AVERAGE
  • MEASURE_PAGE_PAGETIME (for protocol-level load testing)
  • MEASURE_PAGE_DOCDOWNLOAD
  • MEASURE_PAGE_SERVERBUSY
  • MEASURE_PAGE_PAGEBYTES
  • MEASURE_PAGE_EMBEDDEDBYTES
  • MEASURE_PAGE_ACTIONTIME (for browser-driven load testing)
  • MEASURE_TRANS_TRANSBUSYOK
  • MEASURE_TRANS_TRANSBUSYERR
  • MEASURE_TRANS_TRANSBUSYCA

Return value

  • true if successful

  • false otherwise

Example

benchmark BenchmarkName

use "kernel.bdh"
use "webapi.bdh"

dcluser
  user
    VirtUser
  transactions
    TRawDataAll : 1;
    TRawDataName : 1;
    TRawDataType : 1;
    TRawDataNameType : 1;

dcltrans
  transaction TRawDataAll
  begin
    // enable generation of raw data for default measures
    MeasureCollectRawData(true);

    WebPageUrl("http://www.borland.com/"); // raw data will be collected
  end TRawDataAll;

  transaction TRawDataName
  begin
    // enable generation of raw data for measures with specific name "MyMeasure"
    MeasureCollectRawData(true, "MyMeasure");

    WebPageUrl("http://www.borland.com/", "MyMeasure"); // raw data will be collected
    WebPageUrl("http://demo.borland.com/", "MyWebSite"); // raw data will NOT be collected
  end TRawDataName;

  transaction TRawDataType
  begin
    // enable generation of raw data for measures of type
    MeasureCollectRawData(true, "", MEASURE_PAGE_EMBEDDEDBYTES);

    WebPageUrl("http://www.borland.com/", "MyMeasure"); // only raw data of type MEASURE_PAGE_EMBEDDEDBYTES will be collected
    WebPageUrl("http://demo.borland.com/", "MyWebSite"); // only raw data of type MEASURE_PAGE_EMBEDDEDBYTES will be collected
  end TRawDataType;

  transaction TRawDataNameType
  begin
    // enable generation of raw data for measures with specific name "MyMeasure" and of type MEASURE_PAGE_EMBEDDEDBYTES
    MeasureCollectRawData(true, "MyMeasure", MEASURE_PAGE_EMBEDDEDBYTES);

    WebPageUrl("http://www.borland.com/", "MyMeasure"); // only raw data of MEASURE_PAGE_EMBEDDEDBYTES will be collected
    WebPageUrl("http://demo.borland.com/", "MyWebSite"); // raw data will NOT be collected
  end TRawDataNameType;
親トピック: Measurement Functions
関連タスク
生測定値データ収集を有効にする
関連資料
MeasureSetOption Function
MeasureCalculateRawPercentiles Function
MeasureTimeseries Function
生測定値データのファイル サイズの統計値


Memory Functions

Silk Performer provides some predefined functions for the allocation of dynamic buffers. A buffer can only be allocated in this way, using the Malloc function (beside that, it is obviously possible to re-use a previously initialized buffer). Finally, when allocated memory is not needed any longer, it has to be release by using the Free function.

  • Adr Function
    Retrieves the memory address of a variable or string constant
  • Free Function
    Releases allocated memory
  • Malloc Function
    Allocates memory blocks
  • Memcpy Function
    Copies characters between two memory pointers.
  • Memset Function
    Sets a number of characters of a memory buffer to a specified character
親トピック: General Functions


Adr Function

Action

Retrieves the memory address of a variable or string constant. Therefore it acts like the “&” operator in C.

Include file

Kernel.bdh

Syntax

Adr( in sString : string ): number;

Return value

address of variable

Parameter | Description
sString | Variable or string constant

Example

dcltrans
  transaction TAdr
  var
    sString : string(10);
    nAddress : number;
  begin
    // nAddress receives the address of the string sString
    nAddress := Adr(sString);
    Memset(nAddress, 0, 10);
    write("address = "); write(nAddress); writeln;
  end TAdr;

Output

address = 8721488
親トピック: Memory Functions


Free Function

Action

Releases memory that was allocated with Malloc.

Include file

Kernel.bdh

Syntax

Free( in hMem : number );
Parameter | Description
hMem | Pointer to allocated memory

Example

dcltrans
  transaction TFree
  var
    nBuffer: number;
  begin
    // allocate a buffer of 10 bytes
    nBuffer := Malloc(10);
    write("memory successfully allocated"); writeln;

    // free memory referenced by nBuffer
    Free(nBuffer);
    write("memory released"); writeln;
  end TFree;

Output

memory successfully allocated
memory released
親トピック: Memory Functions
関連資料
Malloc Function


Malloc Function

Action

Allocates memory blocks.

Include file

Kernel.bdh

Syntax

Malloc (in nSize : number ): number;

Return value

Pointer to the allocated space. Unless Silk Performer is able to allocate the specified amount of memory, the simulation is aborted.

Parameter | Description
nSize | Size of allocated space in bytes

Example

dcltrans
  transaction TMalloc
  var
    nBuffer: number;
  begin
    // allocate a buffer of 10 bytes
    nBuffer := Malloc(10);
    write("memory successfully allocated"); writeln;

    // free memory referenced by nBuffer
    Free(nBuffer);
    write("memory released"); writeln;
  end TMalloc;

Output

memory successfully allocated
memory released
親トピック: Memory Functions
関連資料
Free Function
Memcpy Function
Memset Function


Memcpy Function

Action

Copies characters between two memory pointers.
注: This function is obsolete. It can still be used, although it's recommended to use the SetMem function instead.

Include file

Kernel.bdh

Syntax

Memcpy( inout sDest   : string,
        in    sSource : string,
        in    nCount  : number ): number;

Return value

value of nDest

Parameter | Description
sDest | Pointer to destination buffer
sSource | Pointer to buffer to copy from
nCount | Number of bytes to copy

Example

dcltrans
  transaction TMemcpy
  var
    sSource, sDest : string;
  begin
    sSource := Malloc(10);
    sDest   := Malloc(10);

    Memset(sSource, ord('*'), 10);
    write("source buffer initialized"); writeln;
    Memcpy(sDest, sSource, 10);
    write("buffer copied"); writeln;
    Free(sSource); Free(sDest);
  end TMemcpy;

Output

source buffer initialized
buffer copied
親トピック: Memory Functions
関連資料
Free Function
Memset Function


Memset Function

Action

Sets nCount characters of a memory buffer to a specified character.

Include file

Kernel.bdh

Syntax

Memset( in hDest  : number,
        in nChar  : number,
        in nCount : number ): number;

Return value

address of the destination memory pointer

Parameter | Description
hDest | Pointer to destination buffer
nChar | ASCII value of the copied character
nCount | Number of characters

Example

dcltrans
  transaction TMemset
  var
    nBuffer: number;
  begin
    nBuffer := Malloc(10);
    Memset(nBuffer, ord('*'), 10);
    write("buffer initialized"); writeln;
    Free(nBuffer);
  end TMemset;

Output

buffer initialized
親トピック: Memory Functions
関連資料
Memcpy Function
Free Function
Malloc Function


Process Control Functions

Silk Performer provides the following process control functions:

  • ProcessGetEnv Function
    Gets the value for an environment variable key.
  • ProcessGetState Function
    Returns the state of the specified process.
  • ProcessWait Function
    Waits for a running detached process.
  • ProcessInitialize Function
    Initializes a process that is started later with the ProcessStart function.
  • ProcessKill Function
    Kills a single process (PROCESS_KILLSINGLE) or a list of processes (PROCESS_KILLALL).
  • ProcessSetEnv Function
    Sets an environment variable for a process.
  • ProcessSetErrorBuffer Function
    Saves the error output of the process to a string buffer.
  • ProcessSetOutputBuffer Function
    Save the output of the process to a string buffer.
  • ProcessSetStdInFile Function
    Sets a standard input file before starting a process.
  • ProcessStart Function
    Creates a new operating-system process and executes it.
  • ProcessFree Function
    Frees the memory allocated by ProcessInitialize for a process specified by its handle, hProc.
親トピック: General Functions


ProcessGetEnv Function

Action

Gets the value for an environment variable key.

重要: This function must be called before the ProcessStart function and after the ProcessInitialize function.
注: This function can be called more than once (for every environment variable).

Include file

Kernel.bdh

Syntax

ProcessGetEnv( in  hProc      : number,
               in  sKey       : string,
               out sValue     : string,
               in  nValueSize : number ): boolean;

Return value

  • true if successful.

  • false in case of an error. The GetLastError function may be used to retrieve the system error code.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.
sKey | Specifies the environment variable whose value is being retrieved (e.g. "temp" or "path").
sValue | This parameter retrieves the value of the specified environment variable.
nValueSize | Length of the string that receives the value for the environment variable.

Example

dcltrans
  transaction TMain
  var
    hFile      : number;
    hProcessId : number;
    nStatus    : number;
    nRead      : number;
    sData      : string;
    sPath      : string;
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize("application1.exe", PROCESS_DETACHED,
                     "", "c:\\temp\\", "c:\\temp\\out.txt");

    // set environment variable "path"
    ProcessGetEnv(hProcessId, "path", sPath, STRING_COMPLETE);
    sPath := sPath + "c:\\application1\\;";
    ProcessSetEnv(hProcessId, "path", sPath);
    RepMessage(sPath,SEVERITY_ERROR);

    // start the process
    ProcessStart(hProcessId);

    // Wait for process to finish
    Wait(25.0);

    // Kill the process if it hasn't finished yet
    nStatus := ProcessGetState(hProcessId);
    if (nStatus <> PROCESS_STATE_FINISHED) then
      ProcessKill(hProcessId, PROCESS_KILLSINGLE);
    end;

    // Read the output of the process, written to a file
    FOpen(hFile, "c:\\temp\\out.txt", OPT_FILE_ACCESS_READ, OPT_FILE_OPEN);
    while FRead(hFile, sData, 1, nRead) do
      Write(sData);
    end;

    FClose(hFile);
    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessGetState Function
ProcessKill Function
ProcessSetEnv Function
ProcessInitialize Function


ProcessGetState Function

Action

Returns the state of the specified process.

重要: This function must be called after the ProcessInitialize function.
注: This function can be called more than once (for every environment variable).

Include file

Kernel.bdh

Syntax

ProcessGetState( in hProc : number ): number;

Return value

If the function is successful, the status of the process is returned, which can be one of the following:

  • PROCESS_STATE_INITIALIZED : The process is initialized, but not started yet.

  • PROCESS_STATE_EXECUTING : The process was started and is now running.

  • PROCESS_STATE_FINISHED : The process has finished successfully.

  • PROCESS_STATE_TIMEDOUT : The process has timed out, which means that it was started attached (or piped) and did not respond within a finite time.

In case of an error 0 is returned.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.

Example

dcltrans
  transaction TMain
  var
    hFile      : number;
    hProcessId : number;
    nStatus    : number;
    nRead      : number;
    sData      : string;
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize ("application1.exe", PROCESS_DETACHED,
                        "", "c:\\temp\\", "c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp", "c:\\temp\\");
    ProcessStart(hProcessId);

    // Wait for process to finish
    Wait(25.0);

    // Kill the process if it hasn't finished yet
    nStatus := ProcessGetState(hProcessId);
    if (nStatus <> PROCESS_STATE_FINISHED) then
      ProcessKill(hProcessId,PROCESS_KILLSINGLE);
    end;

    // Read the output of the process, written to a file
    FOpen(hFile, "c:\\temp\\out.txt", OPT_FILE_ACCESS_READ, OPT_FILE_OPEN);
    while FRead(hFile, sData, 1, nRead) do
      Write(sData);
    end;

    FClose(hFile);
    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessGetEnv Function
ProcessKill Function
ProcessSetEnv Function
ProcessInitialize Function


ProcessWait Function

Action

Waits for a running detached process.

Include file

Kernel.bdh

Syntax

ProcessWait(
     in hProc    : number,
     in nTimeout : number optional ): number;

Return value

If the function is successful, the status of the process is returned, which can be :

  • PROCESS_FINISHED (8) : The process has finished.

  • PROCESS_TIMED_OUT (-1) : The process is still running, timeout occured.

  • PROCESS_WAIT_FAILED (-2) : The process is not running, wrong handle etc.

Parameter | Description
hProc | The handle which identifies the process. The handle is returned by ProcessInitialize and must have been started by ProcessStart.
nTimeout | Maximum wait time in milliseconds.
注: ProcessWait must be called after ProcessStart and after ProcessInitialize.
注: ProcessWait can be called more than once (for every environment variable).

親トピック: Process Control Functions


ProcessInitialize Function

Action

Initializes a process that is started later with the ProcessStart function.

To avoid memory leaks, make sure to call the ProcessFree function at the end of the script.

Include file

Kernel.bdh

Syntax

ProcessInitialize( in sCmdLine    :string,
                   in nFlags      : number optional,
                   in sParams     : string optional,
                   in sWorkingDir : string optional,
                   in sStdOutFile : string optional,
                   in sStdErrFile : string optional,
                   in nTimeOut    : number optional,
                   in sUser       : string optional,
                   in sPwd        : string optional ): number;

Return value

If the function is successful, a handle to the process is returned (the handle is greater than zero). This handle must be used for the other functions with the prefix Process.

In case of an error 0 is returned. The GetLastError function may be used to retrieve the system error code.

Parameter | Description
sCmdLine | Command line of the application to be started.
nFlags

Process related flags. You can use the following flags to influence the behavior of the executed application:

  • PROCESS_ATTACHED: The started application is a child of the current process. If the current process is killed, the started process is automatically killed (e.g. when pressing "Stop" the process that was started with the function ProcessStart, is killed). Silk Performer waits for the child process to complete.

  • PROCESS_DETACHED: The started process is not attached to the process that called it. Silk Performer waits for the new process to complete (you must use ProcessWait).

  • PROCESS_PIPED: The output of the started process is sent to the Silk Performer GUI. The started process is automatically attached. If the current process is killed, the started process is automatically killed (e.g. when pressing "Stop" the process that was started with the function ProcessStart, is killed).
sParams | Parameters for the executed application.
sWorkingDir | Specifies the current drive and directory for the started process. If this parameter is NULL, the new process will have the same current drive and directory as the calling process.
sStdOutFile | The file where the output is sent to.
sStdErrFile | The file where the error output is sent to.
nTimeOut | TimeOut for the process in seconds. This parameter is only of importance when the process is started attached or piped. If the process doesn’t end within this time interval (in seconds), it will be terminated. If this parameter is not set or is set to zero, then the ProcessStart function will wait for the termination of the started process.
sUser

Account used to run the new process. If the account is not specified, the new process takes up the account of it's creator.

注: It is only possible to start the process in the context of another account if no other user is logged in. But it is possible to start a process if the script is executed in the context of a special account which is called system account. When running a test then under normal circumstances the system account is used.

The user account of the process must have the SE_TCB_NAME privilege (in User Manager, this is the "Act as part of the Operating System" right). The SE_TCB_NAME privilege is very powerful and should not be granted to any arbitrary user just so that they can run an application that needs to validate credentials.
sPwd | Password for the account.

Example

dcltrans
  transaction TMain
  var
    hFile      : number;
    hProcessId : number;
    nStatus    : number;
    nRead      : number;
    sData      : string;
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize ("application1.exe", PROCESS_DETACHED,
                  "", "c:\\temp\\", "c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp", "c:\\temp\\");
    ProcessStart(hProcessId);

    // Wait for process to finish
    Wait(25.0);

    // Kill the process if it hasn't finished yet
    nStatus := ProcessGetState(hProcessId);

    if (nStatus <> PROCESS_STATE_FINISHED) then
      ProcessKill(hProcessId, PROCESS_KILLSINGLE);
    end;

    // Read the output of the process, written to a file
    FOpen(hFile, "c:\\temp\\out.txt", OPT_FILE_ACCESS_READ, OPT_FILE_OPEN);

    while FRead(hFile, sData, 1, nRead) do
      Write(sData);
    end;

    FClose(hFile);
    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessFree Function
ProcessGetEnv Function
ProcessGetState Function
ProcessKill Function
ProcessSetEnv Function


ProcessKill Function

Action

Kills a single process (PROCESS_KILLSINGLE) or a list of processes (PROCESS_KILLALL).

Include file

Kernel.bdh

Syntax

ProcessKill( in hProc  : number,
             in nFlags : number optional ):nboolean;

Return value

  • true if successful.

  • false in case of an error. The GetLastError function may be used to retrieve the system error code.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.
nFlags

Can be one of following values :

  • PROCESS_KILLSINGLE : Only the process specified by hProc is killed.

  • PROCESS_KILLALL : All processes that were started after the process (specified by hProc ) are killed.

Example

dcltrans
  transaction TMain
  var
    hFile      : number;
    hProcessId : number;
    nStatus    : number;
    nRead      : number;
    sData      : string;
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize ("application1.exe", PROCESS_DETACHED,
                      "", "c:\\temp\\", "c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp", "c:\\temp\\");
    ProcessStart(hProcessId);

    // Wait for process to finish
    Wait(25.0);

    // Kill the process if it hasn't finished yet
    nStatus := ProcessGetState(hProcessId);
    if (nStatus <> PROCESS_STATE_FINISHED) then
      ProcessKill(hProcessId, PROCESS_KILLSINGLE);
    end;

    // Read the output of the process, written to afile
    FOpen(hFile, "c:\\temp\\out.txt", OPT_FILE_ACCESS_READ, OPT_FILE_OPEN);
    while FRead(hFile, sData, 1, nRead) do
      Write(sData);
    end;

    FClose(hFile);
    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessGetEnv Function
ProcessGetState Function
ProcessSetEnv Function
ProcessInitialize Function
ProcessStart Function
GetLastError Function


ProcessSetEnv Function

Action

Sets an environment variable for a process.

重要: This function must be called before the ProcessStart function and after the ProcessInitialize function.
注: This function can be called more than once (for every environment variable).

Include file

Kernel.bdh

Syntax

ProcessSetEnv( in hProc  : number,
               in sKey   : string,
               in sValue : string optional): boolean;

Return value

  • true if successful.

  • false in case of an error. The GetLastError function may be used to retrieve the system error code.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.
sKey | Specifies the environment variable of which the value is being set.
sValue | This parameter contains the new value of the specified environment variable (optional). If this parameter is NULL, the variable is deleted from the environment of the current process.

Example

dcltrans
  transaction TMain
  var
    hFile      : number;
    hProcessId : number;
    nStatus    : number;
    nRead      : number;
    sData      : string;
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize ("application1.exe", PROCESS_DETACHED,
                    "", "c:\\temp\\","c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp","c:\\temp\\");
    ProcessStart(hProcessId);

    // Wait for process to finish
    Wait(25.0);

    // Kill the process if it hasn't finished yet
    nStatus := ProcessGetState(hProcessId);

    if (nStatus <> PROCESS_STATE_FINISHED) then
      ProcessKill(hProcessId, PROCESS_KILLSINGLE);
    end;

    // Read the output of the process, written to a file
    FOpen(hFile, "c:\\temp\\out.txt", OPT_FILE_ACCESS_READ, OPT_FILE_OPEN);

    while FRead(hFile, sData, 1, nRead) do
      Write(sData);
    end;

    FClose(hFile);
    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessGetEnv Function
ProcessGetState Function
ProcessKill Function
ProcessInitialize Function
GetLastError Function
ProcessStart Function


ProcessSetErrorBuffer Function

Action

Saves the error output of the process to a string buffer.

重要: This function must be called before the ProcessStart function and after the ProcessInitialize function.
注: Does only work if the process is started PIPED. For this the parameter nFlag of the function ProcessInitialize must be set to PROCESS_PIPED.

Include file

Kernel.bdh

Syntax

ProcessSetErrorBuffer( in hProc          :number,
                       in sBuffer        :string,
                       in nBufferLen     :number optional,
                       in sLineSeparator :stringoptional ): boolean;

Return value

  • true if successful.

  • false in case of an error. The GetLastError function may be used to retrieve the system error code.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.
sBuffer | Pointer to the buffer used for writing the error output of the process.
sBufferLen | Maximum size of the string buffer (optional).
sLineSeparator | The line separator which is placed between every line in the string buffer. If it is null, nothing is placed between the particular lines (optional).

Example

dcltrans
  transaction TMain
  var
    hProcessId   : number;
    sBuffer      : string(4096);
    sErrorBuffer : string(2048);
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize("application1.exe", PROCESS_PIPED,
                                     "","c:\\temp\\","", "c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp", "c:\\temp\\");
    ProcessSetOutputBuffer(hProcessId, sBuffer, STRING_COMPLETE, ";");
    ProcessSetErrorBuffer(hProcessId, sErrorBuffer);
    ProcessStart(hProcessId);
    Print("StdOut: " + sBuffer);
    Print("ErrorOut: " + sErrorBuffer);

    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessGetState Function
ProcessKill Function
ProcessStart Function
ProcessInitialize Function
GetLastError Function


ProcessSetOutputBuffer Function

Action

Saves the output of the process to a string buffer.

重要: This function must be called before the ProcessStart function and after the ProcessInitialize function.
注: Does only work if the process is started PIPED. For this the parameter nFlag of the function ProcessInitialize must be set to PROCESS_PIPED.

Include file

Kernel.bdh

Syntax

ProcessSetOutputBuffer( in hProc          :number,
                        in sBuffer        :string,
                        in nBufferLen     :number optional,
                        in sLineSeparator :string optional ): boolean;

Return value

  • true if successful.

  • false in case of an error. The GetLastError function may be used to retrieve the system error code.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.
sBuffer | Pointer to the buffer used for writing the process output.
sBufferLen | Maximum size of the string buffer (optional).
sLineSeparator | The line separator which is placed between every line in the string buffer. If it is null, nothing is placed between the particular lines (optional).

Example

dcltrans
  transaction TMain
  var
    hProcessId : number;
    sBuffer : string(4096);
    sErrorBuffer : string(2048);
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize("application1.exe", PROCESS_PIPED,
                                      "", "c:\\temp\\", "c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp", "c:\\temp\\");
    ProcessSetOutputBuffer(hProcessId, sBuffer, STRING_COMPLETE, ";");
    ProcessSetErrorBuffer(hProcessId, sErrorBuffer);
    ProcessStart(hProcessId);
    Print("StdOut: " + sBuffer);
    Print("ErrorOut: " + sErrorBuffer);

    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
GetLastError Function
ProcessKill Function
ProcessStart Function
ProcessInitialize Function
ProcessGetState Function


ProcessSetStdInFile Function

Action

Sets a standard input file before starting a process.

Setting an input file is sometimes necessary (undocumented Windows requirement) when redirecting output, for example xcopy.

Include file

kernel.bdh

Syntax

ProcessSetStdInFile(
      in hProcess       : number,
      in sStdInFileName : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hProcess | The handle which identifies the process. The handle is returned by ProcessInitialize.
sStdInFileName | Name of the input file.
注: ProcessSetStdInFile only works if the process is initialized with the flags PROCESS_PIPED or PROCESS_ATTACHED, and must be called before ProcessStart and after ProcessInitialize.

Example

transaction TmyTrans1
  var
    iProcess : number;
    iStatus  : number;
  begin
    iProcess := ProcessInitialize("cmd",
      PROCESS_ATTACHED,
      "/C xcopy \\bin\\debug \\temp /y",
      "T:\\bin\\release",
      "T:\\temp\\xcopyout.log",
      "T:\\temp\\xcopyerr.log");
    ProcessSetStdInFile(iProcess,"T:\\temp\\xcopyin.log");
    ProcessStart(iProcess);
    iStatus := PROCESS_STATE_EXECUTING;
    while (iStatus = PROCESS_STATE_EXECUTING) do
      wait 1.0;
      iStatus := ProcessGetState(iProcess);
    end;

    ProcessFree(iProcess);
  end TmyTrans1;

親トピック: Process Control Functions


ProcessStart Function

Action

Creates a new operating-system process and executes it.

Include file

Kernel.bdh

Syntax

ProcessStart( in hProc : number ): boolean;

Return value

  • true if successful.

  • false in case of an error. The GetLastError function may be used to retrieve the system error code.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.

Example

dcltrans
  transaction TMain
  var
    hFile      : number;
    hProcessId : number;
    nStatus    : number;
    nRead      : number;
    sData      : string;
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize("application1.exe", PROCESS_DETACHED,
                        "", "c:\\temp\\", "c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp", "c:\\temp\\");
    ProcessStart(hProcessId);

    // Wait for process to finish
    Wait(25.0);

    // Kill the process if it hasn't finished yet
    nStatus := ProcessGetState(hProcessId);

    if (nStatus <> PROCESS_STATE_FINISHED) then
      ProcessKill(hProcessId, PROCESS_KILLSINGLE);
    end;

    // Read the output of the process, written to a file
    FOpen(hFile, "c:\\temp\\out.txt", OPT_FILE_ACCESS_READ, OPT_FILE_OPEN);

    while FRead(hFile, sData, 1, nRead) do
      Write(sData);
    end;

    FClose(hFile);
    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessKill Function
ProcessSetEnv Function
ProcessGetState Function


ProcessFree Function

Action

Frees the memory allocated by ProcessInitialize for a process specified by its handle, hProc.

Include file

Kernel.bdh

Syntax

ProcessFree( in hProc  : number ): boolean;

Return value

  • true if successful

  • false in the case of errors. The GetLastError function may be used to retrieve system error code.

Parameter | Description
hProc | The handle that identifies the process. It is returned by the ProcessInitialize function.

Example

dcltrans
  transaction TMain
  var
    hFile      : number;
    hProcessId : number;
    nStatus    : number;
    nRead      : number;
    sData      : string;
  begin
    // Create process and start it up...
    hProcessId := ProcessInitialize("application1.exe", PROCESS_DETACHED,
                         "", "c:\\temp\\", "c:\\temp\\out.txt");
    ProcessSetEnv(hProcessId, "temp","c:\\temp\\");
    ProcessStart(hProcessId);

    // Wait for process to finish
    Wait(25.0);

    // Kill the process if it hasn't finished yet
    nStatus := ProcessGetState(hProcessId);

    if (nStatus <> PROCESS_STATE_FINISHED) then
      ProcessKill(hProcessId, PROCESS_KILLSINGLE);
    end;

    // Read the output of the process, written to a file
    FOpen(hFile, "c:\\temp\\out.txt", OPT_FILE_ACCESS_READ, OPT_FILE_OPEN);

    while FRead(hFile, sData, 1, nRead) do
      Write(sData);
    end;

    FClose(hFile);
    ProcessFree(hProcessID);
  end TMain;
親トピック: Process Control Functions
関連資料
ProcessInitialize Function
ProcessStart Function


Synchronization Functions

A number of Silk Performer functions allow you to either serialize or synchronize transactions in your testing scripts in order to better control the timing of loads in your simulation. Serialization enables you to test the effects of transactions executed one at a time. For example, this could be useful to serialize logging into a Web application if the application is not able to handle a huge number of concurrent logins. Synchronization is useful in testing the effects of a large number of simultaneously called transactions. This allows you to create stress on your system in order to test specific concurrency issues.

The following functions maintain information across agents. Each call to one of the functions initiates a call from the local user to the local agent and finally to the controller. Since each call produces network traffic, these functions should be used carefully.

  • GlobalWaitFor
  • GlobalResourceEnter
  • GlobalResourceRelease
  • GlobalVarSet
  • GlobalVarGet
  • GlobalVarInc
The following functions can be used to serialize and synchronize user actions on a particular agent computer.
  • WaitFor
  • CreateMutex
  • ReleaseMutex
  • CreateEvent
  • PulseEvent
  • WaitForSingleObject
  • CreateEventEx
  • CloseHandle
  • CreateMutexEx
  • CreateSemaphore
  • ReleaseSemaphore
  • GlobalWaitFor Function
    Defines a checkpoint (rendezvous point) and blocks the calling user.
  • GlobalResourceEnter Function
    Defines a resource that can be occupied by only a limited number of users.
  • GlobalResourceRelease Function
    Releases a global resource.
  • GlobalVarSet Function
    Sets the value of a global integer variable.
  • GlobalVarGet Function
    Gets the value of a global integer variable.
  • GlobalVarInc Function
    Increments the value of a global integer variable.
  • WaitFor Function
    Waits for a number of users to call this function
  • CreateEvent Function
    Uses the Win32 CreateEventEx function to create a named event object.
  • CreateEventEx Function
    Creates a named or unnamed event object (Win32 function)
  • CreateMutex Function
    Uses the CreateMutexEx function to create a named mutex object.
  • CreateMutexEx Function
    Creates a mutex object (Win32 function).
  • PulseEvent Function
    Provides a single operation that sets (to signaled) the state of a specified event object and then resets it (to nonsignaled) after releasing the appropriate number of waiting threads.
  • ReleaseMutex Function
    Releases ownership of the specified mutex object.
  • WaitForSingleObject Function
    Waits until an object is in the signaled state or the specified timeout interval elapses
  • CloseHandle Function
    Closes an open object handle
  • CreateSemaphore Function
    Creates a named or unnamed semaphore object.
  • ReleaseSemaphore Function
    Increases the value of a given semaphore object.
  • SetEvent Function
    Sets the specified event object to the signaled state.
  • ResetEvent Function
    Resets the specified event object to a non-signaled state.
  • UserSignal Function
    Is used to notify a virtual user, which is in a waiting state as a result of having called the UserWaitFor function.
  • UserWaitFor Function
    Pauses the execution of a virtual user until notified to continue.
親トピック: General Functions


GlobalWaitFor Function

Action

Defines a checkpoint (rendezvous point) and blocks the calling user. The caller waits until a specified number of users (himself inclusive) have reached or passed the checkpoint, or until the specified timeout occurs. The checkpoint is identified by name and is visible for all users, including those running on various remote agents.

A waiting user continues when the specified timeout is reached or the given number of users have called the function for a checkpoint. A user who was timed out has passed the checkpoint and is also regarded as a user who has passed this checkpoint.

注: The time that a virtual user spends in this synchronization function does not influence the transaction busy time.

Include file

Kernel.bdh

Syntax

GlobalWaitFor( in sName    : string,
               in nCount   : number optional,
               in nTimeout : number optional ): number;

Return value

  • GLOBAL_ERROR if an error like an invalid number of users at the checkpoint occurred. To get more information, call the GetLastError function.
  • GLOBAL_CANCELED if the waiting period was canceled by the controller computer.
  • GLOBAL_TIMEOUT if the waiting period exceeded the defined timeout and the user continues the simulation.
  • GLOBAL_PASSED if all users have reached the checkpoint the user was waiting for and the user continues the simulation.
  • GLOBAL_SYNCHRONIZED if all users have reached the checkpoint the user was waiting for. The user was the last one to enter the checkpoint and continues the simulation.
Parameter | Description
sName | Name to identify the checkpoint
nCount | Number of users who must reach or pass the checkpoint (optional). To specify to wait for all users, omit this parameter or specify ALL_USERS.
nTimeout | Maximum waiting time in seconds before a timeout occurs (optional). If this parameter is omitted, the timeout is set to INFINITE.

Example

var
  hConnection: number;
dcltrans
  transaction TLogon
  var
    nRet: number;
begin
  OraLogon(hConnection, "user", "password", "orclnet2");
  nRet := GlobalWaitFor("All are logged in", ALL_USERS, 300);
  if nRet = GLOBAL_SYNCHRONIZED then
    Print("I am the last user at the checkpoint");
  end;
end TLogon;
親トピック: Synchronization Functions
関連資料
GlobalResourceEnter Function
GlobalResourceRelease Function


GlobalResourceEnter Function

Action

Defines a resource that can be occupied by only a limited number of users. The caller has to wait until the number of users who occupy the resource is less than the maximum number of users who are allowed to occupy the resource. To releases a resource, call the GlobalResourceRelease function.

注: The time that a virtual user spends in this synchronization function does not influence the transaction busy time.

Include file

Kernel.bdh

Syntax

GlobalResourceEnter( in sName    : string,
                     in nCount   : number optional,
                     in nTimeout : number optional ): number;

Return value

  • GLOBAL_ERROR if an error like an invalid number of users for the resource occurred. To get more information, call the GetLastError function.
  • GLOBAL_CANCELED if the waiting period was canceled by the controller.
  • GLOBAL_TIMEOUT if the waiting period exceeded the defined timeout and the user continues the simulation.
  • GLOBAL_PASSED if the user has occupied the resource and continues the simulation.
Parameter | Description
sName | Name to identify a resource.
nCount | Number of users who are allowed to enter the resource (optional). If this parameter is omitted, only one user is allowed to enter the resource.
nTimeout | Maximum waiting time in seconds before a timeout occurs (optional). If this parameter is omitted, the timeout is set to INFINITE.

Example

var
  hConnection: number;

dcltrans
  transaction TLogon
  var
    nRet: number;
  begin
    GlobalResourceEnter("Max 5 logins at a time", 5);
    OraLogon(hConnection, "user", "password", "orclnet2");
    GlobalResourceRelease("Max 5 logins at a time");
    GlobalWaitFor("All are logged in");
  end TLogon;
親トピック: Synchronization Functions
関連資料
GlobalWaitFor Function
GlobalResourceRelease Function
GetLastError Function


GlobalResourceRelease Function

Action

Releases a resource that was occupied with the GlobalResourceEnter function. If there are any users waiting for the resource, the next user in the queue resumes the simulation.

注: The time that a virtual user spends in this synchronization function does not influence the transaction busy time.

Include file

Kernel.bdh

Syntax

GlobalResourceRelease( in sName: string );
Parameter | Description
sName | Name that identifies a resource.

Example

var
  hConnection: number;

dcltrans
  transaction TLogon
  var
    nRet: number;
  begin
    GlobalResourceEnter("Max 5 logins at a time", 5);
    OraLogon(hConnection, "user", "password", "orclnet2");
    GlobalResourceRelease("Max 5 logins at a time");
    GlobalWaitFor("All are logged in");
  end TLogon;
親トピック: Synchronization Functions
関連資料
GlobalResourceEnter Function
GlobalWaitFor Function


GlobalVarSet Function

Action

Sets the value of a global integer variable. Global variables are accessible for all users running on all agents.

Include file

Kernel.bdh

Syntax

GlobalVarSet( in sVariable : string,
              in nValue    : number,
              in nTimeout  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sVariable | Name of the global variable whose value is to be set.
nValue | Value that is assigned to the global variable.
nTimeout | Optional: Timeout for setting the value in seconds. If the specified time period is exceeded, Silk Performer indicates an error. The function’s default behavior is to wait until the set operation is done.

Example

dcltrans
  transaction TInit
  begin
    if GetUserID() = 1 then
      GlobalVarSet("global counter", 1000);
    end;
    GlobalWaitFor("All", ALL_USERS);
  end TInit;
親トピック: Synchronization Functions
関連資料
GlobalVarGet Function
GlobalVarInc Function


GlobalVarGet Function

Action

Gets the value of a global integer variable. Global variables are accessible for all users on all agents.

Include file

Kernel.bdh

Syntax

GlobalVarGet( in  sVariable : string,
              out nValue    : number,
              in  nTimeout  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sVariable | Name of the global variable whose value is to be retrieved.
nValue | Variable receiving the value of the global variable.
nTimeout | Optional: Timeout for getting the value in seconds. If the specified time period is exceeded, Silk Performer indicates an error. The function’s default behavior is to wait until the get operation is done.

Example

dcltrans
  transaction TInit
  begin
    if GetUserID() = 1 then
      GlobalVarSet("global counter", 1000);
    end;
    GlobalWaitFor("All", ALL_USERS);
  end TInit;

  transaction TMain
  var
    nCount: number;
  begin
    GlobalVarGet("global counter", nCount);
    writeln(nCount);
  end TMain;
親トピック: Synchronization Functions
関連資料
GlobalVarSet Function
GlobalVarInc Function


GlobalVarInc Function

Action

Increments the value of a global integer variable. Global variables are accessible for all users on all agents.

注: You do not need to initialize a global variable before you increment it for the first time. This is done automatically, in the course of which the value of the variable is set to 0.

Include file

Kernel.bdh

Syntax

GlobalVarInc( in  sVariable : string,
              in  nInc      : number,
              out nValue    : number,
              in  nTimeout  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sVariable | Name of the global variable whose value is to be incremented.
nInc | Number that is added to the value of the specified global variable.
nValue | Variable receiving the value of the global variable after the increment operation.
nTimeout | Optional: Timeout for incrementing the value in seconds. If the specified time period is exceeded, Silk Performer indicates an error. The function’s default behavior is to wait until the increment operation is done.

Example

dcltrans
  transaction TInit
  begin
    if GetUserID() = 1 then
      GlobalVarSet("global counter", 1000);
    end;
    GlobalWaitFor("All", ALL_USERS);
  end TInit;

  transaction TMain
  var
    nCount: number;
  begin
    GlobalVarInc("global counter", 10, nCount);
    writeln(nCount);
  end TMain;
親トピック: Synchronization Functions
関連資料
GlobalVarGet Function
GlobalVarSet Function


WaitFor Function

Action

Waits for a number of users that call this function. It only synchronizes virtual users on one agent.

注: The time that a virtual user spends in this synchronization function does not influence the transaction busy time.

Include file

Kernel.bdh

Syntax

WaitFor( in sName    : string,
         in nCount   : number optional,
         in nTimeout : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the synchronization point
nCount | Number of users to wait for (optional). If this parameter is omitted, the function waits for all simulated users
nTimeout | Timeout of wait period in seconds (optional). If this parameter is omitted, the functions does not report a timeout

Example

dcltrans
  transaction TMain
  const
    WAITFOR_TIME_OUT := 10;
  begin
    ...
    // waits for 5 users rendezvousing at this point in the script
    if not WaitFor("Rendezvous", 5, WAITFOR_TIME_OUT) then
      write("time out\n"); halt;
    end;
    ...
  end TMain;

Sample scripts

Trans.bdf

親トピック: Synchronization Functions
関連資料
WaitForSingleObject Function


CreateEvent Function

Action

Uses the Win32 CreateEventEx function to create a named event object.

Include file

Kernel.bdh

Syntax

CreateEvent(in sEvtName: string): number;

Return value

handle to the event object

Parameter | Description
sEvtName | Name of the event object

Example

dcluser
user
Starter
transactions
TMain : begin;
EventStarter : 20;
CleanUp : end;
user
Seller(5)
transactions
TMain : begin;
Selling : 20;
CleanUp : end;
var
hEventGo: number; // handle for starting event
dcltrans
transaction TMain
begin
// creates a named event object
hEventGo := CreateEvent("MyStarterEvent");
...
...
end TMain;
transaction EventStarter
begin
wait 10.0;
// every 10 seconds the starter event forces all seller users
// to execute the selling transaction at the same time
PulseEvent(hEventGo);
end EventStarter;
transaction Selling
begin
WaitForSingleObject(hEventGo,12000); // wait maximal 12 sec.
...
end Selling;
transaction CleanUp
begin
CloseHandle(hEventGo);
end CleanUp;

Sample scripts

Trans.bdf

親トピック: Synchronization Functions
関連資料
CreateEventEx Function
CloseHandle Function


CreateEventEx Function

Action

Creates a named or unnamed event object (Win32 function).

Include file

Kernel.bdh

Syntax

CreateEventEx( in sSecAttr     : string,
               in bManualReset : boolean,
               in bInitSignal  : boolean,
               in sName        : string ): number;

Return value

Handle to event object.

Parameter | Description
sSecAttr | Specifies the security attributes for the event object
bManualReset

Specifies whether a manual-reset or auto-reset event object is created:

  • true for manual-reset

  • false for auto-reset
bInitSignal

Specifies the initial state of the event object:

  • true for signaled

  • false for unsignaled
sName | Name of the event object

Example

hEvent := CreateEventEx(NULL, true, false, "MyStarterEvent");
親トピック: Synchronization Functions
関連資料
CreateEvent Function
CloseHandle Function


CreateMutex Function

Action

Uses the Win32 CreateMutexEx function to create a named mutex object. Mutex objects are used to serialize access to critical sections inside transactions for multiple concurrent users.

Include file

Kernel.bdh

Syntax

CreateMutex( in sMtxName: string ): number;

Return value

handle to the mutex object

Parameter | Description
sMtxName | Name of the mutex object

Example

dcltrans
  transaction TCloseHandle
  var
    hMutex: number;
  begin
    hMutex := CreateMutex("MutexObject");
    write("mutex object created"); writeln;
    WaitForSingleObject(hMutex, INFINITE);
    ReleaseMutex(hMutex);
    write("mutex object released"); writeln;
    CloseHandle(hMutex);
    write("handle to mutex object closed"); writeln;
  end TCloseHandle;

Output

mutex object created
mutex object released
handle to mutex object closed

Sample scripts

MutexLogin.bdf

親トピック: Synchronization Functions
関連資料
CloseHandle Function
CreateMutexEx Function
ReleaseMutex Function


CreateMutexEx Function

Action

Creates a named or unnamed mutex object (Win32 function).

Include file

Kernel.bdh

Syntax

CreateMutexEx( in sSecAttr : string,
               in bInitOwn : boolean,
               in sMtxName : string): number;

Return value

handle to mutex object

Parameter | Description
sSecAttr | Specifies the security attributes for the mutex object
bInitOwn

Specifies the initial owner of the mutex object:

  • true for calling thread requests immediate ownership

  • false if the mutex is not owned
sMtxName | Name of the mutex object

Example

hMutex := CreateMutexEx(NULL, false, "MyConnectMutex");
親トピック: Synchronization Functions
関連資料
CreateMutex Function
ReleaseMutex Function
CloseHandle Function


PulseEvent Function

Action

Provides a single operation that sets (to signaled) the state of a specified event object and then resets it (to nonsignaled) after releasing the appropriate number of waiting threads.

Include file

Kernel.bdh

Syntax

PulseEvent( in hEvent : number ): boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
hEvent | Handle of event object

Example

var
  hEventGo : number; // handle for starting event

dcltrans
  transaction TInit
  begin
    hEventGo := CreateEvent("MyStarterEvent");
  end TInit;

  transaction TStarter
  begin
    wait 10.0;
    // every 10 seconds the starter event forces all users
    // to execute a transaction at the same time
    PulseEvent(hEventGo);
  end TStarter;

Sample scripts

Trans.bdf

親トピック: Synchronization Functions
関連資料
CreateEvent Function


ReleaseMutex Function

Action

Releases ownership of the specified mutex object.

Include file

Kernel.bdh

Syntax

ReleaseMutex(in hMutex: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMutex | Handle of the mutex object

Example

dcltrans
transaction TCloseHandle
var
hMutex: number;
begin
hMutex := CreateMutex("MutexObject");
write("mutex object created"); writeln;
WaitForSingleObject(hMutex, INFINITE);
ReleaseMutex(hMutex);
write("mutex object released"); writeln;
CloseHandle(hMutex);
write("handle to mutex object closed"); writeln;
end TCloseHandle;

Output

mutex object created
mutex object released
handle to mutex object closed

Sample scripts

Trans.bdf, MutexLogin.bdf

親トピック: Synchronization Functions
関連資料
CreateMutex Function


WaitForSingleObject Function

Action

Waits until the specified object is in the signaled state or until the time-out interval elapses.

Include file

Kernel.bdh

Syntax

WaitForSingleObject( in hHandle    : number,
                     in nTimeoutMs : number ): number;

Return value

  • WAIT_ABANDONED. The specified object is a mutex object that was not released by the thread that owned the mutex object before the owning thread terminated. Ownership of the mutex object is granted to the calling thread, and the mutex is set to nonsignaled.

  • WAIT_OBJECT_0. The state of the specified object is signaled.

  • WAIT_TIMEOUT. The time-out interval has elapsed and the object's state is nonsignaled.

Parameter | Description
hHandle | Handle of the object
nTimeoutMs

Specifies the time-out interval, in milliseconds

  • 0 = test object's state and return immediately

  • INFINITE = Time out interval never elapses

Example

dcltrans
  transaction TCloseHandle
  var
    hMutex: number;
  begin
    hMutex := CreateMutex("MutexObject");
    write("mutex object created"); writeln;
    WaitForSingleObject(hMutex, INFINITE);
    ReleaseMutex(hMutex);
    write("mutex object released"); writeln;
    CloseHandle(hMutex);
    write("handle to mutex object closed"); writeln;
  end TCloseHandle;

Output

mutex object created
mutex object released
handle to mutex object closed

Sample scripts

Trans.bdf, MutexLogin.bdf

親トピック: Synchronization Functions
関連資料
CreateMutex Function


CloseHandle Function

Action

Closes an open object handle previously opened with CreateEvent, CreateEventEx, CreateMutex or CreateMutexEx.

Include file

Kernel.bdh

Syntax

CloseHandle(in hHandle: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hHandle | Object handle to close

Example

dcltrans
transaction TCloseHandle
var
hMutex: number;
begin
hMutex := CreateMutex("MutexObject");
write("mutex object created"); writeln;
WaitForSingleObject(hMutex, INFINITE);
ReleaseMutex(hMutex);
write("mutex object released"); writeln;
CloseHandle(hMutex);
write("handle to mutex object closed"); writeln;
end TCloseHandle;

Output

mutex object created
mutex object released
handle to mutex object closed
親トピック: Synchronization Functions
関連資料
CreateMutex Function
CreateEventEx Function
CreateEvent Function


CreateSemaphore Function

Action

Creates a named or unnamed semaphore object.

Include file

Kernel.bdh

Syntax

CreateSemaphore(in nSecurity : number,
in nInitCount : number,
in nMaxCount : number,
in sName : string): number;

Return value

handle to the semaphore object

Parameter | Description
nSecurity | Security attributes for the semaphore object. This parameter must always be set to NULL.
nInitCount | Initial count for the semaphore object. This value must be greater than or equal to zero and less than or equal to nMaxCount. The initial count value is not set if the specified semaphore object already exists.
nMaxCount | Maximum count for the semaphore object. This value must be greater than zero. The maximum count value is not set if the specified semaphore object already exists.
sName | Name of the semaphore object.

Example

dcltrans
transaction TMain
constMAX_USERS := 25;
var
hSemaphore: number;
begin
hSemaphore := CreateSemaphore(NULL, MAX_USERS,
MAX_USERS, "semaphore");
...
WaitForSingleObject(hSemaphore, INFINITE);
// perform critical work
...
ReleaseSemaphore(hSemaphore, 1);
...
end TMain;
親トピック: Synchronization Functions
関連資料
ReleaseSemaphore Function


ReleaseSemaphore Function

Action

Increases the value of a given semaphore object by a specified amount.

Include file

Kernel.bdh

Syntax

ReleaseSemaphore(in hSemaphore : number,
in nIncrease : number,
out nValue : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSemaphore | Handle to a semaphore object
nIncrease | Amount by which the semaphore object's current value is increased
nValue | Variable receiving the semaphore object's value before the value is incremented (optional)

Example

dcltrans
transaction TMain
const
MAX_USERS := 25;
var
hSemaphore: number;
begin
hSemaphore := CreateSemaphore(NULL, MAX_USERS,
MAX_USERS, "semaphore");
...
WaitForSingleObject(hSemaphore, INFINITE);
// perform critical work
...
ReleaseSemaphore(hSemaphore, 1);
...
end TMain;
親トピック: Synchronization Functions
関連資料
CreateSemaphore Function


SetEvent Function

Action

Sets the specified event object to the signaled state. Execute this function on an event that was created with CreateEvent(). In contrast to the function PulseEvent(), SetEvent() raises an event but does not reset it automatically. Use the function ResetEvent() to reset the event manually.

Include file

kernel.bdh

Syntax

SetEvent( in hEvent : long ): boolean;
Parameter | Description
hEvent | event handle returned by CreateEvent()

Return value

  • true if successful

  • false otherwise

親トピック: Synchronization Functions


ResetEvent Function

Action

Resets the specified event object to a non-signaled state. Execute this function on an event that was created with CreateEvent().

Include file

kernel.bdh

Syntax

ResetEvent( in hEvent : long ): boolean;
Parameter | Description
hEvent | event handle returned by CreateEvent()

Return value

  • true if successful

  • false otherwise

親トピック: Synchronization Functions


UserSignal Function

Action

Is used to notify a virtual user, which is in a waiting state as a result of having called the UserWaitFor function. UserSignal is typically called from within a callback function in order to notify a virtual user about a particular event. The function takes a name as parameter to identify an event object to be signaled.

The scope of this function is the virtual user context, which means that virtual users that use the same event object do not interfere with each other.

Include file

kernel.bdh

Syntax

UserSignal( in sWaitObjectName : string ): boolean;
Parameter | Description
sWaitObjectName | Name to identify the event object to be signaled.

Return value

  • True if the event object was signaled.
  • False otherwise. The virtual user logs an error message.

Example

dclfunc
  function FAsyncCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>
  begin
    RepMessage("MESSAGE: '" + sResponseBody + "'", SEVERITY_INFORMATIONAL);
    if (StrSearch(sResponseBody, "last message", STR_SEARCH_FIRST) <> 0) then
      UserSignal("LastMessage");
    end;
  end FAsyncCallback;

dcltrans
  transaction TMainListen
  var
    nAsyncChannel : number;
  begin
    WebPageUrl("http://lnz-testsite:8080/atmosphere-meteor-pubsub-2.0.3/", "/atmosphere-meteor-pubsub-2.0.3/");
    nAsyncChannel := WebAsyncPreparePush(callback(FAsyncCallback));
    WebFormGet("http://lnz-testsite:8080/atmosphere-meteor-pubsub-2.0.3/pubsub/mychannel_1234",
      METEOR_PUB_SUB_FORM);

    UserWaitFor("LastMessage", 60);

    WebAsyncStop(nAsyncChannel);

  end TMainListen;
親トピック: Synchronization Functions


UserWaitFor Function

Action

Pauses the execution of a virtual user until notified to continue. The notification is typically sent from within a callback function. UserWaitFor takes a name as parameter to identify an event object that can be signaled by the UserSignal function.

The scope of this function is the virtual user context, which means that virtual users that use the same event object, do not interfere with each other.

Include file

kernel.bdh

Syntax

UserWaitFor( in sWaitObjectName : string
             in nTimeout        : number optional ): boolean;
Parameter | Description
sWaitObjectName | Name to identify the event object, which a virtual user is waiting to be signaled for
nTimeout | Optional: Timeout for setting the value in seconds. If the specified time period is exceeded, the virtual user indicates an error and continues execution. The function's default behaviour is to wait forever.

Return value

  • True if the event object was signaled within the specified timeout.
  • False otherwise. If an error other than a timeout occurred, the virtual user logs an error message.

Example

dclfunc
  function FAsyncCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>
  begin
    RepMessage("MESSAGE: '" + sResponseBody + "'", SEVERITY_INFORMATIONAL);
    if (StrSearch(sResponseBody, "last message", STR_SEARCH_FIRST) <> 0) then
      UserSignal("LastMessage");
    end;
  end FAsyncCallback;

dcltrans
  transaction TMainListen
  var
    nAsyncChannel : number;
  begin
    WebPageUrl("http://lnz-testsite:8080/atmosphere-meteor-pubsub-2.0.3/", "/atmosphere-meteor-pubsub-2.0.3/");
    nAsyncChannel := WebAsyncPreparePush(callback(FAsyncCallback));
    WebFormGet("http://lnz-testsite:8080/atmosphere-meteor-pubsub-2.0.3/pubsub/mychannel_1234",
      METEOR_PUB_SUB_FORM);

    UserWaitFor("LastMessage", 60);

    WebAsyncStop(nAsyncChannel);

  end TMainListen;
親トピック: Synchronization Functions


Random Functions

Random variables are used for generating random input values, specifying random repetition factors, specifying the probability of running transaction sections, and specifying random user times. You can use certain random functions directly within transactions without having to define a random variable. All random variables are defined in the dclrand section of a test script.

Silk Performer includes the following random functions:

  • Reset Function for RndPerN
    Re-initializes a random variable
  • Reset Function for RndStream
    Re-initializes a random variable.
  • RndSeed Function
    Initializes the random number generator.
  • RndFormatDate Function
    Adds a random number of days to a date and converts the date into a specified format.
  • SetRandomTransactions Function
    Specifies whether to perform all transactions in random or sequential order.
  • GetRandomTransactions Function
    Retrieves the current setting that determines whether to perform all transactions in random or sequential order.
  • SetSmoothArrivalRate Function
    Determines whether to force each virtual user to perform all transactions within the specified simulation interval.
  • GetSmoothArrivalRate Function
    Retrieves the current settings that determines whether to force each virtual user to perform all transactions within the specified simulation interval.
  • SetRandomThinkTime Function
    Enables randomization for the thinktime periods specified in several functions.
  • GetRandomThinkTime Function
    Reads state of randomization using an exponential distribution for the thinking periods specified in several functions.
  • SetThinkTimeFactor Function
    Manipulate think times on a global basis.
  • GetThinkTimeFactor Function
    Retrieves the active think time factor.
親トピック: General Functions
関連概念
Random Variables Section


Reset Function for RndPerN

Action

Re-initializes a random variable using the RndPerN random type or RndStream type. This Reset function restores all or a part of the drawn values of the random variable.

Syntax

Reset( inout rvar,
       in    nMaximum : number optional );
Parameter | Description
rvar | Random variable using the RndPerN random type or RndStream type
nMaximum | New maximum value of the random variable (optional); all values up to this value are restored. If nMaximum is omitted, all values up to the specified maximum value of the random type are restored.

Example

var
  vArtNo: number;

dclrand
  rArtNo : RndPerN(1..10000);
  rVenNo : RndPerN(100);

dcltrans
  transaction t1
  var
    i: number;
  begin
    vArtNo := rArtNo;
    c1: InsArticle();
    for i := 1 to 10 do
      c1: InsArtVen();
    end;
    Reset(rVenNo, 50);
    ...
  end t1;

dclsql
  InsArticle:
    INSERT INTO article (articlenumber, ...)
    VALUES (:vArtNo, ...
  InsArtVen:
    INSERT INTO artven (articlenumber, vendornumber, ...)
    VALUES (:vArtNo, :rVenNo, ...)

The random variable rArtNo is used to generate unique article numbers between 1 and 10000. To ensure that the article numbers generated are unique, the RndPerN random type is used instead of RndUniN. The random variable rVenNo is used to generate unique vendor numbers for each article. To allow the same vendor number for different articles, rVenNo is re-initialized at the and of the transaction. After the first call of transaction t1, only vendor numbers between 1 and 50 have been used.

親トピック: Random Functions
関連資料
RndPerN Random Type (unique uniform distribution)
RndStream Random Type (sequential from a pattern file)
RndUniN Random Type (uniform distribution)


Reset Function for RndStream

Action

Re-initializes a random variable using the RndStream type. After invocation of this Reset function, a subsequent call of RndStream starts at the beginning of the file again.

Syntax

Reset( inout rvar );
Parameter | Description
rvar | Random variable using the RndStream type
親トピック: Random Functions


RndSeed Function

Action

Initializes the random number generator. If you use the same number for initialization, you will get the same sequence of random accesses for all randomly generated actions (for example, random variables, transaction sequences, ...). By using the same initialization values for the random generator, you can repeatedly reproduce a simulation exactly.

Include file

Kernel.bdh

Syntax

RndSeed( in nSeed : number );
Parameter | Description
nSeed | Initialization value

Example

dcltrans
  transaction TRndSeed
  begin
    RndSeed(123);
    write("random number generator initialized"); writeln;
  end TRndSeed;

Output

random number generator initialized
親トピック: Random Functions


RndFormatDate Function

Action

Adds a random number of days between 0 and nDays to a date and formats this date into the specified format. The random values generated are distributed uniformly.

Include file

Kernel.bdh

Syntax

RndFormatDate( in nDate      : number,
               in nDays      : number,
               in sFormat    : string
               in bLocalized  : boolean optional ): string;

Return value

formatted date string

Parameter | Description
nDate | Input date with format YYYYMMDD
nDays | Upper boundary of random interval for days to add
sFormat | Format control string (FormatDate)
bLocalized | If True, returns the localized date format (optional).

Example

dcltrans
  transaction TRndFormatDate
  var
    sNewDate: string;
  begin
    // add 0 - 20 days to 19961015 and format it to "1996-11-10"
    sNewDate := RndFormatDate(19961015, 20, DATE_YYYY_MM_DD);
    write("newdate = "); write(sNewDate); writeln;
  end TRndFormatDate;

Output

newdate = 1996-10-30

Sample scripts

OraSample.bdf, DBApi01.bdf

親トピック: Random Functions
関連概念
Date Functions
関連資料
RndDate Function
FormatDate Function
GetCurrentDate Function


SetRandomTransactions Function

Action

Specifies whether the simulation engine has to perform all transactions defined in the workload section of the script in random or sequential order.

注: This function overrides the setting specified in the Simulation tab of the Profile Settings - Simulation dialog.

Include file

Kernel.bdh

Syntax

SetRandomTransactions( in bRandom : boolean );
Parameter | Description
bRandom | If this parameter is set to true, the simulation engine performs all transactions defined in the workload section in random order. If this parameter is set to false, all transactions are executed in sequential order.

Example

dcluser
  user
    UserGrp(5)
  transactions
    TB : begin;
    T1 : 2;
    T2 : 2;
    TE : end;

dcltrans
  transaction TB
  begin
    SetRandomTransactions(false);
    write("TB ");
  end TB;

  transaction T1
  begin
    write("T1 ");
  end T1;

  transaction T2
  begin
    write("T2 ");
  end T2;

transaction TE
  begin
    write("TE ");
  end TE;

Output

TB T1 T1 T2 T2 TE
親トピック: Random Functions
親トピック: Simulation Setting Functions
関連資料
GetRandomTransactions Function


GetRandomTransactions Function

Action

Retrieves the current setting that determines whether the simulation engine has to perform all transactions defined in the workload section of the load testing script in random or sequential order.

Include file

Kernel.bdh

Syntax

GetRandomTransactions(): boolean;

Return value

  • true if the simulation engine currently performs all transactions defined in the workload section of the load testing script in random order

  • false otherwise

Example

dcltrans
  transaction TMain
  begin
    write ("transaction order: ");
    if GetRandomTransactions() then
      writeln("random")
    else
      writeln("sequential")
  end;
end TMain;
親トピック: Random Functions
親トピック: Simulation Setting Functions
関連資料
SetRandomTransactions Function


SetSmoothArrivalRate Function

Action

Determines whether to force each virtual user to perform all transactions within the specified simulation interval.

If this option is disabled, Silk Performer calculates the delay of the arrival of each transaction randomly. In this case, the simulation time period and the total number of transactions to be called determine the mean arrival interval of the transactions.

注: This function overrides the setting specified in the Simulation tab of the Profile Settings - Simulation dialog.

Include file

Kernel.bdh

Syntax

SetSmoothArrivalRate( in bSmooth : boolean );
Parameter Description
bSmooth

If this parameter is set to true, each user tries to execute all transactions within the simulation interval

If this parameter is set to false, Silk Performer calculates the delay of the arrival of each transaction randomly.

Example

dcluser
  user
    WebUser
  transactions
    T1 : begin;
    T1 : 5;
    T2 : 4;

dclrand
  rThinkingTime: RndUniF(35.0..55.0);

dcltrans
  transaction T1
  begin
    SetSmoothArrivalRate(true);
    ThinkTime(rThinkingTime);
  end T1;
  transaction T2
  begin
    ThinkTime(rThinkingTime);
  end T2;
親トピック: Random Functions
親トピック: Simulation Setting Functions
関連資料
GetSmoothArrivalRate Function


GetSmoothArrivalRate Function

Action

Retrieves the current setting that determines whether each virtual user is forced to perform all transactions within the specified simulation interval.

Include file

Kernel.bdh

Syntax

GetSmoothArrivalRate(): boolean;

Return value

  • true if each virtual user is currently forced to perform all transactions within the specified simulation interval

  • false otherwise

Example

dcltrans
transaction TMain
begin
write ("transaction arrival rate: ");
if GetSmoothArrivalRate() then
writeln("smooth");
else
writeln("randomly distributed");
end;
end TMain;
親トピック: Random Functions
親トピック: Simulation Setting Functions
関連資料
SetSmoothArrivalRate Function


SetRandomThinkTime Function

Action

Enables randomization for the thinktime periods specified in several functions. If randomization is enabled you can choose between exponential distribution and uniform distribution (parameter eOption). The seed value of the random number generator may be set using the RndSeed function.

注: This function overrides the setting specified in the Simulation tab of the Profile Settings - Simulation dialog.

Include file

Kernel.bdh

Syntax

SetRandomThinkTime( in bRandom    : boolean
                    in eOption    : number optional,
                    in nDeviation : number optional );
Parameter | Description
bRandom | If this parameter is set to true, randomization for thinktime periods is enabled
eOption

Can be either:

  • OPT_THINKTIME_EXPONENTIAL : For exponential distribution (default).

  • OPT_THINKTIME_UNIFORM : For uniform distribution. You have to specify also the deviation factor (3rd parameter) that has to be a value between 1 and 100%.
nDeviation | The deviation factor used if OPT_THINKTIME_UNIFORM is set (in %).

Example

dcltrans
  transaction TMain
  begin
    SetRandomThinkTime(true, OPT_THINKTIME_EXPONENTIAL);
    WebUrl("http://standardhost/index.html", 2.1);
    // 2.1 is the mean value of the
    // exponential distributed thinking period
  end TMain;
親トピック: Random Functions
親トピック: Simulation Setting Functions
関連資料
GetRandomThinkTime Function
GetThinkTimeFactor Function
RndSeed Function
ThinkTime Function


GetRandomThinkTime Function

Action

Reads the state of randomization for the thinktime periods specified in several functions.

Include file

Kernel.bdh

Syntax

GetRandomThinkTime( out eOption    : numberoptional,
                    out nDeviation : number optional ): boolean;

Return value

  • true if randomization is enabled

  • false otherwise

Parameter | Description
eOption

Can be either:

  • OPT_THINKTIME_EXPONENTIAL: For exponential distribution (default).

  • OPT_THINKTIME_UNIFORM: For uniform distribution. You have to specify also the deviation factor (3rd parameter) that has to be a value between 1 and 100%.
nDeviation | The deviation factor used if OPT_THINKTIME_UNIFORM is set (in %).

Example

dcltrans
  transaction Tinit
  var
    nDistribution : number;
    nDeviation    : number;
  begin
    write("Random thinking time: ");
    if GetRandomThinkTime(nDistribution, nDeviation) then
      write("true – distribution: ");
      if nDistribution = OPT_THINKTIME_EXPONENTIAL then
        write("exponential");
      else
        write("uniform");
      end;
    else
      write("false");
    end;
    writeln;
  end TInit;
親トピック: Random Functions
親トピック: Simulation Setting Functions
関連資料
SetRandomThinkTime Function
ThinkTime Function


SetThinkTimeFactor Function

Action

Think time factors can be defined to manipulate think times on a global basis. When enabled, factors are multiplied to all think times that are included in scripts. Think time manipulation can be enabled/disabled and manipulation factors are adjusted using the SetThinkTimeFactor function. When random think time is enabled, manipulation factors are applied after randomization.

注: Adjusting think time factors is not available if running a stress test or performing a Try Script run, because Silk Performer ignores think times with those workload settings. Note that Silk Performer will report an error when executing a stress test or Try Script run with adjusted think time factors.

An error also occurrs if think times are adjusted manually to stress test or none, which Silk Performer sets implicitly for a given workload:

SetThinktimeAdjustment(OPT_TTA_NONE); // or

SetThinktimeAdjustment(OPT_TTA_STRESSTEST);

To avoid error messages in verification test runs, you may manually set think time adjustments in a script:

SetThinktimeAdjustment(OPT_TTA_STATIC, 1.0); // or

SetThinktimeAdjustment(OPT_TTA_DYNAMIC, 3.0, 9.0);

Include file

kernel.bdh

Syntax

SetThinkTimeFactor( in bEnable          : boolean,
                    in fThinkTimeFactor : float optional );
Parameter | Description
bEnable | Specifies whether think time manipulation using a think time factor should be activated.
fThinkTimefactor | The think-time factor that is applied when think time manipulation is enabled. This parameter may be omitted, in which case the currently adjusted factor will be reapplied.

Example

dcltrans
  transaction TmyTrans1
  var
    fTTF : float;
  begin
    SetThinkTimeFactor(true, 1.2);
    ThinkTime(1.0);
    SetThinkTimeFactor(false, 1.2);
    ThinkTime(1.0);
    SetThinkTimeFactor(true);
    ThinkTime(1.0);

    if GetThinkTimeFactor(fTTF) then
      Print("Think Time Factor: " + string(fTTF));
    end;
    ThinkTime(1.0);
  end TmyTrans1;

Output

Think Time Factor: 1.2
親トピック: Random Functions
関連資料
GetThinkTimeFactor Function
ThinkTime Function
GetRandomThinkTime Function


GetThinkTimeFactor Function

Action

Think time factors can be defined to manipulate think times on a global basis. When enabled, factors are multiplied to all think times that are included in scripts. The GetThinkTimeFactor function retrieves the active think time factor.

Include file

kernel.bdh

Syntax

GetThinkTimeFactor( out fThinkTimefactor : float optional ): boolean;

Return value

  • true if think time adaptation using the think time factor is enabled

  • false otherwise

Parameter | Description
fThinkTimefactor | The float variable that will receive the currently defined think time factor.

Example

dcltrans
  transaction TmyTrans1
  var
    fTTF : float;
  begin
    SetThinkTimeFactor(true, 1.2);

    ThinkTime(1.0);

    if GetThinkTimeFactor(fTTF) then
      Print("Think Time Factor: " + string(fTTF));
    end;
    ThinkTime(1.0);
  end TmyTrans1;

Output

Think Time Factor: 1.2
親トピック: Random Functions
関連資料
SetThinkTimeFactor Function
SetRandomThinkTime Function
GetRandomThinkTime Function
ThinkTime Function


Random Types

Silk Performer includes the following random types:

  • RndBin Random Type (binomial distribution)
    Declares a random variable that contains a boolean value that is generated following a binomial (Bernoulli) distribution.
  • RndExpF Random Type (exponential distribution)
    Declares a random variable that contains a floating-point value that is generated following an exponential distribution.
  • RndExpN Random Type (exponential distribution)
    Declares a random variable that contains a random integer value that is generated following an exponential distribution.
  • RndFile Random Type (strings from a pattern file)
    Declares a random variable that contains a random string value following a uniform distribution.
  • RndInd Random Type (individual distribution)
    Declares a random variable that contains a random value whose type is either string or integer, depending on the syntax of your declaration.
  • RndPerN Random Type (unique uniform distribution)
    Declares a random variable that contains a unique random integer value that is generated following a uniform distribution.
  • RndSno Random Type (serial numbers)
    Generates serial numbers of type integer. For each call, the RndSno type returns a value incremented by one over the previous call.
  • RndStr Random Type (alphanumeric values)
    Declares a random variable that contains a random string value.
  • RndStream Random Type (sequential from a pattern file)
    Declares a random variable that contains a string value selected in sequential order from a pattern file.
  • RndUniF Random Type (for wait statements)
    Declares a random variable that can be used solely in wait statements for generating random user times.
  • RndUniI Random Type (uniform distribution with intervals)
    Creates a variable that contains a value that is generated following a uniform distribution with intervals.
  • RndUniN Random Type (uniform distribution)
    Declares a random variable of type RndUniN. With each access, such a variable contains a value that is generated following a uniform distribution.
  • Normal Distribution
    Generate random values following a normal distribution.
親トピック: General Functions


RndBin Random Type (binomial distribution)

Action

Declares a random variable of type RndBin. With each access, such a variable contains a boolean value that is generated following a binomial (Bernoulli) distribution. The parameter of the RndBin random type specifies the probability of returning true. For example, you can use a random variable using the RndBin random type to specify the probability of running transaction components.

Syntax

RndBin( in p : float ): boolean;

Return value

  • true or

  • false

Parameter | Description
p | Probability of returning true Condition: 0.0 <= p <= 1.0

Example

dclrand
  rEvent1, rEvent2: RndBin(0.25);

dcltrans
  transaction TMain
  begin
    if rEvent1 then ... end;

    while not rEvent2 do ... end;
  end TMain;

The example shows two random variables with Bernoulli distribution (rEvent1 and rEvent2). In both cases the probability of returning true is 0.25. This means that on average rEvent1 will be set to true in 25% of all cases, and the same applies for rEvent2.

注: As each use of a random variable generates a new random value, you must assign the value of a random variable to a transaction variable in order to be able to reuse this value.

Sample scripts

OraSample.bdf, DBApi01.bdf

親トピック: Random Types


RndExpF Random Type (exponential distribution)

Action

Declares a random variable of type RndExpF. With each access, such a variable contains a floating-point value that is generated following an exponential distribution. The parameter of the RndExpF function constitutes the mean value of the exponential distribution.

Syntax

RndExpF( in fMean : float ): float;

Return value

float

Parameter | Description
fMean | Mean value of the exponential distribution

Example

dclrand
  rEvent1, rEvent2 : RndBin(0.25);
  rTime1 : RndExpF(5.5); /* waiting period in seconds */
  ...

dcltrans
  transaction t1
  begin
    if rEvent1 then ... end;
    wait rTime1;

    while not rEvent2 do ... end;
  end t1;
注: The example shows a random variable rTime1 with exponential distribution with a mean value of 5.5. rTime1 is used in a wait statement of a transaction for simulation of a random waiting period.

Sample scripts

OraSample.bdf, DBApi01.bdf

親トピック: Random Types
関連資料
RndExpN Random Type (exponential distribution)


RndExpN Random Type (exponential distribution)

Action

Declares a random variable of type RndExpN. With each access, such a variable contains a random integer value that is generated following an exponential distribution. The floating-point values of the exponential distribution are rounded to integer values (1.5 —>—> 2, 1.4 —>—> 1, ...).

Syntax

RndExpN( l..u: m ): number;

Return value

number

Parameter | Description
l | Lower boundary of the integer interval of random values (number)
u | Upper boundary of the integer interval of random values (number)
m | Mean value of the exponential distribution (float) Condition: l <= m <= u

If a generated random value is outside the interval of integer values declared, it is replaced by the value of the respective boundary.

Example

dclrand
  rEvent1, rEvent2 : RndBin(0.25);
  rTime1           : RndExpF(5.5);
  rTime2           : RndUniF(0.5..12.5);
  rCube            : RndUniN(1..6);
  rPrice           : RndUniN(10..2000);
  rArtNo           : RndExpN(1..10000: 100.0);
  ...

dclsql
  UpdArticle:
    UPDATE article SET price = :rPrice
    WHERE articlenumber = :rArtNo;

The random variable rArtNo is used in a SQL command to access an article with a random article number of type integer. The generated random integer values follow an exponential distribution with a mean value of 100.0. Values outside the interval 1 to 10000 are replaced by the respective boundary of the interval.

Sample scripts

OraSample.bdf, DBApi01.bdf

親トピック: Random Types
関連資料
RndExpF Random Type (exponential distribution)


RndFile Random Type (strings from a pattern file)

Action

Declares a random variable of type RndFile. With each access, such a variable contains a random string value that is generated following a uniform distribution. The strings are selected randomly from a pattern file. The values in the pattern file must be separated with semicolons (;). Leading blanks, tabs and newline characters are ignored. Trailing blanks, tabs or new line characters are part of the value. Each position in the pattern file has the same probability of being chosen. The position in the pattern file is generated randomly. The value located at the randomly generated position is chosen to be the next value of the random type.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer looks for the file in the folder where the test script is located. If Silk Performer does not find the file there, it looks for the file in the Data folder.

If you are going to use remote agents for the load test, you should store your data files in the Data directory or in the directory where the load-test script is located. Note that in any case you have to add the data files to your project.

Syntax

RndFile( in sFileName : string,
         in nMaxLen   : number ): string;

Return value

First random value: Martin

Second random value: Tom

Parameter | Description
sFileName | String constant specifying the path and file name of the pattern file. The pattern file defines the values to be used by the random type. If the path is omitted, the file must be in the current directory.
nMaxLen | Maximum length of the random string. If a value in the pattern file is longer than the maximum length, the value is truncated to the maximum length.

Example

Pattern File: <public user documents>\Silk Performer 21.0\Data\Efname.rnd

First random value: Martin

Second random value: Tom

dclrand
  rACat      : RndStr("AABBCCDDEEFF0123456789", 3..4);
  rName      : RndStr(10..40);
  rFirstName : RndFile("<Silk Performer installpath>\\Working\\Data\\Efname.rnd", 20);
  ...

dclsql
  InsArticle:
    INSERT INTO article (category, name, firstname)
    VALUES (:rACat, :rName, :rFirstName);

The random variable rFirstName is used in a SQL command to generate random values for the database field firstname. The generated values are alphanumeric values. The pattern values are stored in the file <public user documents>\Silk Performer 21.0\Data\Efname.rnd containing the values "Tom", "Ron", "Martin" and "Paul".

The pattern files are loaded into memory for each user when a simulator initializes at the beginning of a load test. For large pattern files and multi column random values, we recommend using the new, more flexible random file functions FileCSVLoad, FileFixedLoad and FileGetRndRow.

注: There are a number of pattern files in your Silk Performer Include directory; you can use these to generate realistic random names, states, zip codes and cities. Look for files with file extension rnd.
親トピック: Random Types
関連資料
FileCSVLoadGlobal Function
FileFixedLoadGlobal Function
FileUnload Function
FileGetNumRows Function
FileGetFirstRow Function
FileGetNextRow Function
FileGetRow Function
FileGetCol Function


RndInd Random Type (individual distribution)

Action

Declares a random variable of type RndInd. With each access, such a variable contains a random value whose type is either string or integer, depending on the syntax of your declaration. All possible values of the random variable along with their probabilities/weights must be declared. You cannot mix integer and string values.

注: Not only probalities which must sum up to 1.0 are allowed as parameters. Also weights can be used; but they are internally also used as probabilities."

Sytax

RndInd( s1=p1, ..., sn=pn ): string;
RndInd( u1=p1, ..., un=pn ): number;

Return value

  • string or

  • number

Parameter | Description
s1 | First random value (string)
u1 | First random value (number)
p1 | Probability/weight of the first random value (float)
sn | nth random value (string)
un | nth random value (number)
pn | Probability/weight of the nth random value (float) Condition: p i = 1;

Example

dclrand
  rMaritalStat : RndInd("single" =0.4, "married"=0.3,
                        "divorced"=0.2, "widowed"=0.1);
  rMark : RndInd(1=0.1, 2=0.2, 3=0.3, 4=0.2, 5=0.2);
  ...

dclsql
  InsPerson:
    INSERT INTO person (name, maritalstatus)
    VALUES (:rName, :rMaritalStat);
  InsExam:
    INSERT INTO exam (name, mark)
    VALUES (:rName, :rMark);

The random variable rMaritalStat is used in a SQL command to generate random values for the database field marital status. The probabilities/weights of the values for marital status are: 40% "single", 30% "married", 20% "divorced", and 10% "widowed". The random variable rMark is used in a SQL command to generate random values for the database field mark. The probabilities/weights of the values for mark are: 10% 1, 20% 2, 30% 3, 20% 4 and 20% 5.

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, DBApi01.bdf

親トピック: Random Types


RndPerN Random Type (unique uniform distribution)

Action

Declares a random variable of type RndPerN. With each access, such a variable contains a unique random integer value that is generated following a uniform distribution. The parameter of the RndPerN function specifies the maximum value of the uniform distribution. The minimum random value is 1. Within these boundaries (and including the boundaries) all integer values have the same probability of being selected. No value in the specified interval is selected twice. If all values have been selected, the maximum value+1 is returned. You can compare the RndPerN function with a drawing of lots where no lot is put back.

Syntax

RndPerN( in nMax : number ): number;

Return value

number

Parameter | Description
nMax | Maximum value Condition: nMax <= 500000

Sample scripts

OraSample.bdf

親トピック: Random Types


RndSno Random Type (serial numbers)

Action

Generates serial numbers of type integer. For each call, the RndSno type returns a value incremented by one over the previous call.

Syntax

RndSno( in nStart : number ): number;

Return value

number

Parameter | Description
nStart | Starting value of the function

Example

dclrand
  rCube  : RndUniN(1..6);
  rPrice : RndUniN(10..2000);
  rArtNo : RndExpN(1..10000: 100.0);
  rACat  : RndStr("AABBCCDDEEFF0123456789", 3..4);
  rName  : RndStr(10..40);
  rLfdNo : RndSno(1);

dclsql
  InsArticle:
    INSERT INTO article (articlenumber, category, name)
    VALUES (:rLfdNo, :rACat, :rName);

The random variable rLfdNo is used in a SQL command to generate serial number values for the database field articlenumber. The first value generated is 1.

親トピック: Random Types


RndStr Random Type (alphanumeric values)

Action

Declares a random variable of type RndStr. With each access, such a variable contains a random string value. The characters of the string and the length of the string are generated randomly following a uniform distribution.

Syntax

RndStr( s, l..u ): string;

Return value

string

Parameter | Description
s | Pattern string - optional (string) The pattern string defines the characters to be used in the random string. Each character in the pattern string has the same probability of being chosen. If the pattern string is omitted, the standard pattern string "ABCDEFGHIJKLMNOPQRSTUVWXYZ" is used.
l | Minimum length of random string (number)
u | Maximum length of random string (number) Condition: l <= u

Example

dclrand
  rEvent1, rEvent2 : RndBin(0.25);
  rTime1 : RndExpF(5.5);
  rTime2 : RndUniF(0.5..12.5);
  rCube  : RndUniN(1..6);
  rPrice : RndUniN(10..2000);
  rArtNo : RndExpN(1..10000: 100.0);
  rACat  : RndStr("AABBCCDDEEFF0123456789", 3..4);
  rName  : RndStr(10..40);

dclsql
  InsArticle:
    INSERT INTO article (category, name)
    VALUES (:rACat, :rName);

The random variable rACat is used in a SQL command to generate random values for the database field category. The generated values are alphanumeric values with a length of 3 or 4 characters. The pattern string consists of the digits 0 to 9 and the characters A to F. The probability of the characters A to F is twice the probability of the digits. The random variable rName is used in a SQL command to generate random values for the database field name. The generated values are alphanumeric values with a length of 10 to 40 characters. The standard pattern string (A to Z) is used.

Sample scripts

OraSample.bdf

親トピック: Random Types


RndStream Random Type (sequential from a pattern file)

Action

Declares a random variable of type RndStream. With each access, such a variable contains a string value selected in sequential order from a pattern file. RndStream reads the values of a file sequentially starting at the beginning of the file. If the end of the file is reached, the next call of RndStream starts at the beginning of the file again. The Silk Performer Reset function has the same effect. The values in the pattern file must be separated with semicolons (;). Leading blanks, tabs and new-line characters are ignored.

Trailing blanks, tabs and new-line characters are part of the value.

If the file name includes a directory name, the file is opened in the specified directory. Otherwise, Silk Performer looks for the file in the folder where the test script is located. If Silk Performer does not find the file there, it looks for the file in the Data folder.

If you are going to use remote agents for the load test, you should store your data files in the Data directory or in the directory where the test script is located. Note that in any case you have to add the data files to your load-testing project.

Syntax

RndStream( in sFileName : string,
           in nMaxLen   : number ): string;

Return value

string

Parameter | Description
sFileName | String constant specifying the path and file name of the pattern file. The pattern file defines the values to be used by the type. If the path is omitted, the file must be in the current directory.
nMaxLen | Maximum length of the return string. If a value in the pattern file is longer than the maximum length, it is truncated to the maximum length.

Example

Pattern File: <public user documents>\Silk Performer 21.0\Data\Efname.rnd

dclrand
  rACat      : RndStr("AABBCCDDEEFF0123456789", 3..4);
  rName      : RndStr(10..40);
  rFirstName : RndStream("<Silk Performer installpath>\\Working\\Data\\Efname.rnd", 20);

dclsql
  InsArticle:
    INSERT INTO article (category, name, firstname)
    VALUES (:rACat, :rName, :rFirstName);

The random variable rFirstName is used in a SQL command to generate sequential values for the database field firstname. The generated values are alphanumeric values. The pattern values are stored in the file <public user documents>\Silk Performer 21.0\Data\Efname.rnd containing the values "Tom", "Ron", "Martin", and "Paul".

The pattern files are loaded into memory for each user when a simulator initializes at the beginning of a test. For large pattern files and multi column random values, we recommend using the new, more flexible random file functions FileCSVLoad, FileFixedLoad and FileGetRndRow.

注: There are a number of pattern files in your Silk Performer Include directory you can use to generate realistic random names, states, zip codes, cities. Look for files with file extension rnd.
親トピック: Random Types
関連概念
Extended File Functions
関連資料
FileCSVLoad Function
FileFixedLoad Function
Reset Function for RndStream


RndUniF Random Type (for wait statements)

Action

Declares a random variable of type RndUniF. With each access, such a variable contains a value that is generated following a uniform distribution. The parameters of the RndUniF function specify the minimum value and the maximum value of the uniform distribution. Random variables of type RndUniF can be used solely in wait statements for generating random user times.

Syntax

RndUniF( l..u ): float;

Return value

float

Parameter | Description
l | Lower boundary (float)
u | Upper boundary (float) Condition: l <= u

Example

dclrand
  rEvent1, rEvent2 : RndBin(0.25);
  rTime1           : RndExpF(5.5);
  rTime2           : RndUniF(0.5..12.5);

dcltrans
  transaction t1
  begin
    if rEvent1 then ... end;
    wait rTime2;
    while not rEvent2 do ... end;
  end t1;

The example shows a random variable with uniform distribution (rTime2). The lower boundary of this random variable is 0.5 and the upper boundary is 12.5. In the interval 0.5 to 12.5 all floating-point values have the same probability. rTime2 is used in a wait statement of a transaction for simulating a random waiting period.

Sample scripts

RandomLogin.bdf, Measure01.bdf, Measure03.bdf, DBApi01.bdf

親トピック: Random Types
関連資料
RndUniI Random Type (uniform distribution with intervals)
RndUniN Random Type (uniform distribution)


RndUniI Random Type (uniform distribution with intervals)

Action

Declares a random variable of type RndUniI. With each access, such a variable contains a value that is generated following a uniform distribution with intervals. With a random variable of type RndUniI you can define multiple intervals of random integer values.

Syntax

RndUniI( l1..u1=p1, ..., ln..un=pn ): number;

Return value

number

Parameter | Description
l1 | Lower boundary of the first interval of random values (number)
u1 | Upper boundary of the first interval of random values (number)
p1 | Probability of choosing the first interval of values (float)
ln | Lower boundary of the nth interval of random values (number)
un | Upper boundary of the nth interval of random values (number)
pn | Probability of choosing the nth interval of values (float) Condition: pi = 1; i : li <= ui

Example

dclrand
  rEvent1, rEvent2 : RndBin(0.25);
  rTime1           : RndExpF(5.5);
  rTime2           : RndUniF(0.5..12.5);
  rCube            : RndUniN(1..6);
  rPrice           : RndUniN(10..2000);
  rArtNo           : RndUniI(1..50=0.6, 51..100=0.3, 101..10000=0.1);

dclsql
  UpdArticle:
    UPDATE article SET price = :rPrice
    WHERE articlenumber = :rArtNo;

The random variable rArtNo is used in a SQL command to access an article with a random article number. 60% of all integer random values are between 1 and 50, 30% are between 51 and 100 and 10% are between 101 and 10000.

Sample scripts

OraSample.bdf, DBApi01.bdf, Trans.bdf

親トピック: Random Types
関連資料
RndUniF Random Type (for wait statements)
RndUniN Random Type (uniform distribution)


RndUniN Random Type (uniform distribution)

Action

Declares a random variable of type RndUniN. With each access, such a variable contains a value that is generated following a uniform distribution. The parameters of the RndUniN function specify the minimum value and the maximum value of the uniform distribution. Within these boundaries all integer values have the same probability (including the boundaries).

Syntax

RndUniN( l..u ): number;

Return value

number

Parameter | Description
l | Lower boundary (number)
u | Upper boundary (number) Condition: l <= u

Example

dclrand
  rCube  : RndUniN(1..6);
  rArtNo : RndUniN(1..10000);
  rPrice : RndUniN(10..2000);

dcltrans
  transaction t1
  var
    i: number;
  begin
    for i := 1 to rCube do
      c1: UpdArticle();
    end;
  end t1;

dclsql
  UpdArticle:
    UPDATE article SET price = :rPrice
    WHERE articlenumber = :rArtNo;

rCube is a random variable that generates integer random values between 1 and 6. Each value has the same probability. rCube is used in a for loop of a transaction to express a random factor of repetition. The random variable rArtNo generating integer numbers between 1 and 10000 is used in a SQL command to access an article randomly. The random variable rPrice is used to update the price of the accessed article; the price is set randomly to a value between 10 and 2000.

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, Trans.bdf

親トピック: Random Types
関連資料
RndUniF Random Type (for wait statements)
RndUniI Random Type (uniform distribution with intervals)


Normal Distribution

Since Silk Performer provides no random type for generating random values that follow a normal distribution, you have to implement your own function for this purpose. The BDL code shown below illustrates how your function should look like.

To use this function, enter exactly the same BDL code in your test script.

Implementation

dclrand
  rUniform01: RndUniF(0.0 .. 1.0);

dclfunc
  function NormalDistribution(fMean, fStd: float): float
  var
    i : number;
    f : float;
  begin
    f := -6.0;
    for i := 1 to 12do
      f := f + rUniform01;
    end;
    NormalDistribution := fMean + fStd*f;
  end NormalDistribution;

Return value

a random value following a normal distribution with the specified mean value and standard deviation

Parameter | Description
fMean | Mean value of the normal distribution the generated random value has to follow
fStd | Standard deviation of the normal distribution the generated random value has to follow

Example

dcltrans
  transaction TMain
  var
    i: number;
  begin
    for i := 1 to 20 do
      writeln(NormalDistribution(20.0, 2.0));
    end;
  end TMain;

Output

19.756000
16.140000
20.464000
20.844000
19.546000
...
親トピック: Random Types


Runtime Functions

Silk Performer provides the following runtime functions:

  • Wait Time Options for Virtual Users
    Explains the options that Silk Performer offers for simulating idle times of virtual users and what the differences are.
  • Halt Statement
    Terminates the simulation of the current user.
  • ThinkTime Function
    Simulates thinking periods during user transactions (for example, the time required to enter input data).
  • Throw Statement
    Terminates the execution of an event handler function by passing execution control to the runtime system.
  • Wait Statement
    Simulates waiting periods produced by the user of a transaction (for example, the time for entering input data).
親トピック: General Functions


Wait Time Options for Virtual Users

In order to realistically simulate real user behaviour, virtual users sometimes need to be idle before proceeding with the next action defined in a BDL script. Silk Performer offers three options to do this:
  • Wait statement
  • ThinkTime function
  • fWait parameter in Low-Level Web Functions

Wait and ThinkTime do not affect the transaction busy time, whereas the fWait parameter in low-level web function calls adds to the transaction busy time. The behavior of the fWait parameter in low-level web functions is described in detail in Low-Level Web Function Replay Timing.

The difference between Wait and ThinkTime

How long a virtual user remains idle during a ThinkTime function call depends on the think time options, such as stresstest, random think time, think time limit, or think time adjustment parameters set via SetThinkTimeAdjustment.

The Wait statement forces a virtual user to remain idle for exactly the amount of time specified by the parameter.

Wait option | Dependent on ThinkTime options | Affects transaction busy time
ThinkTime function | yes | no
Wait statement | no | no
fWait parameter in low-level web function | yes | yes
親トピック: Runtime Functions


ThinkTime Function

Action

Simulates thinking periods during user transactions (for example, the time required to enter input data). This function only affects simulation in case of a real load test. Note that during Try Script runs, think times are ignored completely.

Include file

Kernel.bdh

Syntax

ThinkTime( in fTime      : float,
           in nOption    : number optional,
           in nDeviation : number optional ): float;

Return value

Actual thinking time (in seconds).

Parameter | Description
fTime | Time interval that the simulated user must wait (in seconds).
nOption

Specifies whether or not random values should be generated for think time periods (optional). The following options are available:

  • OPT_THINKTIME_STRESSTEST. Think time is ignored so that the tested system can be stressed using maximum load.

  • OPT_THINKTIME_EXPONENTIAL. Random think time values are generated following an exponential distribution. The fTime parameter specifies the mean value of the distribution.

  • OPT_THINKTIME_UNIFORM. Generates random think time values following a uniform distribution. The deviation factor (3rd parameter) specifies the deviation range above and below the think time value.

  • OPT_THINKTIME_FORCEEXACT. The specified think time is maintained regardless of profile settings.

When this parameter is omitted, the user waits as long as specified.
nDeviation | The deviation factor used when OPT_THINKTIME_UNIFORM is set (in %).

Example

dcltrans
  transaction TMain
  begin
    SetStressTest(false);
    ThinkTime(3.0);
    WebUrl("http://www.MyCompany.com");
    ThinkTime(5.0, OPT_THINKTIME_EXPONENTIAL);
    WebUrl("http://support.MyCompany.com/index.jspa");
    ...
  end TMain;

Sample scripts

RandomLogin.bdf, Measure01.bdf, Measure02.bdf, Measure03.bdf, OraSample.bdf, DBApi01.bdf

親トピック: Runtime Functions
関連資料
SetStressTest Function
GetStressTest Function
GetThinkTimeLimit Function
SetThinkTimeLimit Function


Simulation Setting Functions

Silk Performer provides the following simulation setting functions:

  • GetCallEndTransaction Function
    Gets the value of the setting that specifies whether the final transaction (end transaction) is to be processed when the load test is stopped.
  • GetCancelAfterSimTime Function
    Retrieves the current setting for whether to abort the simulation when the simulation time exceeds.
  • GetCompleteTransaction Function
    Gets the value of the setting that specifies whether the active transaction and the final transaction are to be processed when the load-test is stopped.
  • GetPacingTime Function
    Gets the pacing time.
  • GetRandomThinkTime Function
    Reads state of randomization using an exponential distribution for the thinking periods specified in several functions.
  • GetRandomTransactions Function
    Retrieves the current setting that determines whether to perform all transactions in random or sequential order.
  • GetSmoothArrivalRate Function
    Retrieves the current settings that determines whether to force each virtual user to perform all transactions within the specified simulation interval.
  • GetStressTest Function
    Gets the current value of the stress test switch.
  • GetThinkTimeLimit Function
    Gets the value of the setting which specifies whether think times should be limited to a certain maximum value.
  • SetCallEndTransaction Function
    Specifies whether the final transaction (end transaction) is to be processed when the load test is stopped.
  • SetCancelAfterSimTime Function
    Specifies whether to abort the simulation when the simulation time exceeds.
  • SetCompleteTransaction Function
    Specifies whether the active transaction is to be processed when the load test is stopped.
  • SetPacingTime Function
    Sets the pacing time.
  • SetRandomThinkTime Function
    Enables randomization for the thinktime periods specified in several functions.
  • SetRandomTransactions Function
    Specifies whether to perform all transactions in random or sequential order.
  • SetSmoothArrivalRate Function
    Determines whether to force each virtual user to perform all transactions within the specified simulation interval.
  • SetStressTest Function
    Specifies whether or not Silk Performer should ignore the thinking periods specified with the ThinkTime function and several low-level web functions.
  • SetThinkTimeLimit Function
    Specifies whether think times should be limited to a certain maximum value.
  • SetCancelOnErrorInBeginTransaction Function
    Specifies whether the runtime should be halted in case of an error in the begin transaction.
  • GetCancelOnErrorInBeginTransaction Function
    Gets the value of the setting that specifies whether the runtime should be halted in case of an error in the begin transaction.
  • SetThinkTimeAdjustment Function
    Adjusts think times for each user type, which enables you to adjust the throughput requirements of the load test you are planning.
  • GetThinkTimeAdjustment Function
    Returns the state of the current think time adjustment.
  • GetThinkTimeRandomization Function
    Returns the state of randomization for the think time periods specified in functions.
  • SetThinkTimeRandomization Function
    Allows for the changing of think time randomization for various functions.
親トピック: General Functions


GetCallEndTransaction Function

Action

Gets the value of the setting that specifies whether the final transaction (end transaction) is to be processed when the load test is stopped.

Include file

Kernel.bdh

Syntax

GetCallEndTransaction( ): boolean;

Return value

  • true if the final transaction is to be processed when the load test is stopped

  • false otherwise

Example

dcltrans
  transaction TMain
begin
  if GetCallEndTransaction() then
    writeln("This virtual user will execute the final "
            "transaction when the simulation is aborted.")
  else
    writeln("This virtual user does not execute the "
    "final transaction when the simulation is stopped.")
  end
end TMain;
親トピック: Simulation Setting Functions
関連資料
SetCallEndTransaction Function
SetCompleteTransaction Function
GetCompleteTransaction Function


GetCancelAfterSimTime Function

Action

Retrieves the current setting for whether to abort the simulation when the simulation time exceeds. This setting only affects load tests with a steady-state workload.

Include file

Kernel.bdh

Syntax

GetCancelAfterSimTime(): boolean;

Return value

  • true if the simulation will be aborted when the simulation time exceeds

  • false otherwise

Example

dcltrans
transaction TMain
begin
if GetCancelAfterSimTime() then
write("simulation will be canceled "
"when simulation time exceeds")
else
write("simulation will be running until all "
"transaction have been executed");
end;
end TMain;
親トピック: Simulation Setting Functions
関連資料
SetCancelAfterSimTime Function


GetCompleteTransaction Function

Action

Gets the value of the setting that specifies whether the active transaction and the final transaction are to be processed when the load-test is stopped.

Include file

Kernel.bdh

Syntax

GetCompleteTransaction(): boolean;

Return value

  • true if the active transaction and the final transaction are to be processed when the load-test is stopped

  • false otherwise

Example

dcltrans
transaction TMain
begin
if GetCompleteTransaction() then
writeln("This virtual user completes the current "
"transaction when the simulation is aborted.")
else
writeln("This virtual user does not complete the "
"current transaction when the simulation is aborted.")
end
end TMain;
親トピック: Simulation Setting Functions
関連資料
GetCallEndTransaction Function
SetCallEndTransaction Function
SetCompleteTransaction Function


GetPacingTime Function

Action

Gets the pacing time.

Include file

Kernel.bdh

Syntax

GetPacingTime( out ePacingMode  : number,
               out ePacingScope : number optional,
               out fTimeMinSecs : double optional,
               out fTimeMaxSecs : double optional ): boolean;
Parameter | Description
ePacingMode
  • OPT_PACING_MODE_OFF (0)
  • OPT_PACING_MODE_PACINGTIME (1)
  • OPT_PACING_MODE_TOTALTIME (2)
ePacingScope
  • OPT_PACING_SCOPE_TRANSACTION (1)
  • OPT_PACING_SCOPE_SESSION (2)
fTimeMinSecs | The minimum value of the pacing time in seconds
fTimeMaxSecs | The maximum value of the pacing time in seconds

Return value

  • true if successful

  • false otherwise

Example

benchmark BenchmarkName

use "kernel.bdh"

dcluser
  user
    VUGroup
  transactions
    TmyTrans1       : 1;

dcltrans
  transaction TmyTrans1
  var
    nPacingMode : number;
    nPacingScope : number;
    fTimeMin : float;
    fTimeMax : float;
  begin
    // wait a random time between 5 to 10 seconds after each transaction
    SetPacingTime(OPT_PACING_MODE_PACINGTIME, OPT_PACING_SCOPE_TRANSACTION, 5.0, 10.0);

    // receive Pacing information
    GetPacingTime(nPacingMode, nPacingScope, fTimeMin, fTimeMax);
    Print("Pacing Mode: " + string(nPacingMode) + ", " +
          "Pacing Scope: " + string(nPacingScope) + ", " +
          "Time Min: " + string(fTimeMin) + ", " +
          "Time Max: " + string(fTimeMax));

  end TmyTrans1;
親トピック: Simulation Setting Functions
関連概念
ペーシング
関連資料
SetPacingTime Function


GetStressTest Function

Action

Gets the current value of the stress test switch.

Include file

Kernel.bdh

Syntax

GetStressTest(): boolean;

Return value

  • true if stress test is set

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    write("StressTest: ");

    if GetStressTest() then
      write("true")
    else
      write("false")
    end;

    writeln;
  end TInit;
親トピック: Simulation Setting Functions
関連資料
SetStressTest Function
ThinkTime Function


GetThinkTimeLimit Function

Action

Gets the value of the setting which specifies whether think times should be limited to a certain maximum value. If a think time is specified, which is longer than the specified think time limit, the limit duration is taken instead.

Include file

Kernel.bdh

Syntax

GetThinkTimeLimit( out fLimit : float optional ): boolean;

Return value

  • true if a think time limit is set for the virtual user

  • false otherwise

Parameter | Description
fLimit | Think time limit in seconds, which is never exceeded, if the function returns true (optional).

Example

dcltrans
  transaction TMain
  var
    fLimit : float;
  begin
    SetThinkTimeLimit(true, 2.0);

    if GetThinkTimeLimit(fLimit) then
      writeln("Think times are limited to " + string(fLimit) +
                 "seconds.")
    else
      writeln("No think time limit is set for the current"
                "virtual user.");
    end
  end TMain;
親トピック: Simulation Setting Functions
関連資料
SetThinkTimeLimit Function
ThinkTime Function


SetCallEndTransaction Function

Action

Specifies whether the final transaction (end transaction) is to be processed when the load test is stopped.

If you enable this option, the stopped virtual user checks whether an end transaction exists, and if so, executes it. If you disable this option, the stopped virtual user does not execute the end transaction.

Include file

Kernel.bdh

Syntax

SetCallEndTransaction( in bEnable : boolean );
Parameter | Description
bEnable | If this parameter is set to true, the final transaction is processed after a virtual user has been stopped. Otherwise, if this parameter is set to false, the final transaction is omitted.

Example

dcltrans
  transaction TInit
  begin
    SetCallEndTransaction(true);
  end TInit;
親トピック: Simulation Setting Functions
関連資料
GetCallEndTransaction Function
SetCompleteTransaction Function
GetCompleteTransaction Function


SetCancelAfterSimTime Function

Action

Specifies whether to abort the simulation when the simulation time exceeds. This setting only affects load tests with a steady-state workload. The ending transaction will be processed in any case.

Include file

Kernel.bdh

Syntax

SetCancelAfterSimTime( in bCancel : boolean );
Parameter | Description
bCancel | Specifies whether to abort the simulation when the simulation time exceeds.

Example

dcltrans
  transaction TInit
  begin
    SetCancelAfterSimTime(true);
  end TInit;
親トピック: Simulation Setting Functions
関連資料
GetCancelAfterSimTime Function


SetCompleteTransaction Function

Action

Specifies whether the active transaction is to be processed when the load test is stopped.

If you enable this option, the virtual user checks whether to stop only at the beginning of a new transaction. Thus the active transactions is completed before the user is stopped. If you disable this option, the virtual user checks whether to stop during thinking and waiting times, times in the waiting queue, and at the beginning of each transaction.

Include file

Kernel.bdh

Syntax

SetCompleteTransaction( in bComplete : boolean );
Parameter | Description
bComplete | If this parameter is set to true, the active and the final transaction are processed. Otherwise, if this parameter is set to false, the active transaction is aborted and the final transaction is omitted.

Example

dcltrans
  transaction TInit
  begin
    SetCompleteTransaction(true);
  end TInit;
親トピック: Simulation Setting Functions
関連資料
GetCallEndTransaction Function
SetCallEndTransaction Function
GetCompleteTransaction Function


SetPacingTime Function

Action

Sets the pacing time.

Include file

Kernel.bdh

Syntax

SetPacingTime( in ePacingMode  : number,
               in ePacingScope : number optional,
               in fTimeMinSecs : double optional,
               in fTimeMaxSecs : double optional ): boolean;
Parameter | Description
ePacingMode
  • OPT_PACING_MODE_OFF (0)
  • OPT_PACING_MODE_PACINGTIME (1)
  • OPT_PACING_MODE_TOTALTIME (2)
ePacingScope
  • OPT_PACING_SCOPE_TRANSACTION (1)
  • OPT_PACING_SCOPE_SESSION (2)
fTimeMinSecs | The minimum value of the pacing time in seconds
fTimeMaxSecs | The maximum value of the pacing time in seconds

Return value

  • true if successful

  • false otherwise

Example

benchmark BenchmarkName

use "kernel.bdh"

dcluser
  user
    VUGroup
  transactions
    TmyTrans1       : 1;

dcltrans
  transaction TmyTrans1
  var
    nPacingMode : number;
    nPacingScope : number;
    fTimeMin : float;
    fTimeMax : float;
  begin
    // wait a random time between 5 to 10 seconds after each transaction
    SetPacingTime(OPT_PACING_MODE_PACINGTIME, OPT_PACING_SCOPE_TRANSACTION, 5.0, 10.0);

    // receive Pacing information
    GetPacingTime(nPacingMode, nPacingScope, fTimeMin, fTimeMax);
    Print("Pacing Mode: " + string(nPacingMode) + ", " +
          "Pacing Scope: " + string(nPacingScope) + ", " +
          "Time Min: " + string(fTimeMin) + ", " +
          "Time Max: " + string(fTimeMax));

  end TmyTrans1;
親トピック: Simulation Setting Functions
関連概念
ペーシング
関連資料
GetPacingTime Function


SetStressTest Function

Action

Specifies whether or not Silk Performer should ignore the thinking periods specified with the ThinkTime function and several low-level web functions.

注: This function overrides the setting specified in the Simulation tab of the Profile Settings - Simulation dialog.

Include file

Kernel.bdh

Syntax

SetStressTest(in bST: boolean): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
bST | If this parameter is set to true, Silk Performer ignores the thinking period

Example

dcltrans
  transaction TInit
  begin
    SetStressTest(true); // In this case, Silk Performer
    ThinkTime(5.0); // ignores the thinking period
  end TInit;

Sample scripts

Measure01.bdf, Measure02.bdf, Measure03.bdf

親トピック: Simulation Setting Functions
関連資料
GetStressTest Function
ThinkTime Function
SetRandomThinkTime Function


SetThinkTimeLimit Function

Action

Specifies whether think times should be limited to a certain maximum value. If a think time is specified, which is longer than the specified think time limit, the limit duration is taken instead.

Include file

Kernel.bdh

Syntax

SetThinkTimeLimit( in bEnable: boolean,
                   in fLimit : float optional);
Parameter | Description
bEnable | Specifies whether a think time limit should be activated.
fLimit | Think time limit in seconds, which is never exceeded, if bEnable is true (optional).

Example

dcltrans
  transaction TMain
  var
    fLimit : float;
  begin
    SetThinkTimeLimit(true, 2.0);

    if GetThinkTimeLimit(fLimit) then
      writeln("Think times are limited to " + string(fLimit) +
              "seconds.");
    else
      writeln("No think time limit is set for the current"
              "virtual user.");
    end
  end TMain;
親トピック: Simulation Setting Functions
関連資料
GetThinkTimeLimit Function
ThinkTime Function


SetCancelOnErrorInBeginTransaction Function

Action

Specifies whether the runtime should be halted in case of an error in the begin transaction.

If you enable this option, the runtime will be halted in case of an error. Otherwise it will continue running the script.

Include file

Kernel.bdh

Syntax

SetCancelOnErrorInBeginTransaction( in bCancel : boolean );
Parameter | Description
bCancel | If this parameter is set to true, the runtime will be halted in case of an error in the begin transaction. Otherwise, the runtime will continue running the script.

Example

dcltrans
  transaction TInit
  begin
    SetCancelOnErrorInBeginTransaction(true);
    RepMessage("Custom Error", SEVERITY_ERROR);
  end TInit;
親トピック: Simulation Setting Functions
関連資料
GetCancelOnErrorInBeginTransaction Function
GetCallEndTransaction Function
SetCompleteTransaction Function
GetCompleteTransaction Function


GetCancelOnErrorInBeginTransaction Function

Action

Gets the value of the setting that specifies whether the runtime should be halted in case of an error in the begin transaction.

Include file

Kernel.bdh

Syntax

GetCancelOnErrorInBeginTransaction( ): boolean;

Return value

  • true if the runtime should be halted in case of an error in the begin transaction

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    if GetCancelOnErrorInBeginTransaction()then
      writeln("This virtual user will be halted once the error has"
              "risen.")
    end;
    RepMessage("Custom Error", SEVERITY_ERROR);
  end TInit;
親トピック: Simulation Setting Functions
関連資料
SetCancelOnErrorInBeginTransaction Function
SetCallEndTransaction Function
GetCompleteTransaction Function


SetThinkTimeAdjustment Function

Action

Silk Performer allows you to adjust think times for each user type. With think time adjustment, a user type’s session time can easily be adjusted to the throughput requirements of the test you are planning.

With this function it is possible to change and disable think time adjustment during a test.

注: This function only has an effect if the virtual user script contains ThinkTime() function calls.

Include file

Kernel.bdh

Syntax

SetThinkTimeAdjustment( in eOption          : number ,
                        in fThinkTimeFactor : float optional,
                        in fSessionTime     : float optional );
Parameter | Description
eOption

Can be either:

  • OPT_TTA_NONE : Disables think time adjustment.

  • OPT_TTA_STRESSTEST : Think times are ignored.

  • OPT_TTA_STATIC : Think times are multiplied by a static factor to adjust session time. The parameter fThinkTimeFactor must be specified.

  • OPT_TTA_DYNAMIC : Dynamic think time adaptation is used to keep throughput rates constant at varying load levels. Both the fThinktimeFactor and fSessionTime parameters must be specified.

fThinkTimeFactor | Think times are multiplied by this static factor to adjust session time.
fSessionTime | The session time to reach when using dynamic think-time adjustment.

Example

use "kernel.bdh"
var
  nTrans : number init 0;

dcluser
  user
    WebUser
  transactions
    TWeb        : 1;

dcltrans
  transaction TWeb
  var
    nTTA : number;
  begin
    nTrans := nTrans + 1;
    ThinkTime(3.0);

    if nTrans = 5 then
      SetThinktimeAdjustment(OPT_TTA_DYNAMIC, 3.0, 9.0);
    end;

    if nTrans = 9 then
      SetThinktimeAdjustment(OPT_TTA_NONE);
    end;

    nTTA := GetThinkTimeAdjustment();
    write("thinktime adjustment: ");
    if nTTA = OPT_TTA_NONE then
      write("disabled");
    elseif nTTA = OPT_TTA_STRESSTEST then
      write("stresstest");
    elseif nTTA = OPT_TTA_STATIC then
      write("static");
    elseif nTTA = OPT_TTA_DYNAMIC then
      write("dynamic");
    end;
end TWeb;
親トピック: Simulation Setting Functions
関連資料
GetThinkTimeAdjustment Function


GetThinkTimeAdjustment Function

Action

Silk Performer allows you to adjust think times for each user type. With think time adjustment, a user type’s session time can easily be adjusted to your throughput requirements.

Returns the state of the current think time adjustment.

Include file

Kernel.bdh

Syntax

GetThinkTimeAdjustment( out fThinkTimeFactor : float optional,
                        out fSessionTime     : float optional ) number;

Return value

Can be either:

  • OPT_TTA_NONE : Adjustment of think times is disabled.

  • OPT_TTA_STRESSTEST : Think times are ignored.

  • OPT_TTA_STATIC : Think times are multiplied by a static factor to adjust session time. The parameter fThinkTimeFactor is set.

  • OPT_TTA_DYNAMIC : Dynamic think time adaptation is used to keep throughput rates constant.

Parameter | Description
fThinkTimeFactor | Think times are multiplied by this static factor to adjust session time.
fSessionTime | The session time to reach when dynamic think time adjustment is used.

Example

use "kernel.bdh"
var
  nTrans : number init 0;

dcluser
  user
    WebUser
  transactions
    TWeb        : 1;

dcltrans
  transaction TWeb
  var
    nTTA : number;
  begin
    nTrans := nTrans + 1;
    ThinkTime(3.0);

    if nTrans = 5 then
      SetThinktimeAdjustment(OPT_TTA_DYNAMIC, 3.0, 9.0);
    end;

    if nTrans = 9 then
      SetThinktimeAdjustment(OPT_TTA_NONE);
    end;

    nTTA := GetThinkTimeAdjustment();
    write("thinktime adjustment: ");
    if nTTA = OPT_TTA_NONE then
      write("disabled");
    elseif nTTA = OPT_TTA_STRESSTEST then
      write("stresstest");
    elseif nTTA = OPT_TTA_STATIC then
      write("static");
    elseif nTTA = OPT_TTA_DYNAMIC then
      write("dynamic");
    end;
  end TWeb;
親トピック: Simulation Setting Functions
関連資料
SetThinkTimeAdjustment Function
ThinkTime Function


GetThinkTimeRandomization Function

Action

Returns the state of randomization for the think time periods specified in functions.

Include file

Kernel.bdh

Syntax

GetThinkTimeRandomization( out nDeviation : number optional ) : number;

Return value

Can be either:

  • OPT_TTR_EXACT: Specified think time periods are used as-is. However if think time adjustment is enabled, think time values can be adjusted as required.

  • OPT_TTR_FORCEEXACT: Specified think time periods are used without further adjustment.

  • OPT_TTR_EXPONENTIAL: Specified think time periods are randomized following an exponential distribution.

  • OPT_TTR_UNIFORM: Specified think time periods are randomized following a uniform distribution. The deviation factor nDeviation is also set.

Parameter | Description
nDeviation | The deviation factor used if OPT_TTR_UNIFORM is set. Must be a value between 1 and 100 (%).

Example

dcltrans
  transaction TMain
  var
    nTTR, nDev : number;
  begin
    nTTR := GetThinkTimeRandomization(nDev);
    if nTTR = OPT_TTR_EXACT then
      write("exact");
    elseif nTTR = OPT_TTR_FORCEEXACT then
      write("forceexact");
    elseif nTTR = OPT_THINKTIME_EXPONENTIAL then
      write("exponential");
    elseif nTTR = OPT_TTR_UNIFORM  then
      write("uniform: ");
      write(string(nDev));
      write("%");
    else
      write("not possible");
    end;
  end TMain;
親トピック: Simulation Setting Functions
関連資料
SetThinkTimeRandomization Function
SetThinkTimeAdjustment Function
ThinkTime Function
RndSeed Function


SetThinkTimeRandomization Function

Action

Allows for the changing of think time randomization for various functions.

注: This function overrides the setting on the Simulation tab of the Profile Settings - Simulation dialog.

Include file

Kernel.bdh

Syntax

SetThinkTimeRandomization( in eOption    : number,
                           in nDeviation : number optional );
Parameter | Description
eOption

Can be either:

  • OPT_TTR_EXACT: Specified think time periods are used as-is. However if think time adjustment is enabled, think time values can be adjusted as required.

  • OPT_TTR_FORCEEXACT: Specified think time periods are used without further adjustment.

  • OPT_TTR_EXPONENTIAL: Specified think time periods are randomized following an exponential distribution.

  • OPT_TTR_UNIFORM: Specified think time periods are randomized following a uniform distribution. A deviation factor must be specified with this option (parameter nDeviation).
nDeviation | The deviation factor used when OPT_TTR_UNIFORM is set. Must be a value between 1 and 100 (%).

Example

dcltrans
  transaction TMain
  begin
    SetThinkTimeRandomization (OPT_TTR_UNIFORM, 20 /* % */);
    WebUrl("http://standardhost/index.html", 2.1);
    // 2.1 is the mean value of the
    // uniform distributed thinking period
  end TMain;
親トピック: Simulation Setting Functions
関連資料
GetThinkTimeRandomization Function
ThinkTime Function
RndSeed Function


String Functions

In BDL, strings represent a sequence of characters, and are chiefly of fixed length. The length of a string is controlled by using a null character to mark the end of the string. Strings are passed to functions by using a pointer to the first character.

注: The index of the first character belonging to a string is one (1), not (0).
  • BinSearch Function
    Searches binary data for either a string or a specified amount of binary data.
  • Bin2Hex Function
    Converts an ASCII representation of binary data into the hexadecimal representation.
  • BinAdd Function
    Appends a string or binary data to other binary data.
  • Binlen Function
    Returns a string's data length.
  • BinSetlen Function
    Sets the actual data length of a string.
  • CallConversionFunction Function
    Converts a value by using the conversion function in a custom DLL.
  • Decrypt Function
    Decrypts a string that has been encrypted using the Encrypt function.
  • Decrypt3DES Function
    Decrypts a string that has been encrypted using the Encrypt3DES function.
  • Encrypt Function
    Encrypts string or binary data into a printable format using RSA’s RC4 cipher.
  • Encrypt3DES Function
    Encrypts string or binary data into a printable format using the Triple Data Encryption Algorithm (Triple DES) block cipher.
  • FromEncoding Function
    Converts a string, from the codepage that has been set by SetEncoding, to the ANSI string that is printable within the Silk Performer GUI.
  • FromUnicode Function
    Converts all unicode escape sequences of type \uxxxx from string into corresponding characters.
  • FromUTF8 Function
    Converts a UTF8-encoded byte sequence into an ANSI string representation.
  • FStrReplace Function
    Replaces all occurrences of a search string by a replace string in a source string.
  • GetEncoding Function
    Gets the name of the codepage that has been set.
  • HashSHA2 Function
    Converts the input string into SHA2 encryption.
  • StrAnsi2Unicode Function
    Converts a string from single-byte representation to unicode representation.
  • StrUnicode2Ansi Function
    Converts a string from unicode representation to single-byte representation.
  • StrUnicodeLen Function
    Determines the number of characters a string in unicode format consists of.
  • StrAdd Function
    Appends a string or binary data to another string.
  • Strcat Function
    Appends a string to another string.
  • Strchr Function
    Searches for the first occurrence of a character in a string.
  • Strcpy Function
    Copies a string into another string.
  • Strcspn Function
    Searches a string for a character belonging to a defined set of characters.
  • Stricmp Function
    Performs a lowercase comparison of strings.
  • Strlen Function
    Retrieves the length of a string.
  • StrSize Function
    Returns the size of a string's currently allocated memory buffer.
  • StrResize Function
    Resizes a string's memory buffer.
  • Strlwr Function
    Converts a string to lowercase
  • StrlwrEx Function
    Converts a string to lowercase format (and umlautes, if required).
  • Strncmp Function
    Compares lexicographically and case-sensitively the first count characters in two strings.
  • Strncpy Function
    Copies the initial characters of a string to another string.
  • Strnicmp Function
    Compares lexicographically the first characters of two strings.
  • Strnset Function
    Overwrites the beginning of a string with a number of characters.
  • Strpbrk Function
    Searches a string for the first occurrence of any one character out of a defined set.
  • Strrchr Function
    Searches a string for the last occurrence of a character.
  • Strrev Function
    Reverses the order of characters of a string.
  • StrSearch Function
    Searches a string for a substring.
  • StrSearchDelimited Function
    Searches for a string delimited on both sides by a specified character sequence.
  • Strset Function
    Replaces all characters of a string with a specified character.
  • Strspn Function
    Searches a string for the first character that does not belong to the set of characters.
  • Strstr Function
    Searches a string for a substring.
  • Strtok Function
    Finds the next token in a string.
  • Strupr Function
    Converts a string to uppercase.
  • StruprEx Function
    Converts a string to uppercase format (and umlautes if required).
  • Substr Function
    Extracts a substring out of a string.
  • StrIsNull Function
    Checks whether a string is null.
  • StrSetNull Function
    Sets a string to null explicitly.
  • StrIsEmpty Function
    Checks whether a string is empty or null.
  • StrFromHostCP Function
    Converts a targeted host-character-set string that uses a specified code page into an ANSI string.
  • StrGetHostCP Function
    Returns the default host code page used for string conversions.
  • StrSetHostCP Function
    Sets the default host code page used for string conversions.
  • StrToHostCP Function
    Converts an ANSI string representation into a targeted host-character-set string using the specified code page.
  • SetEncoding Function
    Sets a codepage, which is used by the functions FromEncoding and ToEncoding, to convert the given strings.
  • ToEncoding Function
    Converts the given ANSI string into the string of the codepage that has been selected by the SetEncoding function.
  • ToUnicode Function
    Converts ANSI string representation into a unicode escape sequence of type \uxxxx.
  • ToUTF8 Function
    Converts an ANSI string representation into a UTF8-encoded byte sequence.
親トピック: General Functions


BinSearch Function

Action

Searches binary data for either a string or a specified amount of binary data.

Include file

Kernel.bdh

Syntax

BinSearch( in sSource     : string,
           in nSourceSize : number,
           in sSearch     : string,
           in nSearchSize : number optional,
           in nOptions    : number optional,
           in nAlign      : number optional ): number;

Return value

Position index where the data to search for was found, or zero if the substring was not found or an error occurred. Note that the index of the first byte is one (1), not zero (0).

Parameter | Description
sSource | Binary data to search
nSourceSize | Size of binary data to search
sSearch | String or binary data to look for
nSearchSize | Size of the binary data to look for (optional). When searching binary data for a string, this parameter can be omitted
nOptions

Specifies how to search the specified binary data (optional). By passing one of the following parameters to the function, it is possible to determine whether to start a new search or to continue searching

  • STR_SEARCH_FIRST. Search for the first occurrence (default)

  • STR_SEARCH_NEXT. Continue a search started before

In addition, you can determine to search binary data for a string case-sensitively by passing the STR_SEARCH_MATCH_CASE flag to the function:

Passing the STR_SEARCH_REVERSE flag to the function specifies to search the binary data in reverse order.
nAlign | Search alignment (default). If an alignment is specified, the function checks both if the data is found, and, if so, whether it is aligned to a multiple of the specified value

Example

dcltrans
  transaction TBinSearch
  var
    nPos, nDir: number;
  begin
    nPos := BinSearch("DECDEFG", 0, "DE");
    write(nPos); writeln;

    nPos := BinSearch("\h00010203040506", 7,"\h030405", 3);
    write(nPos); writeln;

    nDir := STR_SEARCH_FIRST;
    loop
      nPos := BinSearch("\h01000001000001", 7, "\h01", 1, nDir);
      if nPos = 0 then exit end;
      write(nPos); writeln;
      nDir := STR_SEARCH_NEXT;
    end;
  end TBinSearch;
親トピック: String Functions


Bin2Hex Function

Action

Converts an ASCII representation of binary data into the hexadecimal representation.

Include file

Kernel.bdh

Syntax

Bin2Hex( in  sBinData : string,
         in  nBinLen  : number,
         out sHexData : string,
         in  nHexLen  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sBinData | String buffer containing the binary data to convert to hexadecimal notation
nBinLen | Number of bytes to be converted
sHexData | String receiving the hexadecimal representation of the binary data
nHexLen | Maximum length of the string receiving the hexadecimal representation of the binary data. You have to specify at least 2*nBinLen+1 bytes to be able to convert all binary data to the hexadecimal representation. (optional) If the specified buffer is too small, the result will be truncated. In any case, the result will be NULL-terminated.

Example

transaction TMain
  var
    sString1, sString2: string;
  begin
    sString1 := "Test String";
    Bin2Hex(sString1, STRING_COMPLETE, sString2);
    writeln("Bin2Hex of <" + sString1 + "> is <" + sString2 + ">");
  end TMain;

Output

Bin2Hex of <Test String> is <5465737420537472696E67>
親トピック: String Functions


BinAdd Function

Action

Appends a string or binary data to other binary data.

Include file

Kernel.bdh

Syntax

BinAdd( inout sString : string,
        in    sAppend : string,
        in    nCount  : number optional );
Parameter | Description
sString | Source string. This parameter will contain the concatenated data after the BinAdd operation. The provided data (sAppend) will be appended at the end of the specified data sequence (sSstring).
sAppend | String or binary data to append.
nCount | Number of bytes to append (optional). Omit this parameter to append all available data.

Example

dcltrans
transaction TWeb
  var
    sData : string;
  begin

    sData := "Hugo";
    BinAdd(sData, "\h00");
    BinAdd(sData, "John");
    BinAdd(sData, "\h00");
    writedata(bin(sData));
    writedata(sData);
    StrAdd(sData, "_Smith");
    writedata(bin(sData));

  end TWeb;

Output

00000000  Hugo·John·        48 75 67 6F 00 4A 6F 68 6E 00
Hugo
Hugo_Smith
親トピック: String Functions
関連資料
StrAdd Function


Binlen Function

Action

Returns a string's data length. In contrast to the Strlen function Binlen does not return the string length, which is the number of characters until the first '\0' character, but returns the real data length stored in the string.

Include file

Kernel.bdh

Syntax

Binlen( in sString : string allownull ) : number;

Return value

  • the actual data length the string is currently holding

Parameter | Description
sString | String whose data length is returned.

Example

dcltrans
  transaction TMain
  var
    sString : string;
  begin
    sString := "String";

        Print("Strlen = " + string(Strlen(sString)));
    Print("Binlen = " + string(Binlen(sString)));
    sString := sString + "\h001122334455";

        Print("Strlen = " + string(Strlen(sString)));
    Print("Binlen = " + string(Binlen(sString)));
  end TMain;

Output

Strlen = 6
Binlen = 6
Strlen = 6
Binlen = 12
親トピック: String Functions
関連資料
BinSetlen Function
Strlen Function
StrResize Function
StrSize Function


BinSetlen Function

Action

Sets the actual data length of a string. The specified length must be within the range of 0 and StrSize().

注: Under normal circumstances the data length of a string variable is always set correctly by the runtime. However, some external functions might require manual interference in order to have the data length set correctly. This function can also be used for stripping a string to the specified length.

Include file

Kernel.bdh

Syntax

BinSetlen( in sString : string,
           in nNewLen : number ) : boolean;

Return value

  • true if the new data length could be set successfully

  • false otherwise

Parameter | Description
sString | String whose data length is set.
nNewLen | Data length the string should be set to.

Example

dcltrans
  transaction TMain
  var
    sString : string;
  begin
    sString := "Hello world";
    BinSetlen(sString, 5);

Print(sString);
    Print("Strlen = " + string(Strlen(sString)));
    Print("Binlen = " + string(Binlen(sString)));
  end TMain;

Output

HelloStrlen = 5Binlen = 5
親トピック: String Functions
関連資料
Binlen Function
Strlen Function
StrResize Function
StrSize Function


CallConversionFunction Function

Action

Converts the value sValueToConvert by using the conversion function sConversionFunction in the DLL sConversionDll. Usually this function is used by recording rules.

Include file

Kernel.bdh

Syntax

function CallConversionFunction(
  sConversionDll : in string,
  sConversionFunction : in string,
  sValueToConvert : inout dstring explicit) : string;

Return value

The converted value. If conversion failed, then the original value is returned.

Parameter | Description
sConversionDll | The name of the conversion DLL. This is the filename without the full path. The DLL is searched for in the recording rules directory and the current project directory.
sConversionFunction | The function is called to convert the value and is exported by the conversion DLL.
sValueToConvert | A variable which contains the value is converted. The conversion is done in place so the value of the variable passed is changed.

Example

dclfunc
 function ConvertToUpperCase(sValueToConvert : string) : string <API_FUNCTION>
 var
 begin
  ConvertToUpperCase := CallConversionFunction("SampleConversion.dll", "ConvertToUpperCase", sValueToConvert);
 end ConvertToUpperCase;

dcltrans
 transaction TMain
 begin
  WebSetBrowser(WEB_BROWSER_MSIE8);
  WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
 end TMain:

Sample script

CConversionRecRule.bdf

SilkEssential sample

CConversionRecRule.sep

親トピック: String Functions


Decrypt Function

Action

Decrypts a string that has been encrypted using the Encrypt function.

注: The Decrypt3DES function uses a higher security algorithm than this function and should be used in newly generated scripts to be FIPS compliant.

Include file

kernel.bdh

Syntax

Decrypt( in sEncyptedData : string,
         in sKey          : string optional ): string;

Return value

  • decrypted string

Parameter | Description
sEncyptedData | Data to be decrypted
sKey | String or binary data used as encryption key (optional).

Example

dcltrans
  transaction TMain
  var
    sUserPass  : string;
    sEncrypted : string;
  begin    // Build your own authentication header
    AttributeGetString("Password", sUserPass);
    sEncrypted := Encrypt(sUserPass);
    Print(sEncrypted);
    sUserPass := Decrypt(sEncrypted);
    Print("decrypted password: " + sUserPass);
  end TMain;
親トピック: String Functions
関連資料
Encrypt Function
Decrypt3DES Function


Decrypt3DES Function

Action

Decrypts a string that has been encrypted using the Encrypt3DES function.

Include file

kernel.bdh

Syntax

Decrypt3DES( in sEncryptedData : string,
             in sKey1 : string optional,
             in sKey2 : string optional,
             in sKey3 : string optional ): string;

Return value

  • decrypted string

Parameter | Description
sEncryptedData | Data to be decrypted.
sKey1 | String or binary data used as first encryption key (optional).
sKey2 | String or binary data used as second encryption key (optional).
sKey3 | String or binary data used as third encryption key (optional).

Example

dcltrans
  transaction TMain
  var
    sUserPass  : string;
    sEncrypted : string;
  begin
    // Build your own authentication header
    AttributeGetString("Password", sUserPass);
    sEncrypted := Encrypt3DES(sUserPass);
    Print(sEncrypted);
    sUserPass := Decrypt3DES(sEncrypted);
    Print("decrypted password: " + sUserPass);
  end TMain;
親トピック: String Functions
関連資料
Encrypt3DES Function
Decrypt Function


Encrypt Function

Action

Encrypts string or binary data into a printable format using RSA’s RC4 cipher. This function is useful for encrypting passwords and other sensitive data.

注: The Encrypt3DES function uses a higher security algorithm than this function and should be used in newly generated scripts to be FIPS compliant.

Include file

kernel.bdh

Syntax

Encrypt( in sData : string,
         in sKey  : string optional ): string;

Return value

  • encrypted string

Parameter | Description
sData | String or binary data to be encrypted
sKey | String or binary data used as encryption key (optional).
注: The returned string is about 30% larger in size than the original data

Example

dcltrans
  transaction TMain
  var
    sUserPass  : string;
    sEncrypted : string;
  begin
    // Build your own authentication header
    AttributeGetString("Password", sUserPass);
    sEncrypted := Encrypt(sUserPass);
    Print(sEncrypted);
    sUserPass := Decrypt(sEncrypted);
    Print("decrypted password: " + sUserPass);
  end TMain;
親トピック: String Functions
関連資料
Decrypt Function
Encrypt3DES Function


Encrypt3DES Function

Action

Encrypts string or binary data into a printable format using the Triple Data Encryption Algorithm (Triple DES) block cipher. This function is useful for encrypting passwords and other sensitive data.

Include file

kernel.bdh

Syntax

Encrypt3DES( in sData : string,
             in sKey1 : string optional,
             in sKey2 : string optional,
             in sKey3 : string optional ): string;

Return value

  • encrypted string

Parameter | Description
sData | String or binary data to be encrypted
sKey1 | String or binary data used as first encryption key (optional).
sKey2 | String or binary data used as second encryption key (optional).
sKey3 | String or binary data used as third encryption key (optional).
注: The returned string is about 30% larger in size than the original data.

Example

dcltrans
  transaction TMain
  var
    sUserPass  : string;
    sEncrypted : string;
  begin
    // Build your own authentication header
    AttributeGetString("Password", sUserPass);
    sEncrypted := Encrypt3DES(sUserPass);
    Print(sEncrypted);
    sUserPass := Decrypt3DES(sEncrypted);
    Print("decrypted password: " + sUserPass);
  end TMain;
親トピック: String Functions
関連資料
Decrypt3DES Function
Encrypt Function


FromEncoding Function

Action

Converts a string, from the codepage that has been set by SetEncoding, to the ANSI string that is printable within the Silk Performer GUI.

Include file

Kernel.bdh

Syntax

FromEncoding( in sSource : string ) : string;

Return value

  • Converted string

Parameter | Description
sSource | Source string to be converted.

Example

dcltrans
  transaction TMain
  var
    sResult : string;
  begin
    SetEncoding("UTF-8");
    WebPageUrl("http://testsite.company.com.cn");
    WebParseHtmlBound(sResult, STRING_COMPLETE, "Home", "Street");
    WebPageLink(ToEncoding("画像"), "画像 - Company  検索");
    writeln(FromEncoding(sResult));
  end TMain;
親トピック: String Functions
関連資料
ToEncoding Function
SetEncoding Function
GetEncoding Function


FromUnicode Function

Action

Converts all unicode escape sequences of type \uxxxx from string into corresponding characters.

Include file

Kernel.bdh

Syntax

FromUnicode( in sSource : string ): string;

Return value

  • converted string
Parameter | Description
sSource | Source string to be converted.

Example

dcltrans
  transaction TMain
  var
    sConverted : string;
  begin

    sConverted := FromUnicode("\u0061\0041\0062\u0042\u0063\u0043");
    Print(sConverted); // "AaBbCc"

  end TMain;
親トピック: String Functions


FromUTF8 Function

Action

Converts a UTF8-encoded byte sequence into an ANSI string representation.

Include file

Kernel.bdh

Syntax

FromUTF8( in sSource : string ) : string;

Return value

  • Converted string

Parameter | Description
sSource | Source string to be converted.

Example

dcltrans
  transaction TMain

  var
    sResult : string;
  begin
    WebPageUrl("http://testsite.company.com.cn");
    WebParseHtmlBound(sResult, STRING_COMPLETE, "Home", "Street");
    WebPageLink(ToUTF8("ÄÄ/ÜÖÖÜ"), "eBay");
    writeln(FromUTF8(sResult));
  end TMain;

親トピック: String Functions


FStrReplace Function

Action

Replaces all occurrences of a search string by a replace string, within a source string. This action also modifies the source string.
注: Do not use this function in a load test, as it can impact the results.

Include file

Kernel.bdh

Syntax

FStrReplace(
   inout sSource        : string,
   in    sSearch        : string,
   in    sReplace       : string,
   in    bMatchCase     : boolean optional,
   in    bWholeWordOnly : boolean optional ) : string;
Parameter | Description
sSource | The source string within which you want to search.
sSearch | The string within sSource that you are searching for.
sReplace | The string that will replace sSearch. Note that sSource also changes, as soon as sSearch is changed.
bMatchCase | 1 to perform a case-sensitive search. If you set this parameter to 0 or omit it, the search will not be case sensitive.
bWholeWordOnly | This option allows the search to be restricted to whole words only. This is useful for searching for ' a ', or 'A' without finding all words including 'a'. Set this parameter to 1 to search for whole words only. If you set this parameter to 0 or omit it, the search will not be restricted to matching whole words only.

Example

dcltrans
  transaction TWeb
  var
    sSource : string;
    sSearch : string;
    sReplace : string;
    sOut : string;
  begin
    sSource := "An ideal pack for long trail trips, its strong heli-arc
welded 6061-T6 aircraft-quality aluminum frame with V-truss design
resists diagonal distortion.";
    sSearch := "ideal pack";
    sReplace := "optimal pack";
    sOut := FStrReplace(sSource, sSearch, sReplace);
    writeln(sOut);
  end TWeb;

Output

An optimal pack for long trail trips, its strong heli-arc
welded 6061-T6 aircraft-quality aluminum frame with V-truss design
resists diagonal distortion.
親トピック: String Functions


GetEncoding Function

Action

Gets the name of the codepage that has been set.

Include file

Kernel.bdh

Syntax

GetEncoding( ): string;

Return value

  • Name of the codepage that is currently set.

Example

dcltrans
  transaction TMain
  var
    sResult : string;
  begin
    SetEncoding("UTF-8");
    WebPageUrl("http://testsite.company.com.cn");
    WebParseHtmlBound(sResult, STRING_COMPLETE, "Home", "Street");
    WebPageLink(ToEncoding("画像"), "画像 - Company  検索");
    writeln(FromEncoding(sResult));
    writeln("http://testsite.company.com.cn has the codepage "  + GetEncoding() + " set");
  end TMain;
親トピック: String Functions
関連資料
FromEncoding Function
ToEncoding Function
SetEncoding Function


HashSHA2 Function

Action

Calculates an SHA2 hash value of an input string. The required SHA2 hash length can be passed as a function argument.

Include file

Kernel.bdh

Syntax

HashSha2( in sBuffer    : string
          in nBufferLen : number optional,
          in eHashType  : number optional ): string;

Return value

Encryption of the input string.

Parameter | Description
sBuffer | The input string to be encrypted.
nBufferLen | The length of the input string. This parameter is optional, but if hashType is specified, then bufferLen must be 0 or the length of the input string.
eHashType
  • HASH_TYPE_SHA_224
  • HASH_TYPE_SHA_256 (default)
  • HASH_TYPE_SHA_384
  • HASH_TYPE_SHA_512
  • HASH_TYPE_SHA_512_224
  • HASH_TYPE_SHA_512_256

Example

dcltrans
  transaction TMain
  const
    input := "Random String";
  var
    sConverted : string;
  begin

    sConverted := HashSHA2(input, Strlen(input), HASH_TYPE_SHA_256);
    Print("sConverted = " + sConverted);

    sConverted := HashSHA2(input, Strlen(input));
    Print("sConverted = " + sConverted);

    sConverted := HashSHA2(input);
    Print("sConverted = " + sConverted);

    sConverted := HashSHA2(input, 0, HASH_TYPE_SHA_224);
    Print("sConverted = " + sConverted);

  end TMain;

Output
    sConverted = d3ffa2bcb37fb6c6a467512c2fa5b67e1a3106896e1592a858841bef06a40b81
    sConverted = d3ffa2bcb37fb6c6a467512c2fa5b67e1a3106896e1592a858841bef06a40b81
    sConverted = d3ffa2bcb37fb6c6a467512c2fa5b67e1a3106896e1592a858841bef06a40b81
    sConverted = 5871b7141b5b9e3c2d9f5b3f87f078d951969d52e8109126a6cc0701
親トピック: String Functions


StrAnsi2Unicode Function

Action

Converts a string from single-byte representation to unicode representation.

Include file

Kernel.bdh

Syntax

StrAnsi2Unicode( out sUnicode     : string,
                 in  nUnicodeByte : number,
                 in  sAnsi        : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUnicode | String receiving the unicode representation.
nUnicodeByte | Number of bytes to be used from sUnicode buffer.
sAnsi | String in single-byte representation that is to be converted.

Example

dcltrans
  transaction TMain
  var
    sAnsi, sUnicode: string;
  begin
    sAnsi := "hello world!";
    StrAnsi2Unicode(sUnicode, STRING_COMPLETE, sAnsi);
    writeln(StrUnicodeLen(sUnicode));
    StrUnicode2Ansi(sAnsi, STRING_COMPLETE, sUnicode);
  end TMain;
親トピック: String Functions
関連資料
StrUnicode2Ansi Function
StrUnicodeLen Function


StrUnicode2Ansi Function

Action

Converts a string from unicode representation to single byte representation.

Include file

Kernel.bdh

Syntax

StrUnicode2Ansi( out sAnsi      : string,
                 in  nAnsiBytes : number,
                 in  sUnicode   : string,
                 in  nByteOrder : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sAnsi | String receiving the single-byte representation.
nAnsiBytes | Number of bytes to be used in sAnsi.
sUnicode | String in unicode representation that is to be converted.
nByteOrder

Number (optional) which declares if the Unicode is in little endian or in big endian. Possible values are:

  • OPT_LITTLE_ENDIAN. Specifies little endian byte order. (default)

  • OPT_BIG_ENDIAN. Specifies big endian byte order.

Example

dcltrans
  transaction TMain
  var
    sAnsi, sUnicode: string;
  begin
    sAnsi := "hello world!";
    StrAnsi2Unicode(sUnicode, STRING_COMPLETE, sAnsi);
    writeln(StrUnicodeLen(sUnicode));
    StrUnicode2Ansi(sAnsi, STRING_COMPLETE, sUnicode);
  end TMain;
親トピック: String Functions
関連資料
StrAnsi2Unicode Function
StrUnicodeLen Function


StrUnicodeLen Function

Action

Determines the number of characters a string in unicode format consists of. The terminating NULL is not regarded as a character.

Include file

Kernel.bdh

Syntax

StrUnicodeLen( in sUnicode: string ): number;

Return value

The number of characters the string consists of.

Parameter | Description
sUnicode | String whose length is to be retrieved.

Example

dcltrans
  transaction TMain
  var
    sAnsi, sUnicode: string;
  begin
    sAnsi := "hello world!";

    StrAnsi2Unicode(sUnicode, sizeof(sUnicode), sAnsi);
    writeln(StrUnicodeLen(sUnicode));
    StrUnicode2Ansi(sAnsi, sizeof(sAnsi), sUnicode);
  end TMain;
親トピック: String Functions
関連資料
StrAnsi2Unicode Function
StrUnicode2Ansi Function


StrAdd Function

Action

Appends a string or binary data to another string.

Include file

Kernel.bdh

Syntax

StrAdd( inout sString : string,
        in    sAppend : string,
        in    nCount  : number optional );
Parameter | Description
sString | Source string. This parameter will contain the concatenated string after the StrAdd operation. The specified data (sAppend) will be appended at the first occurrence of a 0 byte in sString (regardless of possible binary data). If you want to add the data at the end of a binary body use BinAdd instead.
sAppend | String or binary data to append.
nCount | Number of bytes to append (optional). Omit this parameter to append all available data.

Example

dcltrans
transaction TWeb
  var
    sData : string;
  begin

    sData := "Hugo";
    BinAdd(sData, "\h00");
    BinAdd(sData, "John");
    BinAdd(sData, "\h00");
    writedata(bin(sData));
    writedata(sData);
    StrAdd(sData, "_Smith");
    writedata(bin(sData));

end TWeb;

Output

00000000  Hugo·John·        48 75 67 6F 00 4A 6F 68 6E 00
Hugo
Hugo_Smith
親トピック: String Functions
関連資料
BinAdd Function


Strcat Function

Action

Appends a string sAppend to another string.

Include file

Kernel.bdh

Syntax

Strcat( inout sString : string,
        in    sAppend : string ): string;

Return value

concatenated string

Parameter | Description
sString | Source string. This parameter will contain the concatenated string after the Strcat operation
sAppend | String to append
注: The use of this function has been expanded. It is possible to pass to the function either a string or a pointer to a buffer (in the latter case the keyword in has to be used).

Example

dcltrans
  transaction TStrcat
  var
    sString1, sString2 : string(100);
    sOutput1, sOutput2 : string(100);
    nBuffer1, nBuffer2 : number;
  begin
    nBuffer1 := Malloc(100); nBuffer2 := Malloc(100);
    sString1 := "Hello "; sString2 := "world!";

    // copy sString1 to output string and append sString2
    Strcpy(sOutput1, sString1); Strcat(sOutput1, sString2);

    // copy strings to buffers and concatenate them
    Strcpy(in nBuffer1, sString1); Strcpy(in nBuffer2, sString2);
    Strcat(in nBuffer1, in nBuffer2);
    Strcpy(sOutput2, in nBuffer1);

    write(sOutput1); writeln;
    write(sOutput2); writeln;
    Free(nBuffer1); Free(nBuffer2);
  end TStrcat;

Output

Hello world!
Hello world!
親トピック: String Functions


Strchr Function

Action

Searches for the first occurrence of a character in a string.

Include file

Kernel.bdh

Syntax

Strchr( in sString    : string,
        in nCharacter : number ): string;

Return value

String beginning with the first occurrence of the defined character. If the character is not found, the returned string is empty.

Parameter | Description
sString | Defines the string to search in
nCharacter | Defines the character to search

Example

dcltrans
  transaction TStrchr
  var
    sString, sPart : string;
    nChar          : number;
  begin
    sString := "Hello world!";
    nChar := ord('w');
    write("string = "); write(sString); writeln;
    write("char = "); write(chr(nChar)); writeln;

    sPart := Strchr(sString, nChar);
    write("part = "); write(sPart); writeln;
  end TStrchr;

Output

string = Hello world!
char = w
part = world!
親トピック: String Functions
関連資料
Strrchr Function


Strcpy Function

Action

Copies a string into another string.

Include file

Kernel.bdh

Syntax

Strcpy( inout sDest   : string,
        in    sSource : string ): string;

Return value

The string actually copied.

Parameter | Description
sDest | Destination string
sSource | Source string
注: The use of this function has been expanded. It is possible to pass to the function either a string or a pointer to a buffer (in the latter case the keyword in has to be used).

Example

dcltrans
  transaction TStrcpy
  var
    sString1, sString2 : string;
    sOutput : string;
    nBuffer1, nBuffer2 : number;
  begin
    nBuffer1 := Malloc(100); nBuffer2 := Malloc(100);
    // copy "Hello world!" message to all strings and buffers
    Strcpy(sString1, "Hello world!");
    Strcpy(sString2, sString1);
    Strcpy(in nBuffer1, sString1);
    Strcpy(in nBuffer2, in nBuffer1);
    Strcpy(sOutput, in nBuffer2);
    write(sString2); writeln;
    write(sOutput); writeln;
    Free(nBuffer1); Free(nBuffer2);
  end TStrcpy;

Output

Hello world!
Hello world!
親トピック: String Functions


Strcspn Function

Action

Searches in sString for the first occurrence of one character belonging to a defined set of characters in a string.

Include file

Kernel.bdh

Syntax

Strcspn( in sString       : string,
         in sCharacterSet : string ): number;

Return value

Index of the first character in sString that belongs to the set of characters in sCharacterSet. If sString begins with a character in sCharacterSet, the function returns 1. If none of the characters in sString is in sCharacterSet, the function returns 0.

Parameter | Description
sString | Specifies the string to search in
sCharacterSet | Specifies the set of characters in a string

Example

dcltrans
  transaction TStrcspn
  var
    sString, sSet : string;
    nPos          : number;
  begin
    sString := "Hello world!";
    sSet := "awx_?";
    write("string = "); write(sString); writeln;
    write("set = "); write(sSet); writeln;

    // search for the first occurrence of one of the characters
    nPos := Strcspn(sString, sSet);
    write("pos = "); write(nPos); writeln;
  end TStrcspn;

Output

string = Hello world!
set = awx_?
pos = 7
親トピック: String Functions
関連資料
Strpbrk Function
Strspn Function


Stricmp Function

Action

Performs a lowercase comparison of strings.

Include file

Kernel.bdh

Syntax

Stricmp( in sString1 : string,
         in sString2 : string ): number;

Return value

  • value < 0. sString1 is less than sString2

  • value = 0. sString1 is identical to sString2

  • value > 0. sString1 is greater than sString2

Parameter | Description
sString1 | Defines the first string to compare
sString2 | Defines the second string to compare

Example

dcltrans
  transaction TStricmp
  var
    sString1, sString2: string;
  begin
    sString1 := "Hello world!";
    sString2 := "HELLO WORLD!";
    write("string1 = "); write(sString1); writeln;
    write("string2 = "); write(sString2); writeln;

    // perform lowercase comparison
    if Stricmp(sString1, sString2) = 0 then
      write("strings are equal when converted to lowercase"); writeln;
    else
      write("strings are different"); writeln;
    end;
  end TStricmp;

Output

string1 = Hello world!
string2 = HELLO WORLD!
strings are equal when converted to lowercase
親トピック: String Functions


Strlen Function

Action

Retrieves the length of a string.

In contrast to the Binlen function Strlen does not return the data length, but returns the number of characters before the first '\0' (null) character.

Include file

Kernel.bdh

Syntax

Strlen( in sString : string ): number;

Return value

string length

Parameter | Description
sString | Input string

Example

dcltrans
  transaction TStrlen
  var
    sString : string;
    nLength : number;
  begin
    sString := "Hello world!";
    write("string = "); write(sString); writeln;
    nLength := Strlen(sString);
    write("length = "); write(nLength); writeln;
    write("length of long string = ");
    write(Strlen("This is quite a long string")); writeln;
  end TStrlen;

Output

string = Hello world!
length = 12
length of long string = 27

Sample scripts

WebFileUpload01.bdf

親トピック: String Functions
関連資料
Binlen Function
BinSetlen Function
StrResize Function
StrSize Function


StrSize Function

Action

Returns the size of a string's currently allocated memory buffer.

Include file

Kernel.bdh

Syntax

StrSize( in sString : string ): number;

Return value

  • the amount of memory the string has currently allocated

Parameter | Description
sString | String whose memory size is to be retrieved.

Example

dcltrans
  transaction TMain
  var
    sString : string;
  begin
    Print("Allocated memory: " + string(StrSize(sString)) + " Bytes");

 StrResize(sString, 1024);
    Print("Allocated memory: " + string(StrSize(sString)) + " Bytes");
    StrResize(sString, 10, 100);
    Print("Allocated memory: " + string(StrSize(sString)) + " Bytes");
  end TMain;

Output

Allocated memory: 254 Bytes
Allocated memory: 1024 Bytes
Allocated memory: 100 Bytes
親トピック: String Functions
関連資料
Binlen Function
BinSetlen Function
Strlen Function
StrResize Function


StrResize Function

Action

Resizes a string's memory buffer. The new size of the memory buffer is specified with a minimum and maximum value in order for the string to decide whether it must really resize its memory buffer.

Include file

Kernel.bdh

Syntax

StrResize ( in sString  : string,
            in nMinSize : number,
            in nMaxSize : number optional );
Parameter | Description
sString | String whose memory size is to be resized.
nMinSize | Minimum value which the string's memory buffer is resized to.
nMaxSize | Maximum value which the string's memory buffer is resized to (optional and default is unlimited).

Example

dcltrans
  transaction TMain
  var
    sString : string;
  begin
    Print("Allocated memory: " + string(StrSize(sString)) + " Bytes");

    StrResize(sString, 1024);
    Print("Allocated memory: " + string(StrSize(sString)) + " Bytes");
    StrResize(sString, 10, 100);
    Print("Allocated memory: " + string(StrSize(sString)) + " Bytes");
  end
TMain;

Output

Allocated memory: 254 Bytes
Allocated memory: 1024 Bytes
Allocated memory: 100 Bytes
親トピック: String Functions
関連資料
Binlen Function
BinSetlen Function
Strlen Function
StrSize Function


Strlwr Function

Action

Converts a string to lowercase.

Include file

Kernel.bdh

Syntax

Strlwr(inout sString: string): string;

Return value

The string converted to lowercase.

Parameter | Description
sString | String to be converted. This parameter will contain the result string after the Strlwr operation

Example

dcltrans
  transaction TStrlwr
  var
    sString, sLower: string;
  begin
    sString := "HeLlO wOrLd!";
    write("string = "); write(sString); writeln;
    // convert string to lowercase
    sLower := Strlwr(sString);
    write("string = "); write(sString); writeln;
    write("lower = "); write(sLower); writeln;
  end TStrlwr;

Output

string = HeLlO wOrLd!
string = hello world!
lower = hello world!
親トピック: String Functions
関連資料
Strupr Function


StrlwrEx Function

Action

Converts a string to lowercase format (and umlautes, if required).

Include file

kernel.bdh

Syntax

StrlwrEx(
      inout sString : string ): string ;

Return value

the modified string

Parameter | Description
sString | String to be converted. This parameter will contain the result string after the StrlwrEx operation

Example

dcltrans
  transaction TStrlwrEx
  var
    sString, sLower: string;
  begin
    sString := "HeLlÖ wOrLd!";
    write("string = "); write(sString); writeln;

    // convert string to lowercase
    sLower := StrlwrEx(sString);
    write("string = "); write(sString); writeln;
    write("lower  = "); write(sLower); writeln;
  end TStrlwrEx;

Output

string = HeLlÖ wOrLd!
string = hellö world!
lower  = hellö world!
親トピック: String Functions
関連資料
Strings
Strlwr Function
StruprEx Function


Strncmp Function

Action

Compares lexicographically and case-sensitively the first count characters in two strings. For case-insensitive string comparison refer to the Strnicmp function.

Include file

Kernel.bdh

Syntax

Strncmp(in sString1 : string,in sString2 : string,in nCount : number): number;

Return value

  • value < 0. sString1 is less than sString2

  • value = 0. sString1 is identical to sString2

  • value > 0. sString1 is greater than sString2

Parameter | Description
sString1 | Defines the first string to compare
sString2 | Defines the second string to compare
nCount | Defines the number of characters to compare

Example

dcltrans
  transaction TStrncmp
  var
    sString1, sString2: string;
  begin
    sString1 := "Hello world!";
    sString2 := "Hello WORLD!";
    write("string1 = "); write(sString1); writeln;
    write("string2 = "); write(sString2); writeln;
    // compare strings
    if Strncmp(sString1, sString2, Strlen(sString1)) = 0 then
      write("strings are equal"); writeln;
    else
      write("strings are not equal"); writeln;
    end;
    // compare first 5 characters of strings
    if Strncmp(sString1, sString2, 5) = 0 then
      write("first 5 characters of the strings are equal"); writeln;
    else
      write("first 5 characters are not equal"); writeln;
    end;
  end TStrncmp;

Output

string1 = Hello world!
string2 = Hello WORLD!
strings are not equal
first 5 characters of the strings are equal
親トピック: String Functions
関連資料
Strnicmp Function


Strncpy Function

Action

Copies the initial nCount characters of sSource to sDest and returns sDest. If nCount is less than or equal to the length of sSource, no null character is appended to the copied string. If nCount is greater than the length of sSource, the destination string is padded with null characters up to length count. The behavior of Strncpy is undefined if the source string and the destination string overlap.

Include file

Kernel.bdh

Syntax

Strncpy( out sDest   : string,
         in  sSource : string,
         in  nCount  : number): string;

Return value

The string actually copied. No special value indicates an error.

Parameter | Description
sDest | String to be overwritten. This parameter will contain the result of the copy operation
sSource | Is copied into sDest
nCount | Defines the number of characters to copy

Example

dcltrans
  transaction TStrncpy
  var
    sSource, sDest, sResult: string;
  begin
    sDest := "That is beautiful!";
    sSource := "This is just a test!";
    write("dest = "); write(sDest); writeln;
    write("source = "); write(sSource); writeln;
    sResult := Strncpy(sDest, sSource, 20);
    write("dest = "); write(sDest); writeln;
    write("result = "); write(sResult); writeln;
  end TStrncpy;

Output

dest   = That is beautiful!
source = This is just a test!
dest   = This is just a test!
result = This is just a test!
親トピック: String Functions


Strnicmp Function

Action

Compares lexicographically the first nCount characters in two strings without regard to case-sensitivity. For case-sensitive string comparison use the Strncmp function.

Include file

Kernel.bdh

Syntax

Strnicmp(in sString1 : string,
         in sString2 : string,
         in nCount : number): number;

Return value

  • value < 0. sString1 is less than sString2

  • value = 0. sString1 is identical to sString2

  • value > 0. sString1 is greater than sString2

Parameter | Description
sString1 | Defines the first string to compare
sString2 | Defines the second string to compare
nCount | Defines the number of characters to compare

Example

dcltrans
  transaction TStrnicmp
  var
    sString1, sString2 : string;
    nResult1, nResult2 : number;
  begin
    sString1 := "HELLO beautiful world!";
    sString2 := "Hello beautiful lady!";
    write("string1 = "); write(sString1); writeln;
    write("string2 = "); write(sString2); writeln;
    nResult1 := Strnicmp(sString1, sString2,15);
    nResult2 := Strnicmp(sString1, sString2, 20);
    if nResult1 = 0 then
      write("first 15 characters are equal"); writeln;
    else
      write("first 15 characters are not equal"); writeln;
    end;
    if nResult2 = 0 then
      write("first 20 characters are equal"); writeln;
    else
      write("first 20 characters are not equal"); writeln;
    end;
  end TStrnicmp;

Output

string1 = HELLO beautiful world!
string2 = Hello beautiful lady!
first 15 characters are equal
first 20 characters are not equal
親トピック: String Functions
関連資料
Strncmp Function


Strnset Function

Action

Overwrites the beginning of a string with nCount characters.

Include file

Kernel.bdh

Syntax

Strnset( inout sString    : string,
         in    nCharacter : number,
         in    nCount     : number ): string;

Return value

the altered string

Parameter | Description
sString | String to be overwritten. This parameter will contain the altered string after the Strnset operation
nCharacter | Defines a character that the function uses to overwrite a section of sString
nCount | Defines the number of characters to overwrite in sString

Example

dcltrans
  transaction TStrnset
  var
    sString, sResult : string;
    nChar : number;
  begin
    sString := "Hello world!";
    nChar := ord('*');
    write("string = "); write(sString); writeln;
    write("char   = "); write(chr(nChar)); writeln;

    sResult := Strnset(sString, nChar, 5);
    write("result = "); write(sResult); writeln;
  end TStrnset;

Output

string = Hello world!
char   = *
result = ***** world!
親トピック: String Functions


Strpbrk Function

Action

Searches for the first occurrence of any one character out of a defined set of characters in a string.

Include file

Kernel.bdh

Syntax

Strpbrk( in sString       : string,
         in sCharacterSet : string ): string;

Return value

the shortened string, beginning with a character defined in sCharacterSet

Parameter | Description
sString | Identifies the string to search in
sCharacterSet | Defines a set of characters and the search criteria

Example

dcltrans
  transaction TStrpbrk
  var
    sString, sSet, sResult1, sResult2: string;
  begin
    sString := "Hello world!";
    sSet := "lwx";
    write("string  = "); write(sString); writeln;
    write("set     = "); write(sSet); writeln;

    sResult1 := Strpbrk(sString, sSet);
    sResult2 := Strpbrk(sString[5], sSet);
    write("result1 = "); write(sResult1); writeln;
    write("result2 = "); write(sResult2); writeln;
  end TStrpbrk;

Output

string  = Hello world!
set     = lwx
result1 = llo world!
result2 = world!
親トピック: String Functions
関連資料
Strcspn Function
Strspn Function


Strrchr Function

Action

Searches for the last occurrence of a character in a string.

Include file

Kernel.bdh

Syntax

Strrchr( in sString    : string,
         in nCharacter : number ): string;

Return value

String beginning with the last occurrence of the defined character. If the character is not found, the returned string is empty.

Parameter | Description
sString | Defines the string to search in
nCharacter | Defines the character to search

Example

dcltrans
  transaction TStrrchr
  var
    sString, sResult : string;
    nChar : number;
  begin
    sString := "Hello world!";
    nChar := ord('l');
    write("string = "); write(sString); writeln;
    write("char   = "); write(chr(nChar)); writeln;

    sResult := Strrchr(sString, nChar);
    write("result = "); write(sResult); writeln;
  end TStrrchr;

Output

string = Hello world!
char   = l
result = ld!
親トピック: String Functions
関連資料
Strchr Function


Strrev Function

Action

Reverses the order of characters of a string.

Include file

Kernel.bdh

Syntax

Strrev(inout sString: string): string;

Return value

The reversed string.

Parameter | Description
sString | String to reverse. This parameter also contains the result after the Strrev operation.

Example

dcltrans
  transaction TStrrev
  var
    sString: string;
  begin
    sString := "Hello world!";
    write("String = "); write(sString); writeln;
    // reverse characters of string
    Strrev(sString);
    write("String = "); write(sString); writeln;
  end TStrrev;

Output

String = Hello world!
String = !dlrow olleH
親トピック: String Functions


StrSearch Function

Action

Searches for a substring in a string.

Include file

Kernel.bdh

Syntax

StrSearch(in sSource : string,
          in sSearch : string,
          in nFlags  : number) : number;

Return value

Index of the position of the found substring, or zero if the substring was not found or an error occurred.

Parameter | Description
sSource | Source string to be searched
sSearch | String to search for
nFlags

Option flags. Several combinations of the following options are possible:

  • STR_SEARCH_FIRST: Start a new search.

  • STR_SEARCH_NEXT: Continue a previous search.

  • STR_SEARCH_MATCH_CASE: Search case-sensitive.

  • STR_SEARCH_REVERSE: Search from right to left.
注: The STR_SEARCH_NEXT option is allowed only if the function is called with the same source string as in the previous call.

Example

dcltrans
  transaction TStrSearch
  var
    sString, sWord : string;
    nPos : number;
  begin
    sString := "The dog, the cat and the mouse are very tired today";
    sWord := "the";
    write("string = "); write(sString); writeln;
    write("word = "); write(sWord); writeln;
    nPos := StrSearch(sString, sWord, STR_SEARCH_FIRST);
    write("pos = "); write(nPos); writeln;
    nPos := StrSearch(sString, sWord, STR_SEARCH_NEXT);
    write("pos = "); write(nPos); writeln;
    nPos := StrSearch(sString, sWord,STR_SEARCH_FIRST | STR_SEARCH_MATCH_CASE);
    write("pos = "); write(nPos); writeln;
    nPos := StrSearch(sString, sWord,STR_SEARCH_FIRST | STR_SEARCH_REVERSE);
    write("pos = "); write(nPos); writeln;
  end TStrSearch;

Output

string = The dog, the cat and the mouse are very tired
today
word = the
pos = 1
pos = 10
pos = 10
pos = 22

Sample scripts

WebFileUpload01.bdf

親トピック: String Functions
関連資料
StrSearchDelimited Function


StrSearchDelimited Function

Action

Searches for a string delimited on the left by sLeftVal and on the right by sRightVal. The search direction for delimiters can be from left to right and vice versa. It is also possible to search for the n-th occurrence of delimiters. It is further possible to continue a search at the positions found at a previous search.

Include file

Kernel.bdh

Syntax

StrSearchDelimited( out sTarget      : string,
                    in  nMaxTarget   : number,
                    in  sSource      : string,
                    in  sLeftVal     : string allownull,
                    in  nLVOccurrence : number,
                    in  sRightVal    : string allownull,
                    in  nRVOccurrence : number,
                    in  nFlags       : number ): boolean;

Return value

  • true if a substring could be found which is delimited on the left by sLeftVal and on the right by sRightVal and no error occurred

  • false otherwise

Parameter | Description
sTarget | String variable to receive the found substring
nMaxTarget | Maximum number of characters to write into sTarget. This value must be <= the size of sTarget.
sSource | Source string to be searched
sLeftVal | Left delimiter string to search for
nLVOccurrence | Search until sLeftVal is found nLVOccurrence times
sRightVal | Right delimiter string to search for
nRVOccurrence | Search until sRightVal is found nRVOccurrence times
nFlags

Option flags. Several combinations of the following options are possible:

  • STR_SEARCH_FIRST: Start a new search.

  • STR_SEARCH_NEXT: Continue a previous search.

  • STR_SEARCH_MATCH_CASE: Search case-sensitive.

  • STR_SEARCH_IGNORE_WHITESPACES: Ignore white spaces during search.
注: The STR_SEARCH_NEXT option is allowed only if the function is called with the same source string as in the previous call.

  • A value of zero for nLVOccurrence and nRVOccurrence means that the corresponding position is kept from the previous search.

  • A negative value for nLVOccurrence and nRVOccurrence means to search from right to left.

  • If sLeftVal/sRightVal is null, the beginning/end of the source string is used as a delimiter.

  • Except for the case when nLVOccurrence and nRVOccurrence are negative or the case when nLVOccurrence is positive and nRVOccurrence is negative, the sRightVal is searched starting from the position where sLeftVal is found. If nLVOccurrence and nRVOccurrence are negative, sRightVal is searched first and then the search for sLeftVal starts from the position where sRightVal has been found. If nLVOccurrence is positive and nRVOccurrence is negative, sRightVal is searched starting from the end of the source string.

Example

dcltrans
  transaction TStrSearchDelimited
  var
    sText, sWord1, sWord2, sResult : string;
    nPos                           : number;
    bOk                            : boolean;
  begin
    sText := "The quick brown dog jumps over "
             "the lazy fox and the lazy cat";
    sWord1 := "the";
    sWord2 := "the";
    bOk := StrSearchDelimited(sResult, STRING_COMPLETE, sText,
                              sWord1, 1, sWord2, 1, 0);
    writeln(sResult);

    bOk := StrSearchDelimited(sResult, STRING_COMPLETE, sText,
                              sWord1, 1, sWord2, 2, STR_SEARCH_NEXT);
    writeln(sResult);

    bOk := StrSearchDelimited(sResult, STRING_COMPLETE, sText,
                              sWord1, 0, sWord2, 1, STR_SEARCH_NEXT);
    writeln(sResult);

    bOk := StrSearchDelimited(sResult, STRING_COMPLETE, sText, sWord1,
                              -1, sWord2, 0, STR_SEARCH_NEXT);
    writeln(sResult);

    bOk := StrSearchDelimited(sResult, STRING_COMPLETE, sText,
                              NULL, 1, sWord2, -1, 0);
    writeln(sResult);

    bOk := StrSearchDelimited(sResult, STRING_COMPLETE, sText,
                              sWord1, 3, NULL, 1, 0);
    writeln(sResult);
  end TStrSearchDelimited;

Output

 quick brown dog jumps over

 quick brown dog jumps over the lazy fox and

The quick brown dog jumps over the lazy fox and
 lazy cat
親トピック: String Functions
関連資料
StrSearch Function


Strset Function

Action

Replaces all characters of a string with the character nCharacter.

Include file

Kernel.bdh

Syntax

Strset( inout sString    : string,
        in    nCharacter : number ): string;

Return value

the altered string

Parameter | Description
sString | String to be overwritten. This parameter will contain the altered string after the Setset operation
nCharacter | Defines the character for the operation

Example

dcltrans
  transaction TStrset
  var
    sString, sResult : string;
    nChar            : number;
  begin
    sString := "Hello world!";
    nChar   := ord('*');
    write("string = "); write(sString); writeln;
    write("char   = "); write(chr(nChar)); writeln;

    sResult := Strset(sString, nChar);
    write("string = "); write(sString); writeln;
    write("result = "); write(sResult); writeln;
  end TStrset;

Output

string = Hello world!
char   = *
string = ************
result = ************
親トピック: String Functions


Strspn Function

Action

Searches in sString for the first character that does not belong to the set of characters in sCharacterSet.

Include file

Kernel.bdh

Syntax

Strspn( in sString       : string,
        in sCharacterSet : string ): number;

Return value

Index of the first character in sString that does not belong to the set of characters in sCharacterSet. If sString begins with a character not in sCharacterSet, the function returns 1.

Parameter | Description
sString | Defines the string to search in
sCharacterSet | Defines a set of character as a search criteria

Example

dcltrans
  transaction TStrspn
  var
    sString, sSet : string;
    nIndex        : number;
  begin
    sString := "Hello world!";
    sSet    := "ABCDEFGHabcdefgh";
    write("string = "); write(sString); writeln;
    write("set    = "); write(sSet); writeln;

    nIndex := Strspn(sString, sSet);
    write("index  = "); write(nIndex); writeln;
  end TStrspn;

Output

string = Hello world!
set    = ABCDEFGHabcdefgh
index  = 3
親トピック: String Functions
関連資料
Strcspn Function
Strpbrk Function


Strstr Function

Action

Searches a string for a substring.

Include file

Kernel.bdh

Syntax

Strstr( in sString    : string,
        in sSubString : string ): string;

Return value

sString starting at the first occurrence of sSubString

Parameter | Description
sString | Defines the string to search in
sSubString | Defines the string to search in sString

Example

dcltrans
  transaction TStrstr
  var
    sString, sSubString, sResult: string;
  begin
    sString    := "Hope the weather will be fine tomorrow!";
    sSubString := "the";
    write("string    = "); write(sString); writeln;
    write("substring = "); write(sSubString); writeln;

    sResult := Strstr(sString, sSubString);
    write("result    = "); write(sResult); writeln;
  end TStrstr;

Output

string    = Hope the weather will be fine tomorrow!
substring = the
result    = the weather will be fine tomorrow!
親トピック: String Functions


Strtok Function

Action

Finds the next token in a string.

Include file

Kernel.bdh

Syntax

Strtok( in sTokenString  : string allownull,
        in sDelimiterSet : string ): string;

Return value

Next token found in sTokenString. This function returns an empty string when no more tokens are found. Each call modifies sTokenString by substituting a null character for each delimiter that is encountered.

Parameter | Description
sTokenString | Defines the string to search in. Each call modifies this parameter by substituting a null character for each delimiter that is encountered.
sDelimiterSet | Defines a set of characters that subdivide the tokens.

Example

dcltrans
  transaction TStrtok
  var
    sTokenString, sDelimiterSet, sToken: string;
  begin
    sTokenString := "apples+peaches*bananas/physical training="
                    "very healthy";
    sDelimiterSet := "+*/=";
    write("Tokens found: "); writeln;
    sToken := Strtok(sTokenString, sDelimiterSet);

    while sToken <> "" do
      write(sToken); write(", ");
      sToken := Strtok(NULL, sDelimiterSet);
    end;
  end TStrtok;

Output

Tokens found:
apples, peaches, bananas, physical training, very healthy,
親トピック: String Functions


Strupr Function

Action

Converts a string to uppercase.

Include file

Kernel.bdh

Syntax

Strupr(inout sString: string): string;

Return value

The string converted to uppercase.

Parameter | Description
sString | String to be converted. This parameter will contain the result string after the Strupr operation

Example

dcltrans
  transaction TStrupr
  var
    sString, sUpper: string;
  begin
    sString := "HeLlO wOrLd!";
    write("string = "); write(sString); writeln;
    // convert string to uppercase
    sUpper := Strupr(sString);
    write("string = "); write(sString); writeln;
    write("upper = "); write(sUpper); writeln;
  end TStrupr;

Output

string = HeLlO wOrLd!
string = HELLO WORLD!
upper = HELLO WORLD!
親トピック: String Functions
関連資料
Strlwr Function


StruprEx Function

Action

Converts a string to uppercase format (and umlautes if required).

Include file

kernel.bdh

Syntax

StruprEx( inout sString : string): string;

Return value

The string converted to uppercase.

Parameter | Description
sString | String to be converted. This parameter will contain the result string after the StrUprEx operation.

Example

dcltrans
  transaction TStruprEx
  var
    sString, sUpper: string;
  begin
    sString := "HeLlÖ wOrLd!";
    write("string = "); write(sString); writeln;

    // convert string to uppercase
    sUpper := StruprEx(sString);
    write("string = "); write(sString); writeln;
    write("upper  = "); write(sUpper); writeln;
  end TStruprEx;

Output

string = HeLlÖ wOrLd!
string = HELLÖ WORLD!
upper  = HELLÖ WORLD!
親トピック: String Functions


Substr Function

Action

Extracts a substring (nLen characters in length, beginning at position nStart) from a string.

If the start position is not within the string an error is raised. If the length specification exceeds the string’s length, the substring ends with the last character of the string.

Include file

Kernel.bdh

Syntax

Substr( in  sSource : string,
        out sDest   : string,
        in  nStart  : number,
        in  nLen    : number): string;

Return value

copied substring

Parameter | Description
sSource | Source string
sDest | Destination string
nStart | Position of first character
nLen | Length of substring

Example

dcltrans
  transaction TSubstr
  var
    sString, sPart: string;
  begin
    sString := "Hello world!";
    write("string = "); write(sString); writeln;
    // extract substring "world"
    Substr(sString, sPart, 7, 5);
    write("part = "); write(sPart); writeln;
  end TSubstr;

Output

string = Hello world!
part = world
親トピック: String Functions


StrIsNull Function

Action

Checks whether a string is null.

注: BDL strings implement null pointer semantics, i.e. BDL differentiates between a null string and an empty string.

Include file

Kernel.bdh

Syntax

StrIsNull( in sString : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sString | String to be checked for null.

Example

dcltrans
  transaction TMain
  var
    sString : string;
  begin
    if StrIsNull(sString)then
      Print("sString is null");
    else
      Print("sString is not null");
    end;

    if StrIsEmpty(sString) then
      Print("sString is empty");
    else
      Print("sString is not empty");
    end;

    StrSetNull(sString);

    if StrIsNull(sString)then
      Print("sString is null");
    else
      Print("sString is not null");
    end;

    if StrIsEmpty(sString) then
      Print("sString is empty");
    else
      Print("sString is not empty");
    end;
  end TMain;

Output

sString is not null
sString is empty
sString is null
sString is empty
親トピック: String Functions
関連資料
StrIsEmpty Function
StrSetNull Function


StrSetNull Function

Action

Sets a string to null explicitly.

注: BDL strings implement null pointer semantics, i.e. BDL differentiates between a null string and an empty string.

Include file

Kernel.bdh

Syntax

StrSetNull( inout sString : string ) : boolean;

Return value

  • true if string was set to null

  • false otherwise

Parameter | Description
sString | String to be set to null.

Example

dcltrans
  transaction TMain
  var
    sString : string;
  begin
    if StrIsNull(sString) then
      Print("sString is null");
    else
      Print("sString is not null");
    end;

    if StrIsEmpty(sString) then
      Print("sString is empty");
    else
      Print("sString is not empty");
    end;

    StrSetNull(sString);

    if StrIsNull(sString) then
      Print("sString is null");
    else
      Print("sString is not null");
    end;

    if StrIsEmpty(sString) then
      Print("sString is empty");
    else
      Print("sString is not empty");
    end;
 end TMain;

Output

sString is not null
sString is empty
sString is null
sString is empty
親トピック: String Functions
関連資料
StrIsEmpty Function
StrIsNull Function


StrIsEmpty Function

Action

Checks whether a string is empty.

注: BDL strings implement null pointer semantics, i.e. BDL differentiates between a null string and an empty string.

Include file

Kernel.bdh

Syntax

StrIsEmpty( in sString : string allownull ): boolean;

Return value

  • true if string is empty or null

  • false otherwise

Parameter | Description
sString | String to be checked.

Example

dcltrans
  transaction TMain
  var
    sString : string;
  begin
    if StrIsNull(sString) then
      Print("sString is null");
    else
      Print("sString is not null");
    end;

    if StrIsEmpty(sString)then
      Print("sString is empty");
    else
      Print("sString is not empty");
    end;

    StrSetNull(sString);

    if StrIsNull(sString) then
      Print("sString is null");
    else
      Print("sString is not null");
    end;

    if StrIsEmpty(sString) then
      Print("sString is empty");
    else
      Print("sString is not empty");
    end;
  end TMain;

Output

sString is not null
sString is empty
sString is null
sString is empty
親トピック: String Functions
関連資料
StrIsNull Function
StrSetNull Function


StrFromHostCP Function

Action

Converts a targeted host-character-set string that uses a specified code page into an ANSI string.

Include file

Kernel.bdh

Syntax

StrFromHostCP(
    in sSource   : string,
    in uCodePage : number optional ) : string;

Return value

  • Converted string

Parameter | Description
sSource | Source string to be converted.
nCodePage | Code page number to be used for conversion (optional). If omitted, the default host-character-set code page is used (See StrSetHostCP for details).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591);// 28591 (ISO 8859-1 Latin I)

    if StrGetHostCP()<>28591 then
      RaiseError(ERROR_CUSTOM, "(ISO 8859-1 Latin I) not supported", SEVERITY_PROCESS_EXIT);
    end;
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);

    if StriCmp(StrFromHostCP(sBuffer), "leo") <> 0 then
      RaiseError(ERROR_CUSTOM);
    end;

    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: String Functions


StrGetHostCP Function

Action

Returns the default host code page used for string conversions when using StrToHostCP and StrFromHostCP functions.

Include file

Kernel.bdh

Syntax

StrGetHostCP( ): number;

Return value

  • Currently set host code page used for string conversions.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)

    if StrGetHostCP()<>28591 then
      RaiseError(ERROR_CUSTOM, "(ISO 8859-1 Latin I) not supported", SEVERITY_PROCESS_EXIT;
    end;
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP",WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);

    if StriCmp(StrFromHostCP(sBuffer), "leo") <> 0 then
      RaiseError(ERROR_CUSTOM);
    end;

    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: String Functions


StrSetHostCP Function

Action

Sets the default host code page used for string conversions when using StrToHostCP and StrFromHostCP functions.

Include file

Kernel.bdh

Syntax

StrSetHostCP( in nCodePage : number );
Parameter | Description
nCodePage | Code page number to use for conversion.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591);// 28591 (ISO 8859-1 Latin I)

    if StrGetHostCP()<>28591 then
      RaiseError(ERROR_CUSTOM, "(ISO 8859-1 Latin I) not supported", SEVERITY_PROCESS_EXIT);
    end;
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);

    if StriCmp(StrFromHostCP(sBuffer), "leo") <> 0 then
      RaiseError(ERROR_CUSTOM);
    end;

    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;

親トピック: String Functions


StrToHostCP Function

Action

Converts an ANSI string representation into a targeted host-character-set string using the specified code page.

Include file

Kernel.bdh

Syntax

StrToHostCP(
    in sSource   : string,
    in uCodePage : number optional ) : string;

Return value

  • Converted string

Parameter | Description
sSource | Source string to be converted
nCodePage | Code page number to use for conversion (optional). If omitted, the default host-character-set code page is used (See StrSetHostCP for details).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591);// 28591 (ISO 8859-1 Latin I)

    if StrGetHostCP()<>28591 then
      RaiseError(ERROR_CUSTOM, "(ISO 8859-1 Latin I) not supported", SEVERITY_PROCESS_EXIT);
    end;
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);

    if StriCmp(StrFromHostCP(sBuffer), "leo") <> 0 then
      RaiseError(ERROR_CUSTOM);
    end;

    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;

親トピック: String Functions


SetEncoding Function

Action

Sets a codepage, which is used by the functions FromEncoding and ToEncoding, to convert the given strings.

Include file

Kernel.bdh

Syntax

SetEncoding( in sCodepage: string ): boolean;

Return value

  • true if the codepage could be set.

  • false otherwise

Parameter | Description
sCodepage | The name of the used codepage. E.g.: "UTF-8", "WINDOWS-1255", "EUC-JP"

Example

dcltrans
  transaction TMain
  var
    sResult : string;
  begin
    SetEncoding("UTF-8");
    WebPageUrl("http://testsite.company.com.cn");
    WebParseHtmlBound(sResult, STRING_COMPLETE, "Home", "Street");
    WebPageLink(ToEncoding("画像"), "画像 - Company  検索");
    writeln(FromEncoding(sResult));
    writeln("http://testsite.company.com.cn has the codepage "  + GetEncoding() + " set");
  end TMain;
親トピック: String Functions
関連資料
FromEncoding Function
ToEncoding Function
GetEncoding Function


ToEncoding Function

Action

Converts the given ANSI string into the string of the codepage that has been selected by the SetEncoding function.

Include file

Kernel.bdh

Syntax

ToEncoding( in ParamName : string ): string;

Return value

  • Converted string

Parameter | Description
sSource | Source string to be converted.

Example

dcltrans
  transaction TMain
  var
    sResult : string;
  begin
    SetEncoding("UTF-8");
    WebPageUrl("http://testsite.company.com.cn");
    WebParseHtmlBound(sResult, STRING_COMPLETE, "Home", "Street");
    WebPageLink(ToEncoding("画像"), "画像 - Company 検索");
    writeln(FromEncoding(sResult));
    writeln("http://testsite.company.com.cn has the codepage"  + GetEncoding() + " set");
  end TMain;
親トピック: String Functions
関連資料
FromEncoding Function
SetEncoding Function
GetEncoding Function


ToUnicode Function

Action

Converts ANSI string representation into a unicode escape sequence of type \uxxxx.

Include file

Kernel.bdh

Syntax

ToUnicode( in sSource : string ): string;

Return value

  • converted string
Parameter | Description
sSource | Source string to be converted.

Example

dcltrans
  transaction TMain
  var
    sConverted : string;
  begin

    sConverted := ToUnicode("AaBbCc");
    Print(sConverted); // "\u0061\0041\0062\u0042\u0063\u0043"

  end TMain;
親トピック: String Functions


ToUTF8 Function

Action

Converts an ANSI string representation into a UTF8-encoded byte sequence.

Include file

Kernel.bdh

Syntax

ToUTF8( in sSource : string ) : string;

Return value

  • Converted string

Parameter | Description
sSource | Source string to be converted.

Example

dcltrans
  transaction TMain
  var
    sResult : string;
  begin
    WebPageUrl("http://testsite.company.com.cn");
    WebParseHtmlBound(sResult, STRING_COMPLETE, "Home", "Street");
    WebPageLink(ToUTF8("ÄÄ/ÜÖÖÜ"), "eBay");
    writeln(FromUTF8(sResult));
  end TMain;

親トピック: String Functions


Regular Expressions

Regular expressions represent an advanced technique for checking syntax of strings or for parsing values out of strings. They are very powerful but significantly slower and more difficult to use than the StrSearch and StrSearchDelimited functions.

For parsing responses of Web pages, WebParseResponseData is the fastest implementation, since it operates on the incoming data stream instead of storing the entire Web page. When using regular expressions, it is necessary to store the entire page or a part of the page in a string variable. This can be done with WebParseResponseData or WebTcpipRecvClose.

Silk Performer provides the following functions to handle regular expressions:

  • Structure of Regular Expressions
    Describes the structure of regular expressions and shows which characters may be used
  • StrRegexClose Function
    Closes a handle opened with the StrRegexCompile function.
  • StrRegexCompile Function
    Compiles a regular expression and applies the resulting automaton to a handle for later use.
  • StrRegexExecute Function
    Executes a compiled regular expression on the string argument.
  • StrRegexFindFirst Function
    Creates an iterator over matched portions and stores the first matching substring into sTarget.
  • StrRegexFindNext Function
    Advances to the next matched substring and stores the result into sTarget.
  • StrRegexImmediate Function
    Compiles a regular expression and executes it to match a source string.
  • StrRegexSubst Function
    Substitutes matched portions into a template string.
親トピック: General Functions


Structure of Regular Expressions

Silk Performer uses an equivalent regular expression implementation as found in 4.x BSD Unix system.

The table below describes the structure of regular expressions and shows which characters may be used:

Character | Description
[1] | char | Matches itself, unless it is a special character (metachar): . \ [ ] * + ^ $
[2] . Matches any character
[3] \

Matches the subsequent character unless it is a left or right round bracket, a digit 1 to 9 or a left or right angle bracket (see [7], [8] and [9]).

It is used as an escape character for all other meta-characters, and itself. When used in a set (see [4]), it is treated as an ordinary character.

[4] [set]

Matches one of the characters in the set. If the first character in the set is "^", it matches a character NOT in the set. The shorthand “S-E” is used to specify a set of characters from S to E, inclusively. The special characters "]" and "-" have no special meaning if they appear as the first chars in the set.

Examples:

[a-z] any lowercase letter

[^]-] any character except ] and -

[^A-Z] any character except uppercase letters

[a-zA-Z] any letter

[5] * Any regular expression of [1] to [4] followed by the closure character (*) matches a string of zero or more characters that have that form.
[6] + Same as [5], except it matches one or more.
[7] \ A regular expression of form [1] to [10] enclosed as \(form\) matches whatever the specified form matches. The enclosure creates a set of tags, used for [8] and for pattern substitution. The tagged forms are numbered starting from 1.
[8] \ A \ character followed by a digit 1 to 9 matches whatever a previously tagged regular expression ([7]) matched. For example, “\5” represents the fifth pattern specified in the “\(form\)” format.
[9]

\<

\>

A regular expression starting with a \< construct and/or ending with a \> construct, restricts the pattern matching to the beginning of a word, and/or the end of a word. A word is defined to be a character string beginning and/or ending with the characters A-Z a-z 0-9 and _. It must also be preceded and/or followed by any character other than those mentioned.
[10] | A composite regular expression xy, where x and y are of form [1] to [10] matches the longest match of x followed by a match for y.
[11] ^ $ A regular expression starting with a ^ character and/or ending with a $ character restricts the pattern matching to the beginning of the line or to the end of line. Elsewhere in the expression, ^ and $ are treated as ordinary characters.

Example

Pattern | Matches | Comment
\\\.\* | \.* | backslash dot asterisk
\[\]\+\^\$ | []+^$ | other special characters
foo*.* | fo foo fooo foobar fobar foxx ... |
fo[ob]a[rz] | fobar fooar fobaz fooaz |
foo\\+ | foo\ foo\\ foo\\\ ... |
\(foo\)[1-3]\1 | foo1foo foo2foo foo3foo | the same as: foo[1-3]foo
\(fo.*\)-\1 | foo-foo fo-fo fob-fob foobar-foobar ... |
親トピック: Regular Expressions


StrRegexClose Function

Action

Closes the handle opened by StrRegexCompile. Call this function when the compiled regular expression is no longer needed.

Include file

Kernel.bdh

Syntax

StrRegexClose( inout hRegex: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRegex | Valid handle to a compiled regular expression. This handle must have been generated with a previous call to StrRegexCompile.

Example

dcltrans
  transaction TMain
  var
    hRegex                   : number;
    sRegex, sSource, sTarget : string;
    match                    : boolean;
  begin
    sSource := "SessionIDTest.asp?SessionID=SID8:44:43&amp;"
               "Param2=Value2";
    sRegex := "SessionID=\(SID[0-9:]+\)";
    write("source = "+sSource); writeln;
    write("regex = "+sRegex); writeln;
    StrRegexCompile(hRegex, sRegex);
    match := StrRegexExecute(hRegex, sSource);

    if match then
      StrRegexSubst(hRegex, "\1", sTarget, STRING_COMPLETE);
      write("match: "+sTarget); writeln;
    else
      write("no match"); writeln;
    end;

    StrRegexClose(hRegex);
  end TMain;

Output

source = SessionIDTest.asp?SessionID=SID8:44:43&amp;Param2=Value2
regex = SessionID=\(SID[0-9:]+\)
match: SID8:44:43

Sample scripts

WebRegularExpressions01.bdf

親トピック: Regular Expressions
関連資料
StrRegexCompile Function
StrRegexExecute Function
StrRegexSubst Function


StrRegexCompile Function

Action

Compiles a regular expression and applies the resulting automaton (compiled byte code) to a handle for later use by StrRegexExecute, StrRegexSubst and StrRegexClose.

This function is very advantageous when you need to reuse the same regular expression over and over again because it speeds up the execution of the BDL-Script.

Include file

Kernel.bdh

Syntax

StrRegexCompile( inout hRegex   : number,
                 in    sRegex   : string,
                 in    nBufSize : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRegex | Variable receiving the handle to the compiled regular expression
sRegex | Regular expression
nBufSize | Size of the buffer used to store the compiled regular expression (optional). Default value is 2048.

Example

dcltrans
  transaction TMain
  var
    hRegex                   : number;
    sRegex, sSource, sTarget : string;
    match                    : boolean;
  begin
    sSource := "SessionIDTest.asp?SessionID=SID8:44:43&amp;"
               "Param2=Value2";
    sRegex := "SessionID=\(SID[0-9:]+\)";
    write("source = "+sSource); writeln;
    write("regex = "+sRegex); writeln;
    StrRegexCompile(hRegex, sRegex);
    match := StrRegexExecute(hRegex, sSource);

    if match then
      StrRegexSubst(hRegex, "\1", sTarget, STRING_COMPLETE);
      write("match: "+sTarget); writeln;
    else
      write("no match"); writeln;
    end;

    StrRegexClose(hRegex);
  end TMain;

Output

source = SessionIDTest.asp?SessionID=SID8:44:43&amp;Param2=Value2
regex = SessionID=\(SID[0-9:]+\)
match: SID8:44:43

Sample scripts

WebRegularExpressions01.bdf

親トピック: Regular Expressions
関連資料
StrRegexClose Function
StrRegexExecute Function
StrRegexSubst Function


StrRegexExecute Function

Action

Executes the compiled regular expression on the string argument.

Include file

Kernel.bdh

Syntax

StrRegexExecute( in    hRegex  : number,
                 inout sSource : string ): boolean;

Return value

  • true if a match of the regular expression in the string sSource could be found.

  • false on errors or if no match could be found. Use GetLastError and GetErrorMsg to query for more information.

Parameter | Description
hRegex | Valid handle to a compiled regular expression. This handle must have been generated with a previous call to StrRegexCompile.
sSource | String to be matched by the regular expression

Example

dcltrans
  transaction TMain
  var
    hRegex                   : number;
    sRegex, sSource, sTarget : string;
    match                    : boolean;
  begin
    sSource := "SessionIDTest.asp?SessionID=SID8:44:43&amp;"
               "Param2=Value2";
    sRegex := "SessionID=\(SID[0-9:]+\)";
    write("source = "+sSource); writeln;
    write("regex = "+sRegex); writeln;
    StrRegexCompile(hRegex, sRegex);
    match := StrRegexExecute(hRegex, sSource);

    if match then
      StrRegexSubst(hRegex, "\1", sTarget, STRING_COMPLETE);
      write("match: "+sTarget); writeln;
    else
      write("no match"); writeln;
    end;

    StrRegexClose(hRegex);
  end TMain;

Output

source = SessionIDTest.asp?
SessionID=SID8:44:43&amp;Param2=Value2
regex = SessionID=\(SID[0-9:]+\)
match: SID8:44:43

Sample scripts

WebRegularExpressions01.bdf

親トピック: Regular Expressions
関連資料
StrRegexClose Function
StrRegexCompile Function
StrRegexSubst Function


StrRegexFindFirst Function

Action

Creates an iterator over matched portions and stores the first matching substring into sTarget.

Include file

Kernel.bdh

Syntax

StrRegexFindFirst( in  hRegex  : number,
                   in  sSource : string,
                   out sTarget : string,
                   in  iLen    : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRegex | Valid handle to a compiled regular expression. This handle must have been generated with a previous call to StrRegexCompile.
sSource | String to be matched by the regular expression.
sTarget | String which receives the result of the substitution string.
iLen | Size of sTarget.

Example

transaction TMain
var
  s       : string;
  sResult : string;
  hRegex  : number;
begin
  s := "page1 alpha beta omega page4 page2 gamma page3";
  StrRegexCompile(hRegex, "page[0-9]");

  if (StrRegexExecute(hRegex, s)) then
    StrRegexFindFirst(hRegex, s, sResult, STRING_COMPLETE);
    Print(sResult);

    while StrRegexFindNext(hRegex, sResult, STRING_COMPLETE) do
      Print(sResult);
    end;
  end;
  StrRegexClose(hRegex);
end TMain;
親トピック: Regular Expressions
関連資料
StrRegexFindNext Function
StrRegexCompile Function
StrRegexExecute Function
StrRegexClose Function


StrRegexFindNext Function

Action

Advances to the next matched substring and stores the result into sTarget.

Include file

Kernel.bdh

Syntax

StrRegexFindFirst( in  hRegex  : number,
                   out sTarget : string,
                   in  iLen    : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRegex | Valid handle to a compiled regular expression. This handle must have been generated with a previous call to StrRegexCompile.
sTarget | String which receives the result of the substitution string.
iLen | Size of sTarget.

Example

transaction TMain
var
  s       : string;
  sResult : string;
  hRegex  : number;
begin
  s := "page1 alpha beta omega page4 page2 gamma page3";
  StrRegexCompile(hRegex, "page[0-9]");

  if (StrRegexExecute(hRegex, s)) then
    StrRegexFindFirst(hRegex, s, sResult, STRING_COMPLETE);
    Print(sResult);

    while StrRegexFindNext(hRegex, sResult, STRING_COMPLETE) do
      Print(sResult);
    end;
  end;
  StrRegexClose(hRegex);
end TMain;
親トピック: Regular Expressions
関連資料
StrRegexFindFirst Function
StrRegexCompile Function
StrRegexExecute Function
StrRegexClose Function


StrRegexImmediate Function

Action

Compiles a regular expression and executes it to match a source string. An optional substitution string may be specified to parse out information from the source string.

Include file

Kernel.bdh

Syntax

StrRegexImmediate( in  sSource    : string,
                   in  sRegex     : string,
                   in  sSubst     : string optional,
                   out sTarget    : string optional,
                   in  nMaxTarget : number optional ): boolean;

Return value

  • true if a match of the regular expression in the string sSource could be found.

  • false on errors or if no match could be found. Use GetLastError and GetErrorMsg to query for more information.

Parameter | Description
sSource | String to be matched by the regular expression
sRegex | Regular expression
sSubst | String into which matched portions are substituted (optional)
sTarget | String which receives the result of the substitution string (optional)
nMaxTarget | Size of sTarget (optional)

Example

dcltrans
  transaction TMain
  var
    sRegex, sSource, sTarget : string;
    match                    : boolean;
  begin
    sSource := "SessionIDTest.asp?SessionID=SID8:44:43&amp;"
               "Param2=Value2";
    sRegex := "SID[0-9]+:[0-9]+:[0-9]+";
    write("source = "+sSource); writeln;
    write("regex = "+sRegex); writeln;
    match := StrRegexImmediate(sSource, sRegex, "&", sTarget);

    if match then
      write("match: "+sTarget); writeln;
    else
      write("no match"); writeln;
    end;
  end TMain;

Output

source = SessionIDTest.asp?SessionID=SID8:44:43&amp;Param2=Value2
regex = SID[0-9]+:[0-9]+:[0-9]+
match: SID8:44:43

Sample scripts

WebRegularExpressions01.bdf

親トピック: Regular Expressions
関連資料
StrRegexCompile Function
StrRegexExecute Function
StrRegexSubst Function
StrRegexClose Function


StrRegexSubst Function

Action

Substitutes matched portions into a template string sSubst. The result is then stored in sTarget. Call this function if you want to easily extract multiple parts from the source string.

Include file

Kernel.bdh

Syntax

StrRegexSubst( in  hRegex     : number,
               in  sSubst     : string,
               out sTarget    : string,
               in  nMaxTarget : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRegex | Valid handle to a compiled regular expression. This handle must have been generated with a previous call to StrRegexCompile.
sSubst | String into which matched portions are substituted
sTarget | String which receives the result of the substitution string
nMaxTarget | Size of sTarget

Example

dcltrans
  transaction TMain
  var
    hRegex                   : number;
    sRegex, sSource, sTarget : string;
    match                    : boolean;
  begin
    sSource := "SessionIDTest.asp?SessionID=SID8:44:43&amp;"
               "Param2=Value2";
    sRegex := "SessionID=\(SID[0-9:]+\)";
    write("source = "+sSource); writeln;
    write("regex = "+sRegex); writeln;
    StrRegexCompile(hRegex, sRegex);
    match := StrRegexExecute(hRegex, sSource);

    if match then
      StrRegexSubst(hRegex, "\1", sTarget, STRING_COMPLETE);
      write("match: "+sTarget); writeln;
    else
      write("no match"); writeln;
    end;

    StrRegexClose(hRegex);
  end TMain;

Output

source = SessionIDTest.asp?SessionID=SID8:44:43&amp;Param2=Value2
regex = SessionID=\(SID[0-9:]+\)
match: SID8:44:43

Sample scripts

WebRegularExpressions01.bdf

親トピック: Regular Expressions
関連資料
StrRegexClose Function
StrRegexCompile Function
StrRegexExecute Function


System Information Functions

The following functions are available for retrieving system information:

  • GetInternetExplorerInfo Function
    Returns the major and minor version and the build number of the installed Internet Explorer.
  • GetOperatingSystemDisplayString Function
    Returns the long name of the operating system.
  • GetOperatingSystemInfo Function
    Returns the major and minor version and the build number of the operating system.
親トピック: General Functions


GetInternetExplorerInfo Function

Action

Returns the major and minor version and the build number of the installed Internet Explorer.

Include File

Kernel.bdh

Syntax

GetInternetExplorerInfo( majorVersion : out long,
                         minorVersion : out long,
                         buildNumber  : out long optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
majorVersion | The major version of the installed Internet Explorer
minorVersion | The minor version of the installed Internet Explorer
buildNumber | Optional: The build number of the installed Internet Explorer

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    majorVersion, minorVersion, buildNumber : number;
  begin
   if GetInternetExplorerInfo (majorVersion, minorVersion,  buildNumber) then
      Print(string(majorVersion)+" "+string(minorVersion)+" "+string(buildNumber));
    end;
  end TMain;
親トピック: System Information Functions
親トピック: Browser-Driven Web Load Testing Functions


GetOperatingSystemDisplayString Function

Action

Returns the long name of the operating system.

Include File

Kernel.bdh

Syntax

GetOperatingSystemDisplayString(displayString : out dstring) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
displayString | The long name of the operating system

Example

dcltrans
  transaction TMain
  var
    display : string;
  begin
   if GetOperatingSystemDisplayString(display) then
      Print(display);
    end;
  end TMain;

Output

Microsoft Windows 7 Enterprise Edition (build 7600), 64-bit
親トピック: System Information Functions


GetOperatingSystemInfo Function

Action

Returns the major and minor version and the build number of the operating system.

Include File

Kernel.bdh

Syntax

GetOperatingSystemInfo(
  majorVersion : out long,
  minorVersion : out long,
  buildNumber : out long optional) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
majorVersion | The major version of the operating system
minorVersion | The minor version of the operating system
buildNumber | The build number of the operating system

Example

dcltrans
  transaction TMain
  var
    majorVersion, minorVersion, buildNumber : number;
  begin
   if GetOperatingSystemInfo(majorVersion, minorVersion,  buildNumber) then
      Print(string(majorVersion)+" "+string(minorVersion)+" "+string(buildNumber));
    end;
end TMain;

Output

6 1 7600
親トピック: System Information Functions


Attributes Manipulation Functions

Silk Performer enables you to associate any number of attributes with a virtual user.

Project attributes can be used to automatically initialize user attributes. By specifying a project attribute, a corresponding user attribute is defined and initialized for each virtual user. User attributes are also useful when working with Silk Performer frameworks, for example when the user behavior is defined in two separate scripts like BDL and Java. In this case, user attributes enable the exchange of data between the two scripts. The types of attributes associated with a user may vary.

The following functions serve to set and retrieve the values of user attributes:

  • Project Attributes
    Provides an overview for project attributes, which are name-value pairs that can be defined for a project.
  • AttributeGetBinary Function
    Retrieves binary data from a specified attribute of the user.
  • AttributeGetBoolean Function
    Retrieves a boolean value from a specified attribute of the user.
  • AttributeGetDouble Function
    Retrieves a floating-point value from a specified attribute of the user.
  • AttributeGetInt Function
    Retrieves an integer value from a specified attribute of the user.
  • AttributeGetString Function
    Retrieves a string from a specified attribute of the user.
  • AttributeSetBinary Function
    Assigns binary data to a specified attribute of the user.
  • AttributeSetBoolean Function
    Assigns a boolean value to a specified attribute of the user.
  • AttributeSetDouble Function
    Assigns a floating-point value to a specified attribute of the user.
  • AttributeSetInt Function
    Assigns an integer value to a specified attribute of the user.
  • AttributeSetString Function
    Assigns a string to a specified attribute of the user.
  • AttributeDelete Function
    Deletes a specified attribute associated with a virtual user.
親トピック: General Functions


Project Attributes

Project attributes are name-value pairs with some additional information, which can be defined for a project. Each virtual user is initialized at runtime with these attributes. A useful scenario is to parameterize the BDL scripts on the project level.

Project attributes can be defined in Silk Performer's Project > Project Attributes menu. An attribute consists of a name, a type, a value, and a default value. The type specifies the way how the value and the default value of an attribute should be interpreted.

Possible attribute types are:

  • string

  • numeric

  • float

  • boolean

Depending on the type of the attribute, the project attributes can be accessed in the script via the following BDL functions:
注: The name of an attribute is case sensitive.

  • AttributeGetString: for type "string"

  • AttributeGetInt: for type "numeric"

  • AttributeGetDouble: for type "float"

  • AttributeGetBoolean: for type "boolean"

親トピック: Attributes Manipulation Functions
関連資料
AttributeGetBoolean Function
AttributeGetDouble Function
AttributeGetInt Function
AttributeGetString Function


AttributeGetBinary Function

Action

Retrieves binary data from a specified attribute of the user.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Include file

Kernel.bdh

Syntax

AttributeGetBinary( in  sName       : string,
                    out sBuffer     : string,
                    in  sBufferSize : number optional,
                    out nDataLen    : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute of which the value is retrieved.
sBuffer | Buffer receiving the binary data.
sBufferSize | Size of the buffer that receives the data (optional).
nDataLen | Variable receiving the actual amount of retrieved data (in bytes; optional).

Example

dcltrans
  transaction TMain
  var
    sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533");

    // do anything, for example, call an external function

    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions


AttributeGetBoolean Function

Action

Retrieves a boolean value from a specified attribute of the user.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Another useful scenario is to define project attributes in Silk Performer. Using AttributeGet(Bool, Double, Int, String), these values can be retrieved by the BDL script in order to parameterize the script via project attributes.

Include file

Kernel.bdh

Syntax

AttributeGetBoolean( in sName : string ): boolean;

Return value

Boolean value that is retrieved.

Parameter | Description
sName | Name of the attribute of which the value is retrieved. The name of the attribute is case sensitive.

Example

dcltrans
  transaction TMain
  var
    sUrl,sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetBoolean("member", true);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533", 4);

    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));

    if AttributeGetBoolean("member") then
      writeln("true");
    else
      writeln("false");
    end;

    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions
関連資料
AttributeSetBoolean Function


AttributeGetDouble Function

Action

Retrieves a floating-point value from a specified attribute of the user.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Another useful scenario is to define project attributes in Silk Performer. Using AttributeGet(Bool, Double, Int, String), these values can be retrieved by the BDL script in order to parameterize the script via project attributes.

Include file

Kernel.bdh

Syntax

AttributeGetDouble( in sName : string ): float;

Return value

Floating-point value that is retrieved.

Parameter | Description
sName | Name of the attribute of which the value is retrieved. The name of the attribute is case sensitive.

Example

dcltrans
  transaction TMain
  var
    i                      : number;
    sUrl, sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533", 4);

    // do anything, for example, call an external function
    for i := 1 to AttributeGetInt("TIMES") do
      AttributeGetString("URL", sUrl);
      WebPageUrl(sUrl);
    end;

    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions
関連資料
AttributeSetDouble Function


AttributeGetInt Function

Action

Retrieves an integer value from a specified attribute of the user.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Another useful scenario is to define project attributes in Silk Performer. Using AttributeGet(Bool, Double, Int, String), these values can be retrieved by the BDL script in order to parameterize the script via project attributes.

Include file

Kernel.bdh

Syntax

AttributeGetInt( in sName: string ): number;

Return value

Integer value that is retrieved.

Parameter | Description
sName | Name of the attribute of which the value is retrieved. The name of the attribute is case sensitive.

Example

dcltrans
  transaction TMain
  var
    i                      : number;
    sUrl, sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533", 4);

    // do anything, for example, call an external function
    for i := 1 to AttributeGetInt("TIMES") do
      AttributeGetString("URL", sUrl );
      WebPageUrl(sUrl);
    end;

    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions


AttributeGetString Function

Action

Retrieves a string from a specified attribute of the user.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate scripts. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Another useful scenario is to define project attributes in Silk Performer. Using AttributeGet(Bool, Double, Int, String), these values can be retrieved by the BDL script in order to parameterize the script via project attributes.

Include file

Kernel.bdh

Syntax

AttributeGetString( in  sName           : string,
                    out sString         : string,
                    in  nSize           : number optional,
                    in  useDefaultValue : boolean optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute of which the value is retrieved. The name of the attribute is case sensitive.
sString | Buffer receiving the string.
nSize | Size of the buffer that receives the string (optional). If not specified, this parameter is set to 0 (zero), indicating that the size of the string is unlimited.
useDefaultValue | If set to true, the default value of a project attribute is read if no value has been defined. If not specified, this parameter is set to false.

Example

dcltrans
  transaction TMain
  var
    i                      : number;
    sUrl, sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533");

    // do anything, for example, call an external function

    for i := 1 to AttributeGetInt("TIMES") do
      AttributeGetString("URL", sUrl);
      WebPageUrl(sUrl);
    end;

    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions
関連資料
AttributeSetString Function


AttributeSetBinary Function

Action

Assigns binary data to a specified attribute of the user. The function automatically creates the attribute if it does not exist.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Include file

Kernel.bdh

Syntax

AttributeSetBinary( in sName   : string,
                    in sBuffer : string,
                    in nSize   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute whose value is set. The function automatically creates the attribute if it does not exist.
sBuffer | Binary data that is assigned to the specified attribute.
nSize | Amount of binary data that is assigned to the attribute (in bytes; optional).

Example

dcltrans
  transaction TMain
  var
    sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533");

    // do anything, for example, call an external function

    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions
関連資料
AttributeSetBinary Function


AttributeSetBoolean Function

Action

Assigns a boolean value to a specified attribute of the user. The function automatically creates the attribute if it does not exist.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Include file

Kernel.bdh

Syntax

AttributeSetBoolean( in sName  : string,
                     in bValue : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute whose value is set. The function automatically creates the attribute if it does not exist.
bValue | Boolean value that is assigned to the specified attribute.

Example

dcltrans
  transaction TMain
  var
    sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetBoolean("member", true);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533", 4);

    // do anything, for example, call an external function
    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    if AttributeGetBoolean("member") then
      writeln("true");
    else
      writeln("false");
    end;
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions
関連資料
AttributeGetBoolean Function


AttributeSetDouble Function

Action

Assigns a floating-point value to a specified attribute of the user. The function automatically creates the attribute if it does not exist.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Include file

Kernel.bdh

Syntax

AttributeSetDouble( in sName  : string,
                    in fValue : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute whose value is set. The function automatically creates the attribute if it does not exist.
fValue | Floating-point value that is assigned to the specified attribute.

Example

dcltrans
  transaction TMain
  var
    sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533", 4);

    // do anything, for example, call an external function
    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions
関連資料
AttributeGetDouble Function


AttributeSetInt Function

Action

Assigns an integer value to a specified attribute of the user. The function automatically creates the attribute if it does not exist.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Include file

Kernel.bdh

Syntax

AttributeSetInt( in sName  : string,
                 in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute whose value is set. The function automatically creates the attribute if it does not exist.
nValue | Integer value that is assigned to the specified attribute.

Example

dcltrans
  transaction TMain
  var
    sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533", 4);

    // do anything, for example, call an external function
    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions


AttributeSetString Function

Action

Assigns a string to a specified attribute of the user. The function automatically creates the attribute if it does not exist.

User attributes are useful when working with Silk Performer frameworks, in fact, when the user behavior is defined in two separate script. In that case, user attributes enable the exchange of data between scripts, for example, between a Silk Performer and a Java script.

Include file

Kernel.bdh

Syntax

AttributeSetString( in sName   : string,
                    in sString : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute whose value is set. The function automatically creates the attribute if it does not exist.
sString | String that is assigned to the specified attribute.

Example

dcltrans
  transaction TMain
  var
    sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533");

    // do anything, for example, call an external function

    AttributeGetString("name", sString);
    writeln(sString);
    riteln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);
  end TMain;
親トピック: Attributes Manipulation Functions
関連資料
AttributeGetString Function


AttributeDelete Function

Action

Deletes a specified attribute associated with a virtual user.

Include file

Kernel.bdh

Syntax

AttributeDelete( in sName : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the attribute that is to be deleted.

Example

dcltrans
  transaction TMain
  var
    sUrl, sString, sBuffer : string;
  begin
    AttributeSetString("name", "Jim");
    AttributeSetInt("age", 23);
    AttributeSetDouble("cash", 4503.60);
    AttributeSetBinary("code", "\h9EF30533", 4);

    // do anything, for example, call an external function
    AttributeGetString("name", sString);
    writeln(sString);
    writeln(AttributeGetInt("age"));
    writeln(AttributeGetDouble("cash"));
    AttributeGetBinary("code", sBuffer);
    WriteData(sBuffer, STRING_COMPLETE);

    AttributeDelete("name");
    AttributeDelete("age");
    AttributeDelete("cash");
    AttributeDelete("code");
  end TMain;
親トピック: Attributes Manipulation Functions


XML Functions

Silk Performer provides several API functions that allow you to work with XML documents and parse and verify XML values of web response documents. All these functions are based on an XML dom parser that ships with Silk Performer.

注: Most of the BDL functions of the XML API work with handles. Handles are numeric values that are internally mapped to XML documents/nodes/node lists, ... . When you no longer need the handles, be sure to free them. This will keep the used memory as small as possible.
  • XmlAppendChild Function
    Appends the node to a parent node as additional child node.
  • XmlFreeHandle Function
    XmlFreeHandle should be called on node, nodelist and document handles as soon as they are no longer needed in the script to keep memory usage low.
  • XmlCreateDocument Function
    Creates an empty XML document that can be populated with the other XML API functions like XmlCreateNode, XmlAppendChild,
  • XmlCreateDocumentFromFile Function
    Loads an XML document from a file.
  • XmlCreateDocumentFromXml Function
    Loads an XML document from a string that contains a valid XML content.
  • XmlCreateNode Function
    Creates a new XML element node.
  • XmlCreateNodeFromXml Function
    Creates an XML node from a string that contains a valid XML representation of an XML node.
  • XmlGetChildNodes Function
    Returns a handle to a list of nodes (nodelist) that contains all child handles of the passed node/document handle.
  • XmlGetChildByIndex Function
    Returns a handle to a child node of the passed node/document handle.
  • XmlSelectSingleNode Function
    Executes an X-Path query on the passed handle (either document or node) and returns the first resulting node handle.
  • XmlSelectNodes Function
    Executes an X-Path query on the passed handle (either document or node) and returns the resulting handles in a node list.
  • XmlRemoveChild Function
    Removes the node from its current parent node (can be either a node or the document).
  • XmlReplaceNode Function
    Replaces the node passed in parameter hDestNode with the node in parameter hSourceNode.
  • XmlGetCount Function
    Takes a nodelist handle and returns the number of nodes that are stored in this list.
  • XmlGetItem Function
    Returns a node from the nodelist.
  • XmlGetInnerXml Function
    Returns the inner XML representation of the passed node/document handle.
  • XmlGetXml Function
    Returns the XML representation of the passed node/document handle.
  • XmlSetNodeAttribute Function
    Sets the value of an attribute of the passed node.
  • XmlGetAttributeByIndex Function
    Returns the value of a nodes attribute.
  • XmlGetAttributeByName Function
    Returns the value of a nodes attribute.
  • XmlGetAttributeCount Function
    Returns the number of attributes that are defined for the passed node.
  • XmlGetNodeName Function
    Returns the name of the passed node.
  • XmlGetNodeType Function
    Returns the type of the node passed as paramter.
  • XmlSetNodeValue Function
    Sets the text value of the passed node.
  • XmlGetNodeValue Function
    Returns the text value of the node.
  • XmlGetNodeTypedValue Function
    Returns the typed value of a node.
  • XmlSetNamespaces Function
    Sets the namespaces and the prefix for the namespaces that will be recognized by the XML parser.
  • XmlSetOption Function
    Allows enabling/disabling different XML parsing options.
  • XML Basics
    Describes some basic concepts that should be known when working with XML documents.
親トピック: General Functions
関連概念
XML First Steps
関連資料
WebXmlParseNodeAttribute Function
WebXmlParseNodeValue Function
WebXmlVerifyNodeAttribute Function
WebXmlVerifyNodeValue Function
XML Sample


XmlAppendChild Function

Action

Appends the node to a parent node as additional child node. If the child node has already had a parent node (is a node of an existing XML document), the node will be cloned and the cloned node will be appended to the passed parent node. After the call, hChildNode is the handle to the cloned node.

Include file

XmlAPI.bdh

Syntax

XmlAppendChild( in hParentNode : number,
                in hChildNode  : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hParentNode | Handle to an XML node that will be the parent
hChildNode | Handle to an XML node that will be appended to the parent node

Example

dcltrans
  transaction TMain
  var
  hDocument, hResult, hNewNode : number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                 "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hNewNode := XmlCreateNode("child3");
    hResult  := XmlSelectSingleNode(hDocument, "/root");
    XmlAppendChild(hResult, hNewNode);
  end TMain;
親トピック: XML Functions
関連概念
Working with Nodes
関連資料
XmlReplaceNode Function
XmlRemoveChild Function


XmlFreeHandle Function

Action

XmlFreeHandle should be called on node, nodelist and document handles as soon as they are no longer needed in the script to keep memory usage low. If no parameters are passed, all currently used handles are freed and are then no longer valid.

You can pass a handle to a document, node or nodelist handle. If you pass true for parameter bAndDepending and the passed handle is a document handle, all handles to nodes of this document will also be freed and are then no longer valid.

Include file

XmlAPI.bdh

Syntax

XmlFreeHandle( in hHandle          : number optional,
               in bAndDepending    : boolean optional ): boolean;

Return value

  • true if succeeded

  • false if failed

Parameter | Description
hHandle | A valid document/node/nodelist handle If omitted, all handles that are still in use will be freed.
bAndDepending | If the handle is a document handle and bAndDepending is true, all handles for this document will be freed.

Example

dcltrans
  transaction TMain
  var
  hDocument, hResult, hOrderItems, hItem, hCount : number;
  itemIx                                         : number;
  sAttrValue                                     : string;
  begin
    hDocument := XmlCreateDocumentFromFile ("C:\\MyXMLDocuments\\Order.xml");
    hOrderItems := XmlSelectNodes(hDocument, "//OrderItem");
    hCount := XmlGetCount(hOrderItems);

    for itemIx := 0 to hCount - 1 do
      hItem := XmlGetItem(hOrderItems, itemIx);
      XmlGetAttributeByName(hItem, "price", sAttrValue);
    end;

    XmlFreeHandle();
  end TMain;
親トピック: XML Functions
関連資料
XmlCreateDocument Function
XmlCreateNode Function


XmlCreateDocument Function

Action

Creates an empty XML document that can be populated with the other XML API functions like XmlCreateNode, XmlAppendChild, ... .

Include file

XmlAPI.bdh

Syntax

XmlCreateDocument( ): number;

Return value

  • document handle if successful

  • 0 otherwise

Example

dcltrans
  transaction TMain
  var
  hDocument, hRootNode, hChildNode, hResult : number;
  sAttrValue, sXmlString                    : string;
  begin
    hDocument  := XmlCreateDocument();
    hRootNode  := XmlCreateNode("root", XMLNODE_ELEMENT);
    hChildNode := XmlCreateNodeFromXml("<child1 attr1='avalue1'>childvalue1</child1>"
                                  "<child2 attr1='avalue2'>childvalue2</child2>");
    XmlAppendChild(hDocument, hRootNode);
    XmlAppendChild(hRootNode, hChildNode);
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlGetAttributeByName(hResult, "attr1", sAttrValue);
    XmlSetNodeAttribute(hResult, "attr1", "new avalue");
    XmlGetXml(hDocument, sXmlString);
  end TMain;
親トピック: XML Functions
関連概念
Creating an Empty XML Document
関連資料
XmlCreateDocumentFromFile Function
XmlCreateDocumentFromXml Function
XML Sample


XmlCreateDocumentFromFile Function

Action

Loads an XML document from a file. You have to pass the absolute filename. If you want to load XML documents from files in the data section, use GetDataFilePath to get the absolute filename.

Include file

XmlAPI.bdh

Syntax

XmlCreateDocumentFromFile( in sFilename : string ): number;

Return value

  • document handle if successful

  • 0 otherwise

Parameter | Description
sFilename | Filename of the XML file that should be loaded!

Example

dcltrans
  transaction TMain
  var
hDocument, hOrderItem : number;
sAttrValue            : string;
  begin
    hDocument := XmlCreateDocumentFromFile("C:\\MyXMLDocuments\\Order.xml");
    hOrderItem := XmlSelectSingleNode(hDocument, "//OrderItem[1]");
    XmlGetAttributeByName(hOrderItem, "price", sAttrValue);
  end TMain;
親トピック: XML Functions
関連概念
Loading an XML Document
関連資料
XmlCreateDocument Function
XmlCreateDocumentFromXml Function
GetDataFilePath Function
XML Sample


XmlCreateDocumentFromXml Function

Action

Loads an XML document from a string that contains a valid XML content.

Include file

XmlAPI.bdh

Syntax

XmlCreateDocumentFromXml( in sXmlString : string ): number;

Return value

  • document handle if successful

  • 0 otherwise

Parameter | Description
sXmlString | String containing a valid XML document

Example

dcltrans
  transaction TMain
  var
 hDocument, hResult     : number;
 sAttrValue, sXmlString : string;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                 "<child2 attr1='avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlGetAttributeByName(hResult, "attr1", sAttrValue);
    XmlSetNodeAttribute(hResult, "attr1",  "new avalue");
    XmlGetXml(hDocument, sXmlString);
  end TMain;
親トピック: XML Functions
関連概念
Loading an XML Document
関連資料
XmlCreateDocumentFromFile Function
XmlCreateDocument Function
XML Sample


XmlCreateNode Function

Action

If you do not specify a special node type, XmlCreateNode creates a new XML element node of specified name. The node can then be added as root node to a document or as child node to another XML element node. To set the value/attributes of the node use XmlSetNodeValue, XmlSetNodeAttribute.

To create a different type (e.g.: COMMENT, CDATA, ...) of XML node, pass the desired type as 2nd parameter. The name parameter will be ignored for other types than the element or attribute type.

Include file

XmlAPI.bdh

Syntax

XmlCreateNode( in sNodeName  : string,
               in nNodeType  : number optional,
               in sNamespace : string optional ): number;

Return value

  • node handle if successful

  • 0 otherwise

Parameter | Description
sNodeName | Name of the node that will be created
nNodeType

(optional) Type of the node that should be created. If omitted an XML element will be created: Possible types:

  • XMLNODE_ELEMENT

  • XMLNODE_ATTRIBUTE

  • XMLNODE_TEXT

  • XMLNODE_CDATA_SECTION

  • XMLNODE_ENTITY_REFERENCE

  • XMLNODE_ENTITY

  • XMLNODE_PROCESSING_INSTRUCTION

  • XMLNODE_COMMENT

  • XMLNODE_DOCUMENT_FRAGMENT
sNamespace

(optional)

String defining the namespace Uniform Resource Identifier (URI).

If specified, the node is created in the context of the namespaceURI with the prefix specified on the node name. If the sNodeName parameter does not have a prefix, this is treated as the default namespace.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult, hNewNode : number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                 "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hNewNode := XmlCreateNode("child3");
    hResult := XmlSelectSingleNode(hDocument, "/root"):
    XmlAppendChild(hResult, hNewNode);
  end TMain;
親トピック: XML Functions
関連概念
Creating Nodes
関連資料
XmlCreateNodeFromXml Function
XmlSetNodeValue Function
XmlSetNodeAttribute Function
XML Sample


XmlCreateNodeFromXml Function

Action

Creates an XML node from a string that contains a valid XML representation of an XML node.

The string can also contain complex nodes with child nodes, e.g.: <cars><car>BMW</car><car>Volvo</car></cars>

Include file

XmlAPI.bdh

Syntax

XmlCreateNodeFromXml( in sXmlString : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sXmlString | Valid XML string

Example

dcltrans
  transaction TMain
  var
  hDocument, hResult, hNewNode : number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                 "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hNewNode := XmlCreateNodeFromXml("<child3 attr1='avalue3'>childvalue3</child3>");
    hResult := XmlSelectSingleNode(hDocument, "/root");
    XmlAppendChild (hResult, hNewNode);
  end TMain;
親トピック: XML Functions
関連資料
XmlCreateNode Function


XmlGetChildNodes Function

Action

XmlGetChildNodes returns a handle to a list of nodes (nodelist) that contains all child handles of the passed node/document handle. To access a node in the nodelist you have to use XmlGetItem. To determine the number of nodes in the nodelist, use XmlGetCount. If you call this method on an element node with a text value the function will return 1 because the text value itself is a child node of type text.

If you want to access a specific child node, you can also call XmlGetChildByIndex to get a direct reference to a child node.

Include file

XmlAPI.bdh

Syntax

XmlGetChildNodes( in hDocNode : number ): number;

Return value

  • nodelist handle if successful

  • 0 if failed

Parameter | Description
hDocNode | Handle to an XML node/document If the handle is a document handle, the root elements will be returned. Normally there is only one root element - except if there are processing instructions.

Example

dcltrans
  transaction TMain
  var
    hDocument, hRoot, hRootChildren: number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                  "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hRoot := XmlSelectSingleNode(hDocument, "/root");
    hRootChildren := XmlGetChildNodes(hRoot);
  end TMain;
親トピック: XML Functions
関連概念
Browsing the XML Document
関連資料
XmlGetChildByIndex Function
XmlGetCount Function
XmlSelectNodes Function
XmlGetItem Function
XML Sample


XmlGetChildByIndex Function

Action

Returns a handle to a child node of the passed node/document handle. The child node is identified by its index where the first child has index 0.

A document node can also have multiple child nodes because XML documents can have multiple processing instructions on the first level. But there can only be one element node at the root level of a document.

Include file

XmlAPI.bdh

Syntax

XmlGetChildByIndex( in hDocNode : number,
                    in nIndex   : number ): number;

Return value

  • node handle if successful

  • 0 if failed

Parameter | Description
hDocNode | Handle to an XML node/document If the handle is a document handle, a root element will be returned. Normally there is only one root element - except if there are processing instructions.
nIndex | Child index that should be returned. Index of first child is 0.

Example

dcltrans
  transaction TMain
  var
   hDocument, hRoot, hRootChild: number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                 "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    Root     := XmlSelectSingleNode(hDocument, "/root");
    hRootChild:= XmlGetChildByIndex(hRoot, 0 );
  end TMain;
親トピック: XML Functions
関連資料
XmlGetChildNodes Function


XmlSelectSingleNode Function

Action

Executes an X-Path query on the passed handle (either document or node) and returns the first resulting node handle. If the query returns no handles, XmlSelectSingleNode returns 0. For a detailed description of X-Path, check the specification at http://www.w3c.org. The root node for the query is the passed node/document handle.

Include file

XmlAPI.bdh

Syntax

XmlSelectSingleNode( in hDocNode : number,
                     in sQuery   : string ): number;

Return value

  • node handle if successful

  • 0 otherwise

Parameter | Description
hDocNode | A valid document or node handle
sQuery | X-Path query that will be executed on the handle that is passed.

Example

dcltrans
  transaction TMain
  var
   hDocument, hResult, hItem : number;
   sAttrValue                : string;
  begin
    hDocument := XmlCreateDocumentFromFile("C:\\MyXMLDocuments\\Order.xml");
    hItem := XmlSelectSingleNode(hDocument, "//OrderItem[1]");
    XmlGetAttributeByName(hItem, "price", sAttrValue);
  end TMain;
親トピック: XML Functions
関連概念
Executing X-Path Queries
関連資料
XmlSelectNodes Function


XmlSelectNodes Function

Action

Executes an X-Path query on the passed handle (either document or node) and returns the resulting handles in a node list. If the query returns no handles, XmlSelectNodes returns a valid nodelist handle with no containing nodes (so XmlGetCount would return 0). For a detailed description of X-Path, check the specification at http://www.w3c.org. The root node for the query is the passed node/document handle.

Include file

XmlAPI.bdh

Syntax

XmlSelectNodes( in hDocNode : number,
                in sQuery   : string ): number;

Return value

  • node list handle if successful

  • 0 otherwise

Parameter | Description
hDocNode | A valid document or node handle
sQuery | X-Path query that will be executed on the handle that is passed.

Example

dcltrans
  transaction TMain
  var
   hDocument, hResult : number;
    hOrderItems, hItem : number;
    hCount, itemIx     : number;
    sAttrValue         : string;
  begin
    hDocument : XmlCreateDocumentFromFile("C:\\MyXMLDocume nts\\Order.xml");
    hOrderItems := XmlSelectNodes(hDocument, "//OrderItem");
    hCount := XmlGetCount(hOrderItems);

    for itemIx := 0 to hCount - 1 do
      hItem := XmlGetItem(hOrderItems, itemIx);
      XmlGetAttributeByName(hItem, "price", sAttrValue);
    end;
  end TMain;
親トピック: XML Functions
関連概念
Executing X-Path Queries
関連資料
XmlGetCount Function
XmlGetItem Function
XmlGetChildNodes Function
XML Sample
XmlSelectSingleNode Function


XmlRemoveChild Function

Action

Removes the node from its current parent node (can be either a node or the document). The whole node will be removed from its parent- with all the child nodes. After calling this function the node handle can be appended to another node or document.

Include file

XmlAPI.bdh

Syntax

XmlRemoveChild( in hNode : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hNode | XML node that will be deleted

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult: number;
  begin
    hDocument := XmlCreateDocumentFromXml("<root><child1 attr1='avalue1'>childvalue1</child1>"
                  "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlRemoveChild(hResult);
  end TMain;
親トピック: XML Functions
関連概念
Deleting Nodes
関連資料
XmlAppendChild Function
XmlReplaceNode Function


XmlReplaceNode Function

Action

XmlReplaceNode replaces the node passed in parameter hDestNode with the node in parameter hSourceNode. The source node must not be a child of another node - you would have to remove the node first from its current parent. The replaced node can afterwards be used to append to another node.

XmlReplaceNode simply does the following things: Removes hDestNode from the parent and appends hSourceNode to the former parent of hDestNode.

Include file

XmlAPI.bdh

Syntax

XmlReplaceNode( in hDestNode   : number,
                in hSourceNode : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDestNode | XML node handle that will be replaced by hSourceNode
hSourceNode | XML node handle that will replace hDestNode

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult, hNewNode : number;
  begin
    hDocument := XmlCreateDocumentFromXml("<root><child1 attr1='avalue1'>childvalue1</child1>"
                  "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hNewNode := XmlCreateNodeFromXml("<child3 attr1='avalue3'>childvalue3</child3>");
    hResult := XmlSelectSingleNode(hDocument,"/root");
    XmlReplaceNode(hResult, hNewNode);
  end TMain;
親トピック: XML Functions
関連概念
Working with Nodes
関連資料
XmlAppendChild Function
XmlRemoveChild Function


XmlGetCount Function

Action

XmlGetCount takes a nodelist handle and returns the number of nodes that are stored in this list. A nodelist will be returned by XmlGetChildNodes and XmlSelectNodes. To access a node in the nodelist call XmlGetItem.

Include file

XmlAPI.bdh

Syntax

XmlGetCount( in hNodeList : number ): number;

Return value

  • number of nodes

Parameter | Description
hNodeList | A valid node list handle

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
    hOrderItems, hItem : number;
    hCount, itemIx     : number;
    sAttrValue         : string;
  begin
    hDocument := XmlCreateDocumentFromFile("C:\\MyXMLDocuments\\Order.xml");
    hOrderItems := XmlSelectNodes(hDocument, "//OrderItem");
    hCount := XmlGetCount(hOrderItems);

    for itemIx := 0 to hCount - 1 do
      hItem := XmlGetItem(hOrderItems, itemIx);
      XmlGetAttributeByName(hItem, "price", sAttrValue);
    end;
  end TMain;
親トピック: XML Functions
関連概念
Browsing the XML Document
関連資料
XmlSelectNodes Function
XmlGetItem Function
XmlGetChildNodes Function
XML Sample


XmlGetItem Function

Action

XmlGetItem returns a node from the nodelist. The nodes are identified by their index in the list beginning with 0 for the first. Use XmlGetCount to determine the number of nodes in the nodelist. You can iterate through the nodes in the nodelist by accessing the nodes from index 0 to XmlGetCount - 1.

If you want to access a specific child node, you can also call XmlGetChildByIndex to get a direct reference to a child node.

Include file

XmlAPI.bdh

Syntax

XmlGetItem( in hNodeList  : number,
            in nIndex     : number ): number;

Return value

  • handle to the node
  • 0 if failed/wrong index
Parameter | Description
hNodeList | A valid node list
nIndex | Index of the node that should be returned. Index for first element is 0.

Example

dcltrans
  transaction TMain
  var
   hDocument, hResult : number;
    hOrderItems, hItem : number;
    hCount, itemIx     : number;
    sAttrValue         : string;
  begin
    hDocument   := XmlCreateDocumentFromFile("C:\\MyXMLDocuments\\Order.xml");
    hOrderItems := XmlSelectNodes(hDocument, "//OrderItem");
    hCount      := XmlGetCount(hOrderItems);

    for itemIx := 0 to hCount - 1 do
      hItem := XmlGetItem(hOrderItems, itemIx);
      XmlGetAttributeByName(hItem, "price", sAttrValue);
    end;
  end TMain;
親トピック: XML Functions
関連資料
XmlGetCount Function
XmlSelectNodes Function
XmlGetChildNodes Function
XML Sample


XmlGetInnerXml Function

Action

Returns the inner XML representation of the passed node/document handle. Ensure that the string buffer is large enough to hold the XML. If you pass a document handle you get the inner XML representation of the whole document. If you pass a node handle, you will get the inner representation of the whole node (with all child nodes). Inner represenation means that the node tag itself will not be contained in the buffer.

Include file

XmlAPI.bdh

Syntax

XmlGetInnerXml( in    hDocNode   : number,
                inout sXmlString : string,
                in    nMaxXmlLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDocNode | A valid node/document handle
sXmlString | String variable that receives the XML representation
nMaxXmlLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sXmlString.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
    sXmlString         : string;
  begin
    hDocument := XmlCreateDocumentFromXml(
                  "<root><child1  attr1='avalue1'>childvalue1</child1>"
                  "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2"):
    XmlRemoveChild(hResult );
    XmlGetInnerXml(hDocument, sXmlString);
  end TMain;
親トピック: XML Functions


XmlGetXml Function

Action

Returns the XML representation of the passed node/document handle. Ensure that the string buffer is large enough to hold the XML. If you pass a document handle you get the XML representation of the whole document. If you pass a node handle, you will get the representation of the whole node (with all child nodes).

Include file

XmlAPI.bdh

Syntax

XmlGetXml( in    hDocNode   : number,
           inout sXmlString : string,
           in    nMaxXmlLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDocNode | A valid node/document handle.
sXmlString | String variable that receives the XML representation.
nMaxXmlLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sXmlString.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
    sXmlString         : string;
  begin
    hDocument := XmlCreateDocumentFromXml("<root><child1 attr1='avalue1'>childvalue1</child1>"
               "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlRemoveChild(hResult );
    XmlGetXml(hDocument, sXmlString);
  end TMain;
親トピック: XML Functions


XmlSetNodeAttribute Function

Action

Sets the value of an attribute of the passed node. The method either overwrites the value of an existing attribute or creates a new attribute with the specified name.

Include file

XmlAPI.bdh

Syntax

XmlSetNodeAttribute( in  hNode      : number,
                     in  sAttrName  : string,
                     in  sAttrValue : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hNode | Handle to an XML node
sAttrName | Attribute name thats value should be set.
sAttrValue | New value for the attribute

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                 "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlSetNodeAttribute(hResult, "attr1", newavalue1");
  end TMain;
親トピック: XML Functions
関連概念
Working with Nodes
関連資料
XmlGetAttributeByName Function


XmlGetAttributeByIndex Function

Action

Returns the value of a nodes attribute. The attribute is identified by the attribute's index - beginning with 0 for the first attribute.

Include file

XmlAPI.bdh

Syntax

XmlGetAttributeByIndex( in  hNode : number,
                        in  hIndex       : number,
                        out sValue       : string,
                        in  nMaxValueLen : number optional ): boolean;

Return value

  • true if successful

  • false if failed

Parameter | Description
hNode | Handle to an XML node
hIndex | Index of the attribute that should be returned. Index for first element is 0.
sValue | String variable that receives the value of the attribute
nMaxValueLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sValue.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
    sValue: string;
  begin
    hDocument := XmlCreateDocumentFromXml("<root><child1 attr1='avalue1'>childvalue1</child1>"
                "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlGetAttributeByIndex(hResult, 0, sValue);
  end TMain;
親トピック: XML Functions
関連資料
XmlGetAttributeByName Function


XmlGetAttributeByName Function

Action

Returns the value of a nodes attribute. The attribute is identified by the attributes name.

Include file

XmlAPI.bdh

Syntax

XmlGetAttributeByName( in    hNode      : number,
                       in    sAttrName  : string,
                       inout sValue     : string,
                       in  nMaxValueLen : number optional ): boolean;

Return value

  • true if successful

  • false if failed

Parameter | Description
hNode | Handle to an XML node
sAttrName | Name of the attribute that should be returned.
sValue | String variable that receives the value of the attribute
nMaxValueLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sValue.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
    sValue             : string;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
               "<child2 attr1='avalue2'>childvalue2</child2>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlGetAttributeByName(hResult, "attr1", sValue);
  end TMain;
親トピック: XML Functions
関連資料
XmlGetAttributeByIndex Function


XmlGetAttributeCount Function

Action

Returns the number of attributes that are defined for the passed node. You can afterwards access the attribute values with XmlGetAttributeByIndex.

Include file

XmlAPI.bdh

Syntax

XmlGetAttributeCount( in hNode : number ): number;

Return value

  • number of attributes

Parameter | Description
hNode | Handle to an XML node

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult, nAttrCount : number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                  "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    nAttrCount := XmlGetAttributeCount(hResult );
  end TMain;
親トピック: XML Functions
関連概念
Getting Node and Attribute Values
関連資料
XmlGetAttributeByIndex Function


XmlGetNodeName Function

Action

Returns the name of the passed node.

Include file

XmlAPI.bdh

Syntax

XmlGetNodeName( in     hNode        : number,
                inout  sName        : string,
                in     nMaxNameLen  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hNode | Handle to an XML node.
sName | String variable that receives the name of the node.
nMaxNameLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sName.

Example

dcltrans
  transaction TMain
  var
   hDocument, hResult : number;
   sName              : string;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlGetNodeName(hResult, sName);
  end TMain;
親トピック: XML Functions


XmlGetNodeType Function

Action

Returns the type of the node passed as paramter. For a description of all possible node types please see the constant definitions in the XmlAPI.bdh file.

Include file

XmlAPI.bdh

Syntax

XmlGetNodeType( in hNode: number ): number;

Return value

  • type of node

Parameter | Description
hNode | Handle to an XML node

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult, nType: number;
  begin
    hDocument := XmlCreateDocumentFromXml("<root><child1 attr1='avalue1'>childvalue1</child1>"
                                        "<child2 attr1=  'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root");
    nType := XmlGetNodeType(hResult);

    if(nType = XMLNODE_ELEMENT) then
      writeln("Root node is of type ELEMENT");
    end;

    if(nType = XMLNODE_TEXT) then
      writeln("Root node is of type TEXT");
    end;
  end TMain;
親トピック: XML Functions


XmlSetNodeValue Function

Action

Sets the text value of the passed node. Use XmlGetNodeValue to retrieve the current text value of a node.

Include file

XmlAPI.bdh

Syntax

XmlSetNodeValue (in hNode     : number,
                 in sNewValue : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hNode | Handle to an XML node
sNewValue | New node value

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
                "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlSetNodeValue(hResult, "newchildvalue2");
  end TMain;
親トピック: XML Functions
関連概念
Working with Nodes


XmlGetNodeValue Function

Action

Returns the text value of the node. If the node is of type text the value of this node will be returned. If the node is an element node - the values of the direct child text nodes will be returned. If the node has no value or just other child nodes, the method returns an empty string.

Include file

XmlAPI.bdh

Syntax

XmlGetNodeValue( in     hNode        : number,
                 inout  sValue       : string,
                 in     nMaxValueLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hNode | Handle to an XML node.
sValue | String variable that receives the value of the node.
nMaxValueLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sValue.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
  sValue             : string;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
               "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root/child2");
    XmlGetNodeValue(hResult, sValue);
  end TMain;
親トピック: XML Functions
関連概念
Getting Node and Attribute Values
関連資料
XmlGetNodeTypedValue Function


XmlGetNodeTypedValue Function

Action

Returns the typed value of a node. A Typed value is the text representation of all sub text node values of the passed node. If the node has only a text value - this will be the returned string. If the node has several child nodes, the returned string will be the concatenated string of the text value of the child nodes.

Include file

XmlAPI.bdh

Syntax

XmlGetNodeTypedValue( in    hNode        : number,
                      inout sValue       : string,
                      in    nMaxValueLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hNode | Handle to an XML node
sValue | String variable that receives the typed value of the node
nMaxValueLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sValue.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
    sValue             : string;
  begin
    hDocument := XmlCreateDocumentFromXml( "<root><child1 attr1='avalue1'>childvalue1</child1>"
               "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    hResult := XmlSelectSingleNode(hDocument, "/root");
    XmlGetNodeTypedValue(hResult, sValue);
  end TMain;
親トピック: XML Functions
関連概念
Getting Node and Attribute Values
関連資料
XmlGetNodeValue Function


XmlSetNamespaces Function

Action

Sets the namespaces and the prefix for the namespaces that will be recognized by the XML parser.

If no namespace is defined, the parser will recognize all namespaces that are defined in the root node with the prefixes that are defined in the document.

The namespace definition string has to be defined with xmlns:PREFIX= 'URI'. Multiple namespaces can be defined in the string - seperated by blank.

Example: xmlns:NS1='http://testns1.org' xmlns:NS2='http://testns2.org'

Include file

XmlAPI.bdh

Syntax

XmlSetNamespaces( in hDoc        : number,
                  in sNamespaces : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDoc | Handle to an XML document
sNamespaces | Namespaces definition string Default the parser will recognize all namespaces that are defined in the root node with the prefixes that are defined in the document.

Example

dcltrans
  transaction TMain
  var
    hDocument, hResult : number;
  begin
    hDocument := XmlCreateDocumentFromXml( "<ns1:root xmlns:ns1='http://test.org' ><child1 attr1='avalue1'>childvalue1</child1>"
                 "<child2 attr1= 'avalue2'>childvalue2</child2></ns1:root>");
    XmlSetNamespaces(hDocument, "xmlns:ns1='http://test.org'nxmlns:ns2='http://test2.org'");
    hResult := XmlSelectSingleNode(hDocument, "/ns1:root/child2");
    XmlSetNodeAttribute(hResult, "attr1", "newavalue1");
  end TMain;
親トピック: XML Functions
関連概念
Default Namespaces in XML


XmlSetOption Function

Action

Allows enabling/disabling different XML parsing options.

Include file

XmlAPI.bdh

Syntax

XmlSetOption( in nOption : number,
              in bValue  : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nOption

Option that should be either enabled (true) or disabled (false). Current option values are:

  • XML_OPT_RESOLVE_HREF (default: disabled) If enabled, XML items that are referenced with an href tag will be replaced with the referenced XML node.

  • XML_OPT_RESOLVE_EXTERNALS (default: disabled) If enabled, external referenced documents will be resolved.

  • XML_OPT_PRESERVE_WHITESPACE (default: disabled) If enabled, white spaces will be preserved when parsing XML content.
bValue | True to enable the option, false to disable it.

Example

dcltrans
  transaction TMain
  var
    hDocument  : number;
    sXmlString : string;
  begin
    XmlSetOption(XML_OPT_PRESERVE_WHITESPACE, true);
    hDocument := XmlCreateDocumentFromXml("<root>          <child1 attr1='avalue1'>childvalue1</child1>"
                                           "<child2 attr1= 'avalue2'>childvalue2</child2></root>");
    XmlGetXml(hDocument, sXmlString);
    writeln(sXmlString);
  end TMain;

親トピック: XML Functions


XML Basics

This section describes some basic concepts that should be known when working with XML documents.

  • XML Document Structure
    Provides an overview of the XML document structure.
  • X-Path Queries
    Describes how to execute queries against an XML document and retrieve the queried node/nodes.
  • XML Documents
    Provides an overview of XML documents and describes how to get a document handle.
  • Namespaces in XML
    Provides an overview of the attributes of a node, namespaces.
  • XML First Steps
    Lists the first steps and basic concepts for the XML functions.
親トピック: XML Functions


XML Document Structure

The following figure gives you an overview of an XML document. An XML document contains XML nodes of different types. Nodes of type "Element" can have child nodes and therefore complex structures can be defined in an XML document.

Raw XML Content | Type of Node | Value | Number of Children
<?xml version="1.0" ?> | Processing Instruction |  |
<Order> | Element |  | 3
<!-- This is an order > | Comment | This is an order |
<Name> | Element |  | 1
Scott Bradley | Text | Scott Bradley |
</Name> |  |  |
<OrderItems> | Element |  | 1
<Item id="1"> | Element with Attribute |  | 1
Lord of the Rings | Text | Lord of the Rings |
</Item> |  |  |
</OrderItems> |  |  |
</Order> |  |  |

The left column shows you the raw XML content. The second column shows you the type of a node. As you can see, there are different types of nodes in an XML document. The third column shows you the value of a node and the fourth column displays the number of children a specific node has.

Each element in an XML document is called a node - where there are different types of nodes. Element nodes are those nodes that are defined as follows: "<{Name of node}>". Element nodes need a closing node tag ("</ {Name of node}>") if the node has child nodes - otherwise it would be possible to define an element node that has no child nodes as the following: "<{Name of node} />", e.g.: "<Order />"

Element nodes can have multiple attributes which are defined in the starting tag of a node - you can see in the example above that the node named "Item" has an attribute called "id" with the value "1".

Element nodes can have a text value - you can see in the example above that the node named "Name" has the text value "Scott Bradley". Although it seems that the value belongs to the node name, the text value itself is a separate node of type text and is a child of "Name".

The example above shows us two more node types of common use: <?: marks a process instruction: these are nodes telling the XML parser specific things about the XML document. <!--:marks a comment node: this type of node allows you to define comments.

親トピック: XML Basics
関連概念
XML Documents
Creating an Empty XML Document
Browsing the XML Document
Loading an XML Document


X-Path Queries

X-Path allows you to execute queries against an XML document and retrieves the queried node/nodes. X-Path can be very complex. For a detailed description, see the X-Path specification at http://www.w3c.org.

<Order>
  <Name>Scott Bradley</Name>
  <OrderItems>
    <Item id="1">Lord of the Rings</Item>
    <Item id="2">Star Wars - Episode II</Item>
  </OrderItems>
  <Price>45.90</Price>
</Order>

To query a specific node in the document you can specify the exact path to an element. Each element will be addressed by its name. So to query the name element we use the following query: "/Order/Name" You see that we have to use a slash prior to the element name. The query engine will start at the document root and searches for a node named "Order". If the node is found, it searches for a subnode named "Name".

The second possibility is to tell the query engine to search for all nodes with a specific name. So, to query all nodes with name "Item" we would use the following statement: "//Item" You see that we use a double slash in this case telling the query engine that it should look for all nodes in the document to match the name.

If we want to query an element that is defined multiple times - like the "Item" node in the example above - we can either query for all nodes with name "Item" or we can tell the engine to just return one of the two identified by its index. So, to query the 2nd "Item" node we would use one of the following statements: "/Order/OrderItems/Item[2]" or "//Item[2]"

If we want to query an "Item" node with a special attribute value - for example the one with id = "2" we would use the following query: "/Order/OrderItems/Item[@id='2']" or "//Item[@id='2']" As you can see we can tell the engine to only return the Item node(s) where the attribute named "id" has the value '2'.

親トピック: XML Basics
関連概念
Executing X-Path Queries


XML Documents

The API functions provided by Silk Performer work on handles that represent either a whole XML document, a single node or a list of nodes. Depending on the type of handle, there are different functions that can be used to operate on those type of nodes.

There are different ways to get a document handle. You can either load an existing document from a file, load an existing document from a valid XML string or create a new document from scratch. The methods responsible for this are XmlCreateDocument, XmlCreateDocumentFromFile and XmlCreateDocumentFromXml. All these functions return a handle to a document.

  • Types of Handles
    Lists the types of handles that can be returned by the API functions and have to be used as input parameters for those functions.
親トピック: XML Basics
関連概念
XML Document Structure
Creating an Empty XML Document
Browsing the XML Document


Types of Handles

The following table lists the types of handles that can be returned by the API functions and have to be used as input parameters for those functions to work with them. When a function returns a handle, you have to verify that the value is not 0. All methods return a 0 (NULL-Handle) in case of an error:

Type of Handles | Returned by Functions | Description
Document | XmlCreateDocument XmlCreateDocumentFromFile XmlCreateDocumentFromXml | A document handle represents the virtual root node of an XML document. The children of this virtual document node are the top level nodes of the document. You can either iterate through those children or execute X-Path queries to query the whole document.
Node | XmlSelectSingleNode XmlGetItem XmlGetChildByIndex XmlCreateNode XmlCreateNodeFromXml | There are different types of XML nodes - to get an overview of those types, see the XML Basics section. XML Nodes can be queried with X-Path or can be accessed by iterating through a document. Nodes can be modified, deleted and added. An element node itself has child nodes - like the document node has it child nodes representing the top level nodes in the document.
NodeList | XmlGetChildNodes XmlSelectNodes | Nodelist handles store none, one or multiple node handles which can be accessed with the XmlGetItem function. So if you want to operate on a node in a nodelist you first have to get the node handle out of the list and operate on that handle.
親トピック: XML Documents


Namespaces in XML

Namespaces in XML can be defined as attributes of a node. You define the namespace and the prefix to use for it. If your document contains namespaces and you want to execute X-Path Queries where you want to find nodes that are in specific namespaces, you have to tell the parser which namespaces you want to use and which prefixes to use for this namespaces. XmlSetNamespaces allows to set the namespaces that should be recognized by the parser. The definition is like the definition in the XML document. xmlns:prefix=namespace. Multiple definitions can be separated by blank. See the following document:

<root xmlns:ns1='MyName1' xmlns:ns2='MyName2'>
<ns1:child1>value1</ns1:child1>
<ns2:child2>value2</ns2:child2>
</root>

If you want to execute a query like /root/child1 you have to define child1 in a namespace with a namespace prefix of your choice (doesn't have to be the same prefix like in the source document), and you have to tell the compiler which namespace should be assigned to that prefix. The table below describes the different possibilities to execute the same query:

X-Path | SetNamespaces
/root/ns1:child1 | xmlns:ns1='MyName1'
/root/myprefix:child1 | xmlns:myprefix='MyName1'
dcltrans
transaction TMain
var
  hDoc, hChild : number;
  sValue, sXML : string;
begin
  hDoc   := XmlCreateDocumentFromXml("<root xmlns:ns1='MyName1'><ns1:child>value1</ns1:child></root>");
  XmlSetNamespaces(hDoc, "xmlns:ns1='MyName1'");
  hChild := XmlSelectSingleNode("/root/ns1:child");
  ...
  XmlFreeHandle(hChild);
  XmlFreeHandle(hDoc);
end TMain;
  • Default Namespaces in XML
    Describes how to define default namespaces for elements using the xmlns attribute.
親トピック: XML Basics


Default Namespaces in XML

XML namespaces can be used for more than defining namespace prefixes and using those prefixes with element names. You can also define default namespaces for elements using the xmlns attribute. To query elements with default namespaces you must call XmlSetNamespaces using a prefix name. The prefix name can later be used in an X-Path query.

See the following document:

<root>
  <child1 xmlns=’MyName1’>value1</child1>
</root>

To execute a query like /root/child1 you must define the namespace of child1 with XmlSetNamespaces using a self-defined prefix.

dcltrans
  transaction TMain
  var
    hDoc, hChild : number;
    sValue, sXML : string;
  begin
    hDoc   := XmlCreateDocumentFromXml("<root><child1 xmlns=’MyName1’>value1<child></root>");
    XmlSetNamespaces(hDoc, "xmlns:myprefix='MyName1'");
    hChild := XmlSelectSingleNode("/root/myprefix:child");
    ...
    XmlFreeHandle(hChild);
    XmlFreeHandle(hDoc);
  end TMain;
親トピック: Namespaces in XML
関連資料
XmlSetNamespaces Function


XML First Steps

Silk Performer provides several API functions that allow you to work with XML documents, parse and verify XML values of web response documents. All these functions are based on an XML dom parser that ships with Silk Performer. This topic lists the first steps and basic concepts to use these functions.

  1. Creating an Empty XML Document
    Describes how to create an empty XML document.
  2. Loading an XML Document
    Describes how an XML file can be loaded from a file or from a string buffer.
  3. Determining the Handle for a Node
    Describes the two methods for determining the handle for a node.
  4. Getting Node and Attribute Values
    Provides an overview of the functions to get node and attribute values of a document.
  5. Creating Nodes
    Describes how newly created nodes can be appended at any place in the document.
  6. Deleting Nodes
    Describes how existing nodes can be removed from a document.
  7. Working with Nodes
    Describes the functions that you can use with nodes.
  8. XML Sample
    Demonstrates how to load an existing XML document from a file and modify it.
親トピック: XML Basics
関連資料
XML Sample


Creating an Empty XML Document

The BDL API provides the function XMLCreateDocument to create an empty XML document. The function returns a handle to the created document. Use functions for creating and appending nodes to the document to build a valid XML document.

dcltrans
transaction TMain
var
  hDoc : number;
begin
  hDoc := XmlCreateDocument();
  ...
  XmlFreeHandle(hDoc);
end TMain;
親トピック: XML First Steps
次のトピック: Loading an XML Document
関連概念
XML Documents
XML Document Structure
Browsing the XML Document
関連資料
XmlCreateDocument Function


Loading an XML Document

The BDL API provides two ways to load an XML file - it can be loaded from a file or from a string buffer.

XmlCreateDocumentFromFile

This function loads a document from a file and returns a handle to the document. Use functions for browsing the document to get values of nodes and attributes.

dcltrans
  transaction TMain
  var
    hDoc : number;
    sXmlFile : string;
  begin
    GetDataFilePath("order.xml", sXmlFile);
    hDoc := XmlCreateDocumentFromFile(sXmlFile);
    ...
    XmlFreeHandle(hDoc);
  end TMain;

XmlCreateDocumentFromXml

This functions loads a document from a string buffer and returns a handle to the document. Use functions for browsing the document to get values of nodes and attributes.

dcltrans
  transaction TMain
  var
    hDoc : number;
  begin
    hDoc := XmlCreateDocumentFromXml("<root><child>value1</child><child>value2</child></root>");
    ...
    XmlFreeHandle(hDoc);
  end TMain;
親トピック: XML First Steps
前のトピック: Creating an Empty XML Document
次のトピック: Determining the Handle for a Node
関連概念
XML Document Structure
関連資料
XmlCreateDocumentFromFile Function
XmlCreateDocumentFromXml Function


Determining the Handle for a Node

You can determine the handle for a node by browsing through a document (start at the document root and explore all child nodes), or you can get specific nodes by executing an X-Path query.

  • Browsing the XML Document
    Describes how to iterate through all nodes in a document starting at the "virtual" document root node.
  • Executing X-Path Queries
    Describes how to execute X-Path queries on a document or on nodes of a document
親トピック: XML First Steps
前のトピック: Loading an XML Document
次のトピック: Getting Node and Attribute Values


Browsing the XML Document

The handle to a document is the handle to a "virtual" root node. The root node of an XML document would be the first child of the document handle. Typically, an XML document only has one root element - so you would always get the root node by getting the first child of the document. But if the root contains processing instructions (<?xml ... >), these instructions are also children of the document.

Starting at the "virtual" document root node, you can iterate through all nodes in a document. You can get the child nodes of a node with XmlGetChildNodes. This function returns a handle to a node list. A node list contains 0 or more node handles. These handles can be received with XmlGetItem with a 0 based index to the element in the list. The number of elements can be received with XmlGetCount on the node list. You can access a child node directly with XmlGetChildByIndex.

dcltrans
transaction TMain
var
  hDoc, hChildren, hRoot, hChild : number;
begin
  hDoc      := XmlCreateDocumentFromXml("<root><child>value1</child><child>value2</child></root>");
  hRoot     := XmlGetChildByIndex(hDoc, 0);
  hChildren := XmlGetChildNodes(hRoot);
  hChild    := XmlGetItem(hChildren, 1);
  ...
  XmlFreeHandle(hChild);
  XmlFreeHandle(hChildren);
  XmlFreeHandle(hRoot);
  XmlFreeHandle(hDoc);
end TMain;
親トピック: Determining the Handle for a Node
関連概念
XML Documents
XML Document Structure
Creating an Empty XML Document
関連資料
XmlGetCount Function
XmlGetChildNodes Function


Executing X-Path Queries

You can execute X-Path queries on a document or on nodes of a document. If you execute the query on the document, the root element is the initial point for the query - otherwise it is the node. There are two functions to execute an X-Path Query. XmlSelectNodes returns node list with all nodes that match the query. XmlSelectSingleNode returns the first node that matches the query. For a detailed description of X-Path, see the online documentation at http://www.w3c.org.

dcltrans
transaction TMain
var
  hDoc, hChildren, hRoot, hChild : number;
begin
  hDoc      := XmlCreateDocumentFromXml("<root><child>value1</child><child>value2</child></root>");
  hRoot     := XmlSelectSingleNode(hDoc, "/root");
  hChildren := XmlSelectNodes("/root/child");
  hChild    := XmlGetItem(hChildren, 1);
  ...
  XmlFreeHandle(hChild);
  XmlFreeHandle(hChildren);
  XmlFreeHandle(hRoot);
  XmlFreeHandle(hDoc);
  XmlFreeHandle(hDoc);
end TMain;
親トピック: Determining the Handle for a Node
関連概念
X-Path Queries
関連資料
XmlSelectNodes Function
XmlSelectSingleNode Function


Getting Node and Attribute Values

There are several functions to get node and attribute values of a document. All of these functions require a handle to a node. XmlGetNodeValue returns the text value associated with the node. XmlGetNodeTypedValue returns the node value expressed in its defined data type. If you have a look at the sample above, there are child elements with a text value (value1 and value2). XmlGetNodeValue on one of the nodes will return null because value1 and value2 are child nodes of the child elements. To get the test values (value1 and value2) you can either get the first child of one of the child nodes and use XmlGetNodeValue, or you use XmlGetNodeTypedValue on the child nodes directly.

dcltrans
transaction TMain
var
  hDoc, hChild, hTextNode : number;
  sValue : string;
begin
  hDoc      := XmlCreateDocumentFromXml("<root><child>value1</child><child>value2</child></root>");
  hChild    := XmlSelectSingleNode(hDoc, "/root/child[1]");
  hTextNode := XmlGetChildByIndex(hChild, 0);

  // following two functions will return the same value - sValue will contain value1
  XmlGetNodeValue(hTextNode, sValue);
  XmlGetNodeTypedValue(hChild, sValue);
  ...
  XmlFreeHandle(hChild);
  XmlFreeHandle(hTextNode);
  XmlFreeHandle(hDoc);
end TMain;

Attributes can be accessed by name or index. XmlGetAttributeCount returns the number of attributes defined in the passed node. XmlGetAttributeByName returns the value of the attribute identified by name. XmlGetAttributeByIndex returns the value of the attribute identified by the 0 based index.

dcltrans
transaction TMain
var
  hDoc, hChild : number;
  sValue : string;
begin
  hDoc   := XmlCreateDocumentFromXml("<root><child attr1='attrvalue1'>value1</child></root>");
  hChild := XmlSelectSingleNode(hDoc, "/root/child");

  // following two functions will both access attribute attr1 - sValue will contain attrvalue1
  XmlGetAttributeByName(hChild, "attr1", sValue);
  XmlGetAttributeByIndex(hChild, 0, sValue);
  ...
  XmlFreeHandle(hChild);
  XmlFreeHandle(hDoc);
end TMain;
親トピック: XML First Steps
前のトピック: Determining the Handle for a Node
次のトピック: Creating Nodes
関連資料
XmlGetAttributeByIndex Function
XmlGetNodeTypedValue Function
XmlGetNodeValue Function


Creating Nodes

Newly created nodes can be appended at any place in the document. Nodes can be created in two ways - either with XmlCreateNode, which is creating an empty node, or with XmlCreateNodeFromXml, which creates a node from a valid XML node representation. Those two functions return a new node handle which can then be used to append to an existing node in the document. XmlAppendChild is the function that allows you to append the created node to an existing node. The appended node will become a child node of the parent node.
dcltrans
transaction TMain
var
  hNode1, hNode2 : number;
begin
  hNode1 := XmlCreateNode("child");
  hNode2 := XmlCreateNodeFromXml("<child attr1='attrvalue1'>value1</child>");
    ...
  XmlFreeHandle(hNode1);
  XmlFreeHandle(hNode2);
end TMain;
親トピック: XML First Steps
前のトピック: Getting Node and Attribute Values
次のトピック: Deleting Nodes
関連資料
XmlCreateNode Function


Deleting Nodes

Existing nodes can be removed from a document. To delete a node you have to get the handle to that node by either iterating through the document till you have found the node or by querying for a specific node. XmlRemoveChild takes the node handle and removes the node (and all the child nodes) from the document. The node handle will still be valid - so you can remove it from one position and append the node to another. You can even append the node to another XML document.

親トピック: XML First Steps
前のトピック: Creating Nodes
次のトピック: Working with Nodes
関連資料
XmlRemoveChild Function


Working with Nodes

If you have a valid node handle, you can call different functions to work with the node:

  • XmlAppendChild appends a node to a parent node. You can append a new node (XmlCreateNode, XmlCreateNodeFromXml) or a node that has been removed from its parent (XmlRemoveChild) to another node. If you call XmlAppendChild on a node that is already appended to a parent node, the node will be cloned and added to the new parent. The handle to the child node will hold the cloned node after the call.
  • XmlReplaceNode replaces one node with another.
  • XmlSetNodeValue sets the value of a node.
  • XmlSetNodeAttribute sets the value of a node's attribute.
親トピック: XML First Steps
前のトピック: Deleting Nodes
次のトピック: XML Sample
関連資料
XmlAppendChild Function
XmlReplaceNode Function
XmlSetNodeValue Function


XML Sample

This topic walks you through a sample that covers the basic XML API functions.

Sample Overview

The sample is loading an existing XML document from a file. It modifies this XML document and iterates through the document with the possible techniques. The file the sample is using has the following structure:

<Order>
  <Name>Scott Bradley</Name>
  <OrderItems>
    <Item id="1">Lord of the Rings</Item>
  </OrderItems>
  <Price>25.90</Price>
</Order>

Starting

First, we create a new project (the project type does not matter). Then, we take the XML snapshot from the Sample Overview section, store it in a text file and add it to the data file section of our project. Store the file as ORDER.XML.

Create a new plain script and include the XmlAPI.BDH file with the following statement:
use "XMLAPI.BDH"

Loading the XML Document

The first step is to load the document and get the document handle. We need a variable that is storing the handle (number) and one string variable to get the absolute path of our XML document. We have to get the absolute path because XmlCreateDocumentFromFile requires the absolute path to the file that should be loaded - GetDataFilePath is the function that returns the absolute path to a file in the data file section.

As you can see in the sample code below we have to check if the returned handle value is not null. In case of an error - every XML function that returns a handle will return a 0. As you can further see - we have to free the handles when they are no longer needed - so we free the document handle at the end of our script.

dcltrans
  transaction TmyTrans1
  var
    hDoc     : number;
    sXmlFile : string;
  begin
    GetDataFilePath("order.xml", sXmlFile);
    hDoc := XmlCreateDocumentFromFile (sXmlFile);
    if (hDoc <> 0) then
      ...
      XmlFreeHandle(hDoc);
    end;
  end TmyTrans1;

Iterating through an XML Document

We now have a document handle in hDoc which is in fact the "virtual" document root node - a node that is the parent node of all top level nodes in the document - in our case it would be the parent of the node "Order".

If we want to iterate through all nodes in the XML document we have to get all child nodes of the document and iterate through them. And we also go through the child nodes of the returned child nodes - so to iterate through the whole document we have to write a function that will be called recursively - to make things easier in this sample we only iterate 2 node levels.

XmlGetChildNodes returns a nodelist handle. XmlGetCount returns the number of items in the nodelist and with XmlGetItem we can access one node in the list identified by the index (0 for the first item; XmlGetCount - 1 for the last).

We are going to write the node names and values to the output file:

dcltrans
  transaction TmyTrans1
  var
    hDoc, hChildren, hChildNode, nChildIx, nChildCount : number;
    hChildren2, hChildNode2, nChildIx2, nChildCount2   : number;
    sXmlFile, sName, sValue                            : string;
  begin
    GetDataFilePath("order.xml", sXmlFile);
    hDoc := XmlCreateDocumentFromFile(sXmlFile);
    if (hDoc <> 0) then
      hChildren := XmlGetChildNodes(hDoc); // get the nodelist to the children
      nChildCount := XmlGetCount(hChildren); // get the number of items in the nodelist
      for nChildIx := 0 to nChildCount -1 do// iterate through the children
        hChildNode := XmlGetItem(hChildren, nChildIx); // get a child out of the list
        XmlGetNodeName(hChildNode, sName);
        XmlGetNodeValue(hChildNode, sValue);
        writeln(sName + ":" + sValue);
        // now we do the same for the children of this child node
        hChildren2 := XmlGetChildNodes(hChildNode);
        nChildCount2 := XmlGetCount(hChildren2);
        for nChildIx2 := 0 to nChildCount2 -1 do
          hChildNode2 := XmlGetItem(hChildren2, nChildIx2);
          XmlGetNodeName(hChildNode2 , sName);
          XmlGetNodeValue(hChildNode2 , sValue);
          writeln(" " + sName + ":" + sValue);
          XmlFreeHandle(hChildNode2);
        end;
        XmlFreeHandle(hChildren2);
        XmlFreeHandle(hChildNode);
      end;
      XmlFreeHandle(hChildren);
      XmlFreeHandle(hDoc);
    end;
  end TmyTrans1;

Output File:

Order:
  Name:Scott Bradley
  OrderItems:
  Price:

Execute Queries

If you know exactly which node in the document you want to get - you can execute an X-Path query. There are two functions that allow you to execute queries - XmlSelectNodes and XmlSelectSingleNode. XmlSelectNodes returns a nodelist of all resulting nodes whereas XmlSelectSingleNode returns the first resulting node or 0 if there were no nodes matching the query. In our sample we want to query all nodes with name "Item" and write the values to the output file.

dcltrans
  transaction TmyTrans1
  var
    hDoc, hResultNodes, hNode, nResultIx, nResultCount : number;
    sXmlFile, sName, sValue                            : string;
  begin
    GetDataFilePath("order.xml", sXmlFile);
    hDoc := XmlCreateDocumentFromFile(sXmlFile);
    if (hDoc <> 0) then
      hResultNodes := XmlSelectNodes(hDoc, "//Item"); // get all nodes of name Item
      nResultCount := XmlGetCount(hResultNodes); // get the number of items in the nodelist
      for nResultIx := 0 to nResultCount -1 do // iterate through the children
        hNode := XmlGetItem(hResultNodes, nResultIx); // get a child out of the list
        XmlGetNodeName(hNode, sName);
        XmlGetNodeValue(hNode, sValue);
        writeln(sName + ":" + sValue);
        XmlFreeHandle(hNode);
      end;
      XmlFreeHandle(hResultNodes);
      XmlFreeHandle(hDoc);
    end;
  end TmyTrans1;

Output File:

Item: Lord of the Rings

Creating Nodes

Now lets create a new Item node in our XML document. We can either create the whole XML node (including value and attributes) with XmlCreateNodeFromXml or we can create the node with XmlCreateNode and set the value and attributes with other API functions. After creating the node and setting the values - we are appending the node to the OrderItems node. So we have to do the following steps: Create the node, Set the value and attributes, Get the OrderItems node and append the created node to the order items node.

dcltrans
transaction TmyTrans1
var
  hDoc, hOrderItems, hNewItem : number;
  sXmlFile, sXml              : string;
begin
  GetDataFilePath("order.xml", sXmlFile);
  hDoc := XmlCreateDocumentFromFile(sXmlFile);
  if (hDoc <> 0) then
    hOrderItems := XmlSelectSingleNode(hDoc, "/Order/OrderItems"); // get the OrderItems node
    hNewItem := XmlCreateNode("Item"); // Create a new Item Node
    XmlSetNodeAttribute(hNewItem, "id", "2"); // set the node attribute
    XmlSetNodeValue(hNewItem, "Star Wars - Episode II"); // set the node value
    XmlAppendChild(hOrderItems, hNewItem); // append the node
    // now lets get the XML representation
    XmlGetXml(hDoc, sXml);
    writeln(sXml);
    XmlFreeHandle(hNewItem);
    XmlFreeHandle(hOrderItems);
    XmlFreeHandle(hDoc);
  end;
end TmyTrans1;

Output File:

<Order>
  <Name>Scott Bradley</Name>
  <OrderItems>
    <Item id="1">Lord of the Rings</Item>
    <Item id="2">Star Wars - Episode II</Item>
  </OrderItems>
  <Price>25.90</Price>
</Order>

Working with Nodes / Removing

As you have already seen in the previous examples - there are several functions to get the name and value of a node XmlGetNodeValue, XmlGetNodeName) and there are functions to set the value and attributes of a node (XmlSetNodeValue, XmlSetNodeAttribute).

Iterating through nodes is also already described above - but there is also another way to get a child node of a node. XmlGetChildNodeByIndex directly returns the node handle to a child of a node. This function is useful if you know exactly which child node you want to access. Otherwise, you need to iterate through the nodelist returned by XmlGetChildNodes.

Attributes can also be accessed either by name or by index. XmlGetAttributeByIndex returns the value of an attribute identified by its index whereas XmlGetAttributeByName returns the value of an attribute identified by its name.

XmlRemoveChild allows you to remove a node from the document.

The following sample code will make use of some of the above mentioned functions to remove the Item node with the attribute value "2" for attribute "id":

dcltrans
  transaction TmyTrans1
  var
    hDoc, hOrderItems, hItems, hItem, nItemCount, nItemIx : number;
    sXmlFile, sXml                                        : string;
  begin
    GetDataFilePath("order.xml", sXmlFile);
    hDoc := XmlCreateDocumentFromFile(sXmlFile);
    if (hDoc <> 0) then
      hOrderItems := XmlSelectSingleNode(hDoc, "/Order/OrderItems/*"); // get all Item nodes
      nItemCount := XmlGetCount(hOrderItems);
      for nItemIx := 0 to nItemCount -1 do
        hItem := XmlGetItem(hOrderItems, nItemIx);
        XmlGetAttributeByName(hItem, "id", sAttrValue);
        if(StrICmp(sAttrValue, "2") = 0) then
          XmlRemoveChild(hItem);
        end;
        XmlFreeHandle(hItem);
      end;
      // now lets get the XML representation
      XmlGetXml(hDoc, sXml);
      writeln(sXml);
      XmlFreeHandle(hOrderItems);
      XmlFreeHandle(hDoc);
    end;
  end TmyTrans1;

Output File:

<Order>
  <Name>Scott Bradley</Name>
  <OrderItems>
    <Item id="1">Lord of the Rings</Item>
  </OrderItems>
  <Price>25.90</Price>
</Order>
親トピック: XML First Steps
前のトピック: Working with Nodes
関連概念
XML First Steps
関連資料
XmlCreateDocument Function
XmlCreateNode Function
XmlCreateDocumentFromFile Function
XmlCreateDocumentFromXml Function


Application Server Functions

  • CORBA Functions Reference
    Lists BDL functions to simplify the creation and use of CORBA test scripts.
  • Jolt Functions Reference
    Lists BDL functions to simulate Jolt-based client/server interaction.
  • Oracle Forms Functions Reference
    Lists BDL functions for testing Oracle Forms applications.
  • TUXEDO Functions Reference
    Lists BDL functions for handling TUXEDO function calls from within Silk Performer.
  • Jacada Functions Reference
    Lists BDL functions to handle Jacada function calls from within Silk Performer.
親トピック: Benchmark Description Language (BDL) Reference


CORBA Functions Reference

Silk Performer provides functions to simplify the creation and use of CORBA test scripts.

Required include files

To use any of the CORBA functions provided with Silk Performer, you must use the proper include file in your test scripts. These files are part of the Silk Performer installation. Add the following lines to your test scripts:

use "WebAPI.bdh"
use "IIOP.bdh"
  • General Setting Functions Overview
    Lists BDL functions for presetting parameters for IiopRequest function calls.
  • Bootstrapping Functions
    Lists BDL functions for bootstrapping and locating CORBA objects.
  • Basic CORBA Functions
    Lists BDL functions for referencing and handling CORBA objects.
  • Status Retrieving Functions
    Lists BDL functions to retrieve the status and size of the reply associated with a CORBA object.
  • Parameter Setting and Getting Functions Overview
    Lists BDL functions for setting the parameters and retrieving the return parameters of an operation in advance of calling the IiopRequest function.
  • Measurement Functions
    Lists BDL functions for measuring operation calls related to CORBA objects.
  • Wonderwall Functions Overview
    Lists BDL functions for testing CORBA applications that make use of the Orbix Wonderwall.
親トピック: Application Server Functions


General Setting Functions Overview

These setting functions are used to preset parameters for IiopRequest function calls. This is useful to make IIOP request functions more readable by using fewer parameters for values that do not change often.

  • IiopSetByteOrder Function
    Specifies the byte order used to pass messages.
  • IiopSetMaxGiopVersion Function
    Sets the maximum General Inter-ORB Protocol version and is also used as the default value for any IIOP message.
  • IiopSetOrbMode Function
  • IiopSetPrincipal Function
    Specifies the principal setting sent along with request messages to the server.
  • IiopSetProxy Function
    Sets a traffic forwarder host where all IIOP traffic is sent to, no matter what the target address in an IOR specifies.
  • IiopSetServiceContext Function
    Specifies the service context list that is sent along with messages that are exchanged between server and client objects.
  • IiopBeginServiceContext Function
    Prepares a CORBA object handle for construction of a service context.
  • IiopDeleteServiceContextList Function
    Deletes the entire service context list for an object.
  • IiopEndServiceContext Function
    Finalizes the construction of a service context.
  • IiopGetServiceContext Function
    Gets the service context list for an object that has been sent along with a message from a server object.
  • IiopGetServiceContextList Function
    Reads off a list of service contexts that may have been added to the reply of an IIOP request.
  • IiopGetEncapsulation Function
    Reveals the content of an encapsulation as defined in the CORBA specification.
  • IiopSetAddressingMode Function
    Sets the default addressing mode or specifies an addressing mode for a particular object.
  • IiopSetFragmentSize Function
    Sets the default fragmentation limit for any object, or specifies a fragmentation limit for a particular object.
  • IiopSetWCharType Function
    Determines how Silk Performer interprets wide characters.
  • IiopSetMaxChunkSize Function
    Sets the maximum size of value type chunks. Chunked encoding may be used with value types only.
  • IiopSetFirewall Function
    Sets the default or an object's firewall handling mode.
  • IiopRegisterValueType Function
    Registers a value typecode in order to be able to parse IIOP reply messages that contain non-chunked derived value types.
  • IiopSetShutdownMode Function
    Specifies the shutdown behaviour of connections for the IIOP load engine.
親トピック: CORBA Functions Reference


IiopSetByteOrder Function

Action

Specifies the byte order used to pass messages. Depending on this setting, either the byte with the highest or the lowest order is sent first, followed by the remaining bytes in the corresponding order.

Include file

IIOP.bdh

Syntax

IiopSetByteOrder( in nByteOrder : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nByteOrder

Byte order used to pass messages. Possible options are:

  • IIOP_BIG_ENDIAN. Most significant byte is sent first

  • IIOP_LITTLE_ENDIAN. Least significant byte is sent first

Example

dcltrans
  transaction TWebInit
  begin
    // set byte order
    if IiopSetByteOrder(IIOP_BIG_ENDIAN)then
      writeln("byte order set to IIOP_BIG_ENDIAN");
    end;
  end TWebInit;

Output

byte order set to IIOP_BIG_ENDIAN
親トピック: General Setting Functions Overview


IiopSetMaxGiopVersion Function

Action

Sets the maximum General Inter-ORB Protocol version and is also used as the default value for any IIOP message.

Include File

IIOP.bdh

Syntax

IiopSetMaxGiopVersion( in sVersion : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sVersion | General Inter-ORB Protocol version

Example

dcltrans
  transaction TWebInit
  begin
    // set GIOP version
    if IiopSetMaxGiopVersion("1.2") then
      writeln("GIOP version set to 1.2");
    end;
  end TWebInit;

Output

GIOP version set to 1.0
親トピック: General Setting Functions Overview


IiopSetOrbMode Function

Action

Specifies the overall behavior of the IIOP load engine. The user can choose between the Sybase/Jaguar mode and the standard mode. In the standard mode the IIOP engine behaves according to the CORBA specification.

The Sybase/Jaguar orb behaves slightly different in that it does not regard message ids as significant information to pair up requests with responses. Therefore it does not allow for multi-threaded communication over a particular connection.

Include file

IIOP.bdh

Syntax

IiopSetOrbMode( in eOrbMode : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
eOrbMode Specifies the general IIOP engine mode. Valid options are:
  • IIOP_ORB_MODE_STANDARD (default)
  • IIOP_ORB_MODE_JAGUAR

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21";   // server
    PORT   := 1052;              // port
    KEY    := "...\h00";         // key
    KEYLEN := 4;                 // key length
  var
    hIiop : number;   // handle to a CORBA object

  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // set IIOP engine mode to Jaguar orb behavior:
    // single-threaded communication per connection
    IiopSetOrbMode(IIOP_ORB_MODE_JAGUAR);

    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: General Setting Functions Overview


IiopSetPrincipal Function

Action

Specifies the principal setting sent along with request messages to the server. This setting may be used as client identification by the ORB.

Include file

IIOP.bdh

Syntax

IiopSetPrincipal( in sPrincipal    : string,
                  in nPrincipalLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sPrincipal | Buffer containing the principal setting.
nPrincipalLen | Length of the principal setting (optional).

Example

dcltrans
  transaction TInit
  const
    PRINCIPAL := "username" "\h00";
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    if IiopSetPrincipal(PRINCIPAL)then
      writeln("principal successful set");
    end;
  end TInit;

Output

principal successful set

Sample scripts

UnivB.bdf, AnyDemo.bdf, AsyncBank.bdf, Bank.bdf, Callback.bdf, SimpleAsyncBank.bdf, TypeTest.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: General Setting Functions Overview


IiopSetProxy Function

Action

Sets a traffic forwarder host where all IIOP traffic is sent to, no matter what the target address in an IOR specifies.

Include file

IIOP.bdh

Syntax

IiopSetProxy(
  in sProxyHost : string,
  in nProxyPort : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sProxyHost | Host name where the IIOP traffic forwarder is running. In an empty string is passed, the proxy will be disabled.
nProxyPort | Port where the IIOP traffic forwarder is listening. If 0 is specified the proxy will be disabled

Example

dcltrans
  transaction TInit
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    if IiopSetProxy("proxy", 5000) then
      writeln("IIOP proxy successfully set");
    end;
  end TInit;

Output

IIOP proxy successfully set
親トピック: General Setting Functions Overview


IiopSetServiceContext Function

Action

For an object, specifies the service context list that is sent along with messages that are exchanged between server and client objects. Usually the service context list contains information that is not visible to a developer using an ORB.

A service context list is held globally for a CORBA object. This means that the service context list is sent unchanged with every IiopRequest function call, unless a new service context list is created, using the functions IiopBeginServiceContext, IiopEndServiceContext, IiopSetServiceContext or IiopDeleteServiceContextList.

However, if a service context list is defined for a callback object using the same functions, it is bound to a special operation defined by IiopObjectListen. Any time this operation is invoked by the server, Silk Performer returns the service context list along with the IIOP reply message.

Include file

IIOP.bdh

Syntax

IiopSetServiceContext( in hIiop           : number,
                       in sServContext    : string,
                       in nServContextLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sServContext | Buffer containing the service context.
nServContextLen | Length of the service context (optional).

Example

dcltrans
  transaction TServiceContext
  const
    HOST           := "192.168.20.21"; // server
    PORT           := 1052;            // port
    KEY            := "...\h00";       // key
    KEYLEN         := 4;               // key length
    SERVICECONTEXT := "\h00000001000000010000000C00000000"
"\h0001010001000001";
  var
    hIiop : number;
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY);

    // set service context
    if IiopSetServiceContext(hIiop, SERVICECONTEXT) then
      writeln("service context successfully set");
    end;

    IiopRequest(hIiop, "Request");
    IiopObjectRelease(hIiop);
  end TServiceContext;

Output

service context successfuly set
親トピック: General Setting Functions Overview
関連資料
IiopGetServiceContext Function


IiopBeginServiceContext Function

Action

Prepares a CORBA object handle for construction of a service context. The content of the service context is supplied using an IIOPGetFunctions function and is completed by calling an IiopEndServiceContext function.

Service context lists are held globally for CORBA objects. This means that service context lists are sent unchanged with each IiopRequest function call, unless a new service context list is created using the functions IiopBeginServiceContext, IiopEndServiceContext, IiopSetServiceContext, or IiopDeleteServiceContextList.

However, when a service context list is defined for a callback object using the same functions, the list is bound to a special operation defined by IiopObjectListen. When this operation is invoked by the server, Silk Performer returns the service context list along with the IIOP reply message.

Include file

IIOP.bdh

Syntax

IiopBeginServiceContext( in hIiop      : number,
                         in nServiceId : number,
                         in nByteOrder : number optional
                         in bIgnoreBO  : boolean optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle of a CORBA object.
nServiceId | Unsigned long value that represents the service ID number.
nByteOrder

A service context can be marshaled in a byte order that is different than the rest of an IIOP message. When omitted, the current byte order is assumed.

Valid parameters include either of the following:

  • IIOP_BIG_ENDIAN. The most significant byte is sent first

  • IIOP_LITTLE_ENDIAN. The least significant byte is sent first
bIgnoreBO | When true, the byte order flag is not sent. This flag is only used with VisiBroker security tickets (optional, default value = false).

Example

dcltrans
  transaction TServiceContext
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

     // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0","1.2",
                     HOST, PORT, KEY, KEYLEN);

     // create service context
    IiopBeginServiceContext(hIiop, 1, IIOP_LITTLE_ENDIAN);
    IiopSetUlong(hIiop, 0x1010);
    IiopSetUlong(hIiop, 0x0110);
    IiopEndServiceContext(hIiop);

     // pass long value parameter to request
    IiopSetLong(hIiop, 593814064);
     // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    ...
    IiopObjectRelease(hIiop);
  end TServiceContext;
親トピック: General Setting Functions Overview
関連資料
IiopGetServiceContextList Function
IiopEndServiceContext Function


IiopDeleteServiceContextList Function

Action

Deletes the entire service context list for an object.

A service context list is held globally for a CORBA object. This means that the service context list is sent unchanged with every IiopRequest function call, unless a new service context list is created, using the functions IiopBeginServiceContext, IiopEndServiceContext, IiopSetServiceContext or IiopDeleteServiceContextList.

However, if a service context list is defined for a callback object using the same functions, it is bound to a special operation defined by IiopObjectListen. Any time this operation is invoked by the server, Silk Performer returns the service context list along with the IIOP reply message.

Include file

IIOP.bdh

Syntax

IiopDeleteServiceContextList( in hIiop: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.

Example

dcltrans
  transaction TServiceContext
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // create service context
    IiopBeginServiceContext(hIiop, 1, IIOP_LITTLE_ENDIAN);
    IiopSetUlong(hIiop, 0x1010);
    IiopSetUlong(hIiop, 0x0110);
    IiopEndServiceContext(hIiop);

    // create another service context
    IiopBeginServiceContext(hIiop, 17, IIOP_BIG_ENDIAN);
    IiopSetShort(hIiop, 2);
    ...
    IiopEndServiceContext(hIiop);

    // pass long value parameter to request
    IiopSetLong(hIiop, 593814064);

    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    // do not send a service context list along with the next request
    IiopDeleteServiceContextList(hIiop);
    IiopSetLong(hIiop, 593814065);
    IiopRequest(hIiop, "DecToHex");
    ...
    IiopObjectRelease(hIiop);
  end TServiceContext;
親トピック: General Setting Functions Overview


IiopEndServiceContext Function

Action

Finalizes the construction of a service context. This process is started by calling the IiopBeginServiceContext; the content of a service context is supplied with the help of the IIOP SetFunctions.

A service context list is held globally for a CORBA object. This means that the service context list is sent unchanged with every IiopRequest function call, unless a new service context list is created, using the functions IiopBeginServiceContext, IiopEndServiceContext, IiopSetServiceContext or IiopDeleteServiceContextList.

However, if a service context list is defined for a callback object using the same functions, it is bound to a special operation defined by IiopObjectListen. Any time this operation is invoked by the server, Silk Performer returns the service context list along with the IIOP reply message.

Include file

IIOP.bdh

Syntax

IiopEndServiceContext( in hIiop: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.

Example

dcltrans
  transaction TServiceContext
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // create service context
    IiopBeginServiceContext(hIiop, 1, IIOP_LITTLE_ENDIAN);
    IiopSetUlong(hIiop, 0x1010);
    IiopSetUlong(hIiop, 0x0110);
    IiopEndServiceContext(hIiop);

    // pass long value parameter to request
    IiopSetLong(hIiop, 593814064);

    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    ...
    IiopObjectRelease(hIiop);
  end TServiceContext;
親トピック: General Setting Functions Overview
関連資料
IiopGetServiceContextList Function
IiopBeginServiceContext Function


IiopGetServiceContext Function

Action

Gets the service context list for an object that has been sent along with a message from a server object. Usually the service context list contains information that is not visible to a developer using an ORB.

A service context list is held globally for a CORBA object. This means that the service context list is sent unchanged with every IiopRequest function call, unless a new service context list is created, using the functions IiopBeginServiceContext, IiopEndServiceContext, IiopSetServiceContext or IiopDeleteServiceContextList.

However, if a service context list is defined for a callback object using the same functions, it is bound to a special operation defined by IiopObjectListen. Any time this operation is invoked by the server, Silk Performer returns the service context list along with the IIOP reply message.

Include file

Iiop.bdh

Syntax

IiopGetServiceContext( in  hIiop        : number,
                       out sContext     : string,
                       in  nContextSize : number optional,
                       out nUsed        : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sContext | String variable that receives the service context.
nContextSize | Size of the string variable that receives the service context (optional).
nUsed | Variable that receives the number of bytes that are copied to the buffer (optional).

Example

dcltrans
  transaction TServiceContext
  var
    sBuf : string();
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY);
    IiopRequest(hIiop, "ARequest");

    // get service context
    IiopGetServiceContext(hIiop, sBuf)
    WriteData(sBuf, STRING_COMPLETE, OPT_WRITEDATA_HEX);
    IiopObjectRelease(hIiop);
  end TServiceContext;
親トピック: General Setting Functions Overview
関連資料
IiopSetServiceContext Function


IiopGetServiceContextList Function

Action

Reads off a list of service contexts that may have been added to the reply of an IIOP request. The contents of the list can be retrieved by using the IiopGet functions on the handle that has been returned.

A service context list is held globally for a CORBA object. This means that the service context list is sent unchanged with every IiopRequest function call, unless a new service context list is created, using the functions IiopBeginServiceContext, IiopEndServiceContext, IiopSetServiceContext or IiopDeleteServiceContextList.

However, if a service context list is defined for a callback object using the same functions, it is bound to a special operation defined by IiopObjectListen. Any time this operation is invoked by the server, Silk Performer returns the service context list along with the IIOP reply message.

Include file

IIOP.bdh

Syntax

IiopGetServiceContextList( in    hIiop   : number,
                           inout hSrvCtx : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
hSrvCtx | Handle to a parser object containing the service context.

Example

dcltrans
  transaction TServiceContext
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop   : number; // handle to CORBA object
    hSrvCtx : number; // handle to service context
    hEnc    : number; // handle to a parser object that contains an
    // encapsulation (IIOP data block)
    i          : number;
    nServCtxId : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // create service context
    IiopBeginServiceContext(hIiop, 1, IIOP_LITTLE_ENDIAN);
    IiopSetUlong(hIiop, 0x1010);
    IiopSetUlong(hIiop, 0x0110);
    IiopEndServiceContext(hIiop);

    // pass long value parameter to request
    IiopSetLong(hIiop, 593814064);
    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    IiopGetServiceContextList(hIiop, hSrvCtx);

    for i := 1 to IiopGetLong(hSrvCtx);
      IiopGetLong(hSrvCtx, nServCtxId);
      IiopGetEncapsulation(hSrvCtx, hEnc);
      if nServCtxId = 0 then
        IiopGetLong(hEnc);
        ...
      end;
    end;

    ...
    IiopParserRelease(hSrvCtx);
    IiopParserRelease(hEnc);
    IiopObjectRelease(hIiop);
  end TServiceContext;
親トピック: General Setting Functions Overview
関連資料
IiopBeginServiceContext Function
IiopEndServiceContext Function


IiopGetEncapsulation Function

Action

Reveals the content of an encapsulation as defined in the CORBA specification. Encapsulations are, for example, used within service contexts and the function is a handy way to work inside an encapsulation.

Include file

IIOP.bdh

Syntax

IiopGetEncapsulation( in    hParserIn  : number,
                      inout hParserOut : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hParserIn | A handle to a parser, which may also be a CORBA object, from which the encapsulation is read.
hParserOut | A handle that can subsequently be used to inspect the contents of the encapsulation by using the IiopGet functions.

Example

dcltrans
  transaction TServiceContext
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop   : number; // handle to CORBA object
    hSrvCtx : number; // handle to service context
    hEnc    : number; // handle to a parser object containing an
    // encapsulation (IIOP data block);
    i          : number;
    nServCtxId : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

     // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // create service context
    IiopBeginServiceContext(hIiop, 1, IIOP_LITTLE_ENDIAN);
    IiopSetUlong(hIiop, 0x1010);
    IiopSetUlong(hIiop, 0x0110);
    IiopEndServiceContext(hIiop);

    // pass long value parameter to request
    IiopSetLong(hIiop, 593814064);
    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    IiopGetServiceContextList(hIiop, hSrvCtx);

    for i := 1 to IiopGetLong(hSrvCtx);
      IiopGetLong(hSrvCtx, nServCtxId);
      IiopGetEncapsulation(hSrvCtx, hEnc);
      if nServCtxId = 0 then
        IiopGetLong(hEnc);
        ...
      end;
    end;

    ...
    IiopParserRelease(hSrvCtx);
    IiopParserRelease(hEnc);
    IiopObjectRelease(hIiop);
  end TServiceContext;
親トピック: General Setting Functions Overview


IiopSetAddressingMode Function

Action

Sets the default addressing mode or specifies an addressing mode for a particular object.

Include file

Iiop.bdh

Syntax

IiopSetAddressingMode( in hIiop : number,
                       in nMode : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nMode

Addressing mode. Must be one of:

  • IIOP_ADDR_KEY. The target address is specified by the key. This is the default addressing mode.

  • IIOP_ADDR_PROFILE. The target address is specified by a profile (part of an IOR). This addressing mode is needed, for example, for traversing firewalls.

  • IIOP_ADDR_REFERENCE. The target address is specified by an IOR.

Example

dcltrans
  transaction TAddressingMode
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopSetAddressingMode(0, IIOP_ADDR_KEY); // set default addressing mode

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
    IiopSetAddressingMode(hIiop, IIOP_ADDR_PROFILE); // set addressing mode for hIiop
     // the IIOP request message resulting from the following IiopRequest call
    // will contain a profile as target address information.
    IiopRequest(hIiop, "ARequest");
    IiopObjectRelease(hIiop);
  end TAddressingMode;
親トピック: General Setting Functions Overview


IiopSetFragmentSize Function

Action

Sets the default fragmentation limit for any object, or specifies a fragmentation limit for a particular object. If the length of an IIOP request/reply message exceeds this limit it is fragmented (broken into parts).

Include file

Iiop.bdh

Syntax

IiopSetFragmentSize( in hIiop : number,
                     in nSize : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nSize | Fragmentation size; if zero, IIOP messages will not be fragmented.

Example

dcltrans
  transaction TFragmentSize
  var
    sBuf  : string(1024);
    nUsed : number;
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopSetFragmentSize(0, 0); // set default: no fragmentation

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
    IiopSetFragmentSize(hIiop, 2048); // set fragment size of hIiop message
    IiopSetBinaryFromFile(hIiop, "very_large_file.dat");

    // the IIOP request message resulting from the following IiopRequest call
    // will be split into several messages, each 2048 bytes long.
    IiopRequest(hIiop, "AFragmentedRequest");
    IiopObjectRelease(hIiop);
  end TFragmentSize;
親トピック: General Setting Functions Overview


IiopSetWCharType Function

Action

Determines how Silk Performer interprets wide characters. By default, wide characters as regarded to be Unicode.

Include file

IIOP.bdh

Syntax

IiopSetWCharType( in nCharType : number,
                  in nCharSize : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nCharType

Determines the type of wide characters. This parameter can be one or more of the following:

  • IIOP_BYTE_ORIENTED. Wide characters are of different size and bytes are not swapped for transmission.

  • IIOP_WIDE_LITTLE_ENDIAN. Wide characters are of fixed size and are represented in little-endian byte order. Bytes are swapped depending on the byte order used for transmission.

  • IIOP_WIDE_BIG_ENDIAN. Wide characters are of fixed size and are represented in big-endian byte order. Bytes are swapped depending on the byte order used for transmission.

  • IIOP_WIDE_NO_LENGTH_ENCODED. With IIOP 1.2 the wchar encoding contains a length indication. When this flag is used, wchars are encoded without the length encoding.

  • IOP_WIDE_NULL_TERMINATED. With IIOP 1.2 wstrings are not null-terminated. When this setting is used, wstrings are null-terminated as in prior IIOP versions.

  • IIOP_WIDE_LENGTH_IN_WCHAR. With IIOP 1.2 the length of a wstring is measured in bytes (chars). When this setting is used, the length of a wstring is counted in wchars as in prior IIOP versions.

  • IIOP_WIDE_BYTE_ORIENTED. The same as IIOP_BYTE_ORIENTED.
nCharSize | Specifies the size of a wide character for the character types IIOP_WIDE_LITTLE_ENDIAN and IIOP_WIDE_BIG_ENDIAN (optional). The size must be 1, 2, or 4.

Example

var
  hIiop: number;

dcltrans
  transaction TMain
  begin
    // use the big endian representation
    IiopSetWCharType(IIOP_WIDE_BIG_ENDIAN, 2);
    IiopSetWString(hIiop, "\x004d00610072006b00750073", 12);
    // use the little endian representation
    IiopSetWCharType(IIOP_WIDE_LITTLE_ENDIAN, 2);
    IiopSetWString(hIiop, "\x4d00610072006b0075007300", 12);
    // alternatively, use the IiopSetString function
    IiopSetString(hIiop, "Markus", IIOP_USE_WCHAR);
  end TMain;
親トピック: General Setting Functions Overview


IiopSetMaxChunkSize Function

Action

Sets the maximum size of value type chunks. Chunked encoding may be used with value types only.

Include file

Iiop.bdh

Syntax

IiopSetMaxChunkSize( in nSize : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nSize | Maximum size of a chunk used for chunked value state encoding.

Example

dcltrans
  transaction TMaxChunkSize
  const
   HOST           := "192.168.20.21"; // server
    PORT           := 1052;           // port
    KEY            := "...\h00";      // key
    KEYLEN         := 4;              // key length
  var
    sBuf   : string(1024);
    nUsed  : number;
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopSetMaxChunkSize(2096); // set maximum chunk size

     // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

     // set value
    IiopSetValue(hIiop, REP_ID);
    IiopSetLong(hIiop, 5);
    IiopEndValue(hIiop);

     // set another value
    IiopSetValue(hIiop, REP_ID_LIST, CODE_BASE, TRUE);  // value is being chunked encoded

    for i := 1 to 10000
      IiopSetLong(hIiop, i);
      IiopSetBoolean(hIiop, TRUE);
      IiopSetString(hIiop, "This is a string");
    end;

     IiopEndValue(hIiop);

     // call request "SetValue"
    // the IIOP request message resulting from the following IiopRequest call
    // contains a value whose state members are chunked into several 2096 byte chunks.
    IiopRequest(hIiop, "SetValue");
    IiopObjectRelease(hIiop);
  end TMaxChunkSize;
親トピック: General Setting Functions Overview


IiopSetFirewall Function

Action

Sets the default or an object's firewall handling mode.

Include file

Iiop.bdh

Syntax

IiopSetFirewall( in hIiop : number,                 in nMode : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nMode

Addressing mode. Must be one of:

  • IIOP_FIREWALL_IGNORE. Firewall information of IORs (if present) is ignored.

  • IIOP_FIREWALL_USE_ALWAYS. Firewall information of IORs (if present) is used to connect to a remote object.

Example

dcltrans
  transaction TFirewallMode
  begin
    // general settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopSetFirewall(0, IIOP_FIREWALL_USE_ALWAYS); // set default

     // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
    IiopSetFirewall(hIiop, IIOP_FIREWALL_IGNORE);
    IiopRequest(hIiop, "ARequest");
    IiopObjectRelease(hIiop);
  end TFirewallMode;
親トピック: General Setting Functions Overview


IiopRegisterValueType Function

Action

Registers a value typecode in order to be able to parse IIOP reply messages that contain non-chunked derived value types.

Include file

Iiop.bdh

Syntax

IiopRegisterValueType( in sValueTc : string,
                       in nTcLen   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sValueTc | Value typecode that is to be registered.
nTcLen | Length of the value typecode (optional).

Example

dcltrans
  transaction TInit
  const
    csTypecode := "\h0000001D000000C20000000000000038524D49"
      "\h3A6A6176612E6C616E672E496E74656765723A363444343743"
      "\h314430313938304235453A3132453241304134463738313837"
      "\h380000000008496E746567657200000000000000001D000000"
      "\h33580000000000000036524D493A6A6176612E6C616E672E4E"
      "\h756D6265723A3731444138424537463937313132383A383641"
      "\h43393531443042393445303842000000000000074E756D6265"
      "\h72000000020000000000000000000000h00000100000001000"
      "\h000000000003000000";
  begin
    IiopRegisterValueType(csTypecode);
  end TInit;
親トピック: General Setting Functions Overview


IiopSetShutdownMode Function

Action

Specifies the shutdown behaviour of connections for the IIOP load engine. The user can choose between the graceful method and the hard reset.

Include file

IIOP.bdh

Syntax

IiopSetShutdownMode( in eShutdownMode : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
eShutdownMode

Specifies the shutdown behaviour of connections. Valid options are:

  • IIOP_SHUTDOWN_RESET

  • IIOP_SHUTDOWN_GRACEFUL (Default)

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21";   // server
    PORT   := 1052;              // port
    KEY    := "...\h00";         // key
    KEYLEN := 4;                 // key length
  var
    hIiop : number;   // handle to a CORBA object
    nSum  : number;
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopSetShutdownMode(IIOP_SHUTDOWN_RESET);

    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    IiopRequest(hIiop, "Print", IIOP_ONEWAY | IIOP_ADDR_PROFILE);
    IiopObjectRelease(hIiop); // connection is reset
  end TMain;

親トピック: General Setting Functions Overview


Bootstrapping Functions

Usually, different proceeding depending on the ORB are necessary to locate the initial CORBA object. So several function calls at the begin of a script are required to receive a handle to the desired object.

To simplify this procedure, Silk Performer provides a number of functions for bootstrapping and locating CORBA objects.

Bea WLE/M3-specific bootstrapping functions

  • IiopBeaFactoryBind

  • IiopBeaServiceBind

OrbixWeb-specific bootstrapping functions

  • IiopOrbixDaemonBind

  • IiopOrbixPing

  • IiopOrbixServerBind

VisiBroker-specific bootstrapping functions

  • IiopVbServerBind

  • IiopVbrokerServerBind

General Bootstrapping Functions

  • IiopObjectByIor

  • IiopBeaFactoryBind Function
    Retrieves a handle to a factory object, for example, to the FactoryFinder object in Weblogic Enterprise (WLE).
  • IiopBeaServiceBind Function
    Retrieves a handle to a service object, for example, the FactoryFinder object in Weblogic Enterprise (WLE).
  • IiopOrbixDaemonBind Function
    Retrieves a handle to the Orbix daemon.
  • IiopOrbixPing Function
    Sends the _IT_PING request to an object.
  • IiopOrbixServerBind Function
    Uses the Orbix daemon to retrieve a handle to a specified CORBA object.
  • IiopVbServerBind Function
    Performs a UDP broadcast to locate a VisiBroker SmartAgent.
  • IiopVbrokerServerBind Function
親トピック: CORBA Functions Reference


IiopBeaFactoryBind Function

Action

Retrieves a handle to a factory object, for example, to the FactoryFinder object in Weblogic Enterprise (WLE).

Include file

IIOP.bdh

Syntax

IiopBeaFactoryBind( in hFF     : number;
                    in sIFName : string ): number;

Return value

  • Handle to factory object if successful

  • 0 if an error occurred

Parameter | Description
hFF | Handle to FactoryFinder object
sIFName | Name of the factory to be located. This is supposed to be the interface repository string "IDL:<factoryname>:1.0"

Example

dcltrans
  transaction TBeaServiceBind
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052; // port
  var
    hFactFinder : number; // handle to FactoryFinder
    hFact       : number; // handle to a factory object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to service object
    hFactFinder := IiopBeaServiceBind(HOST, PORT, "FactoryFinder");
    hFact := IiopBeaFactoryBind(hFactFinder, "IDL:SomeFactory:1.0");

    // release objects
    IiopObjectRelease(hFactFinder);
    IiopObjectRelease(hFact);
  end TBeaServiceBind;

Sample scripts

UnivB.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Bootstrapping Functions
関連資料
IiopBeaServiceBind Function


IiopBeaServiceBind Function

Action

Retrieves a handle to a service object, for example, the FactoryFinder object in Weblogic Enterprise (WLE).

Include file

IIOP.bdh

Syntax

IiopBeaServiceBind( in sHost    : string;
                    in nPort    : number;
                    in sService : string ): number;

Return value

  • Handle to service object if successful

  • 0 if an error occurred

Parameter | Description
sHost | Host name where WLE/M3 is running
nPort | Port where WLE/M3 is listening
sService | Service name

Example

dcltrans
  transaction TBeaServiceBind
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052; // port
  var
    hFactFinder : number; // handle to FactoryFinder object
    hFact       : number; // handle to a factory object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to service object
    hFactFinder := IiopBeaServiceBind(HOST, PORT, "FactoryFinder");
    hFact := IiopBeaFactoryBind(hFactFinder, "IDL:SomeFactory:1.0");

    // release objects
    IiopObjectRelease(hFactFinder);
    IiopObjectRelease(hFact);
  end TBeaServiceBind;

Sample scripts

UnivB.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Bootstrapping Functions
関連資料
IiopBeaFactoryBind Function


IiopOrbixDaemonBind Function

Action

Retrieves a handle to the Orbix daemon. This function can be used to get the initial CORBA object, consequently it simplifies Orbix/OrbixWeb-specific bootstrapping.

Include file

IIOP.bdh

Syntax

IiopOrbixDaemonBind( in sHost : string,                     in nPort : number ): number;

Return value

  • Handle to the OrbixWeb daemon if successful

  • 0 if an error occurred

Parameter | Description
sHost | Orbix host
nPort | Orbix port number, OrbixWeb default port number is 1571

Example

dcltrans
  transaction TMain
  const
    ORBIX_HOST := "192.168.20.55"; // Orbix host
    ORBIX_PORT := 1571; // default Orbix port
  var
    hDaemon, hBank: number;
  begin
    // global settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_LITTLE_ENDIAN);
    IiopSetPrincipal("principal", Strlen("principal")+1);

    // OrbixWeb bootstrapping
    hDaemon := IiopOrbixDaemonBind(ORBIX_HOST, ORBIX_PORT);

    // get object reference handle to bank object
    hBank := IiopOrbixServerBind(hDaemon, ORBIX_HOST,
                                 "bank", "","bank");

    // release objects
    IiopObjectRelease(hDaemon);
    IiopObjectRelease(hBank);
  end TMain;

Sample scripts

AnyDemo.bdf, AsyncBank.bdf, Bank.bdf, Callback.bdf, SimpleAsyncBank.bdf, TypeTest.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Bootstrapping Functions
関連資料
IiopOrbixPing Function
IiopOrbixServerBind Function


IiopOrbixPing Function

Action

Sends the _IT_PING request to an object.

Include file

IIOP.bdh

Syntax

IiopOrbixPing( in hIiop : number ): number;

Return value

  • Handle to the OrbixWeb object if successful

  • 0 if an error occurred

Parameter | Description
hIiop | Handle to a CORBA object. The corresponding object structure has to contain a dummy key that enables the Orbix daemon locating the object

Example

dcltrans
  transaction TMain
  const
    ORBIX_HOST := "192.168.20.55"; // Orbix host
    ORBIX_PORT := 1571;            // default Orbix port
  var
    hDaemon, hObject: number;
  begin
    // global settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_LITTLE_ENDIAN);
    IiopSetPrincipal("principal", Strlen("principal")+1);

    // OrbixWeb bootstrapping
    hDaemon := IiopOrbixDaemonBind(ORBIX_HOST, ORBIX_PORT);

    // send _IT_PINg request to Orbix daemon
    hObject := IiopOrbixPing(hDaemon);

    // release objects
    IiopObjectRelease(hDaemon);
    IiopObjectRelease(hObject);
end TMain;
親トピック: Bootstrapping Functions
関連資料
IiopOrbixDaemonBind Function
IiopOrbixServerBind Function


IiopOrbixServerBind Function

Action

Uses the Orbix daemon to retrieve a handle to a specified CORBA object. This function requests the getIIOPDetails operation provided by the Orbix daemon to get the IOR, and establishes an object handle used to reference to the object.

Include file

IIOP.bdh

Syntax

IiopOrbixServerBind( in hDaemon  : number,
                     in sHost    : string,
                     in sServer  : string,
                     in sMarker  : string,
                     in sIfrName : string ) : number;

Return value

  • Handle to the OrbixWeb object if successful

  • 0 if an error occurred

Parameter | Description
hDaemon | Handle to the Orbix daemon
sHost | Orbix host
sServer | Server name
sMarker | Marker name of the object. If NULL, any OrbixWeb object will match
sIfrName | Interface Repository name of the object. Pass only the object name to the function, neither the "IDL:" prefix, nor the "1.2" suffix

Example

dcltrans
  transaction TMain
  const
    ORBIX_HOST := "192.168.20.55"; // Orbix host
    ORBIX_PORT := 1571; // default Orbix port
  var
    hDaemon, hBank: number;
  begin
    // global settings
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_LITTLE_ENDIAN);
    IiopSetPrincipal("principal", Strlen("principal")+1);
    // OrbixWeb bootstrapping
    hDaemon := IiopOrbixDaemonBind(ORBIX_HOST, ORBIX_PORT);
    // get object reference handle to bank object
    hBank := IiopOrbixServerBind(hDaemon, ORBIX_HOST,
                                 "bank", "", "bank");

    // release objects
    IiopObjectRelease(hDaemon);
    IiopObjectRelease(hBank);
  end TMain;

Sample scripts

AnyDemo.bdf, AsyncBank.bdf, Bank.bdf, Callback.bdf, SimpleAsyncBank.bdf, TypeTest.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Bootstrapping Functions
関連資料
IiopOrbixDaemonBind Function
IiopOrbixPing Function


IiopVbServerBind Function

Action

Performs a UDP broadcast to locate a VisiBroker SmartAgent. When a SmartAgent is located, the function queries it for an object reference. Since a non-standard protocol is used to locate SmartAgents, the way that Silk Performer retrieves object references differs from the way that real VisiBroker clients behave.

Include file

IIOP.bdh

Syntax

IiopVbServerBind( inout hIiop       : number,
                  in    sInterface  : string,
                  in    sObjectName : string optional,
                  in    nPort       : number optional,
                  in    sHost       : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Variable that receives the handle of the CORBA object.
sInterface | Repository ID of the object to be located.
sObjectName | Name of the object to be located (optional). When this parameter is omitted, the function returns any object that has a matching interface.
nPort | The port number where SmartAgent listens (optional). The default value is 14000.
sHost | The host name where SmartAgent (osagent.exe) runs. When this parameter is specified, no broadcast is made, however the host is contacted directly (optional).

Example

dcltrans
  transaction TMain
  var
    hBankManager : number;
    hAccount     : number;
    fBalance     : float;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopVbServerBind(hBankManager, "IDL:Bank/AccountManager:1.0", "Bank Manager");

    // open account
    IiopSetString(hBankManager, "Jack B. Quick");
    IiopRequest(hBankManager, "open", IIOP_RESPONSE_EXPECTED);

    // release IIOP object
    IiopObjectRelease(hBankManager);
  end TMain;

Sample scripts

AsyncFact.bdf, AsyncOdb.bdf, Conf.bdf, DynAny.bdf, Factory.bdf, Odb.bdf, Vbrokerbank01.bdf, Vbrokerbank02.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Bootstrapping Functions
関連資料
IiopVbrokerServerBind Function


IiopVbrokerServerBind Function

Action

Uses the VisiBroker Gatekeeper to retrieve a handle to a specified VisiBroker object.

Include file

IIOP.bdh

Syntax

IiopVbrokerServerBind(in hGatekeeper : number,
in sName : string,
in sServer : string): number;

Return value

  • Handle to the object if successful

  • 0 if an error occurred

Parameter | Description
hGatekeeper | Handle to the VisiBroker Gatekeeper
sName | Interface Repository name of the object
sServer | Server name

Sample scripts

VBrokerBankGate.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Bootstrapping Functions
関連資料
IiopVbServerBind Function


Basic CORBA Functions

  • IiopObjectByIor Function
    Establishes an object handle that is used in all CORBA functions in a Silk Performer script to reference to CORBA objects.
  • IiopObjectCreate Function
    Creates a handle to an CORBA object.
  • IiopObjectConnect Function
    Establishes a connection to a specified CORBA object.
  • IiopObjectListen Function
    Sets up a callback to listen for incoming requests.
  • IiopObjectGetHost Function
    Retrieves the IP address of the host where a specified CORBA object is located.
  • IiopObjectGetPort Function
    Retrieves the port number used to access a specified CORBA object.
  • IiopObjectGetKey Function
    Retrieves the key used to identify a specified CORBA object.
  • IiopObjectGetInterface Function
    Retrieves the repository id of an object's interface.
  • IiopObjectGetProfile Function
    Retrieves an IIOP profile from an IOR. IIOP profiles are used to identify individual objects accessible through IIOP.
  • IiopObjectGetComponent Function
    Retrieves a component from an Internet profile of an IOR.
  • IiopObjectSetPort Function
    Sets the port number used to access a specified CORBA object.
  • IiopObjectSetInterface Function
    Defines the interface of an object. The interface will be part of the IOR whenever the object is passed to a function as a parameter.
  • IiopObjectSetProfile Function
    Appends or replaces a profile in an IOR. If the specified profile exists, the component is replaced.
  • IiopObjectSetComponent Function
    Appends or replaces an component of an IOR.
  • IiopObjectSetIiopProfile Function
    Appends or replaces an Internet profile in an IOR.
  • IiopObjectDuplicate Function
    Duplicates a CORBA object handle.
  • IiopLocateRequest Function
  • IiopEndValue Function
    Marks the end of a value type parameter that is associated with a CORBA object.
  • IiopRequest Function
    Sends an IIOP Request Message.
  • IiopWaitForReply Function
    Waits for a reply of a specific request.
  • IiopParserRelease Function
    Releases a CORBA parser object and frees all resources.
  • IiopObjectRelease Function
    Releases a CORBA object and frees all resources.
  • IiopObjectShutdown Function
    Closes a connection to a specified CORBA object.
  • IiopObjectSetSsl Function
    Specifies to access a given CORBA object using the Secure Socket Layer protocol.
  • IiopObjectSetBidirectional Function
    Prepares a connection to a remote object in order to receive callbacks for a local object.
親トピック: CORBA Functions Reference


IiopObjectByIor Function

Action

Establishes an object handle that is used in all CORBA functions in a Silk Performer script to reference to CORBA objects.

Include file

IIOP.bdh

Syntax

IiopObjectByIor( inout hIiop   : number,
                 in  sIor      : string,
                 in  nIorLen   : number optional ):boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Variable receiving a handle to the CORBA object
sIor

IOR identifying the CORBA object. The following formats are valid:

binary: "\h1100000049444c3a5479706554657374" "\h3a312e30000000000100000000000000" "\h5e000000010102000f0000003139322e" "\h3136382e32302e3132390000270f0000" "\h1b0000003a3e0231310c000000004a02" "\h00002900000008000000000000000000" "\h02000000000000000800000001000000" "\h415f5449060000000600000001000000" "\h1100"

stringified: "IOR:010000001100000049444c3a5479706554657374" "3a312e300000000001000000000000005e0000000101" "02000f0000003139322e3136382e32302e3132390000" "270f00001b0000003a3e0231310c000000004a020000" "29000000080000000000000000000200000000000000" "0800000001000000415f544906000000060000000100" "00001100"

URL: stored in a file: "FILE://c:/init.ior"
nIorLen | Length of sIor.

Example

dcltrans
  transaction TMain
  var
    hIiop: number;
  begin
    IiopObjectByIor(hIiop, "HTTP://www.inprise.com:15000/gatekeeper.ior");
    ...
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Basic CORBA Functions
関連資料
IiopObjectRelease Function
IiopObjectCreate Function


IiopObjectCreate Function

Action

Creates a handle to an CORBA object. In addition to the host, port and key of the object the function enables you to specify the CORBA interface and the IIOP version that is used to communicate with the object.

Include file

IIOP.bdh

Syntax

IiopObjectCreate( inout hIiop      : number,
                  in    sInterface : string,
                  in    sVersion   : string,
                  in    sHost      : string allownull,
                  in    nPort      : number,
                  in    sKey       : string,
                  in    nKeyLen    : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Variable receiving the handle to the CORBA object.
sInterface | Repository identification of the CORBA object interface.
sVersion | IIOP version the application uses, currently “1.0”, “1.1” or “1.2”.
sHost | Host name or IP address of the host where the CORBA object has been deployed.
nPort | Port on which the CORBA object is listening for incoming connections.
sKey | Key identifying the CORBA object.
nKeyLen | Length of the key that identifies the CORBA object (optional).

Example

var
  hIiop: number;

dcltrans
  transaction TMain
  begin
    IiopObjectCreate(hIiop, "IDL:Bank/AccountManager:1.0", "1.2",
      "MyComputer", 1234,
      "\h01504D43000000001C00000049444C3A" // ·PMC········IDL: 00000000
      "\h42616E6B2F4163636F756E744D616E61" // Bank/AccountMana 00000010
      "\h6765723A312E30000D00000042616E6B" // ger:1.0·····Bank 00000020
      "\h204D616E6167657200");             // Manager· 00000030
    IiopLocateRequest(hIiop);
    IiopSetString(hIiop, "Johnny"); // name
    IiopRequest(hIiop, "open");
  end TMain;
親トピック: Basic CORBA Functions
関連資料
IiopObjectRelease Function
IiopObjectByIor Function


IiopObjectConnect Function

Action

Establishes a connection to a specified CORBA object. Since the IiopRequest function automatically opens a connection to the corresponding object, calling this function is necessary only in individual cases, for example, to perform some specific bootstrapping procedures.

Include file

IIOP.bdh

Syntax

IiopObjectConnect(in hIiop: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object

Example

dcltrans
transaction TMain
const
HOST := "192.168.20.21"; // server
PORT := 1052; // port
KEY := "...\h00"; // key
KEYLEN := 4; // key length
var
hIiop: number; // handle to CORBA object
begin
IiopSetMaxGiopVersion("1.2");
IiopSetByteOrder(IIOP_BIG_ENDIAN);IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
IiopObjectConnect(hIiop);
...
IiopObjectShutdown(hIiop);
IiopObjectRelease(hIiop);
end TMain;
親トピック: Basic CORBA Functions
関連資料
IiopObjectShutdown Function


IiopObjectListen Function

Action

Sets up a callback to listen for incoming requests. Such requests are answered with a reply containing the parameters set on the object handle before calling the IiopObjectListen function. This function must be called for each operation that is supposed to be answered.

Optionally the callback can be re-routed to a native function exported by a so-called IIOP extension dll.

Include file

IIOP.bdh

Syntax

IiopObjectListen( in hIiop      : number,
                  in sOperation : string,
                  in sDllName   : string optional,
                  in sDllFunc   : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sOperation | Name of operation to be answered.
sDllName | Name of the callback extension dll (optional).
sDllFunc | Name of the native function that is called whenever a callback occurs (optional).

Example

const
  LOCALHOST := "192.55.21.188";
  DAEMONPORT := 1570;
  REMOTEHOST := "192.55.21.192";
var
  ghDaemon, ghRemoteServer, ghCallback: number;

dcltrans
  transaction TMain
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    ghDaemon       := IiopOrbixDaemonBind(LOCALHOST, DAEMONPORT);
    ghRemoteServer := IiopOrbixServerBind(ghDaemon, REMOTEHOST, "remote", "", "remote");

   // set up callback object
    IiopObjectCreate(ghCallback, "IDL:DemoObject:1.0", "1.2", LOCALHOST, 0,
      "\h3A5C6D69746368656C6C2E7365677565"
      "\h6175743A2D3838393233363930343A30"
      "\h3A3A4946523A6C6F63616C00");
    IiopObjectSetInterface(ghCallback, "IDL:local:1.0");
    IiopObjectListen(ghCallback, "callback_func");
    IiopSetObject(ghRemoteServer, ghCallback);
    IiopRequest(ghRemoteServer, "func", IIOP_ONEWAY);
    // enable the user to answer callbacks.
    wait(20.0);
    IiopObjectRelease(ghRemoteServer);
    IiopObjectRelease(ghCallback);
  end TMain;

Sample scripts

Callback.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Basic CORBA Functions


IiopObjectGetHost Function

Action

Retrieves the IP address of the host where a specified CORBA object is located.

Include file

IIOP.bdh

Syntax

IiopObjectGetHost( in  hIiop     : number,
                   out sHost     : string,
                   in  nHostSize : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sHost | String receiving the IP address of the host where the CORBA object is located.
nHostSize | Size of the string receiving the IP address (optional).

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop, nPort            : number;
    sHost, sKey, sInterface : string;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // retrieve information about object
    IiopObjectGetHost(hIiop, sHost);
    nPort := IiopObjectGetPort(hIiop);
    IiopObjectGetKey(hIiop, sKey);
    IiopObjectGetInterface(hIiop, sInterface);
    IiopObjectRelease(hIiop);
  end TMain;

Sample scripts

AnyDemo.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Basic CORBA Functions
関連資料
IiopObjectSetPort Function
IiopObjectGetPort Function
IiopObjectGetKey Function
IiopObjectGetInterface Function


IiopObjectGetPort Function

Action

Retrieves the port number used to access a specified CORBA object.

Include file

IIOP.bdh

Syntax

IiopObjectGetPort( in hIiop: number ): number;

Return value

Port number used to access the specified CORBA object

Parameter | Description
hIiop | Handle to a CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop, nPort            : number;
    sHost, sKey, sInterface : string;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // retrieve information about object
    IiopObjectGetHost(hIiop, sHost);
    nPort := IiopObjectGetPort(hIiop);
    IiopObjectGetKey(hIiop, sKey);
    IiopObjectGetInterface(hIiop, sInterface);
     IiopObjectRelease(hIiop);
  end TMain;

Sample scripts

AnyDemo.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Basic CORBA Functions
関連資料
IiopObjectSetPort Function
IiopObjectGetHost Function
IiopObjectGetKey Function
IiopObjectGetInterface Function


IiopObjectGetKey Function

Action

Retrieves the key used to identify a specified CORBA object.

Include file

IIOP.bdh

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sKey | Buffer receiving the key used to identify the specified CORBA object.
nKeySize | Size of the buffer receiving the key (optional).
nKeyLen | Variable receiving the actual size of the key (optional).

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop, nPort            : number;
    sHost, sKey, sInterface : string;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // retrieve information about object
    IiopObjectGetHost(hIiop, sHost);
    nPort := IiopObjectGetPort(hIiop);
    IiopObjectGetKey(hIiop, sKey);
    IiopObjectGetInterface(hIiop, sInterface);

    IiopObjectRelease(hIiop);
  end TMain;

Sample scripts

AnyDemo.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Basic CORBA Functions
関連資料
IiopObjectSetPort Function
IiopObjectGetHost Function
IiopObjectGetPort Function
IiopObjectGetInterface Function


IiopObjectGetInterface Function

Action

Retrieves the repository id of an object's interface.

Include file

IIOP.bdh

Syntax

IiopObjectGetInterface( in  hIiop      : number,
                        out sInterface : string,
                        in  nSize      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sInterface | String receiving the repository id of the specified object interface.
nSize | Size of the string receiving the object interface (optional).

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop, nPort            : number;
    sHost, sKey, sInterface : string;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // retrieve information about object
    IiopObjectGetHost(hIiop, sHost));
    nPort := IiopObjectGetPort(hIiop);
    IiopObjectGetKey(hIiop, sKey);
    IiopObjectGetInterface(hIiop, sInterface);
     IiopObjectRelease(hIiop);
  end TMain;
親トピック: Basic CORBA Functions
関連資料
IiopObjectSetPort Function
IiopObjectGetHost Function
IiopObjectGetPort Function
IiopObjectGetKey Function


IiopObjectGetProfile Function

Action

Retrieves an IIOP profile from an IOR. IIOP profiles are used to identify individual objects accessible through IIOP.

Include file

IIOP.bdh

Syntax

IiopObjectGetProfile( in  hIiop       : number,
                      in  nProfile    : number,
                      out nTag        : number,
                      out sData       : string,
                      in  nBufferSize : number optional,
                      out nLen        : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nProfile | Index of the profile. Set this parameter to IIOP_FIRST or IIOP_LAST for the first or the last profile, respectively. The index of the first profile is zero (0).
nTag | Number variable receiving the profile tag. Profile tags are described in the CORBA specification.
sData | Buffer receiving the profile data.
nBufferSize | Size of the buffer that receives the profile data in bytes (optional).
nLen | Variable receiving the amount of profile data (in bytes) that was copied into the buffer (optional).

Example

var
  hSSLBank, hCombined: number;

dcltrans
  transaction TMain
  var
    sData : string;
    nType : number;
  begin
    // create an empty object
    IiopObjectCreate(hCombined, "", "", "", 0, "", 0);

    // copy profile of bank object using SSL
    IiopObjectGetProfile(hSSLBank, IIOP_FIRST, nType, sData);
    IiopObjectSetProfile(hCombined, IIOP_NO_REPLACE, nType, sData);
    IiopSetString(hCombined, "James Smith");
    IiopRequest(hCombined, "open");
  end TMain;
親トピック: Basic CORBA Functions


IiopObjectGetComponent Function

Action

Retrieves a component from an Internet profile of an IOR.

Include file

IIOP.bdh

Syntax

IiopObjectGetComponent( in  hIiop       : number,
                        in  nProfile    : number,
                        in  nComponent  : number,
                        out nTag        : number,
                        out sData       : string,
                        in  nBufferSize : number optional,
                        out nLen        : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA Object.
nProfile | Index of the Internet profile. Set this parameter to IIOP_FIRST or IIOP_LAST for the first or the last profile, respectively. The index of the first profile is zero (0).
nComponent | Index of the component within the selected profile. Set this parameter to IIOP_FIRST or IIOP_LAST for the first or the last component, respectively. The index of the first component is zero (0).
nTag | Variable receiving the component tag. Component tags are described in the CORBA specification.
sData | Buffer receiving the component data.
nBufferSize | Size of the buffer that receives the component data in bytes (optional).
nLen | Variable receiving the amount of component data (in bytes) that is copied into the buffer (optional).

Example

var
  hSSLBank: number;

dcltrans
  transaction TMain
  var
    sData, sDataHex : string;
    nType, nLen : number;
  begin
    if IiopObjectGetComponent(hSSLBank, IIOP_FIRST, IIOP_FIRST, nType,
        sData, STRING_COMPLETE, nLen) and (nType = 20) then
      Bin2Hex(sData, nLen, sDataHex);
      writeln("hSSLBank contains an SSL tag: " + sDataHex);
    end;
  end TMain;
親トピック: Basic CORBA Functions


IiopObjectSetPort Function

Action

Sets the port number used to access a specified CORBA object.

Include file

IIOP.bdh

Syntax

IiopObjectSetPort( in hIiop : number,
                   in nPort : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nPort | New port number used to access the specified CORBA object

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // set new port number used to access object
    IiopObjectSetPort(hIiop, 1500);
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Basic CORBA Functions
関連資料
IiopObjectGetHost Function
IiopObjectGetPort Function
IiopObjectGetKey Function
IiopObjectGetInterface Function


IiopObjectSetInterface Function

Action

Defines the interface of an object. The interface will be part of the IOR whenever the object is passed to a function as a parameter.

Include file

IIOP.bdh

Syntax

IiopObjectSetInterface( in hIiop      : number,
                        in sInterface : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sInterface | Repository ID of the object's interface

Example

const
  LOCALHOST := "192.55.21.188";
  DAEMONPORT := 1570;
  REMOTEHOST := "192.55.21.192";
var
  ghDaemon, ghRemoteServer, ghCallback: number;
 dcltrans
  transaction TMain
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    ghDaemon       := IiopOrbixDaemonBind(LOCALHOST, DAEMONPORT);
    ghRemoteServer := IiopOrbixServerBind(ghDaemon,
                        REMOTEHOST, "remote", "","remote");

     // set up callback object
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", LOCALHOST,0,
                     "\h3A5C6D69746368656C6C2E7365677565"
                     "\h6175743A2D3838393233363930343A30"
                     "\h3A3A4946523A6C6F63616C00", 44);
    IiopObjectSetInterface(ghCallback, "IDL:local:1.0");
    IiopObjectListen(ghCallback, "callback_func");
    IiopSetObject(ghRemoteServer, ghCallback);
    IiopRequest(ghRemoteServer, "func",IIOP_ONEWAY);

    // enable the user to answer callbacks.
    wait(20.0);
    IiopObjectRelease(ghRemoteServer);
    IiopObjectRelease(ghCallback);
  end TMain;

Sample scripts

Callback.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Basic CORBA Functions
関連資料
IiopObjectSetSsl Function


IiopObjectSetProfile Function

Action

Appends or replaces a profile in an IOR. If the specified profile exists, the component is replaced. This can be suppressed by using the flag IIOP_NO_REPLACE. If a replacement is impossible because of an invalid profile index, the function appends the component to the list. This again can be suppressed with the flag IIOP_NO_APPEND.

Include file

IIOP.bdh

Syntax

IiopObjectSetProfile( in hIiop        : number,
                      in nProfile     : number,
                      in nProfileTag  : number,
                      in sProfileData : string,
                      in sProfileLen  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nProfile | Index of the profile. Set this parameter to IIOP_FIRST or IIOP_LAST for the first or the last profile, respectively. In addition, you can supply either the IIOP_NO_REPLACE or the IIOP_NO_APPEND flag. The index of the first profile is zero (0).
nProfileTag | Profile tag as described in the CORBA specification.
sProfileData | Profile data containing the byte order flag as described in the CORBA specification.
sProfileLen | Amount of profile data in bytes (optional).

Example

var
  hBank, hSSLBank, hCombined: number;
 dcltrans
  transaction TMain
  var
    sData : string;
    nType : number;
  begin
    // create an empty object
    IiopObjectCreate(hCombined, "", "", "", 0, "",0);
     // copy profile of bank object using SSL
    IiopObjectGetProfile(hSSLBank, IIOP_FIRST, nType, sData);
    IiopObjectSetProfile(hCombined, IIOP_NO_REPLACE, nType, sData);
     // copy profile of bank object
    IiopObjectGetProfile(hBank, IIOP_FIRST, nType, sData);
    IiopObjectSetProfile(hCombined, IIOP_NO_REPLACE, nType, sData);
    IiopSetString(hCombined, "James Smith");
    IiopRequest(hCombined, "open");
  end TMain;
親トピック: Basic CORBA Functions


IiopObjectSetComponent Function

Action

Appends or replaces an component of an IOR. If the specified component exists in the selected profile and the tag of the component matches, the component is replaced. This can be suppressed by using the flag IIOP_NO_REPLACE. If a replacement is impossible because the component does not exist, the function appends the component to the list within the profile. This again can be suppressed by the flag IIOP_NO_APPEND.

Include file

IIOP.bdh

Syntax

IiopObjectSetComponent( in hIiop      : number,
                        in nProfile   : number,
                        in nComponent : number,
                        in nTag       : number,
                        in sData      : string,
                        in nDataLen   : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA Object.
nProfile | Index of the Internet profile to change. Set this parameter to IIOP_FIRST or IIOP_LAST to change the first or the last profile, respectively. The index of the first profile is zero (0).
nComponent | Index of the component. Set this parameter to IIOP_FIRST or IIOP_LAST for the first or the last component, respectively. In addition, you can supply one either the IIOP_NO_REPLACE or the IIOP_NO_APPEND flag. The index of the first component is zero (0).
nTag | Component tag to set.
sData | Component data including the byte order flag.
nDataLen | Amount of component data in bytes (optional).

Example

const
  sAltHost := "192.168.20.20";
  nAltPort := 1033;

dcltrans
  transaction TMain
  var
    sData : string;
    nLen  : number;
  begin
    // set an alternate IIOP address in an Internet profile
    // compute the size of the component data
    nLen := (4 + 4 + (strlen(sAltHost)+1) + 1) & 0xfffffffe + 2;
    SetChar(sData, 1, 1); // choose little endian
    SetLong(sData, 5, strlen(sAltHost)+1);
 // size of hostname    SetString(sData, 9, sAltHost);
 // hostname    SetUShort(sData, nLen-1, nAltPort);

     // 0x3 is the tag for an alternate IIOP address.
    IiopObjectSetComponent(hIiop, IIOP_FIRST, IIOP_FIRST, 0x3, sData, nLen);
  end TMain;
親トピック: Basic CORBA Functions


IiopObjectSetIiopProfile Function

Action

Appends or replaces an Internet profile in an IOR. If the specified profile exists, the component is replaced. This can be suppressed by using the flag IIOP_NO_REPLACE. If a replacement is impossible because of an invalid profile index or because the selected profile is no Internet profile, the function appends the component to the list. This again can be suppressed by the flag IIOP_NO_APPEND.

Include file

IIOP.bdh

Syntax

IiopObjectSetIiopProfile( in hIiop    : number,
                          in nProfile : number,
                          in sVersion : string,
                          in sHost    : string,
                          in nPort    : number,
                          in sKey     : string,
                          in nKeyLen  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nProfile | Index of the profile. Set this parameter to IIOP_FIRST or IIOP_LAST for the first or the last profile, respectively. In addition, you can supply either the IIOP_NO_REPLACE or the IIOP_NO_APPEND flag. The index of the first profile is zero (0).
sVersion | IIOP version used to communicate with the CORBA object. Currently this parameter can be set to “1.0”, “1.1” or “1.2”.
sHost | Host name or IP address of the machine where the CORBA object is located.
nPort | Port on that the CORBA object is listening for incoming connections.
sKey | Unique key that identifies the CORBA object.
nKeyLen | Length of the key identifying the object in bytes (optional).

Example

var
  hSSLBank, hCombined: number;
 dcltrans
  transaction TMain
  var
    sData, sKey : string;
    nType       : number;
  begin
    // create an empty object
    IiopObjectCreate(hCombined, "", "", "", 0, "", 0);

    // copy profile of bank using SSL
    IiopObjectGetProfile(hSSLBank, IIOP_FIRST, nType, sData);
    IiopObjectSetProfile(hCombined, IIOP_NO_REPLACE, nType, sData);

    // append an internet profile for a bank object
    IiopObjectSetIiopProfile(hCombined, IIOP_NO_REPLACE, "1.2",
                               sHost, nPort, sKey);
    IiopSetString(hCombined, "James Smith");
    IiopRequest(hCombined, "open");
  end TMain;
親トピック: Basic CORBA Functions


IiopObjectDuplicate Function

Action

Duplicates a CORBA object handle. Since each handle is associated with a data structure, you need to call this function to copy an object handle.

Include file

IIOP.bdh

Syntax

IiopObjectDuplicate( in  hIiop : number,
                     out hCopy : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
hCopy | Variable receiving the copy of the CORBA object handle

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop, hCopy: number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
    // copy object handle
    IiopObjectDuplicate(hIiop, hCopy);
    IiopObjectRelease(hIiop);
    IiopObjectRelease(hCopy);
  end TMain;
親トピック: Basic CORBA Functions


IiopLocateRequest Function

Action

Sends an IIOP LocateRequest message, waits until the server sends a LocateReply message, and binds the BDL object handle to the new object key and host address of the received IOR.

Sends an IIOP LocateRequest message, waits until the server sends a LocateReply message, and binds the BDL object handle to the new object key and host address of the received IOR.

Include file

IIOP.bdh

Syntax

IiopLocateRequest( in hIiop  : number,
                   in nFlags : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nFlags

Specifies the location request message variant sent to the server (optional). Possible values are:

  • IIOP_IGNORE_EXCEPTION. Prevents the generation of error messages. This parameter may be combined with the following flag:

  • IIOP_IGNORE_FORWARDS. The request is not re-sent if a "location forward" or "needs addressing mode" response is received.

This parameter may be combined with one of the following flags:

  • IIOP_ADDR_KEY. The target address is specified by the key. This is the default addressing mode.

  • IIOP_ADDR_PROFILE. The target address is specified by a profile (part of an IOR). This addressing mode is needed, for example, for traversing firewalls.

  • IIOP_ADDR_REFERENCE. The target address is specified by an IOR.

This parameter may be combined with one of the following flags:

  • IIOP_USE_V10. The request is sent using IIOP 1.0 encoding (if possible).

  • IIOP_USE_V11. The request is sent using IIOP 1.1 encoding (if possible).

  • IIOP_USE_V12. The request is sent using IIOP 1.2 encoding (if possible).

Example

dcltrans
  transaction TLocateRequest
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number;
    // handle to CORBA object
    nSum : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
    IiopLocateRequest(hIiop);
    // call request "Print"
    IiopRequest(hIiop, "Print", IIOP_ADDR_REFERENCE | IIOP_USE_V12);
    IiopObjectRelease(hIiop);
  end TLocateRequest;
親トピック: Basic CORBA Functions
関連資料
IiopWaitForReply Function
IiopRequest Function


IiopEndValue Function

Action

Marks the end of a value type parameter that is associated with a CORBA object. This function can be used to set the parameters of a request in advance of calling the IiopRequest function.

Include file

Iiop.bdh

Syntax

IiopEndValue( in hIiop: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.

Example

dcltrans
  transaction TEndValue
  const
    HOST        := "192.168.20.21"; // server
    PORT        := 1052; // port
    KEY         := "...\h00"; // key
    KEYLEN      := 4; // key length
    REP_ID      := "IDL:SetValueType:1.0";
    REP_ID_LIST := " IDL:DerivedValue:1.0 IDL:BaseValue:1.0 IDL:AbstractValue:1.0";
    CODE_BASE   := "www.codebase.com";
 var
    hIiop : number;
    // Handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
     // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
     // set value    IiopSetValue(hIiop, REP_ID);
    IiopSetLong(hIiop, 5);
    IiopEndValue(hIiop );
    // set another value
    IiopSetValue(hIiop, REP_ID_LIST, CODE_BASE, TRUE);
    IiopSetBoolean(hIiop, TRUE);
    IiopSetLong(hIiop, 3);
    IiopSetValue(hIiop, REP_Id, "", TRUE);
    IiopSetLong(hIiop, 12);
    IiopEndValue(hIiop );
    IiopSetString(hIiop, "This is a string");
    IiopEndValue(hIiop );
    // call request "SetValue"
    IiopRequest(hIiop, "SetValue");
    IiopObjectRelease(hIiop);
  end TEndValue;
親トピック: Basic CORBA Functions
関連資料
IiopRequest Function


IiopRequest Function

Action

Sends an IIOP Request Message. Depending on the specified message type, it is possible to wait until this function receives an IIOP Reply Message from the server.

Include file

IIOP.bdh

Syntax

IiopRequest( in hIiop    : number,
             in sRequest : string,
             in nFlag    : number optional,
             in nId      : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sRequest | Name of the requested operation
nFlag

Specifies the request message variant sent to the server (optional). Possible values are:

  • IIOP_RESPONSE_EXPECTED. Waits for a response (default)

  • IIOP_SYSTEM_RESPONSE. A response from the server is expected, but the response does not necessarily contain application level data (ORB dependent).

  • IIOP_ONEWAY. No response from the server expected

  • IIOP_NON_BLOCKING. Indicates that the caller will not wait for an immediate reply. This flag can be used to generate asynchronous IIOP traffic

This parameter may be combined with the following flag:

  • IIOP_IGNORE_EXCEPTION. Prevents the generation of error messages.

This parameter may be combined with the following flag:

  • IIOP_IGNORE_FORWARDS. The request is not re-sent if a "location forward" or "needs addressing mode" response is received.

This parameter may be combined with one of the following flags:

  • IIOP_ADDR_KEY. The target address is specified by the key. This is the default addressing mode.

  • IIOP_ADDR_PROFILE. The target address is specified by a profile (part of an IOR). This addressing mode is needed, for example, for traversing firewalls.

  • IIOP_ADDR_REFERENCE. The target address is specified by an IOR.

This parameter may be combined with one of the following flags:

  • IIOP_USE_V10. The request is sent using IIOP 1.0 encoding (if possible).

  • IIOP_USE_V11. The request is sent using IIOP 1.1 encoding (if possible).

  • IIOP_USE_V12. The request is sent using IIOP 1.2 encoding (if possible).
nId

Identification number for this request (optional).

注: This parameter affects the function's behavior only if nFlag is set to IIOP_NON_BLOCKING.

If an identification number is associated with a request, the IiopWaitForReply function can be used to wait for a reply from the request. Exceptional cases:

  • 0. Return parameters will not be stored, consequently no reply data can be retrieved (default)

  • -1 is not allowed

Example

dcltrans
  transaction TRequest
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052; // port
    KEY := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number; // handle to a CORBA object
    nSum : number;
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                        HOST, PORT, KEY,KEYLEN);
    // call request "Print"
    IiopRequest(hIiop, "Print", IIOP_ONEWAY | IIOP_ADDR_PROFILE);
    IiopObjectRelease(hIiop);
  end TRequest;
親トピック: Basic CORBA Functions
関連資料
IiopWaitForReply Function
IiopLocateRequest Function


IiopWaitForReply Function

Action

Waits for a reply of a specific request. To enable waiting, an identification number has to be associated with the request. The identification number can be specified via an optional parameter of the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopWaitForReply( in hIiop : number,
                  in nId   : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nId

Identification number of the request to wait for. A reply from the specified request has to be received before the simulation continues

  • 0 Not allowed

  • IIOP_ALL_REPLIES Waits for all replies of the object

Example

dcltrans
  transaction TMain
  const
    ID_JIM := 1;
    // identification numbers
    ID_BOB := 2;
  var
    hBank, hJim, hBob: number;
  begin
    // retrieve handle to Bank/AccountManager
    ...
    // open an account for Jim
    IiopSetString(hBank, "Jim");
    IiopRequest(hBank, "open", IIOP_NON_BLOCKING, ID_JIM);
    // open an account for Bob
    IiopSetString(hBank, "Bob");
    IiopRequest(hBank, "open", IIOP_NON_BLOCKING, ID_BOB);
    // do anything else
    ...
    // wait until Jim's account has been opened
    IiopWaitForReply(hBank, ID_JIM);
    IiopGetObject(hBank, hJim);
    // wait until Bob's account has been opened
    IiopWaitForReply(hBank, ID_BOB);
    IiopGetObject(hBank, hBob);
    // release object
    IiopObjectRelease(hBank);
    IiopObjectRelease(hJim);
    IiopObjectRelease(hBob);
  end TMain;

Sample scripts

AsyncBank.bdf, SimpleAsyncBank.bdf, AsyncFact.bdf, AsyncOdb.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Basic CORBA Functions
関連資料
IiopLocateRequest Function
IiopRequest Function


IiopParserRelease Function

Action

Releases a CORBA parser object and frees all resources.

Include file

IIOP.bdh

Syntax

IiopParserRelease(inout hParser: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hParser | A handle to an IIOP parser object.

Example

dcltrans
  transaction TServiceContext
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052; // port
    KEY := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number;
    // handle to CORBA objecthSrvCtx : number;
    // handle to service contexti : number;nServCtxId : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",HOST, PORT, KEY, KEYLEN);
    // create service context
    IiopBeginServiceContext(hIiop, 1, IIOP_LITTLE_ENDIAN);
    IiopSetUlong(hIiop, 0x1010);
    IiopSetUlong(hIiop, 0x0110);
    IiopEndServiceContext(hIiop);

    // pass long value parameter to request
    IiopSetLong(hIiop, 593814064);

    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    IiopGetServiceContextList(hIiop, hSrvCtx);
    ...
    IiopParserRelease(hSrvCtx);
    IiopObjectRelease(hIiop);
  end TServiceContext;
親トピック: Basic CORBA Functions


IiopObjectRelease Function

Action

Releases a CORBA object and frees all resources.

注: CORBA objects are automatically released if the IiopObjectCreate function is called to bind a handle to another object.

Include file

IIOP.bdh

Syntax

IiopObjectRelease(inout hIiop: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object

Example

dcltrans
transaction TObjectRelease
const
HOST := "192.168.20.21"; // server
PORT := 1052; // port
KEY := "...\h00"; // key
KEYLEN := 4; // key length
var
hIiop : number;
// handle to a CORBA objectnSum : number;
begin
IiopSetMaxGiopVersion("1.2");IiopSetByteOrder(IIOP_BIG_ENDIAN);
// retrieve handle to server
IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",HOST, PORT, KEY, KEYLEN);
// call request "Print"
IiopRequest(hIiop, "Print", IIOP_ONEWAY);
IiopObjectRelease(hIiop);
end TObjectRelease;
親トピック: Basic CORBA Functions
関連資料
IiopObjectCreate Function
IiopObjectByIor Function


IiopObjectShutdown Function

Action

Closes a connection to a specified CORBA object. Since connections to the corresponding object are opened and close automatically, calling this function is necessary only in individual cases, for example, to perform some specific bootstrapping procedures.

Include file

IIOP.bdh

Syntax

IiopObjectShutdown(in hIiop: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object

Example

dcltrans
  transaction TMain
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052; // port
    KEY := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                                                       HOST, PORT, KEY, KEYLEN);
    IiopObjectConnect(hIiop);
    ...
    IiopObjectShutdown(hIiop);IiopObjectRelease(hIiop);
  end TMain;
親トピック: Basic CORBA Functions
関連資料
IiopObjectConnect Function


IiopObjectSetSsl Function

Action

Specifies to access a given CORBA object using the Secure Socket Layer protocol.

Include file

IIOP.bdh

Syntax

IiopObjectSetSsl(in hIiop      : number,
                 in nTargetSup : number,
                 in nTargetReq : number,
                 in nPort      : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nTargetSup | "AssociationOptions TargetSupports" as defined in Secure Socket Layer/CORBA Security. Although the value of this parameter is written to the IOR of the specified object, it does not affect the way the object is accessed. Use the SslSetEncryption and SslSetClientCert functions to specify security options
nTargetReq | "AssociationOptions TargetSupports" as defined in Secure Socket Layer/CORBA Security. Although the value of this parameter is written to the IOR of the specified object, it does not affect the way the object is accessed.
nPort | Number of the port the specified CORBA object listens to in order to be accessed over a secure connection

Example

var
ghIiop0: number;
dcltrans
transaction TMain
const
HOST := "192.168.20.21"; // server
PORT := 1052; // port
KEY := "...\h00"; // key
KEYLEN := 4; // key length
var
nSize : number;
bReturn : boolean;
begin
SslSetEncryption(3);
IiopSetMaxGiopVersion("1.2");
IiopSetByteOrder(IIOP_LITTLE_ENDIAN);
IiopObjectCreate(ghIiop0, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
IiopObjectSetSsl(ghIiop0, 0, 0, 2059);
IiopRequest(ghIiop0, "_non_existent");
IiopGetBoolean(ghIiop0);
...
end TMain;
親トピック: Basic CORBA Functions
関連資料
IiopObjectSetInterface Function


IiopObjectSetBidirectional Function

Action

Prepares a connection to a remote object in order to receive callbacks for a local object.

Include file

IIOP.bdh

Syntax

IiopObjectSetBidirectional( in hRemote : number,
                            in hLocal  : number,
                            in nFlags  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRemote | Remote CORBA object. The connection between the local and the remote object is prepared to receive bidirectional IIOP traffic.
hLocal | Local CORBA object. The connection between the local and the remote object is prepared to receive bidirectional IIOP traffic.
nFlags

Bidirectional connection flag (optional).

Pass the IIOP_NO_LISTEN flag to the function to prevent Silk Performer from preparing resources for incoming connects during a subsequent IiopObjectListen function call. Unless you specify this flag, Silk Performer accepts both incoming connects and bidirectional IIOP. When you pass this flag to the function, only bidirectional IIOP is accepted.

Pass the IIOP_USE_ORBIX_BIDIR_TAG flag to the function to modify the IOR of the callback object, in fact, for the Orbix ORB to use bidirectional IIOP when it tries to invoke the callback.

Example

var
  hRemote, hCallback: number;
 dcltrans
  transaction TMain
  begin
    // set up a callback object
    IiopObjectCreate(hCallback, "IDL:local:1.0" , "1.2",
                    "MyComputer", 0, "key");
    IiopObjectSetBidirectional(hRemote, hCallback,
                               IIOP_USE_ORBIX_BIDIR_TAG);
    IiopObjectListen(hCallback, "callback_func");
    // export the callback
    IiopSetObject(hRemote, hCallback);
    IiopRequest(hRemote, "func", IIOP_ONEWAY);
  end TMain;
親トピック: Basic CORBA Functions


Status Retrieving Functions

  • IiopGetReplyDataLen Function
    Retrieves the size of the reply associated with a CORBA object after an IiopRequest function call.
  • IiopGetReplyStatus Function
親トピック: CORBA Functions Reference


IiopGetReplyDataLen Function

Action

Retrieves the size of the reply associated with a CORBA object after an IiopRequest function call.

Include file

IIOP.bdh

Syntax

IiopGetReplyDataLen( in  hIiop    : number,
                     out nDataLen : number,
                     in  nAlign   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nDataLen | Variable receiving the size of the reply associated with a CORBA object
nAlign

Reply data alignment (optional). Possible options are:

  • IIOP_ALIGN_2. Alignment to 2-byte boundaries

  • IIOP_ALIGN_4. Alignment to 4-byte boundaries

  • IIOP_ALIGN_8. Alignment to 8-byte boundaries

  • IIOP_ALIGN_16. Alignment to 16-byte boundaries

Default setting is alignment to 1-byte boundaries.

Example

dcltrans
  transaction TGetReplyDataLen
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052;            // port
    KEY := "...\h00";        // key
    KEYLEN := 4;             // key length
  var
    hIiop : number; // handle to CORBA object
    nLen : number;
    sLower : string;
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
    HOST, PORT, KEY, KEYLEN);

   // call request "ToLower" with string parameter
    IiopSetString(hIiop, "CONVERT TO LOWERCASE");
    IiopRequest(hIiop, "ToLower");

    // retrieve length of return parameters
    IiopGetReplyDataLen(hIiop, nLen);
    write("length = "); write(nLen); writeln;

    // retrieve string return parameter
    IiopGetString(hIiop, sLower);
    write("converted string = "); write(sLower); writeln;
    IiopObjectRelease(hIiop);
  end TGetReplyDataLen;

Output

length = 21converted string = convert to lowercase
親トピック: Status Retrieving Functions
関連資料
IiopGetStatistics Function
IiopGetReplyStatus Function
IiopRequest Function


IiopGetReplyStatus Function

Action

Retrieves the reply status of the service previously requested, either IiopRequest or IiopLocateRequest.

Include file

IIOP.bdh

Syntax

IiopGetReplyStatus( in  hIiop   : number,
                    out nStatus : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nStatus

Variable receiving the reply status. Possible return values for IiopRequest are:

  • IIOP_NO_EXCEPTION: Request completed successfully

  • IIOP_USER_EXCEPTION: User exception occurred

  • IIOP_SYSTEM_EXCEPTION: System exception occurred

  • IIOP_ABORTED: Request aborted, for example, when a timeout occurs

  • IIOP_LOCATION_FWD_PERM: Object is located elsewhere

  • IIOP_NEEDS_ADDR_MODE: Further addressing information needed to locate object

Possible return values for IiopLocateRequest are:

  • IIOP_UNKNOWN_OBJECT: The object is not recognized

  • IIOP_OBJECT_HERE: Object is present

  • IIOP_OBJECT_FORWARD: Object is located elsewhere

  • IIOP_OBJECT_FWD_PERM: Object is permanently located elsewhere

  • IIOP_LOC_SYS_EXCEPTION: System exception occurred

  • IIOP_LOC_NEEDS_ADDR_MODE: Further addressing information needed to locate object

Example

dcltrans
  transaction TGetReplyStatus
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop   : number; // handle to CORBA object
    nStatus : number;
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Init"
    IiopRequest(hIiop, "Init");

     // retrieve status
    IiopGetReplyStatus(hIiop, nStatus);

    if nStatus = IIOP_NO_EXCEPTION then
      write("initialization completed successfully");
    else
      write("error during initialization");
    end;

    writeln;
    IiopObjectRelease(hIiop);
  end TGetReplyStatus;

Output

initialization completed successfully
親トピック: Status Retrieving Functions
関連資料
IiopGetStatistics Function
IiopGetReplyDataLen Function
IiopRequest Function


Parameter Setting and Getting Functions Overview

The following functions can be used to set the parameters and retrieve the return parameters of an operation in advance of calling the IiopRequest function. Each function call associates a specified parameter with a CORBA object or retrieves a return parameter after a request.

Some additional functions are provided to retrieve information about the status and the reply of a request.

  • IiopTypecodeCmp Function
    Checks whether two typecodes are equal.
  • Parameter Setting Functions
    Lists BDL functions for setting the parameters of an operation in advance of calling the IiopRequest function.
  • Parameter Getting Functions
    Lists BDL functions for retrieving the return parameters of an operation in advance of calling the IiopRequest function.
親トピック: CORBA Functions Reference


IiopTypecodeCmp Function

Action

Checks whether two typecodes are equal. Since typecodes defined in CORBA contain padding bytes that can be set to arbitrary values, you cannot determine the equality of two typecodes by using binary comparison.

Include file

IIOP.bdh

Syntax

IiopTypecodeCmp( in sTypecode1 : string,
                 in nTc1Len    : number,
                 in sTypecode2 : string,
                 in nTc2Len    : number optional ): boolean;

Return value

  • true if the typecodes are equal

  • false otherwise

Parameter | Description
sTypecode1 | Buffer containing the first typecode.
nTc1Len | Length of the first typecode.
sTypecode2 | Buffer containing the second typecode.
nTc2Len | Length of the second typecode (optional).
親トピック: Parameter Setting and Getting Functions Overview


Parameter Setting Functions

  • IiopSetAnyAsBoolean Function
    Assigns a boolean value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsChar Function
    Assigns a character to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsDouble Function
    Assigns a double value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsFloat Function
    Assigns a floating-point value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsLLong Function
    Assigns an 8-byte long value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsLong Function
    Assigns a long value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsObject Function
    Assigns an object to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsOctet Function
    Assigns an octet to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsShort Function
    Assigns a short value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsString Function
    Assigns a string to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsULLong Function
    Assigns an unsigned 8-byte long value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsULong Function
    Assigns an unsigned long value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsUShort Function
    Assigns an unsigned short value to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsWChar Function
    Assigns a wide character to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetAnyAsWString Function
    Assigns a wide character string to an instance of the Any type and associates the instance with a CORBA object.
  • IiopSetBinary Function
    Associates a parameter containing binary data with a CORBA object.
  • IiopSetBinaryFromFile Function
    Reads binary data from a file and associates the data with a CORBA object.
  • IiopSetBoolean Function
    Associates a boolean parameter with a CORBA object.
  • IiopSetChar Function
    Associates a character parameter with a CORBA object.
  • IiopSetDouble Function
    Associates a double value parameter with a CORBA object.
  • IiopSetFloat Function
    Associates a float value parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.
  • IiopSetFragment Function
    Indicates the begin of a new fragment. This function causes data (subsequentially set via IiopSet functions) to be sent by means of a new fragment.
  • IiopSetLLong Function
    Associates an 8-byte long parameter with a CORBA object or with an Any data type.
  • IiopSetLong Function
    Associates a long value parameter with a CORBA object.
  • IiopSetObject Function
    Associates an object parameter with a CORBA object.
  • IiopSetOctet Function
    Associates an octet parameter with a CORBA object.
  • IiopSetOctetSequence Function
    Associates a octet sequence parameter with a CORBA object.
  • IiopSetShort Function
    Associates a short value parameter with a CORBA object.
  • IiopSetString Function
    Associates a string parameter with a CORBA object.
  • IiopSetULLong Function
    Associates an 8-byte long parameter with a CORBA object or with an Any data type.
  • IiopSetULong Function
    Associates an unsigned long value parameter with a CORBA object.
  • IiopSetUShort Function
  • IiopSetValueIndirect Function
    Associates a value type indirection parameter with a CORBA object.
  • IiopSetValue Function
    Sets the header of a value type parameter that is associated with a CORBA object.
  • IiopSetWChar Function
    Associates a wide character parameter with a CORBA object.
  • IiopSetWString Function
    Associates a wide character string parameter with a CORBA object.
親トピック: Parameter Setting and Getting Functions Overview


IiopSetAnyAsBoolean Function

Action

Assigns a boolean value to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsBoolean( in hIiop  : number,
                     in bValue : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
bValue | Boolean value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass boolean value parameter to request
    IiopSetAnyAsBoolean(hIiop, true);

    // call operation "Print" with boolean parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsChar Function

Action

Assigns a character to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsChar( in hIiop : number,
                  in nChar : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nChar | Character that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass character parameter to request
    IiopSetAnyAsChar(hIiop, ord('A'));
    // call operation "Print" with character parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsDouble Function

Action

Assigns a double value to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsDouble( in hIiop  : number,
                    in fValue : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
fValue | Double value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass double value parameter to request
    IiopSetAnyAsDouble(hIiop, 2545.58);
    // call operation "Print" with double value parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsFloat Function

Action

Assigns a floating-point value to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsFloat( in hIiop  : number,
                   in fValue : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
fValue | Floating-point value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass floating-point value parameter to request
    IiopSetAnyAsFloat(hIiop, 5474.05);
    // call operation "Print" with floating-point value parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsLLong Function

Action

Assigns an 8-byte long value to an instance of the Any type and associates the instance with a CORBA object.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsLLong( in hIiop  : number,
                   in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValue | 8-byte long value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass 8-byte long value to request
    IiopSetAnyAsLLong(hIiop, 1043385);
    // call operation "Print" with 8-byte long value
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsLong Function

Action

Assigns a long value to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsLong( in hIiop  : number,
                  in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValue | Long value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass long value parameter to request
    IiopSetAnyAsLong(hIiop, 1043385);

    // call operation "Print" with long value parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsObject Function

Action

Assigns an object to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsObject( in hIiop   : number,
                    in hObject : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
hObject | Object that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

var
  hObject: number;

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass object parameter to request
    IiopSetAnyAsObject(hIiop, hObject);

    // call request "GetInfo" with object parameter
    IiopRequest(hIiop, "GetInfo");
    ...
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsOctet Function

Action

Assigns an octet to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsOctet( in hIiop  : number,
                   in nOctet : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nOctet | Octet that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass octet parameter to request
    IiopSetAnyAsOctet(hIiop, ord('A'));

    // call operation "Print" with octet parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions


IiopSetAnyAsShort Function

Action

Assigns a short value to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsShort( in hIiop  : number,
                   in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValue | Short value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass short value parameter to request
    IiopSetAnyAsShort(hIiop, 5);

    // call operation "Print" with short value parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsString Function

Action

Assigns a string to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsString( in hIiop   : number,
                    in sString : string,
                    in nFlags  : number optional,
                    in nMaxLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sString | String that is assigned to the instance of the Any type and then associated with the CORBA object.
nFlags | Specifies whether to pass the string as a sequence of ASCII characters or wide characters (optional). By default, the string is passed as a sequence of ASCII characters.
nMaxLen | Specifies the maximum string length of sString.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass string parameter to request
    IiopSetAnyAsString(hIiop, "Hello world!");

    // call operation "Print" with string parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsULLong Function

Action

Assigns an unsigned 8-byte long value to an instance of the Any type and associates the instance with a CORBA object.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsULLong( in hIiop  : number,
                    in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValue | Unsigned 8-byte long value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass unsigned 8-byte long value to request
    IiopSetAnyAsULLong(hIiop, 5496303);

    // call operation with 8-byte unsigned long value
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsULong Function

Action

Assigns an unsigned long value to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsULong( in hIiop  : number,
                   in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValue | Unsigned long value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass unsigned long value parameter to request
    IiopSetAnyAsULong(hIiop, 5496303);

    // call operation "Print" with unsigned long value parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsUShort Function

Action

Assigns an unsigned short value to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsUShort( in hIiop  : number,
                    in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValue | Unsigned short value that is assigned to the instance of the Any type and then associated with the CORBA object.

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass unsigned short value parameter to request
    IiopSetAnyAsUShort(hIiop, 175);

    // call operation "Print" with unsigned short value parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsWChar Function

Action

Assigns a wide character to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsWChar( in hIiop  : number,
                   in nWChar : number,
                   in nType  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nWChar | Wide character that is assigned to the instance of the Any type and then associated with the CORBA object.
nType

Defines the byte order of the wide character (optional). Pass one of the following flags to the function:

  • IIOP_BYTE_ORIENTED (default)

  • IIOP_WIDE_LITTLE_ENDIAN

  • IIOP_WIDE_BIG_ENDIAN

Example

var
  nWChar: number;

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass wide character parameter to request
    IiopSetAnyAsWChar(hIiop, nWChar);

    // call operation "Print" with wide character parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetAnyAsWString Function

Action

Assigns a wide character string to an instance of the Any type and associates the instance with a CORBA object. The instance of the Any type is created and released automatically. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetAnyAsWString( in hIiop      : number,
                     in sString    : string,
                     in nStringLen : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sString | Wide character string that is assigned to the instance of the Any type and then associated with the CORBA object.
nStringLen | Length of the wide character string.

Example

var
  sString: string;

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass wide character string to request
    IiopSetAnyAsWString(hIiop, sString, 32);

     // call operation "Print" with wide character string parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetBinary Function

Action

Associates a parameter containing binary data with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetBinary( in hIiop      : number,
               in sBuffer    : string,
               in nBufferLen : number optional,
               in nAlign     : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sBuffer | Buffer containing the binary data that will be associated with the CORBA object
nBufferLen

Number of binary data bytes that are associated with the CORBA object (optional). If specified, make sure to set

nDataLen <= size of sBuffer

nAlign

Binary data alignment (optional). Possible options are:

  • IIOP_ALIGN_2. Alignment to 2-byte boundaries

  • IIOP_ALIGN_4. Alignment to 4-byte boundaries

  • IIOP_ALIGN_8. Alignment to 8-byte boundaries

  • IIOP_ALIGN_16. Alignment to 16-byte boundaries

Default setting is alignment to 1-byte boundaries.

In addition, the byte order within the binary data can be specified:

  • IIOP_BIG_ENDIAN. Most significant byte is sent first

  • IIOP_LITTLE_ENDIAN. Least significant byte is sent first

Example

dcltrans
  transaction TSetBinary
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop : number; // handle to CORBA object
    sBuffer : string(512);
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",HOST, PORT, KEY, KEYLEN);
    // initialize buffer
    ...
    // pass parameter to request
    IiopSetBinary(hIiop, sBuffer, STRING_COMPLETE, IIOP_ALIGN_16 | IIOP_BIG_ENDIAN);
    // call request "Print" to print data
    IiopRequest(hIiop, "Print", IIOP_ONEWAY);
    IiopObjectRelease(hIiop);
  end TSetBinary;

Sample scripts

AnyDemo.bdf, Conf.bdf, DynAny.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetBinary Function
IiopRequest Function


IiopSetBinaryFromFile Function

Action

Reads binary data from a file and associates the data with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetBinaryFromFile(in hIiop : number,
                      in sFile : string,
                      in nBytes : number optional,
                      in nAlign : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sFile | Name of the file containing the binary data. If NULL, the filename passed to the previous IiopSetBinaryFromFile function call (belonging to the same request) is used
nBytes | Number of bytes to read from the file. If omitted or zero, the whole file is read.
nAlign

Binary data alignment (optional). Possible options are:

  • IIOP_ALIGN_2. Alignment to 2-byte boundaries

  • IIOP_ALIGN_4. Alignment to 4-byte boundaries

  • IIOP_ALIGN_8. Alignment to 8-byte boundaries

  • IIOP_ALIGN_16. Alignment to 16-byte boundaries

Default setting is alignment to 1-byte boundaries.

Example

// send a large graphic file to a printer object
dcltrans
  transaction TSetBinaryFromFile
  const
    FRAGMENTSIZE := 4096;
    FILENAME := "IMAGE.GIF";
  var
    hIiop, nFragments, nFilesize, i: number;
  begin
    // retrieve handle to CORBA object, filesize and
    // number of fragments
    ...
    // send fragmented messageIiopSetBinaryFromFile(hIiop, FILENAME, nFilesize MOD FRAGMENTSIZE);
    for i := 1 to nFragments do

    // indicate begin of new fragment
    IiopSetFragment(hIiop);

    // send next fragment
    IiopSetBinaryFromFile(hIiop, NULL, FRAGMENTSIZE);
    end;
    IiopRequest(hIiop, "print", IIOP_USE_V11);
  end TSetBinaryFromFile;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetBoolean Function

Action

Associates a boolean parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetBoolean( in hIiop : number,
                in bBool : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
bBool | Boolean value that will be associated with the CORBA object or with the Any data type

Example

dcltrans
  transaction TSetBoolean
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass boolean parameter to request
    IiopSetBoolean(hIiop, true);

    // call request "Init" with boolean parameter
    IiopRequest(hIiop, "Init", IIOP_ONEWAY);
    IiopObjectRelease(hIiop);
  end TSetBoolean;

Sample scripts

Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetBoolean Function
IiopRequest Function


IiopSetChar Function

Action

Associates a character parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetChar( in hIiop : number,
             in nChar : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nChar | Character that will be associated with the CORBA object

Example

dcltrans
  transaction TSetChar
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass character parameter to request
    IiopSetChar(hIiop, ord('A'));

    // call request "Convert" with character parameter
    IiopRequest(hIiop, "Convert");
    ...
    IiopObjectRelease(hIiop);
  end TSetChar;

Sample scripts

TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetChar Function
IiopRequest Function


IiopSetDouble Function

Action

Associates a double value parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetDouble( in hIiop  : number,
               in fValue : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
fValue | Double value that will be associated with the CORBA object

Example

dcltrans
  transaction TSetDouble
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass double value parameter to request
    IiopSetDouble(hIiop, 53985.81);

    // call request "SquareRoot" with double value parameter
    IiopRequest(hIiop, "SquareRoot");
    ...
    IiopObjectRelease(hIiop);
  end TSetDouble;

Sample scripts

TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetDouble Function
IiopRequest Function


IiopSetFloat Function

Action

Associates a float value parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetFloat( in hIiop  : number,
              in fValue : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
fValue | Float value that will be associated with the CORBA object

Example

dcltrans
  transaction TSetFloat
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass float value parameter to request
    IiopSetFloat(hIiop, 401.09);

    // call request "Square" with float value parameter
    IiopRequest(hIiop, "Square");
    ...
    IiopObjectRelease(hIiop);
  end TSetFloat;

Sample scripts

AsyncBank.bdf, Bank.bdf, SimpleAsyncBank.bdf, TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetFloat Function
IiopRequest Function


IiopSetFragment Function

Action

Indicates the begin of a new fragment. This function causes data (subsequentially set via IiopSet functions) to be sent by means of a new fragment.

Include file

IIOP.bdh

Syntax

IiopSetFragment( in hIiop : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object

Example

dcltrans
  transaction TSetFragment
  var
    hIiop: number;
  begin
    ...
    IiopSetChar(hIiop, ord('A'));
    IiopSetFragment(hIiop);
    IiopSetChar(hIiop, ord('B'));
    IiopSetChar(hIiop, ord('C'));
    IiopSetFragment(hIiop);
    IiopSetChar(hIiop, ord('D'));

    // send a request with two fragments

    // request contains 'A'

    // fragment 1 contains 'B' and 'C'

    // fragment 2 contains 'D'

    IiopRequest(hIiop, "print");
  end TSetFragment;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetLLong Function

Action

Associates an 8-byte long parameter with a CORBA object or with an Any data type.

Include file

IIOP.bdh

Syntax

IiopSetLLong( in hIiop  : number,
              in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValue | 8-byte long value that will be associated with the CORBA object.

Example

dcltrans
  transaction TSetLong
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
     // pass 8-byte long value to request
    IiopSetLLong(hIiop, 593814064);

    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    ...
    IiopObjectRelease(hIiop);
  end TSetLong;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetLong Function

Action

Associates a long value parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetLong( in hIiop  : number,
             in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nValue | Long value that will be associated with the CORBA object

Example

dcltrans
  transaction TSetLong
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
   hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                      HOST, PORT, KEY, KEYLEN);

    // pass long value parameter to request
    IiopSetLong(hIiop, 593814064);

    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    ...
    IiopObjectRelease(hIiop);
  end TSetLong;

Sample scripts

UnivB.bdf, TypeTest.bdf, AsyncFact.bdf, Conf.bdf, Factory.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetLong Function
IiopRequest Function


IiopSetObject Function

Action

Associates an object parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetObject( in hIiop   : number,
               in hObject : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
hObject | Handle to the object that will be associated with the CORBA object

Example

var
  hObject: number;

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass object parameter to request
    IiopSetObject(hIiop, hObject);

    // call request "GetInfo" with object parameter
    IiopRequest(hIiop, "GetInfo");
    ...
    IiopObjectRelease(hIiop);
  end TMain;

Sample scripts

AnyDemo.bdf, Bank.bdf, Callback.bdf, SimpleAsyncBank.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetObject Function
IiopRequest Function


IiopSetOctet Function

Action

Associates an octet parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetOctet( in hIiop  : number,
              in nOctet : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nOctet | Octet that will be associated with the CORBA object

Example

dcltrans
  transaction TSetOctet
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass octet parameter to request
    IiopSetOctet(hIiop, ord('A'));

    // call request "Convert" with octet parameter
    IiopRequest(hIiop, "Convert");
    ...
    IiopObjectRelease(hIiop);
  end TSetOctet;
親トピック: Parameter Setting Functions
関連資料
IiopGetOctet Function
IiopRequest Function


IiopSetOctetSequence Function

Action

Associates a octet sequence parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetOctetSequence( in hIiop      : number,
                      in sBuffer    : string allownull,
                      in nBufferLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sBuffer | Buffer containing the octet sequence that will be associated with the CORBA object.
nBufferLen | Number of bytes that are associated with the CORBA object (optional). If specified, make sure to set nBufferLen <= StrSize(sBuffer).

Example

dcltrans
  transaction TSetOctetSequence
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop   : number; // handle to CORBA object
    sBuffer : string;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // initialize buffer
    ...

    // pass parameter to request
    IiopSetOctetSequence(hIiop, sBuffer);

    // call request "Print" to print data
    IiopRequest(hIiop, "Print", IIOP_ONEWAY);
    IiopObjectRelease(hIiop);
  end TSetOctetSequence;
親トピック: Parameter Setting Functions
関連資料
IiopGetOctetSequence Function
IiopRequest Function


IiopSetShort Function

Action

Associates a short value parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetShort( in hIiop  : number,
              in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nValue | Short value that will be associated with the CORBA object

Example

dcltrans
  transaction TSetShort
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass short value parameter to request
    IiopSetShort(hIiop, 5);

    // call request "GetMsg" with short value parameter
    IiopRequest(hIiop, "GetMsg");
    ...
    IiopObjectRelease(hIiop);
  end TSetShort;

Sample scripts

TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopGetShort Function
IiopRequest Function


IiopSetString Function

Action

Associates a string parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetString( in hIiop   : number,
               in sString : string
               in nFlags  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sString | String that will be associated with the CORBA object.
nFlags | If the string should be set as wide string set this parameter to IIOP_USE_WCHAR (optional).

Example

dcltrans
  transaction TSetString
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // pass string parameter to request
    IiopSetString(hIiop, "Hello world!");

    // call request "Write" with string parameter
    IiopRequest(hIiop, "Write", IIOP_ONEWAY);
    IiopObjectRelease(hIiop);
  end TSetString;

Sample scripts

UnivB.bdf, AnyDemo.bdf, AsyncBank.bdf, Bank.bdf, SimpleAsyncBank.bdf, TypeTest.bdf, AsyncFact.bdf, AsyncOdb.bdf, Conf.bdf, Factory.bdf, Odb.bdf, Vbrokerbank01.bdf, Vbrokerbank02.bdf, VBrokerBankGate.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetULLong Function

Action

Associates an 8-byte long parameter with a CORBA object or with an Any data type.

Include file

IIOP.bdh

Syntax

IiopSetULLong( in hIiop  : number,
               in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nValue | Unsigned 8-byte long value that will be associated with the CORBA object.

Example

dcltrans
  transaction TSetLong
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass unsigned 8-byte long parameter to request
    IiopSetULLong(hIiop, 593814064);
    // call request "DecToHex" with long parameter
    IiopRequest(hIiop, "DecToHex");
    ...
    IiopObjectRelease(hIiop);
  end TSetLong;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetULong Function

Action

Associates an unsigned long value parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetULong( in hIiop  : number,
              in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Object handle representing a pointer to a CORBA object
nValue | Unsigned long value that will be associated with the CORBA object Note: If you specify values greater than 2147483647, you have to use the hexadecimal notation.

Example

dcltrans
  transaction TSetULong
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    // pass two unsigned long value parameters to request
    IiopSetULong(hIiop, 14501835);
    IiopSetULong(hIiop, 1933766921);

    // call request "Sum" with two unsigned long value parameters
    IiopRequest(hIiop, "Sum");
    ...
    IiopObjectRelease(hIiop);
  end TSetULong;

Sample scripts

UnivB.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetUShort Function

Action

Associates an unsigned short value parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetUShort( in hIiop  : number,
               in nValue : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nValue | Unsigned short value that will be associated with the CORBA object

Example

dcltrans
  transaction TSetUShort
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // pass two unsigned short value parameters to request
    IiopSetUShort(hIiop, 41);
    IiopSetUShort(hIiop, 117);

    // call request "Product" with two unsigned short value parameters
    IiopRequest(hIiop, "Product");
    ...
    IiopObjectRelease(hIiop);
  end TSetUShort;

Sample scripts

Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetValueIndirect Function

Action

Associates a value type indirection parameter with a CORBA object. This function can be used to set the parameters of a request in advance of calling the IiopRequest function.

Include file

Iiop.bdh

Syntax

IiopSetValueIndirect( in hIiop    : number,
                      in nValueId : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nValueId | ID of the value that is indirected to.

Example

dcltrans
  transaction TSetValue
  const
    HOST        := "192.168.20.21"; // server
    PORT        := 1052;            // port
    KEY         := "...\h00";       // key
    KEYLEN      := 4;               // key length
    REP_ID      := "IDL:SetValueType:1.0";
    REP_ID_LIST := " IDL:DerivedValue:1.0 IDL:BaseValue:1.0 IDL:AbstractValue:1.0";
    CODE_BASE   := "www.codebase.com";
  var
    hIiop : number; // Handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // set value
    IiopSetValue(hIiop, REP_ID, "", FALSE, 1);
    IiopSetLong(hIiop, 5);    IiopEndValue(hIiop);

    // set another value
    IiopSetValue(hIiop, REP_ID_LIST, CODE_BASE, TRUE);
    IiopSetBoolean(hIiop, TRUE);
    IiopSetLong(hIiop, 3);
    IiopSetValueIndirect(hIiop, 1);
    IiopSetString(hIiop, "This is a string");
    IiopEndValue(hIiop);

    // call request "SetValue"
    IiopRequest(hIiop, "SetValue");
    IiopObjectRelease(hIiop);
  end TSetValue;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetValue Function

Action

Sets the header of a value type parameter that is associated with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

Iiop.bdh

Syntax

IiopSetValue( in hIiop     : number,
              in sRepId    : string optional,
              in sCodeBase : string optionl,
              in bChunked  : boolean optional,
              in nValueId  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sRepId | Repository ID of the following value type (optional). This can also be a list of repository IDs. A list of repository IDs is encoded as a concatenation of a separator character (for example, a blank) followed by a repository ID.
sCodeBase | Code base URL (optional).
bChunked | Specifies whether the value should be chunked encoded (optional).
nValueId | Used to reference this value with an indirection (IiopSetValueIndirect; optional).

Example

dcltrans
  transaction TSetValue
  const
    HOST        := "192.168.20.21"; // server
    PORT        := 1052;            // port
    KEY         := "...\h00";       // key
    KEYLEN      := 4;               // key length
    REP_ID      := "IDL:SetValueType:1.0";
    REP_ID_LIST := " IDL:DerivedValue:1.0 IDL:BaseValue:1.0 IDL:AbstractValue:1.0";
    CODE_BASE   := "www.codebase.com";
  var
   hIiop : number; // Handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

     // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // set value
    IiopSetValue(hIiop, REP_ID);
    IiopSetLong(hIiop, 5);
    IiopEndValue(hIiop );

    // set another value
    IiopSetValue(hIiop, REP_ID_LIST, CODE_BASE, TRUE);
    IiopSetBoolean(hIiop, TRUE);
    IiopSetLong(hIiop, 3);
    IiopSetValue(hIiop, REP_Id, "", TRUE);
    IiopSetLong(hIiop, 12);
    IiopEndValue(hIiop );
    IiopSetString(hIiop, "This is a string");
    IiopEndValue(hIiop );

    // call request "SetValue"
    IiopRequest(hIiop, "SetValue");
    IiopObjectRelease(hIiop);
  end TSetValue;
親トピック: Parameter Setting Functions
関連資料
IiopRequest Function


IiopSetWChar Function

Action

Associates a wide character parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetWChar(in hIiop : number,in nWChar : number,in nType : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
nWChar | Wide character that will be associated with the CORBA object.
nType

Defines the byte order of the wide character (optional). Pass one of the following flags to the function:

  • IIOP_BYTE_ORIENTED (default)

  • IIOP_WIDE_LITTLE_ENDIAN

  • IIOP_WIDE_BIG_ENDIAN

Example

var
    nWChar: number;
  dcltrans
  transaction TMain
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052; // port
    KEY := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop: number; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.0");IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",HOST, PORT, KEY, KEYLEN);

    // pass wide character parameter to request
    IiopSetWChar(hIiop, nWChar);

   // call operation "Print" with wide character parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopGetWChar Function
IiopRequest Function


IiopSetWString Function

Action

Associates a wide character string parameter with a CORBA object. This function can be used to set parameters of a request in advance of calling the IiopRequest function.

Include file

IIOP.bdh

Syntax

IiopSetWString( in hIiop      : number,
                in sString    : string,
                in nStringLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sString | Wide character string that will be associated with the CORBA object.
nStringLen | Length of the wide character string (optional).

Example

var
  sString: string;
 dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop   : number;  // handle to CORBA object
    sString : string; // handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",    HOST, PORT, KEY, KEYLEN);

    // pass wide character string to request
    StrAnsi2Unicode(sString, STRING_COMPLETE, "hello");
    IiopSetWString(hIiop, sString);

    // call operation "Print" with wide character string parameter
    IiopRequest(hIiop, "Print");
    IiopObjectRelease(hIiop);
  end TMain;
親トピック: Parameter Setting Functions
関連資料
IiopGetWString Function
IiopRequest Function


Parameter Getting Functions

  • IiopGetBinary Function
    Retrieves a return parameter containing binary data from a CORBA object.
  • IiopGetBoolean Function
    Retrieves a boolean return parameter from a CORBA object.
  • IiopGetChar Function
    Retrieves a character return parameter from a CORBA object.
  • IiopGetDouble Function
    Retrieves a double value return parameter from a CORBA object.
  • IiopGetFloat Function
    Retrieves a float value return parameter from a CORBA object.
  • IiopGetLong Function
    Retrieves a long value return parameter from a CORBA object.
  • IiopGetObject Function
    Retrieves an object return parameter from a CORBA object.
  • IiopGetOctet Function
    Retrieves an octet return parameter from a CORBA object.
  • IiopGetOctetSequence Function
    Retrieves an octet sequence return parameter from a CORBA object.
  • IiopGetShort Function
    Retrieves a short value return parameter from a CORBA object.
  • IiopGetString Function
    Retrieves a string return parameter from a CORBA object.
  • IiopGetTypecode Function
    Retrieves a type code return parameter from a CORBA object.
  • IiopGetUShort Function
    Retrieves an unsigned short value return parameter from a CORBA object.
  • IiopGetValue Function
    Retrieves a value type return parameter from a CORBA object.
  • IiopGetValueHeader Function
    Retrieves information about a value type return parameter from a CORBA object based on the return value, either true or false.
  • IiopGetWChar Function
    Retrieves a wide character return parameter from a CORBA object.
  • IiopGetWString Function
    Retrieves a wide string return parameter from a CORBA object.
  • IiopGetDataByTypeCode Function
    Retrieves a certain amount of data from a CORBA object.
親トピック: Parameter Setting and Getting Functions Overview


IiopGetBinary Function

Action

Retrieves a return parameter containing binary data from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetBinary( in  hIiop       : number,
               out sBuffer     : string,
               in  nBufferSize : number optional,
               out nDataLen    : number optional,
               in  nAlign      : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sBuffer | Buffer receiving the binary data associated with the CORBA object
nBufferSize | Size of the buffer receiving the binary data (optional). If specified, make sure to set nBufferSize <= StrSize(sBuffer).
nDataLen | Variable receiving the number of bytes retrieved (optional)
nAlign

Binary data alignment (optional). Possible options are:

  • IIOP_ALIGN_2. Alignment to 2-byte boundaries

  • IIOP_ALIGN_4. Alignment to 4-byte boundaries

  • IIOP_ALIGN_8. Alignment to 8-byte boundaries

  • IIOP_ALIGN_16. Alignment to 16-byte boundaries

Default setting is alignment to 1-byte boundaries.

In addition, the byte order within the binary data can be specified:

  • IIOP_BIG_ENDIAN. Most significant byte is sent first

  • IIOP_LITTLE_ENDIAN. Least significant byte is sent first

Example

dcltrans
  transaction TGetBinary
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop   : number; // handle to CORBA object
    sBuffer : string(512);
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
    HOST, PORT, KEY, KEYLEN);

    // call request "GetBuffer"
    IiopRequest(hIiop, "GetBuffer");

    // retrieve return parameter
    IiopGetBinary(hIiop, sBuffer, STRING_COMPLETE,
    0, IIOP_ALIGN_16 | IIOP_BIG_ENDIAN);
    IiopObjectRelease(hIiop);
  end TGetBinary;

Sample scripts

Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetBinary Function


IiopGetBoolean Function

Action

Retrieves a boolean return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetBoolean( in hIiop  : number,
                out bBool : boolean optional ): boolean;

Return value

Boolean value associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
bBool | Variable receiving the boolean value associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetBoolean
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number; // Handle to CORBA object
    bOk   : boolean;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Init"
    IiopRequest(hIiop, "Init");
    // retrieve boolean return parameter
    bOk := IiopGetBoolean(hIiop);
    IiopObjectRelease(hIiop);
  end TGetBoolean;

Sample scripts

Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetBoolean Function


IiopGetChar Function

Action

Retrieves a character return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetChar( in  hIiop : number,
             out nChar : number optional ): number;

Return value

Character associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
nChar | Variable receiving the character associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetChar
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop : number; // Handle to CORBA object
    nChar : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
     // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
     // call request "NextChar"
    IiopRequest(hIiop, "NextChar");
     // retrieve character return parameter
    nChar := IiopGetChar(hIiop);
    write("retrieved character = "); write(chr(nChar)); writeln;
    IiopObjectRelease(hIiop);
  end TGetChar;

Output

retrieved character = A

Sample scripts

TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetChar Function


IiopGetDouble Function

Action

Retrieves a double value return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetDouble( in  hIiop  : number,
               out fValue : float optional ): float;

Return value

Double value associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
fValue | Variable receiving the double value associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetDouble
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number; // Handle to CORBA object
    fSqrt : float;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "SquareRoot" with double value parameter
    IiopSetDouble(hIiop, 685083.117);
    IiopRequest(hIiop, "SquareRoot");

    // retrieve double value return parameter
    fSqrt := IiopGetDouble(hIiop);

    write("square root = "); write(fSqrt); writeln;
    IiopObjectRelease(hIiop);
  end TGetDouble;

Output

square root = 827.697479

Sample scripts

UnivB.bdf, TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetDouble Function


IiopGetFloat Function

Action

Retrieves a float value return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetFloat( in  hIiop  : number,
              out fValue : float optional ): float;

Return value

float value associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
fValue | Variable receiving the float value associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetFloat
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number; // Handle to CORBA object
    fSqr  : float;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Square" with float value parameter
    IiopSetFloat(hIiop, 934.71);
    IiopRequest(hIiop, "Square");

    // retrieve float value return parameter
    fSqr := IiopGetFloat(hIiop);
    write("square = "); write(fSqr); writeln;
    IiopObjectRelease(hIiop);
  end TGetFloat;

Output

square = 873682.784100

Sample scripts

AsyncBank.bdf, Bank.bdf, SimpleAsyncBank.bdf, TypeTest.bdf, Conf.bdf, Vbrokerbank01.bdf, Vbrokerbank02.bdf, VBrokerBankGate.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetFloat Function


IiopGetLong Function

Action

Retrieves a long value return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetLong( in  hIiop  : number,
             out nValue : number optional ):number;

Return value

Long value associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
nValue | Variable receiving the long value associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetLong
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop    : number; // Handle to CORBA object
    nProduct : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Product" with two long value parameters
    IiopSetLong(hIiop, 2854);    IiopSetLong(hIiop, 489);
    IiopRequest(hIiop, "Product");

    // retrieve long value return parameter
    nProduct := IiopGetLong(hIiop);
    write("product = "); write(nProduct); writeln;
    IiopObjectRelease(hIiop);
  end TGetLong;

Output

product = 1395606

Sample scripts

UnivB.bdf, TypeTest.bdf, AsyncFact.bdf, Conf.bdf, Factory.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetLong Function


IiopGetObject Function

Action

Retrieves an object return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetObject( in    hIiop   : number,
               inout hObject : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
hObject | Variable receiving the object associated with the CORBA object

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00" // key
    KEYLEN := 4; // key length
  var
    hIiop, hObject: number; // Handle to CORBA object
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Duplicate"
    IiopRequest(hIiop, "Duplicate");

    // retrieve object return parameter
    IiopGetObject(hIiop, hObject);
    IiopObjectRelease(hIiop);
  end TMain;

Sample scripts

UnivB.bdf, AnyDemo.bdf, AsyncBank.bdf, Bank.bdf, SimpleAsyncBank.bdf, AsyncFact.bdf, AsyncOdb.bdf, Conf.bdf, Factory.bdf, Odb.bdf, Vbrokerbank01.bdf, Vbrokerbank02.bdf, VBrokerBankGate.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetObject Function


IiopGetOctet Function

Action

Retrieves an octet return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetOctet( in  hIiop  : number,
              out nOctet : number optional ): number;

Return value

Octet associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
nOctet | Variable receiving the octet associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetOctet
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop  : number; // Handle to CORBA object
    nOctet : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Update"
    IiopRequest(hIiop, "Update");

    // retrieve octet return parameter
    nOctet := IiopGetOctet(hIiop);

    write("return value = "); write(nOctet); writeln;
    IiopObjectRelease(hIiop);
  end TGetOctet;

Output

return value = 54
親トピック: Parameter Getting Functions
関連資料
IiopSetOctet Function


IiopGetOctetSequence Function

Action

Retrieves an octet sequence return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetOctetSequence( in  hIiop        : number,
                      out sBuffer      : string optional,
                      in  nBufferSize  : number optional,
                      out nSequenceLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sBuffer | Buffer receiving the octet sequence associated with the CORBA object (optional).
nBufferSize | Size of the buffer receiving the octet sequence (optional). Make sure to set nBufferSize <= size of sBuffer
nSequenceLen | Variable receiving the number of bytes retrieved (optional).

Example

dcltrans
  transaction TGetOctetSequence
  const
    HOST := "192.168.20.21"; // server
    PORT := 1052; // port
    KEY := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop, nLen : number; // Handle to CORBA object
    sBuffer : string(512);
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN); // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",    HOST, PORT, KEY, KEYLEN);

    // call request "GetMsg"
    IiopRequest(hIiop, "GetMsg");

    // retrieve return parameter
    IiopGetOctetSequence(hIiop, sBuffer, STRING_COMPLETE, nLen);
    IiopObjectRelease(hIiop);
  end TGetOctetSequence;
親トピック: Parameter Getting Functions
関連資料
IiopSetOctetSequence Function


IiopGetShort Function

Action

Retrieves a short value return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetShort( in  hIiop  : number,
              out nValue : number optional ): number;

Return value

Short value associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
nValue | Variable receiving the short value associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetShort
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number;
    // Handle to CORBA object
    nAbs  : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

   // call request "Abs" with short value parameter
    IiopSetShort(hIiop, -104);
    IiopRequest(hIiop, "Abs");

    // retrieve short value return parameter
    nAbs := IiopGetShort(hIiop);
    write("absolute value = "); write(nAbs); writeln;
    IiopObjectRelease(hIiop);
  end TGetShort;

Output

absolute value = 104

Sample scripts

TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetShort Function


IiopGetString Function

Action

Retrieves a string return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetString( in  hIiop       : number,
               in  sBuffer     : string optional,
               in  nBufferSize : number optional,
               out nStringLen  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sBuffer | Buffer receiving the string associated with the CORBA object (optional).
nBufferSize | Size of the buffer receiving the string (optional). If specified, make sure to set nBufferSize <= StrSize(sBuffer).
nStringLen | Variable receiving the length of the string retrieved (optional)

Example

dcltrans
  transaction TGetString
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop : number; // Handle to CORBA object
    sUpper : string;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
    HOST, PORT, KEY, KEYLEN);

    // call request "ToUpper" with string parameter
    IiopSetString(hIiop, "Convert To Uppercase");
    IiopRequest(hIiop, "ToUpper");

    // retrieve string return parameter
    IiopGetString(hIiop, sUpper);
    write("converted string = "); write(sUpper); writeln;
    IiopObjectRelease(hIiop);
  end TGetString;

Output

converted string = CONVERT TO UPPERCASE

Sample scripts

UnivB.bdf, AnyDemo.bdf, TypeTest.bdf, AsyncOdb.bdf, Conf.bdf, Odb.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions


IiopGetTypecode Function

Action

Retrieves a type code return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetTypecode( in  hIiop       : number,
                 out sBuffer     : string optional,
                 in  nBufferSize : number optional,
                 out nBufferLen  : number optional): number;

Return value

Type code. This can be any of the following:

IIOP_TK_ABSTRACT_INTERFACE | IIOP_TK_ALIAS | IIOP_TK_ANY
IIOP_TK_ARRAY | IIOP_TK_BOOLEAN | IIOP_TK_CHAR
IIOP_TK_DOUBLE | IIOP_TK_ENUM | IIOP_TK_EXCEPT
IIOP_TK_FIXED | IIOP_TK_FLOAT | IIOP_TK_INDIRECTION
IIOP_TK_LDOUBLE | IIOP_TK_LLONG | IIOP_TK_LONG
IIOP_TK_NATIVE | IIOP_TK_NULL | IIOP_TK_OBJREF
IIOP_TK_OCTET | IIOP_TK_PRINCIPAL | IIOP_TK_SEQUENCE
IIOP_TK_SHORT | IIOP_TK_STRING | IIOP_TK_STRUCT
IIOP_TK_TYPECODE | IIOP_TK_ULLONG | IIOP_TK_ULONG
IIOP_TK_UNION | IIOP_TK_USHORT | IIOP_TK_VALUE
IIOP_TK_VALUEBOX | IIOP_TK_VOID | IIOP_TK_WCHAR
IIOP_TK_WSTRING |  |
Parameter | Description
hIiop | Handle to a CORBA object.
sBuffer | Buffer receiving the type code associated with the CORBA object (optional).
nBufferSize | Size of the buffer receiving the type code associate with the CORBA object (optional).
nBufferLen | Variable receiving the actual size of the type code (optional).

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop     : number;
    sBuffer   : string;
    nTypecode : number;
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
    // call request "GetInfo"
    IiopRequest(hIiop, "GetInfo");

    // check return parameter
    nTypecode := IiopGetTypecode(hIiop, sBuffer);
    ...
    IiopObjectRelease(hIiop);
  end TMain;

Sample scripts

AnyDemo.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions


IiopGetUShort Function

Action

Retrieves an unsigned short value return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetUShort( in  hIiop  : number,
               out nValue : number optional ):number;

Return value

unsigned short value associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object
nValue | Variable receiving the unsigned short value associated with the CORBA object (optional)

Example

dcltrans
  transaction TGetUShort
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop : number; // Handle to CORBA object
    nSum  : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Sum" with two unsigned short value parameters
    IiopSetUShort(hIiop, 1195);
    IiopSetUShort(hIiop, 477);
    IiopRequest(hIiop, "Sum");

    // retrieve unsigned short value return parameter
    nSum := IiopGetUShort(hIiop);
    write("sum = "); write(nSum); writeln;
    IiopObjectRelease(hIiop);
  end TGetUShort;

Output

sum = 1672

Sample scripts

UnivB.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions


IiopGetValue Function

Action

Retrieves a value type return parameter from a CORBA object. This function can be used to get the return parameters of an operation. This function is the same as the IiopGetDataByTypecode function;

Include file

Iiop.bdh

Syntax

IiopGetValue( in  hIiop     : number,
              in  sTypecode : string,
              in  nTcLen    : number optional,
              out sBuf      : string optional,
              in  nBufLen   : number optional,
              out nUsed     : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sTypecode | Typecode needed for parsing the value type from the IIOP reply messages.
nTcLen | Length of sTypecode (optional).
sBuf | Buffer where the value is copied to (optional).
nBufLen | Length of the buffer where the value is copied to (optional).
nUsed | Number of bytes that are copied to sBuf (optional).

Example

dcltrans
  transaction TGetValue
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
    csTypecode := "\h0000001D000000C20000000000000038524D49"
      "\h3A6A6176612E6C616E672E496E74656765723A363444343743"
      "\h314430313938304235453A3132453241304134463738313837"
      "\h33380000000008496E746567657200000000000000001D0000"
      "\h00580000000000000036524D493A6A6176612E6C616E672E4E"
      "\h756D6265723A3731444138424537463937313132383A383641"
      "\h43393531443042393445303842000000000000074E756D6265"
      "\h72000000020000000000000000000000000001000000010000"
      "\h0000000000030000";
  var
    hIiop  : number; // Handle to CORBA object
    sValue : string(4096);
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // call request "NextValue"
    IiopRequest(hIiop, "NextValue");

     // retrieve value type return parameter
    IiopGetValue(hIiop, csTypecode, STRING_COMPLETE, sValue);
    write("retrieved value type:"); writeln;    WriteData(sValue, STRING_COMPLETE, OPT_WRITEDATA_HEX);
     IiopObjectRelease(hIiop);
  end TGetValue;

Output

retrieved value type: 00000000 ·······8RMI:java 7F FF FF 02 00 00 00 38 52 4D
49 3A 6A 61 76 61 00000010 .lang.Integer:64 2E 6C 61 6E 67 2E 49 6E 74 65
67 65 72 3A 36 34 00000020 D47C1D01980B5E:1 44 34 37 43 31 44 30 31 39 38
30 42 35 45 3A 31 00000030 2E2A0A4F7818738· 32 45 32 41 30 41 34 46 37 38
31 38 37 33 38 00 00000040 ···· 00 00 00 01
親トピック: Parameter Getting Functions
関連資料
IiopGetValueHeader Function


IiopGetValueHeader Function

Action

Retrieves information about a value type return parameter from a CORBA object based on the return value, either true or false. This function can be used to get the return parameters of an operation. If the return value is true, then only the header part is returned. If the return value is false, then the whole value is returned.

Include file

Iiop.bdh

Syntax

IiopGetValueHeader( in  hIiop     : number,
                    in  sTypecode : string,
                    in  nTcLen    : number optional,
                    out sBuf      : string optional,
                    in  nBufLen   : number optional,
                    out nUsed     : number optional): boolean;

Return value

  • true if the current value is a non-derived value (the repository IDs of the value and the typecode match) that does not contain other values.

  • false otherwise; the value may be a derived type or may contain other values, indirections, or null-values.

Parameter | Description
hIiop | Handle to a CORBA object.
sTypecode | Typecode needed for parsing the value type from the IIOP reply messages.
nTcLen | Length of sTypecode (optional).
sBuf | Buffer where the value header is copied to in case the return value is true (optional). If the return value is false the whole value is copied to this buffer.
sBufLen | Length of the buffer where the value is copied to (optional).
nUsed | Number of bytes that are copied to sBuf (optional).

Example

dcltrans
  transaction TGetValueHeader
  const
    HOST       := "192.168.20.21"; // server
    PORT       := 1052;            // port
    KEY        := "...\h00";       // key
    KEYLEN     := 4;               // key length
    csTypecode := "\h0000001D000000C20000000000000038524D49"
      "\h3A6A6176612E6C616E672E496E74656765723A363444343743"
      "\h314430313938304235453A3132453241304134463738313837"
      "\h33380000000008496E746567657200000000000000001D0000"
      "\h00580000000000000036524D493A6A6176612E6C616E672E4E"
      "\h756D6265723A3731444138424537463937313132383A383641"
      "\h43393531443042393445303842000000000000074E756D6265"
      "\h72000000020000000000000000000000000001000000010000"
      "\h0000000000030000";
  var
    hIiop : number; // Handle to CORBA object
    sValueHeader : string(4096);
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // call request "NextValue
    IiopRequest(hIiop, "NextValue");

    // retrieve value type return parameter
    if IiopGetValueHeader(hIiop, csTypecode, STRING_COMPLETE, sValueHeader) then
    writeln("retrieved value header:");
      WriteData(sValueHeader, STRING_COMPLETE, OPT_WRITEDATA_HEX);
    writeln("retrieved value: ");      write(IiopGetLong(hIiop));    else
    writeln("retrieved value type:");      WriteData(sValue, STRING_COMPLETE, OPT_WRITEDATA_HEX);
    end;
     IiopObjectRelease(hIiop);
  end TGetValueHeader;

Output

retrieved value header:00000000 ·······8RMI:java 7F FF FF 02 00 00 00 38 52 4D
49 3A 6A 61 76 6100000010 .lang.Integer:64 2E 6C 61 6E 67 2E 49 6E 74 65
67 65 72 3A 36 3400000020 D47C1D01980B5E:1 44 34 37 43 31 44 30 31 39 38
30 42 35 45 3A 3100000030 2E2A0A4F7818738· 32 45 32 41 30 41 34 46 37 38
31 38 37 33 38 00retrieved value: 1

or:

retrieved complete value:00000000 ·······8RMI:java 7F FF FF 02 00 00 00 38 52 4D
49 3A 6A 61 76 6100000010 .lang.Integer:64 2E 6C 61 6E 67 2E 49 6E 74 65
67 65 72 3A 36 3400000020 D47C1D01980B5E:1 44 34 37 43 31 44 30 31 39 38
30 42 35 45 3A 3100000030 2E2A0A4F7818738· 32 45 32 41 30 41 34 46 37 38
31 38 37 33 38 0000000040 ···· 00 00 00 01
親トピック: Parameter Getting Functions
関連資料
IiopGetValue Function


IiopGetWChar Function

Action

Retrieves a wide character return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetWChar( in  hIiop      : number,
              out nWCharSize : number optional ): number;

Return value

Wide character associated with the CORBA object

Parameter | Description
hIiop | Handle to a CORBA object.
nWCharSize | Variable that receives the wide character size associated with the CORBA object (optional).

Example

dcltrans
  transaction TGetWChar
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var    hIiop, nWChar : number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);
    // call request "NextWChar"
    IiopRequest(hIiop, "NextWChar");
    // retrieve wide character return parameter
    nWChar := IiopGetWChar(hIiop);
    write("retrieved wide character as number = "); writeln(nWChar);
    IiopObjectRelease(hIiop);
  end TGetChar;

Output

retrieved character as number = 4321

Sample scripts

TypeTest.bdf, Conf.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Parameter Getting Functions
関連資料
IiopSetWChar Function


IiopGetWString Function

Action

Retrieves a wide string return parameter from a CORBA object. This function can be used to get the return parameters of an operation.

Include file

IIOP.bdh

Syntax

IiopGetWString( in  hIiop     : number,
                out sBuffer   : string optional,
                in  nSize     : number optional,
                out nReceived : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sBuffer | Buffer that will receive the wide string return parameter from the CORBA object (optional).
nSize | Size of the buffer that will receive the wide string return parameter from the CORBA object (optional).
nReceived | Variable that will receive the number of bytes that were actually retrieved from the CORBA object (optional).

Example

dcltrans
  transaction TGetWChar
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop   : number;
    sString : string;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // call request "NextWString"
    IiopRequest(hIiop, "NextWString");

     // retrieve wide character return parameter
    IiopGetWString(hIiop, sString);
    IiopObjectRelease(hIiop);
  end TGetChar;
親トピック: Parameter Getting Functions
関連資料
IiopSetWString Function


IiopGetDataByTypeCode Function

Action

Retrieves a certain amount of data from a CORBA object. The data is described by a type code. This function is used, for example, to retrieve recursive data structures.

Include file

IIOP.bdh

Syntax

IiopGetDataByTypecode( in  hIiop       : number,
                       in  sTypeCode   : string,
                       in  nCodeLength : number optional,
                       out sBuffer     : string optional,
                       in  nSize       : number optional,
                       out nReceived   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sTypeCode | Type code that specifies which data is to be retrieved from the CORBA object.
nCodeLength | Length of the type code that specifies which data is to be retrieved from the CORBA object (optional).
sBuffer | Buffer that will receive the data from the CORBA object (optional).
nSize | Size of the buffer that will receive the data from the CORBA object (optional).
nReceived | Variable that will receive the number of bytes that were actually retrieved from the CORBA object (optional).

Example

dcltrans  transaction
 TGetChar
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052;            // port
    KEY    := "...\h00";       // key
    KEYLEN := 4;               // key length
  var
    hIiop              : number; // Handle to CORBA object
    sBuffer, sTypecode : string;    nTypecode, nLength : number;
  begin    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2", HOST, PORT, KEY, KEYLEN);

    // call request "GetLong"
    IiopRequest(hIiop, "GetLong");
    SetLong(sTypecode, 1, IIOP_TK_LONG);
    IiopGetDataByTypecode(hIiop, sTypecode, STRING_COMPLETE, sBuffer);

    Print("GetLong returned: " + string(GetLong(sBuffer, 1)));
    IiopObjectRelease(hIiop);
  end TGetChar;
親トピック: Parameter Getting Functions


Measurement Functions

  • IiopGetStatistics Function
    Measures a specified time or delay and the number of location forwards that were necessary to handle the request.
  • IiopObjectSetMeasures Function
    By default a timer is associated with any CORBA object in order to measure all operation calls and write the results to the Silk Performer results repository.
親トピック: CORBA Functions Reference


IiopGetStatistics Function

Action

Measures a specified time or delay and the number of location forwards that were necessary to handle the request.

Include file

IIOP.bdh

Syntax

IiopGetStatistics( in  hIiop     : number,
                   in  nMeasure  : number,
                   out nForwards : number,
                   out fTime     : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
nMeasure

Specifies which time or delay to measure. Possible values are:

  • IIOP_ROUNDTRIP. Total delay between starting and finishing processing the IIOP request

  • IIOP_SERVER_BUSY. Time passing from sending the last byte until receiving the first byte
nForwards | Variable receiving the number of location forwards that were necessary to handle the request
fTime | Variable receiving the time or delay (as the case may be) in seconds

Example

dcltrans
  transaction TGetStatistics
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop     : number; // handle to CORBA object
    nForwards : number;
    fTime     : float;
  begin
    IiopSetMaxGiopVersion("1.0");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);

    // call request "Init"
    IiopRequest(hIiop, "Init");

    // retrieve statistics
    IiopGetStatistics(hIiop, IIOP_ROUNDTRIP, nForwards, fTime);
    write("location forwards = "); write(nForwards); writeln;
    write("total delay = "); write(fTime); writeln;
    IiopObjectRelease(hIiop);
  end TGetStatistics;

Output

location forwards = 1total delay = 0.051000
親トピック: Measurement Functions
関連資料
IiopGetReplyDataLen Function
IiopGetReplyStatus Function


IiopObjectSetMeasures Function

Action

By default a timer is associated with any CORBA object in order to measure all operation calls and write the results to the Silk Performer results repository. This function must be called in order to specify a name for the default timer. Otherwise the default timer is not named.

Include file

IIOP.bdh

Syntax

IiopObjectSetMeasures( in hIiop    : number,
                       in sMeasure : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object
sMeasure | Name used to identify the measure

Example

dcltrans
  transaction TMain
  const
    HOST   := "192.168.20.21"; // server
    PORT   := 1052; // port
    KEY    := "...\h00"; // key
    KEYLEN := 4; // key length
  var
    hIiop     : number; // handle to CORBA object
    nForwards : number;
    fTime     : float;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);

    // retrieve handle to server
    IiopObjectCreate(hIiop, "IDL:DemoObject:1.0", "1.2",
                     HOST, PORT, KEY, KEYLEN);
    IiopObjectSetMeasures(hIiop, "Math object");
    ...
    IiopObjectRelease(hIiop);
  end TMain;

Sample scripts

AnyDemo.bdf, AsyncBank.bdf, Bank.bdf, SimpleAsyncBank.bdf, TypeTest.bdf, AsyncFact.bdf, AsyncOdb.bdf, Conf.bdf, DynAny.bdf, Factory.bdf, Odb.bdf, Vbrokerbank02.bdf

You can find the sample script(s) here: <Public documents>\Silk Performer <version>\Samples\Corba

親トピック: Measurement Functions
関連資料
IiopGetStatistics Function


Wonderwall Functions Overview

Orbix Wonderwall represents the very latest in cutting edge technology for Internet security. With Wonderwall, system administrators can have all of the security provided by a firewall for Internet Inter-ORB Protocol (IIOP) communication. Wonderwall looks and feels very much like a familiar Internet firewall and allows the examination, filtering, and logging of IIOP requests.

Silk Performer provides a number of functions to load test CORBA applications that make use of the Orbix Wonderwall:

注: You should use these functions only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.
  • IiopWWBind Function
    Initializes Silk Performer’s Wonderwall module.
  • IiopWWDaemonBind Function
    Returns a handle to the Orbix Daemon that is protected by the Wonderwall.
  • IiopWWServerBind Function
    Returns a handle to a proxified server object that is protected by the Wonderwall.
  • IiopWWRequest Function
    Sends a request to an object through the Wonderwall.
  • IiopWWGetObject Function
    Gets a proxy object (used to access the respective server object) that was returned by a preceding IiopWWRequest function call.
  • IiopWWPing Function
    Performs the _IT_PING operation for calls through the Wonderwall.
  • IiopWWIsA Function
    Performs the same check as the CORBA standard _is_a function.
親トピック: CORBA Functions Reference


IiopWWBind Function

Action

Initializes Silk Performer’s Wonderwall module. This function must be called before any Wonderwall access from within a test script.

注: You should use this function only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.

Include file

Wonderwall.bdh

Syntax

IiopWWBind( in sHost : string,
            in nPort : number ): number;

Return value

Handle to the Wonderwall object.

Parameter | Description
sHost | Wonderwall host
nPort | Wonderwall port

Example

dcltrans
  transaction TWWRequest
  const
    WW_HOST := "192.168.20.35"; // Wonderwall host
    WW_PORT := 16000;           // Wonderwall port
    HOST    := "192.168.20.21"; // server
    PORT    := 1052;            // port
  var
    hDaemon: number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopWWBind(WW_HOST, WW_PORT);

    // OrbixWeb bootstrapping with Wonderwall
    hDaemon := IiopWWDaemonBind(HOST, PORT);
    ...
  end TWWRequest;
親トピック: Wonderwall Functions Overview


IiopWWDaemonBind Function

Action

Returns a handle to the Orbix Daemon that is protected by the Wonderwall.

注: You should use this function only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.

Include file

Wonderwall.bdh

Syntax

IiopWWDaemonBind( in sHost : string,
                  in nPort : number ): number;

Return value

Handle to a proxy object to Orbix Daemon.

Parameter | Description
sHost | Orbix Daemon host.
nPort | Orbix Daemon port .

Example

dcltrans
  transaction TWWRequest
  const
    WW_HOST := "192.168.20.35"; // Wonderwall host
    WW_PORT := 16000;           // Wonderwall port
    HOST    := "192.168.20.21"; // server
    PORT    := 1052;            // port
  var
    hDaemon, hBank, hAccount: number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopWWBind(WW_HOST, WW_PORT);

    // OrbixWeb bootstrapping with Wonderwall
    hDaemon := IiopWWDaemonBind(HOST, PORT);

    // get proxy object reference to bank object
    hBank := IiopWWServerBind(hDaemon, HOST, "bank", "", "bank");

    // Create an account
    IiopSetString(hBank, "John Dow");
    IiopWWRequest(hBank, "newAccount");

    // extract new account object
    IiopWWGetObject(hBank, hAccount);
    ...
  end TWWRequest;
親トピック: Wonderwall Functions Overview


IiopWWServerBind Function

Action

Returns a handle to a proxified server object that is protected by the Wonderwall.

注: You should use this function only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.

Include file

Wonderwall.bdh

Syntax

IiopWWServerBind(in hDaemon : number,
in sHost : string,
in sServer : string,
in sMarker : string,
in sIfrName : string): number;

Return value

Handle to a proxified server object

Parameter | Description
hDaemon | Handle to the proxified Orbix Daemon object.
sHost | Server host.
sServer | Server name.
sMarker | Marker name of the object. If NULL, any Orbix(Web) object will match.
sIfrName | Interface Repository name of the object. Pass only the object name to the function, neither the "IDL:" prefix, nor the "1.2" suffix.

Example

dcltrans
transaction TWWRequest
const
WW_HOST := "192.168.20.35"; // Wonderwall host
WW_PORT := 16000; // Wonderwall port
HOST := "192.168.20.21"; // server
PORT := 1052; // port
var
hDaemon, hBank, hAccount : number;
begin
IiopSetMaxGiopVersion("1.2");
IiopSetByteOrder(IIOP_BIG_ENDIAN);
IiopWWBind(WW_HOST, WW_PORT);
// OrbixWeb bootstrapping with Wonderwall
hDaemon := IiopWWDaemonBind(HOST, PORT);
// get proxy object reference to bank object
hBank := IiopWWServerBind(hDaemon, HOST, "bank", "", "bank");
// Create an account
IiopSetString(hBank, "John Dow");
IiopWWRequest(hBank, "newAccount");
// extract new account object
IiopWWGetObject(hBank, hAccount);
...
end TWWRequest;
親トピック: Wonderwall Functions Overview


IiopWWRequest Function

Action

Sends a request to an object through the Wonderwall. When accessing an object through the Wonderwall, always use this function instead of IiopRequest.

Due to a Wonderwall misbehavior, you should not use the standard procedure in case of a location forward during a request.

注: You should use this function only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.

Include file

Wonderwall.bdh

Syntax

IiopWWRequest(in hIiop : number,
in sRequest : string,
in nFlag : number optional,
in nId : number optional): number;

Return value

  • REQUEST_SUCCESS if successful

  • REQUEST_FORWARD if a location forward occurred. It is up to the user to resend the request.

  • REQUEST_FAILED otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sRequest | Name of the requested operation.
nFlag

Specifies the request message variant sent to the server (optional). Possible values are:

  • IIOP_RESPONSE_EXPECTED. Waits for a response (default).

  • IIOP_ONEWAY. Expects no response from the server.

  • IIOP_NON_BLOCKING. Indicates that the caller will not wait for an immediate reply. This flag can be used to generate asynchronous IIOP traffic.

This parameter may be combined with the following flag:

  • IIOP_IGNORE_EXCEPTION. Avoids the generation of error messages.
nId

Identification number for this request (optional).

注: This parameter affects the function behavior only if nFlag is set to IIOP_NON_BLOCKING.

If an identification number is associated with a request, the IiopWaitForReply function can be used to wait for a reply from the request. Exceptional cases:

  • 0. Return parameters will not be stored, consequently no reply data can be retrieved (default).

  • -1 is not allowed.

Example

dcltrans
transaction TWWRequest
const
WW_HOST := "192.168.20.35"; // Wonderwall host
WW_PORT := 16000; // Wonderwall port
HOST := "192.168.20.21"; // server
PORT := 1052; // port
var
hDaemon, hBank, hAccount: number;
begin
IiopSetMaxGiopVersion("1.0");
IiopSetByteOrder(IIOP_BIG_ENDIAN);IiopWWBind(WW_HOST, WW_PORT);
// OrbixWeb bootstrapping with Wonderwall
hDaemon := IiopWWDaemonBind(HOST, PORT);
// get proxy object reference to bank object
hBank := IiopWWServerBind(hDaemon, HOST, "bank", "","bank");
// Create an account
IiopSetString(hBank, “John Dow”);
IiopWWRequest(hBank, "newAccount");
// extract new account object
IiopWWGetObject(hBank, hAccount);
end TWWRequest;
親トピック: Wonderwall Functions Overview


IiopWWGetObject Function

Action

Gets a proxy object (used to access the respective server object) that was returned by a preceding IiopWWRequest function call.

注: You should use this function only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.

Include file

Wonderwall.bdh

Syntax

IiopWWGetObject( in  hIiop   : number,
                 out hObject : number );
Parameter | Description
hIiop | Handle to a CORBA object
hObject | Variable receiving the proxy object to the server object

Example

dcltrans
  transaction TWWRequest
  const
    WW_HOST := "192.168.20.35"; // Wonderwall host
    WW_PORT := 16000;           // Wonderwall port
    HOST    := "192.168.20.21"; // server
    PORT    := 1052;            // port
  var
    hDaemon, hBank, hAccount: number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopWWBind(WW_HOST, WW_PORT);

    // OrbixWeb bootstrapping with Wonderwall
    hDaemon := IiopWWDaemonBind(HOST, PORT);

    // get proxy object reference to bank object
    hBank := IiopWWServerBind(hDaemon, HOST, "bank", "", "bank");

    // Create an account
    IiopSetString(hBank, "John Dow");
    IiopWWRequest(hBank, "newAccount");

    // extract new account object
    IiopWWGetObject(hBank, hAccount);
  end TWWRequest;
親トピック: Wonderwall Functions Overview


IiopWWPing Function

Action

Performs the _IT_PING operation for calls through the Wonderwall.

注: You should use this function only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.

Include file

Wonderwall.bdh

Syntax

IiopWWPing( in hIiop : number );
Parameter | Description
hIiop | Handle to a CORBA object

Example

dcltrans
  transaction TWWRequest
  const
    WW_HOST := "192.168.20.35"; // Wonderwall host
    WW_PORT := 16000;           // Wonderwall port
    HOST    := "192.168.20.21"; // server
    PORT    := 1052;            // port
  var
    hDaemon, hBank: number;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopWWBind(WW_HOST, WW_PORT);

    // OrbixWeb bootstrapping with Wonderwall
    hDaemon := IiopWWDaemonBind(HOST, PORT);

    // get proxy object reference to bank object
    hBank := IiopWWServerBind(hDaemon, HOST, "bank", "", "bank");
    IiopWWPing(hBank);
    ...
  end TWWRequest;
親トピック: Wonderwall Functions Overview


IiopWWIsA Function

Action

Performs the same check as the CORBA standard _is_a function.

注: You should use this function only for earlier versions than Wonderwall 3.0. For Wonderwall 3.0 and later versions, use the common CORBA functions.

Include file

Wonderwall.bdh

Syntax

IiopWWIsA( in hIiop       : number,
           in sIdentifier : string ): boolean;

Return value

  • true if the object’s interface matches sIdentifier

  • false otherwise

Parameter | Description
hIiop | Handle to a CORBA object.
sIdentifier | Interface repository string, eg.“IDL:<InterfaceName>:1.0”.

Example

dcltrans
  transaction TWWRequest
  const
    WW_HOST := "192.168.20.35"; // Wonderwall host
    WW_PORT := 16000;           // Wonderwall port
    HOST    := "192.168.20.21"; // server
    PORT    := 1052;            // port
  var
    hDaemon, hBank : number;
    bRet           : boolean;
  begin
    IiopSetMaxGiopVersion("1.2");
    IiopSetByteOrder(IIOP_BIG_ENDIAN);
    IiopWWBind(WW_HOST, WW_PORT);

    // OrbixWeb bootstrapping with Wonderwall
    hDaemon := IiopWWDaemonBind(HOST, PORT);

   // get proxy object reference to bank object
    hBank := IiopWWServerBind(hDaemon, HOST, "bank", "", "bank");
    bRet := IiopWWIsA(hBank, "IDL:bank:1.0");
    ...
  end TWWRequest;
親トピック: Wonderwall Functions Overview


Jolt Functions Reference

Silk Performer provides functions to simulate Jolt-based client/server interaction. The following Jolt objects are relevant for the simulation of such interaction:

JoltSessionAttributes:
Determines the server location and communication properties.
JoltSession:
Enables the client to create and shutdown Jolt sessions.
JoltRemoteService:
Provides the client’s view at a TUXEDO service and allows service invocation and data exchange.
JoltTransaction:
Required for transaction control.
JoltUserEvent:
Needed for event subscription and unsubscription.
  • Initialization Functions
    Lists BDL functions for initializing and starting the Java Virtual Machine.
  • Object Allocation Functions
    Lists BDL functions for creating and releasing Jolt objects.
  • Object Customization Functions
    Lists BDL functions for customizing Jolt object attributes.
  • Session Handling Functions
    Lists BDL functions for checking and terminating session objects.
  • Service Handling Functions
    Lists BDL functions for calling Jolt services and retrieving information from services.
  • Transaction Handling Functions
    Lists BDL functions for committing and rolling back transactions for a JoltTransaction object.
  • Event Handling Functions
    Lists BDL functions for deleting event subscriptions.
親トピック: Application Server Functions


Initialization Functions

  • JoltInit Function
    Initializes and starts the Java Virtual Machine.
親トピック: Jolt Functions Reference


JoltInit Function

Action

Initializes and starts the Java Virtual Machine. Silk Performer requires the JVM from Sun Microsystems and the Jolt packages from BEA Systems.

Include file

Jolt.bdh

Syntax

JoltInit( in nVersion   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nVersion

Version number of the Java Virtual Machine (optional). This parameter can be one of the following:

  • JVM_11. Java 1 Platform (Java 1.1.x)

  • JVM_12. Java 2 Platform (Java 1.2.x and later versions)

By default, the VM version, specified by the profile settings, is used.

注: The JavaSetOption function overrides the profile setting.

Example

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
  end TInit;
親トピック: Initialization Functions
関連資料
JavaSetOption Function


Object Allocation Functions

  • JoltSessionAttributesNew Function
    Creates a new JoltSessionAttributes object.
  • JoltSessionNew Function
    Creates a new JoltSession object.
  • JoltRemoteServiceNew Function
    Creates a new JoltRemoteService object.
  • JoltTransactionNew Function
    Creates a new JoltTransaction object.
  • JoltUserEventNew Function
    Creates a new JoltUserEvent object.
  • JoltFreeObject Function
    Releases a Jolt object created with JoltSessionAttributesNew, JoltSessionNew, JoltRemoteServiceNew, JoltTransactionNew or JoltUserEventNew and enables the Java Virtual machine to collect the related garbage object.
親トピック: Jolt Functions Reference


JoltSessionAttributesNew Function

Action

Creates a new JoltSessionAttributes object. A JoltSessionAttributes object defines the parameters for the JoltSessionNew function.

A JoltSessionAttributes object contains the following attributes:

  • APPADDRESS (string). Host name and port number of the Jolt Service Listener (JSL), separated by a colon (:)

  • IDLETIMEOUT (integer)

  • SENDTIMEOUT (integer)

  • RECVTIMEOUT (integer)

  • SESSIONTIMEOUT (integer). This attribute is read-only.

Include file

Jolt.bdh

Syntax

JoltSessionAttributesNew(): number;

Return value

Handle to the new JoltSessionAttributes object.

Example

var
  hSessionAttr: number;

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();

    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
  end TInit;

  transaction TShutdown
  begin
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class

親トピック: Object Allocation Functions
関連資料
JoltFreeObject Function
JoltRemoteServiceNew Function
JoltSessionNew Function
JoltTransactionNew Function
JoltUserEventNew Function


JoltSessionNew Function

Action

Creates a new JoltSession object. A JoltSession object represents the logon session object and is used to access available TUXEDO services. The JoltCheckAuthenticationLevel function can be used to retrieve the type of authentication that is required.

Include file

Jolt.bdh

Syntax

JoltSessionNew( in hSessionAttr  : number,
                in sUserName     : string allownull,
                in sUserRole     : string allownull,
                in sUserPassword : string allownull,
                in sAppPassword  : string allownull ): number;

Return value

Handle to the new JoltSession object.

Parameter | Description
hSessionAttr | Handle to a JoltSessionAttributes object that was created with JoltSessionAttributesNew
sUserName | Name that identifies the user to the Jolt/TUXEDO System. This parameter represents the name of the caller commonly entered in logon dialogs
sUserRole | Group name. This parameter is used to associate the client with a resource manager group name
sUserPassword | User password in unencrypted format. This parameter is used for validation against the user password
sAppPassword | Application password in unencrypted format. This parameter is used for validation against the application password

Example

var
  hSession, hSessionAttr: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
  end TInit;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSession class

親トピック: Object Allocation Functions
関連資料
JoltFreeObject Function
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltTransactionNew Function
JoltUserEventNew Function


JoltRemoteServiceNew Function

Action

Creates a new JoltRemoteService object. A JoltRemoteService object is used to perform a Request/Reply call. To make a call it is necessary to

  • instantiate an object of this class for the service,

  • set the parameters using the JoltSet functions,

  • send the request by calling the JoltCall function,

  • and to retrieve the parameters using the JoltGet functions.

Include file

Jolt.bdh

Syntax

JoltRemoteServiceNew( in sServiceName : string,
                      in hSession     : number,
                      in nVersion     : number optional ): number;

Return value

Handle to the new JoltRemoteService object

Parameter | Description
sServiceName | Name of the service
hSession | Handle to a JoltSession object the was created with JoltSessionNew
nVersion | Version number required by JoltRemoteService constructors to check the compatibility between the server and the client (optional). This parameter is not required for the Jolt 1.1 client package.

Example

var
  hSession, hSessionAttr, hInquiry: number;

dcltrans
  transaction TInit
  begin
  JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hInquiry := JoltRemoteServiceNew("INQUIRY", hSession);
  end TInit;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hInquiry);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltRemoteService class

親トピック: Object Allocation Functions
関連資料
JoltFreeObject Function
JoltSessionAttributesNew Function
JoltSessionNew Function
JoltTransactionNew Function
JoltUserEventNew Function


JoltTransactionNew Function

Action

Creates a new JoltTransaction object. A JoltTransaction object can be used to include several services into a single transaction. Calling this function implies the beginning of the transaction. When a transaction is timed out, the user must rollback the transaction immediately. Service calls become part of a transaction when the associated transaction object is passed to the service call (see JoltCall function).

Include file

Jolt.bdh

Syntax

JoltTransactionNew( in nTimeout : number,
                    in hSession : number ): number;

Return value

Handle to the new JoltTransaction object.

Parameter | Description
nTimeout | Timeout for the transaction. If the transaction is not completed within this period of time, Jolt generates a transaction exception. Specifying a timeout of 0 sets the timeout to the maximum value for the system
hSession | Handle to a JoltSession object created with JoltSessionNew

Example

var
  hSession, hSessionAttr, hTransaction: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
  end TInit;

  transaction TMain
  begin
    hTransaction := JoltTransactionNew(0, hSession);
    ...
    JoltCommit(hTransaction);
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hTransaction);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltTransaction class

親トピック: Object Allocation Functions
関連資料
JoltFreeObject Function
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltSessionNew Function
JoltUserEventNew Function


JoltUserEventNew Function

Action

Creates a new JoltUserEvent object. A JoltUserEvent object represents a subscription to an asynchronous notification event. An asynchronous notification is either an unsolicited event notification or event notification from the TUXEDO Event Broker. In Silk Performer, the Jolt default event handler is used for all events.

Include file

Jolt.bdh

Syntax

JoltUserEventNew( in sExpression : string,
                  in sFilter     : string allownull,
                  in hSession    : number ): number;

Return value

Handle to the new JoltUserEvent object.

Parameter | Description
sExpression | Regular expression for event notification. This parameter is a string containing a regular expression of the same format as the event expression used in Tux_tpsubscribe. To subscribe unsolicited messages, use the constant ULSOLMSG.
sFilter | String of the same format as the filter parameter passed to Tux_tpsubscribe. Filter rules are specific to the buffers to which they are applied
hSession | Handle to a JoltSession object that was created with JoltSessionNew

Example

var
  hSession, hSessionAttr, hUserEvent: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hUserEvent := JoltUserEventNew(UNSOLMSG, NULL, hSession);
  end TInit;
  transaction TShutdown
  begin
    JoltUnsubscribe(hUserEvent);
    JoltEndSession(hSession);
    JoltFreeObject(hUserEvent);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltUserEvent class

親トピック: Object Allocation Functions
関連資料
JoltFreeObject Function
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltSessionNew Function
JoltTransactionNew Function


JoltFreeObject Function

Action

Releases a Jolt object created with JoltSessionAttributesNew, JoltSessionNew, JoltRemoteServiceNew, JoltTransactionNew or JoltUserEventNew and enables the Java Virtual machine to collect the related garbage object.

Include file

Jolt.bdh

Syntax

JoltFreeObject( inout hJolt : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to the Jolt object that is to be released

Example

var
  hSession, hSessionAttr, hInquiry: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hInquiry := JoltRemoteServiceNew("INQUIRY", hSession);
  end TInit;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hInquiry);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;
親トピック: Object Allocation Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltSessionNew Function
JoltTransactionNew Function
JoltUserEventNew Function


Object Customization Functions

  • JoltSetByte Function
    Assigns a specified value to a one-byte item (“byte” in Java) of a Jolt object attribute.
  • JoltSetCarray Function
    Assigns specified data to a binary data item (“byte[]” in Java) of a Jolt object attribute.
  • JoltSetDouble Function
    Assigns a specified value to an eight-byte floating-point item (“double” in Java) of a Jolt object attribute.
  • JoltSetFloat Function
    Assigns a specified value to a four-byte floating-point item (“float” in Java) of a Jolt object attribute.
  • JoltSetInt Function
    Assigns a specified value to a four-byte item (“int” in Java) of a Jolt object attribute.
  • JoltSetShort Function
    Assigns a specified value to a two-byte item (“short” in Java) of a Jolt object attribute.
  • JoltSetString Function
    Assigns a specified string to a string item (“java.lang.String” in Java) of a Jolt object attribute.
  • JoltGetByte Function
    Retrieves the value of a one-byte item (“byte” in Java) of a Jolt object attribute.
  • JoltGetCarray Function
    Retrieves data from a binary byte item (“byte[]” in Java) of a Jolt object attribute.
  • JoltGetDouble Function
    Retrieves the value of an eight-byte floating-point item (“double” in Java) of a Jolt object attribute.
  • JoltGetFloat Function
    Retrieves the value of a four-byte floating-point item (“float” in Java) of a Jolt object attribute.
  • JoltGetInt Function
    Retrieves the value of a four-byte item (“int” in Java) of a Jolt object attribute.
  • JoltGetShort Function
    Retrieves the value of a two-byte item (“short” in Java) of a Jolt object attribute.
  • JoltGetString Function
    Retrieves the string from a string item (“java.lang.String” in Java) of a Jolt object attribute.
  • JoltClear Function
    Clears all input/output data of a Jolt object.
  • JoltDelete Function
    Deletes an item of a Jolt object attribute.
親トピック: Jolt Functions Reference


JoltSetByte Function

Action

Assigns a specified value to a one-byte item (“byte” in Java) of a Jolt object attribute. This function is provided to set values of both JoltSessionAttributes and JoltRemoteService object attributes. Besides, this function can be used to add new items to existing attributes as well as to create new attributes.

Include file

Jolt.bdh

Syntax

JoltSetByte( in hJolt       : number,
             in sAttribute  : string,
             in nValue      : number,
             in nOccurrence : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
nValue | Value that is assigned to the specified attribute
nOccurrence | Index of the item that is to be set (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is set. If this parameter is set to ADD_VALUE, a new item is appended to the attribute (provided that the specified attribute already exists; otherwise, if the specified attribute does not yet exist, a new attribute with the given properties is created) 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("TOUPPER", hSession);
  end TInit;

  transaction TMain
  var
    nChar: number;
  begin
    JoltSetByte(hRemoteService, "ASCII_CODE", ord('a'));
    JoltCall(hRemoteService);
    nChar := JoltGetByte(hRemoteService, "ASCII_CODE", 0);
    writeln(nChar);
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltSetCarray Function

Action

Assigns specified data to a binary data item (“byte[]” in Java) of a Jolt object attribute. This function is provided to set data of both JoltSessionAttributes and JoltRemoteService object attributes. Besides, this function can be used to add new items to existing attributes as well as to create new attributes.

Include file

Jolt.bdh

Syntax

JoltSetCarray( in hJolt       :number,
               in sAttribute  : string,
               in sBinary     : string allownull,
               in nBinarySize : number optional,
               in nOccurrence : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
sBinary | Binary data that is assigned to the specified attribute
nBinarySize | Amount of binary data (in bytes) that is assigned to the specified attribute (optional).
nOccurrence | Index of the item that is to be set (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is set. If this parameter is set to ADD_VALUE, a new item is appended to the attribute (provided that the specified attribute already exists; otherwise, if the specified attribute does not yet exist, a new attribute with the given properties is created) 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("XOR", hSession);
  end TInit;

transaction TMain
  var
    sBinary    : string;
    nBinaryLen : number;
  begin
     JoltSetCarray(hRemoteService, "PLAIN", "\h45E295AFD03B631200");
     JoltSetCarray(hRemoteService, "PASSWORD", "secret\x00");
    JoltCall(hRemoteService);
    JoltGetCarray(hRemoteService, "CODE", NULL, 0, sBinary);
  end TMain;

transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltSetDouble Function

Action

Assigns a specified value to an eight-byte floating-point item (“double” in Java) of a Jolt object attribute. This function is provided to set values of both JoltSessionAttributes and JoltRemoteService object attributes. Besides, this function can be used to add new items to existing attributes as well as to create new attributes.

Include file

Jolt.bdh

Syntax

JoltSetDouble( in hJolt       : number,
               in sAttribute  : string,
               in fValue      : float,
               in nOccurrence : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
fValue | Floating-point value that is assigned to the specified attribute
nOccurrence | Index of the item that is to be set (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is set. If this parameter is set to ADD_VALUE, a new item is appended to the attribute (provided that the specified attribute already exists; otherwise, if the specified attribute does not yet exist, a new attribute with the given properties is created) 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;
  transaction TMain
  var
    fSum: float;
  begin
    JoltSetDouble(hRemoteService, "DVALUE", 23.7, ADD_VALUE);
    JoltSetDouble(hRemoteService, "DVALUE", 11.91, ADD_VALUE);
    JoltCall(hRemoteService);
    fSum := JoltGetDouble(hRemoteService, "RESULT", 0.0);
    writeln(fSum);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltSetFloat Function

Action

Assigns a specified value to a four-byte floating-point item (“float” in Java) of a Jolt object attribute. This function is provided to set values of both JoltSessionAttributes and JoltRemoteService object attributes. Besides, this function can be used to add new items to existing attributes as well as to create new attributes.

Include file

Jolt.bdh

Syntax

JoltSetFloat( in hJolt       : number,
              in sAttribute  : string,
              in fValue      : float,
              in nOccurrence : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
fValue | Floating-point value that is assigned to the specified attribute
nOccurrence | Index of the item that is to be set (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is set. If this parameter is set to ADD_VALUE, a new item is appended to the attribute (provided that the specified attribute already exists; otherwise, if the specified attribute does not yet exist, a new attribute with the given properties is created) 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;
  transaction TMain
  var
    fSum: float;
  begin
    JoltSetFloat(hRemoteService, "FVALUE", 23.7, ADD_VALUE);
    JoltSetFloat(hRemoteService, "FVALUE", 11.91, ADD_VALUE);
    JoltCall(hRemoteService);
    fSum := JoltGetFloat(hRemoteService, "RESULT", 0.0);
    writeln(fSum);
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltSetInt Function

Action

Assigns a specified value to a four-byte item (“int” in Java) of a Jolt object attribute. This function is provided to set values of both JoltSessionAttributes and JoltRemoteService object attributes. Besides, this function can be used to add new items to existing attributes as well as to create new attributes.

Include file

Jolt.bdh

Syntax

JoltSetInt( in hJolt       : number,
            in sAttribute  : string,
            in nValue      : number,
            in nOccurrence : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
nValue | Value that is assigned to the specified attribute
nOccurrence | Index of the item that is to be set (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is set. If this parameter is set to ADD_VALUE, a new item is appended to the attribute (provided that the specified attribute already exists; otherwise, if the specified attribute does not yet exist, a new attribute with the given properties is created) 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;

transaction TMain
  var
    nSum: number;
  begin
    JoltSetInt(hRemoteService, "IVALUE", 23, ADD_VALUE);
    JoltSetInt(hRemoteService, "IVALUE", 11, ADD_VALUE);
    JoltCall(hRemoteService);
    nSum := JoltGetInt(hRemoteService, "RESULT", 0);
    writeln(nSum);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltSetShort Function

Action

Assigns a specified value to a two-byte item (“short” in Java) of a Jolt object attribute. This function is provided to set values of both JoltSessionAttributes and JoltRemoteService object attributes. Besides, this function can be used to add new items to existing attributes as well as to create new attributes.

Include file

Jolt.bdh

Syntax

JoltSetShort( in hJolt       : number,
              in sAttribute  : string,
              in nValue      : number,
              in nOccurrence : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
nValue | Value that is assigned to the specified attribute
nOccurrence | Index of the item that is to be set (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is set. If this parameter is set to ADD_VALUE, a new item is appended to the attribute (provided that the specified attribute already exists; otherwise, if the specified attribute does not yet exist, a new attribute with the given properties is created) 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;

  transaction TMain
  var
    nSum: number;
  begin
    JoltSetShort(hRemoteService, "SVALUE", 23, ADD_VALUE);
    JoltSetShort(hRemoteService, "SVALUE", 11, ADD_VALUE);
    JoltCall(hRemoteService);
    nSum := JoltGetShort(hRemoteService, "RESULT", 0);
    writeln(nSum);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltSetString Function

Action

Assigns a specified string to a string item (“java.lang.String” in Java) of a Jolt object attribute. This function is provided to set strings of both JoltSessionAttributes and JoltRemoteService object attributes. Besides, this function can be used to add new items to existing attributes as well as to create new attributes.

Include file

Jolt.bdh

Syntax

JoltSetString( in hJolt       : number,
               in sAttribute  : string,
               in sString     : string,
               in nOccurrence : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
sString | String that is assigned to the specified attribute
nOccurrence | Index of the item that is to be set (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is set. If this parameter is set to ADD_VALUE, a new item is appended to the attribute (provided that the specified attribute already exists; otherwise, if the specified attribute does not yet exist, a new attribute with the given properties is created) 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, AVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("TOUPPER", hSession);
  end TInit;
  transaction TMain
  var
    sString: string;
  begin
    JoltSetString(hRemoteService, "STRARG", "hello  world!");
    JoltCall(hRemoteService);
    JoltGetString(hRemoteService, "RESULT", "", sString);
    writeln(sString);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetByte Function

Action

Retrieves the value of a one-byte item (“byte” in Java) of a Jolt object attribute. This function is provided to retrieve values from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltGetByte( in hJolt       : number,
             in sAttribute  : string,
             in nDefault    : number,
             in nOccurrence : number optional ): number;

Return value

Value of the specified one-byte item of the Jolt object attribute.

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
nDefault | Value that the function returns if the specified attribute or item does not exist
nOccurrence | Index of the item that is to be retrieved (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is retrieved. 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("TOUPPER", hSession);
  end TInit;

  transaction TMain
  var
    nChar: number;
  begin
    JoltSetByte(hRemoteService, "ASCII_CODE", ord('a'));
    JoltCall(hRemoteService);
    nChar := JoltGetByte(hRemoteService, "ASCII_CODE", 0);
    writeln(nChar);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetCarray Function

Action

Retrieves data from a binary byte item (“byte[]” in Java) of a Jolt object attribute. This function is provided to retrieve data from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltGetCarray( in  hJolt        : number,
               in  sAttribute   : string,
               in  sDefault     : string allownull,
               in  nDefaultSize : number,
               out sBinary      : string allownull,
               in  nBinarySize  : number optional,
               out nBinaryLen   : number optional,
               in  nOccurrence  : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
sDefault | Binary data that the function accesses if the specified attribute or item does not exist
nDefaultSize | Amount of binary data (in bytes) that the function accesses if the specified attribute or item does not exist
sBinary | Buffer receiving the binary data
nBinarySize | Size of the buffer that receives the binary data (optional).
nBinaryLen | Variable receiving the actual amount of data (in bytes) that was received (optional).
nOccurrence | Index of the item that is to be retrieved (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is retrieved. Note: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("XOR", hSession);
  end TInit;

  transaction TMain
  var
    sBinary : string;
    nBinaryLen : number;
  begin
    JoltSetCarray(hRemoteService, "PLAIN", "\h45E295AFD03B631200");
    JoltSetCarray(hRemoteService, "PASSWORD", "secret\x00");
    JoltCall(hRemoteService);
    JoltGetCarray(hRemoteService, "CODE", NULL, 0, sBinary);
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetDouble Function

Action

Retrieves the value of an eight-byte floating-point item (“double” in Java) of a Jolt object attribute. This function is provided to retrieve values from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltGetDouble( in hJolt       : number,
               in sAttribute  : string,
               in fDefault    : float,
               in nOccurrence : number optional): float;

Return value

Value of the specified eight-byte floating-point item of the Jolt object attribute.

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
fDefault | Floating-point value that the function returns if the specified attribute or item does not exist
nOccurrence | Index of the item that is to be retrieved (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is retrieved. 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;

  transaction TMain
  var
    fSum: float;

  begin
    JoltSetDouble(hRemoteService, "DVALUE", 23.7, ADD_VALUE);
    JoltSetDouble(hRemoteService, "DVALUE", 11.91, ADD_VALUE);
    JoltCall(hRemoteService);
    fSum := JoltGetDouble(hRemoteService, "RESULT", 0.0);
    writeln(fSum);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetFloat Function

Action

Retrieves the value of a four-byte floating-point item (“float” in Java) of a Jolt object attribute. This function is provided to retrieve values from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltGetFloat( in hJolt       : number,
              in sAttribute  : string,
              in fDefault    : float,
              in nOccurrence : number optional ): float;

Return value

Value of the specified four-byte floating-point item of the Jolt object attribute.

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
fDefault | Floating-point value that the function returns if the specified attribute or item does not exist
nOccurrence | Index of the item that is to be retrieved (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is retrieved. 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;

  transaction TMain
  var
    fSum: float;
  begin
    JoltSetFloat(hRemoteService, "FVALUE", 23.7, ADD_VALUE);
    JoltSetFloat(hRemoteService, "FVALUE", 11.91, ADD_VALUE);
    JoltCall(hRemoteService);
    fSum := JoltGetFloat(hRemoteService, "RESULT", 0.0);
    writeln(fSum);
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetInt Function

Action

Retrieves the value of a four-byte item (“int” in Java) of a Jolt object attribute. This function is provided to retrieve values from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltGetInt( in hJolt       : number,
            in sAttribute  : string,
            in nDefault    : number,
            in nOccurrence : number optional ): number;

Return value

Value of the specified four-byte item of the Jolt object attribute.

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
nDefault | Value that the function returns if the specified attribute or item does not exist
nOccurrence | Index of the item that is to be retrieved (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is retrieved. 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;

  transaction TMain
  var
    nSum: number;
  begin
    JoltSetInt(hRemoteService, "IVALUE", 23, ADD_VALUE);
    JoltSetInt(hRemoteService, "IVALUE", 11, ADD_VALUE);
    JoltCall(hRemoteService);    nSum := JoltGetInt(hRemoteService, "RESULT", 0);
    writeln(nSum);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetShort Function

Action

Retrieves the value of a two-byte item (“short” in Java) of a Jolt object attribute. This function is provided to retrieve values from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltGetShort( in hJolt       : number,
              in sAttribute  : string,
              in nDefault    : number,
              in nOccurrence : number optional ): number;

Return value

Value of the specified two-byte item of the Jolt object attribute.

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
nDefault | Value that the function returns if the specified attribute or item does not exist
nOccurrence | Index of the item that is to be retrieved (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is retrieved. 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;
  transaction TMain
  var
    nSum: number;
  begin
    JoltSetShort(hRemoteService, "SVALUE", 23, ADD_VALUE);
    JoltSetShort(hRemoteService, "SVALUE", 11, ADD_VALUE);
    JoltCall(hRemoteService);
    nSum := JoltGetShort(hRemoteService, "RESULT", 0);
  writeln(nSum);
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetString Function

Action

Retrieves the string from a string item (“java.lang.String” in Java) of a Jolt object attribute. This function is provided to retrieve strings from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltGetString( in  hJolt       : number,
               in  sAttribute  : string,
               in  sDefault    : string,
               out sString     : string,
               in  nStringSize : number optional,
               in  nOccurrence : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively
sAttribute | Name of the attribute that is to be accessed
sDefault | String that the function returns if the specified attribute or item does not exist
sString | Buffer receiving the string
nStringSize | Size of the buffer that receives the string (optional).
nOccurrence | Index of the item that is to be retrieved (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is retrieved. 注: This parameter is ignored if hJolt represents a JoltSessionAttributes object.

Example

var
  hSession, hSessionAttr, hRemoteService: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("TOUPPER", hSession);
  end TInit;

  transaction TMain
  var
    sString: string;
  begin
    JoltSetString(hRemoteService, "STRARG", "hello world!");
    JoltCall(hRemoteService);
    JoltGetString(hRemoteService, "RESULT", "", sString);
    writeln(sString);
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltClear Function

Action

Clears all input/output data of a Jolt object. This function is provided to clear data of both JoltSessionAttributes and JoltRemoteService objects.

Include file

Jolt.bdh

Syntax

JoltClear( in hJolt: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hJolt | Handle to a JoltSessionAttributes or JoltRemoteService object that was created with JoltSessionAttributesNew or JoltRemoteServiceNew, respectively

Example

var
  hSession, hSessionAttr, hRemoteService: number;

dcltrans
  transaction TMain
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SERVICE1", hSession);
    JoltCall(hRemoteService);
    JoltClear(hRemoteService);
     hRemoteService := JoltRemoteServiceNew("SERVICE2", hSession);
    JoltCall(hRemoteService);
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TMain;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function


JoltDelete Function

Action

Deletes an item of a Jolt object attribute. If an attribute consists of only one item, the complete attribute is deleted. This function is provided to delete items from both JoltSessionAttributes and JoltRemoteService object attributes.

Include file

Jolt.bdh

Syntax

JoltDelete( in hRemoteService : number,
            in sAttribute     : string,
            in nOccurrence    : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRemoteService | Handle to a JoltRemoteService object that was created with JoltRemoteServiceNew
nAttribute | Name of the attribute that is to be modified
nOccurrence | Index of the item that is to be deleted (optional). The index of an attribute’s first item is 1 (not 0). If this parameter is omitted, the attribute’s first item is deleted

Example

var
  hSession, hSessionAttr, hRemoteService: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;

  transaction TMain
  var
    nSum: number;
  begin
    JoltSetInt(hRemoteService, "IVALUE", 23, ADD_VALUE);
    JoltSetInt(hRemoteService, "IVALUE", 11, ADD_VALUE);
    JoltSetInt(hRemoteService, "IVALUE", 38, ADD_VALUE);
    JoltDelete(hRemoteService, "IVALUE", 2);
    JoltCall(hRemoteService);
    nSum := JoltGetInt(hRemoteService, "RESULT", 0);
    writeln(nSum);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class, bea.jolt.JoltRemoteService class

親トピック: Object Customization Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function


Session Handling Functions

  • JoltCheckAuthenticationLevel Function
    Retrieves the authentication level set by the TUXEDO administrator.
  • JoltIsAlive Function
    Checks whether a session is still alive.
  • JoltEndSession Function
    Terminate a specified session and obsoletes the session object.
親トピック: Jolt Functions Reference


JoltCheckAuthenticationLevel Function

Action

Retrieves the authentication level set by the TUXEDO administrator. The authentication level determines which attributes of the JoltSessionAttributes object must necessarily be set.

Include file

Jolt.bdh

Syntax

JoltCheckAuthenticationLevel( in hSessionAttr: number ): number;

Return value

Authentication level, one of the following:

  • NOAUTH. No authentication

  • APPASSWORD. User name, user role and application password required

  • USRPASSWORD. Like APPASSWORD, in addition the user password is required

Parameter | Description
hSessionAttr | Handle to a JoltSessionAttributes object that was created with JoltSessionAttributesNew

Example

var
  hSessionAttr: number;
 dcltrans
  transaction TInit
  var
    nLevel: number;
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");

    nLevel := JoltCheckAuthenticationLevel(hSessionAttr);
    if nLevel = NOAUTH then
      writeln("no authentication required");
    elseif nLevel = APPASSWORD then
      writeln("user name, user role and app password required");
    elseif nLevel = USRASSWORD then
      writeln("user name, user password, "
           "user role and app password required");

     end;
  end TInit;

  transaction TShutdown
  begin
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class

親トピック: Session Handling Functions
関連資料
JoltEndSession Function
JoltIsAlive Function
JoltSessionAttributesNew Function


JoltIsAlive Function

Action

Checks whether a session is still alive.

Include file

Jolt.bdh

Syntax

JoltIsAlive( in hSession : number ): boolean;

Return value

  • true if the specified session is still alive

  • false otherwise

Parameter | Description
hSession | Handle to a JoltSession object that was created with JoltSessionNew

Example

var
  hSession, hSessionAttr: number;

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
  end TInit;

  transaction TMain
  begin
    if JoltIsAlive(hSession) then
      ...
    end;
  end TMain;
  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSession class

親トピック: Session Handling Functions
関連資料
JoltCheckAuthenticationLevel Function
JoltEndSession Function


JoltEndSession Function

Action

Terminate a specified session and obsoletes the session object.

Include file

Jolt.bdh

Syntax

JoltEndSession( in hSession: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSession | Handle to a JoltSession object that was created with JoltSessionNew

Example

var
  hSession, hSessionAttr: number;

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS,"//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
  end TInit;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltSessionAttributes class

親トピック: Session Handling Functions
関連資料
JoltCheckAuthenticationLevel Function
JoltIsAlive Function


Service Handling Functions

  • JoltCall Function
    Calls a specified service.
  • JoltSetRequestPriority Function
    Sets the request priority service attribute.
  • JoltGetOccurrenceCount Function
    Retrieves the number of occurrences of a specified JoltRemoteService object attribute item.
  • JoltGetName Function
    Retrieves the name of the service.
  • JoltGetApplicationCode Function
    Retrieves the application code (user return code in TUXEDO ATMI)returned by a specified service.
親トピック: Jolt Functions Reference


JoltCall Function

Action

Calls a specified service.

Include file

Jolt.bdh

Syntax

JoltCall( in hRemoteService : number,
          in hTransaction   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRemoteService | Handle to a JoltRemoteService object that was created with JoltRemoteServiceNew
hTransaction | Handle to a JoltTransaction object that was created with JoltTransactionNew (optional). If this parameter is omitted, the specified service is excluded from any transaction.

Example

var
  hSession, hSessionAttr, hInquiry: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hInquiry := JoltRemoteServiceNew("INQUIRY", hSession);
  end TInit;

  transaction TMain
  var
    sBalance: string;
  begin
    JoltSetInt(hInquiry, "ACCOUNT_ID", 10001);
    JoltCall(hInquiry);
    JoltGetString(hInquiry, "SBALANCE", "", sBalance);
    writeln(sBalance);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hInquiry);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltRemoteService class

親トピック: Service Handling Functions


JoltSetRequestPriority Function

Action

Sets the request priority service attribute.

Include file

Jolt.bdh

Syntax

JoltSetRequestPriority( in hRemoteService : number,
                        in nPriority      : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRemoteService | Handle to a JoltRemoteService object that was created with JoltRemoteServiceNew
nPriority | Service priority value between 1 and 100 inclusive

Example

var
  hSession, hSessionAttr, hInquiry: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hInquiry := JoltRemoteServiceNew("INQUIRY", hSession);
  end TInit;

  transaction TMain
  var
    sBalance: string;
  begin
    JoltSetRequestPriority(hInquiry, 1);
    JoltSetInt(hInquiry, "ACCOUNT_ID", 10001);
    JoltCall(hInquiry);
    JoltGetString(hInquiry, "SBALANCE", "", sBalance);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hInquiry);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltRemoteService class

親トピック: Service Handling Functions


JoltGetOccurrenceCount Function

Action

Retrieves the number of occurrences of a specified JoltRemoteService object attribute item.

Include file

Jolt.bdh

Syntax

JoltGetOccurrenceCount( in hRemoteService : number,
                        in sAttribute     : string ): number;

Return value

Number of occurrences of the specified JoltRemoteService object attribute item.

Parameter | Description
hRemoteService | Handle to a JoltRemoteService object that was created with JoltRemoteServiceNew
sAttribute | Name of the attribute item

Example

var
  hSession, hSessionAttr, hRemoteService: number;
dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hRemoteService := JoltRemoteServiceNew("SUM", hSession);
  end TInit;
    transaction TMain
  var
    nSum: number;
  begin
    JoltSetInt(hRemoteService, "IVALUE", 23, ADD_VALUE);
    JoltSetInt(hRemoteService, "IVALUE", 11, ADD_VALUE);
    JoltSetInt(hRemoteService, "IVALUE", 38, ADD_VALUE);
    write(JoltGetOccurrenceCount(hRemoteService, "IVALUE"));
    JoltCall(hRemoteService);
    nSum := JoltGetInt(hRemoteService, "RESULT", 0);
    writeln(nSum);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hRemoteService);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltRemoteService class

親トピック: Service Handling Functions


JoltGetName Function

Action

Retrieves the name of the service.

Include file

Jolt.bdh

Syntax

JoltGetName( in  hRemoteService : number,
             out sName          : string,
             in  nNameSize      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hRemoteService | Handle to a JoltRemoteService object that was created with JoltRemoteServiceNew
sName | String variable receiving the service name
nNameSize | Size of the string variable that receives the service name (optional).

Example

var
  hSession, hSessionAttr, hInquiry: number;
 dcltrans
  transaction TInit
  var
    sName: string;
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();
    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hInquiry := JoltRemoteServiceNew("INQUIRY", hSession);
    JoltGetName(hInquiry, sName);
    writeln(sName);
  end TInit;

  transaction TShutdown
  begin    JoltEndSession(hSession);
    JoltFreeObject(hInquiry);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltRemoteService class

親トピック: Service Handling Functions
関連資料
JoltRemoteServiceNew Function
JoltSessionAttributesNew Function
JoltDelete Function
JoltClear Function


JoltGetApplicationCode Function

Action

Retrieves the application code (user return code in TUXEDO ATMI)returned by a specified service.

Include file

Jolt.bdh

Syntax

JoltGetApplicationCode( in hRemoteService : number ): number;

Return value

Application code that was returned by the specified service.

Parameter | Description
hRemoteService | Handle to a JoltRemoteService object that was created with JoltRemoteServiceNew

Example

var
  hSession, hSessionAttr, hInquiry: number;
 dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();

    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hInquiry := JoltRemoteServiceNew("INQUIRY", hSession);
  end TInit;

  transaction TMain
  begin
    JoltSetInt(hInquiry, "ACCOUNT_ID", 10001);
    JoltCall(hInquiry);
    writeln(JoltGetApplicationCode(hInquiry));
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hInquiry);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltRemoteService class

親トピック: Service Handling Functions


Transaction Handling Functions

  • JoltCommit Function
    Performs the transaction commit for a JoltTransaction object.
  • JoltRollback Function
    Performs the transaction rollback for a JoltTransaction object.
親トピック: Jolt Functions Reference


JoltCommit Function

Action

Performs the transaction commit for a JoltTransaction object.

Include file

Jolt.bdh

Syntax

JoltCommit( in hTransaction: number ):boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTransaction | Handle to a JoltTransaction object that was created with JoltTransactionNew

Example

var
  hSession, hSessionAttr, hTransaction: number;

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
  end TInit;

  transaction TMain
  begin
    hTransaction := JoltTransactionNew(0, hSession);
    ...
    JoltCommit(hTransaction);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hTransaction);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltTransaction class

親トピック: Transaction Handling Functions
関連資料
JoltRollback Function
JoltTransactionNew Function


JoltRollback Function

Action

Performs the transaction rollback for a JoltTransaction object.

Include file

Jolt.bdh

Syntax

JoltRollback( in hTransaction : number ):boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTransaction | Handle to a JoltTransaction object that was created with JoltTransactionNew

Example

var
  hSession, hSessionAttr, hTransaction: number;
 dcltrans
  transaction TInit
  begin
     JavaSetOption(JAVA_VERSION, JAVA_V11);
     JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
     JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
     JoltInit();
     hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
  end TInit;
  transaction TMain
  begin
    hTransaction := JoltTransactionNew(0, hSession);
    ...
    JoltRollback(hTransaction);
  end TMain;

  transaction TShutdown
  begin
    JoltEndSession(hSession);
    JoltFreeObject(hTransaction);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltTransaction class

親トピック: Transaction Handling Functions
関連資料
JoltCommit Function
JoltTransactionNew Function


Event Handling Functions

  • JoltUnsubscribe Function
    Deletes the subscription to an event.
  • JoltUnsubscribeAll Function
    Unsubscribes all event subscriptions in a specified session.
親トピック: Jolt Functions Reference


JoltUnsubscribe Function

Action

Deletes the subscription to an event.

Include file

Jolt.bdh

Syntax

JoltUnsubscribe( in hUserEvent : number ):number;

Return value

Number of subscriptions deleted.

Parameter | Description
hUserEvent | Handle to a JoltUserEvent object that was created with JoltUserEventNew

Example

var
  hSession, hSessionAttr, hUserEvent: number;

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();

    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hUserEvent := JoltUserEventNew("*", NULL, hSession);
  end TInit;

  transaction TShutdown
  begin
    JoltUnsubscribe(hUserEvent);
    JoltEndSession(hSession);
    JoltFreeObject(hUserEvent);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltUserEvent class

親トピック: Event Handling Functions
関連資料
JoltUnsubscribeAll Function
JoltUserEventNew Function


JoltUnsubscribeAll Function

Action

Unsubscribes all event subscriptions in a specified session.

Include file

Jolt.bdh

Syntax

JoltUnsubscribeAll( in hSession : number ): number;

Return value

Number of subscriptions deleted.

Parameter | Description
hSession | Handle to a JoltSession object that was created with JoltSessionNew

Example

var
  hSession, hSessionAttr, hUserEvent: number;

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/jdk1.1.7");
    JoltInit();

    hSessionAttr := JoltSessionAttributesNew();
    JoltSetString(hSessionAttr, APPADDRESS, "//lab:8000");
    hSession := JoltSessionNew(hSessionAttr, "", "ATM", "", "");
    hUserEvent := JoltUserEventNew("*", NULL, hSession);
  end TInit;

  transaction TShutdown
  begin
    JoltUnsubscribeAll(hSession);
    JoltEndSession(hSession);
    JoltFreeObject(hUserEvent);
    JoltFreeObject(hSession);
    JoltFreeObject(hSessionAttr);
  end TShutdown;

See also

Java: bea.jolt.JoltUserEvent class

親トピック: Event Handling Functions
関連資料
JoltUnsubscribe Function


Oracle Forms Functions Reference

Silk Performer introduces support for Oracle Web Forms applications (Oracle Forms 6i、9i、10g、11g、12c). Oracle finance and ERP applications that are based on Oracle Forms 6i、9i、10g、11g、12c can be tested with Silk Performer.

  • Testing Oracle Forms Applications
    Provides an overview of how to test Oracle Forms applications.
  • Oracle Forms Properties
    Describes what Oracle Forms Properties are and how to access them.
  • Oracle Forms SSO (Single Sign On)
    Explains Oracle9iAS Single Sign-On, built around the Single Sign-On Server, which enables users to log in to multiple Web-based applications using a single username and password.
  • Oracle Forms メモリ使用量
    Oracle Forms アプリケーションをシミュレートする仮想ユーザーのメモリ使用量について説明します。
  • Connecting Functions
    Lists BDL functions for handling the connection between an Oracle Forms client and an Oracle Forms Server.
  • Control Functions
    Lists BDL functions for handling Oracle Forms UI controls.
  • Properties Functions
    Lists BDL functions to add, modify, and retrieve properties in Oracle Forms applications.
  • Parsing Functions
    Lists BDL functions for parsing properties of Oracle Forms UI controls.
  • Verifying Functions
    Lists BDL functions that allow you to verify control values and certain control properties.
  • Synchronization Functions
    Lists BDL functions for synchronizing your test script with the behavior of the Oracle Forms application under test.
親トピック: Application Server Functions
関連概念
Java の設定


Testing Oracle Forms Applications

Oracle Web Forms allows you to run Oracle Forms applications in a Java applet that runs in a browser. The applet displays the user interface and interacts with the server. Complete business logic and database access is executed on the Oracle Forms server. A special protocol that is used for communication between the server and client protocol allows the server to define how the user interface is displayed in the applet. The client uses this protocol to inform the server about user interactions such as key and mouse input.

Because of a technological shift between Oracle Web Forms versions that require alternate record/replay approaches, Silk Performer offers the following project types:

  • Oracle Forms 6i、9i、10g、11g、12c
  • Oracle EBS 11i、12.x
  • Oracle Fusion 10g、11g、12c

See the Oracle Forms Tutorial for a complete walkthrough of the process of testing Oracle Forms applications.

Recording

When you create a new project based on one of the new project types, an additional recording profile is configured for your web browser. Recording profile settings are configured automatically for the version of Oracle Forms that you are recording.

Prerequisites

To record an Oracle Forms application you need to verify that you have downloaded all client-side software that’s required to run the Oracle Forms applet on your system. Typically all required software is downloaded automatically when you access an Oracle Forms application for the first time. Oracle uses a browser plug-in called Java Runtime Environment (JRE) to host the Java applet. Please verify that the Oracle Forms application under test is running in your browser before you begin recording.
注: Some older Oracle Forms versions use the "JInitiator" plugin instead of a JRE.

Silk Performer’s recording approach requires a Java runtime. You must therefore configure a Java runtime for your Silk Performer project. The Java settings of your active profile will be used for recording.

Note that you must configure the base directory of your JDK and that a newer JDK will increase record and replay speed.

If you are recording on Oracle Forms 6i you must disable the Java JIT (Just-In-Time Compiler). There are several ways of accomplishing this:

  • Define "-Djava.compiler=NONE" in the Java runtime settings of the JInitiator properties

  • Define an environment variable: SET JAVA_COMPILER=NONE

  • Use the check box to disable the jitter in the JInitiator properties (only available since version 1.1.8.x)

If your Oracle Forms application uses a socket connection between the client and the server you must disable TCP/IP recording on the communication port. This is done via SOCKS proxy settings on the System Settings dialog.

Record the application

Begin recording by clicking the "Model Script" workflow button. Select the "Oracle Forms" recording profile in the following dialog. Enter the application's URL and begin recording.

Replaying

Recorded scripts can be replayed immediately. You can run a TryScript and use TrueLog Explorer’s enhanced feature for customizing Oracle Forms scripts. With TrueLog Explorer you can add verifications, parse values, and customize input data.

TrueLog Explorer

TrueLog Explorer shows each newly activated window as a new top-level node in a TrueLog. All actions that are performed on a window are displayed as sub nodes. When you click on a node you see all controls on the window and the state of the controls at the point of the selected action. This makes it easy for you to track the actions that transpire during replay, seeing exactly which values are changed by which actions. TrueLogs not only show you which values are changed by the client, they show you which values are changed by the server (e.g., controls may change when a button is clicked).

親トピック: Oracle Forms Functions Reference


Oracle Forms Properties

What Are Properties?

Controls on an Oracle Forms Form Window have several internal properties that can be defined, for example current value, cursor position, editablilty, and visibility. Each property has a unique ID that is used internally to identify a certain property. Each possible property is defined as a constant in OraForms.bdh. The following is a short list of commonly used properties:
  • ORA_PID_VALUE
  • ORA_PID_TITLE
  • ORA_PID_PARENT
  • ...

The properties are set by the server or are modified by actions that the client performs on the controls, for example the ORA_PID_VALUE property will be changed to the next value of a text control if the user alters the control's content.

How To Access Properties

You can access the property values of each control in your application. There are several OraFormsGetProp{Type} functions that allow you to retrieve the values of certain properties that are identified by their unique ID's.

It is not possible to change properties in a direct way. Properties are changed via various API functions that allow you to interact with controls as a user would in a user interface.

親トピック: Oracle Forms Functions Reference


Oracle Forms SSO (Single Sign On)

Overview

Oracle9iAS Single Sign-On is built around the Single Sign-On Server, which enables users to log in to multiple Web-based applications using a single username and password.

To enable replay of scripts that test SSO enabled Oracle Forms applications, some customization steps are required to ensure use of the correct user ID’s for the Oracle Forms applications that are returned by logon procedures.

Customization

After you record an Oracle Forms script and run a TryScript you will probably encounter an error situation due to the recorded script containing the user ID that was used during recording. The user ID that is used during recording is passed as part of the first parameter to the OraFormsConnect method. The following code shows an OraFormsConnect function after recording:

OraFormsConnect(
  "server module=mymodule.fmx userid=1234567890   sso_userid= record= names",
  "http://myserver:7779/forms90/l90servlet?ifcfs=/forms90/f90servlet?config= myapp",
  "http://myserver:7779/forms90/");

The user ID in the recorded OraFormsConnect is "1234567890" but this ID will probably change each time the user logs on to the system. To customize this value the following steps are required:

  • Open the TryScript TrueLog

  • Click the "Analyze Test" button on the Workflow Bar and choose "Compare your test run" so that the recorded TrueLog will open in compare mode

  • Browse to the HTML page that contains the <OBJECT> tag that instantiates the Oracle Forms applet. You will find this page just before the OraFormsConnect node.

  • Select the Response tab

  • You will see the difference between the recorded and replayed log files

  • Select the difference for the user ID value and parse this value into a variable. Select the "Parse Selected Text into a variable" command from the context menu

  • Specify a name for the variable

  • Return to Silk Performer and replace the recorded user ID value with the parsed variable

After customization your script should resemble the following:

dclparam
  sUserId : string;
...
WebParseDataBoundEx(sUserId, STRING_COMPLETE, "userid=", 4, "\"",
WEB_FLAG_IGNORE_WHITE_SPACE | WEB_FLAG_CASE_SENSITIVE, 1);
WebPageSubmit("Logon", WSSO_LOGINSERVLET001);
Print("sUserId: " + sUserId);
...
OraFormsConnect(
  "server module=mymodule.fmx userid=" + sUserId + " sso_userid= record=names",
  "http://myserver:7779/forms90/l90servlet?ifcfs=/forms90/f90servlet?config=myapp",
  "http://myserver:7779/forms90/");

There may be other parameters that differ between record and replay. If you find such parameter values as constant strings contained in any of the Oracle Forms API functions, customize them in the same way that you customized the user ID.

Silk Performer's Oracle Forms Recorder will be enhanced in future versions to automate this customization process.

親トピック: Oracle Forms Functions Reference


Connecting Functions

  • OraFormsConnect Function
    Establishes a connection between an Oracle Forms client and an Oracle Forms Server.
  • OraFormsDestroy Function
    Shuts down the Oracle Forms replay engine.
  • OraFormsDisconnect Function
    Closes the connection between server and client.
  • OraFormsFree Function
    This function frees resources or handles created by other OraForms functions such as OraFormsCreateMessage.
  • OraFormsGetTimeout Function
    Returns the value of the connection timeout.
  • OraFormsSetTimeout Function
    Sets the timeout for connections to the Oracle Forms server.
  • OraFormsSetHost Function
    Specifies the host that is to be connected by the replay engine.
  • OraFormsInit Function
    Initializes the Oracle Forms replay engine.
  • OraFormsIsConnected Function
    Returns “true” if the user is connected to the Oracle Forms Runtime on the Oracle Forms server.
  • OraFormsSetConnectMode Function
    Sets the type of connection that should be used during replay.
  • OraFormsSetLocalIpAddress Function
    Specifies the client IP address that is to be used by the virtual user.
  • OraFormsSetPort Function
    Specifies the port that is to be connected by the replay engine.
  • OraFormsSetServlet Function
    Specifies the servlet that is to be connected by the replay engine.
  • OraFormsHandlePendingOnExit Function
    May be used for Oracle Forms 10g services.
親トピック: Oracle Forms Functions Reference


OraFormsConnect Function

Action

Establishes a connection between an Oracle Forms client and an Oracle Forms Server.

Include file

OraForms.bdh

Syntax

OraFormsConnect( in ssInitialCommandLine : string,
                 in  sServerUrl          : string optional,
                 in sDocumentBase        : string optional ): boolean;

Return Value

  • true if successful
  • false otherwise
Parameter | Description
sInitialCommandLine | The module that will be called by the client.
sServerUrl | (optional) allows to pass the complete ServerURL parameter that is used to initialize the Oracle Forms Applet. This parameter should be defined for Oracle Forms 9i and Oracle Forms 6i >= PatchSet4.
sDocumentBase | (optional) allows to pass the document base of the Oracle Forms Applet. This parameter should be defined for Oracle Forms 9i and Oracle Forms 6i >= PatchSet4.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetBoolean ("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString ("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect ("server module=javamail90.fmx usesdi=yes userid= "
                     "sso_userid= temp_dir=C:\\orant\\forms90\\demos\\temp");
  end TMain;
親トピック: Connecting Functions


OraFormsDestroy Function

Action

Shuts down the Oracle Forms replay engine. This function may only be called in the TShutdown transaction.

Include

OraFroms.bdh

Syntax

OraFormsDestroy( ) : boolean;

Return value

  • true if successful
  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    WebSetBrowser(WEB_BROWSER_MSIE6);
    WebModifyHttpHeader ("Accept-Language", "en,de-at;q=0.5);
    OraFormsInit ("http://vangelis:8888/forms90demo/190servlet", "vangelis", 9000, ORA_FORMS_9I);
  end TInit;

  transaction TShutdown
  begin
    OraFormsDestroy();
  end TShutdown;
親トピック: Connecting Functions


OraFormsDisconnect Function

Action

Closes the connection between server and client. This is done automatically when a transaction exits due to an error.

注: You must call this method to disconnect from the server. Otherwise the Oracle Forms Runtime on the server will continue running.

Include file

.bdh

Syntax

OraFormsDisconnect(
    ParamType ParamName : ParamValueType,): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object
nReturn | Integer variable that will receive the return value of the last DotNetCallMethod call

Example

dcltrans
  transaction TMain
  begin
    ...
    OraFormsConnect ( "server module=javamail90.fmx usesdi=yes userid= "
                      "sso_userid= temp_dir=C:\\orant\\forms90\\demos\\temp",
                      "http://myserver:8888/forms90demo/l90servlet?ifcfs=/forms90demo/f90servlet?config=iorg",
                      "http://myserver:8888/forms90demo/"):
    ...

   OraFormsDisconnect();
  end TMain;
親トピック: Connecting Functions


OraFormsFree Function

Action

This function frees resources or handles created by other OraForms functions such as OraFormsCreateMessage.

Include file

OraForms.bdh

Syntax

OraFormsFree( in nMsg : number );
Parameter | Description
nMsg | The handle to a message

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")

  end TMain;
親トピック: Connecting Functions


OraFormsGetTimeout Function

Action

OraFormsGetTimeout returns the value of the connection timeout.

Include file

OraForms.bdh

Syntax

OraFormsGetTimeout( ): number;

Return value

  • The configured timeout

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
    nTimeout : number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    nTimeout := OraFormsGetTimeout();
  end TMain;
親トピック: Connecting Functions


OraFormsSetTimeout Function

Action

OraFormsSetTimeout sets the timeout for connections to the Oracle Forms server.

Include file

OraForms.bdh

Syntax

OraFormsSetTimeout( in nTimeout : number );
Parameter | Description
nTimeout | The connection timeout, set in ms.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetTimeout(300000);
    OraFormsConnect("server
module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user",
"password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
  end TMain;

親トピック: Connecting Functions


OraFormsSetHost Function

Action

OraFormsSetHost specifies the host that is to be connected by the replay engine. During replay the Oracle Forms server may advise the client to connect to a specific server for load balancing. Call this function just before OraFormsConnect to specify the host that is to be connected. This function overrides the second parameter specified in OraFormsInit.

Include file

OraForms.bdh

Syntax

OraFormsSetHost( in sHost : string );
Parameter | Description
sHost | The host to be connected by the replay engine.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetHost("host");
    OraFormsSetPort(9000);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
  end TMain;
親トピック: Connecting Functions


OraFormsInit Function

Action

Initializes the Oracle Forms replay engine. This function must be called prior to any other Oracle Forms function. Oracle Forms clients may directly communicate with an Oracle Forms server or they may communicate via an HTTP server that forwards requests to an Oracle Forms server. This function is used to specify how communication is to work.

Include file

OraForms.bdh

Syntax

OraFormsInit( in sServlet : string allownull,
              in sHost    : string optional,
              in nPort    : number optional,
              in nVersion : number optional ): boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sServlet | The servlet URL, if the client connects to the Oracle Forms server via a servlet. Otherwise NULL.
sHost | The Oracle Forms server, if communication between client and server is done directly by leaving the HTTP server. This value is ignored if the first parameter is not NULL.
nPort | The port where the Oracle Forms server is listening for client requests. Usually 9000.
nVersion
  • ORA_FORMS_6I
  • ORA_FORMS_9I
  • ORA_FORMS_10G
  • ORA_FORMS_11G
  • ORA_APPS_11I
  • ORA_APPS_12I

Example

dcltrans
  transaction TInit
  begin
    WebSetBrowser(WEB_BROWSER_MSIE6);
    WebModifyHttpHeader("Accept-Language", "en,de-at;q=0.5);
    OraFormsInit("http://vangelis:8888/forms90demo/l90servlet", "vangelis", 9000, ORA_FORMS_9I);
  end TInit;

  transaction TShutdown
  begin
    OraFormsDestroy();
  end TShutdown;
親トピック: Connecting Functions


OraFormsIsConnected Function

Action

Returns “true” if the user is connected to the Oracle Forms Runtime on the Oracle Forms server.

This function can be used to implement a function that ensures an established connection at the start of a new transaction. When a transaction is aborted, the connection to the server is terminated. To continue in a subsequent iteration of the same main transaction, a new connection must be established.

Include file

OraForms.bdh

Syntax

OraFormsIsConnected( ): boolean;

Return value

  • true if successful

  • false otherwise

Example

dclfunc
function DoConnect
begin
    if(not OraFormsIsConnected()) then
      OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
      OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
      ...
      OraFormsConnect("server module=javamail90.fmx usesdi=yes userid= "
                      "sso_userid=  temp_dir=C:\\orant\\forms90\\demos\\temp",
                      "http://myserver:8888/forms90demo/l90servlet?ifcfs=/forms90demo/f90servlet?config=iorg",
                      "http://myserver:8888/forms90demo/");
      OraFormsGetSessionId(gsSSessionID);

      WebCookieSet(gsSSessionID, "http://myserver:8888/forms90demo/java/");

    end;
  end DoConnect;

dcltrans
  transaction TAddAppointment
  begin
    DoConnect();

    ...
  end TAddAppointment;

  transaction TAddToDo
  begin
    DoConnect();

     ...
  end TAddToDo;
親トピック: Connecting Functions


OraFormsSetConnectMode Function

Action

Sets the type of connection that should be used during replay. Oracle Forms clients may communicate with servers using socket connections, HTTP connections or HTTPS connections. This function overrides a profile's connection setting.

Include file

OraForms.bdh

Syntax

OraFormsSetConnectMode ( in nMode :  number ) : boolean;

Return Value

  • true if successful
  • false otherwise
Parameter | Description
nMode | Can be one of the following values:
 | ORA_SOCKET_CONNECTION
 | ORA_HTTP_CONNECTION
 | ORA_HTTPS_CONNECTION

Example

 dcltrans
   transaction TMain
 begin
   OraFormsSetConnectMode (ORA_HTTP_CONNECTION);
   OraFormsConnect(
      "server module=fileuploader90.fmx usesdi=yes userid=oe8/oe8@ORCL_sunserver  sso_userid="
      "debug=no buffer_records=no debug"
       "_messages=no array=no query_only=no quiet=no render=no host= port= tracegroup= log=testlog.log"
      "term= record=names");

  end TMain;
親トピック: Connecting Functions


OraFormsSetLocalIpAddress Function

Action

OraFormsSetLocalIpAddress specifies the client IP address that is to be used by the virtual user. This is sometimes referred to as “IP spoofing”.

Include file

OraForms.bdh

Syntax

OraFormsSetLocalIpAddress( in sIp : string );
Parameter | Description
sIp | The IP address to be assigned to the virtual user.

Example

dcltrans
  transaction TInit
  begin
    OraFormsInit(NULL, "host", 9000);
    OraFormsSetLocalIpAddress("10.4.89.9");
  end TInit;
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
  end TMain;
親トピック: Connecting Functions


OraFormsSetPort Function

Action

OraFormsSetPort specifies the port that is to be connected by the replay engine. During replay the Oracle Forms server may advise the client to connect to a specific server to manage load balancing. Call this function just before OraFormsConnect to specify the host that is to be connected. This function overrides the third parameter specified in OraFormsInit.

Include file

OraForms.bdh

Syntax

OraFormsSetPort( in nPort : number );
Parameter | Description
nPort | The port to be connected by the replay engine.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetHost("host");    OraFormsSetPort(9000);
    OraFormsConnect("server
module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user",
"password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
  end TMain;

親トピック: Connecting Functions


OraFormsSetServlet Function

Action

OraFormsSetServlet specifies the servlet that is to be connected by the replay engine. During replay the Oracle Forms server may advise the client to connect to a specific server to manage load balancing. Call this function just before OraFormsConnect to specify the host that is to be connected. This function overrides the first parameter specified in OraFormsInit.

Include file

OraForms.bdh

Syntax

OraFormsSetServlet( in sServlet : string );
Parameter | Description
sServlet | The Oracle Forms servlet to be connected by the replay engine.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetServlet("http://office:8888/forms90demo/l90servlet");

    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
  end TMain;
親トピック: Connecting Functions


OraFormsHandlePendingOnExit Function

Action

OraFormsHandlePendingOnExit may be used for Oracle Forms 10g services. Script this function for scripts that run against 10 g Forms services. Insert just before the script logs off from the server.

Include file

OraForms.bdh

Syntax

OraFormsHandlePendingOnExit( ): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsHandlePendingOnExit();
    OraFormsDisconnect();
  end TMain;
親トピック: Connecting Functions


Control Functions

  • OraFormsBeginMessageBlock Function
    Bundles a set of requests that must be sent within a single round trip.
  • OraFormsButtonPress Function
    Presses a button on the current active window.
  • OraFormsCheckBoxSet Function
    Changes the state of a check box control.
  • OraFormsChoiceBoxButton Function
    Presses a button on the specified choice box messenger control.
  • OraFormsCloseCancelQueryDialog Function
    Performs a cancel action on a Cancel Query dialog.
  • OraFormsCloseDialog Function
    Closes an active dialog that is identified by its unique name or ID.
  • OraFormsCloseWindow Function
    Closes the specified window.
  • OraFormsComboActivate Function
    Sends an activate message for an element in a combo box control.
  • OraFormsComboClose Function
    Used to close an open combo box without selecting a new value.
  • OraFormsComboSelect Function
    Selects an entry in a combo box.
  • OraFormsCreateMessageFromHandler Function
    Creates a new message with same handler id and class id as the handler specified in the function call.
  • OraFormsEditorDialogOK Function
    Closes this dialog and returns the edited value to the text control.
  • OraFormsEditSet Function
    Allows you to set a new value to a text control.
  • OraFormsEndMessageBlock Function
    Bundle a set of requests that must be sent within a single round trip.
  • OraFormsFindAndSetWindow Function
    Finds a window (based on any portion of the window’s name or the window’s full name) and sets it as the active window.
  • OraFormsFlexDefaultBlock Function
    Sends a special default block message to the Forms server.
  • OraFormsFlexDefaultField Function
    Sends a default field message for a flex window.
  • OraFormsFlexFieldFocus Function
    Sets the focus to the specified flex field.
  • OraFormsFlexPressCancel Function
    Closes a flex window.
  • OraFormsFlexPressClear Function
    Clears the values of a flex window.
  • OraFormsFlexPressFind Function
    Presses the Find (or corresponding key combination) button in a flex field window.
  • OraFormsFlexPressHelp Function
    Opens the help content associated with the flex window.
  • OraFormsFlexPressLov Function
    Opens a LOV box for a flex field.
  • OraFormsFlexPressOk Function
    Confirms a flex window by pressing the OK button.
  • OraFormsFlexSetCellData Function
    Sets a the value for the specified flex field without closing the window.
  • OraFormsFlexSetCellDataOk Function
    Sets the value for the specified flex field and confirms the flex window.
  • OraFormsFlexShowActions Function
    OraFormsFlexShowActions sends the show actions message to the Forms server.
  • OraFormsFlexShowValues Function
    OraFormsFlexShowValues sends the show values message to the Forms server.
  • OraFormsGetClassIdFromControl Function
    This function returns the class id of a control specified by its handler title.
  • OraFormsGetInterceptedControlId Function
    Returns the id of the intercepted control.
  • OraFormsGetInterceptedControlTitle Function
    Returns the title property of the intercepted control.
  • OraFormsGetSessionId Function
    Used to capture the session ID cookie that was returned by the server during the connect process.
  • OraFormsKeyStroke Function
    Sends a special key to the server (e.g., a tab key).
  • OraFormsJavaContainerAction Function
    Allows you to call a function of the Java object that is hosted in the Java container on the current window.
  • OraFormsMenuCreate Function
    Can be used to activate a pop-up menu that is assigned to a control on a window.
  • OraFormsMenuItem Function
    Can select a menu item from a pop-up menu that is assigned to a control or from a main menu that is assigned to a form window.
  • OraFormsMessageBoxButton Function
    Can be used to close a message box by choosing one of the available buttons (YES, NO, or CANCEL).
  • OraFormsMouseClick Function
    Can be used to simulate a single mouse click on a control or form window.
  • OraFormsMouseDblClick Function
    Can be used to simulate a double mouse click on a control or form window.
  • OraFormsOnMessageGet Function
    Allows you to define properties that can be queried by the server.
  • OraFormsListActivate Function
    Sends an activate message for an element in a list box control.
  • OraFormsListClose Function
    Can be used to close an open list box without selecting a new value.
  • OraFormsListSelect Function
    Selects an entry in a list box.
  • OraFormsLogon Function
    Performs a logon to an Oracle Forms Server.
  • OraFormsLogonCancel Function
    Cancels a logon dialog by pressing the "Cancel" button.
  • OraFormsLovAutoReduceChar Function
    Sends an auto-reduce message to a List Of Values dialog.
  • OraFormsLovFind Function
    Allows you to define a new search pattern for the List Of Values dialog.
  • OraFormsLovGetItems Function
    Retrieves a specified of number of LOV box entries from the server. OraFormsLovGetItems uses a 1-based index.
  • OraFormsLovOpen Function
    Opens a List Of Values dialog for a text control that has a LOV assigned to it.
  • OraFormsLovSelect Function
    Allows you to select an entry of the search result in the List Of Values dialog.
  • OraFormsLovUnReduce Function
    Sends an un-reduce message to a List Of Values dialog.
  • OraFormsRadioSet Function
    Changes the selected state of a radio button control.
  • OraFormsPopListActivate Function
    Sends an activate message for an element in a pop-up list box control.
  • OraFormsPopListClose Function
    Used to close an open pop-up list box without selecting a new value.
  • OraFormsPopListSelect Function
    Selects an entry in a pop-up list.
  • OraFormsPutMessage Function
    Adds a new message to the virtual users message pump.
  • OraFormsPutTerminalAndWait Function
    Adds a terminal message to the message queue, performs a flush and returns when the message is processed.
  • OraFormsRegisterMessageInterceptor Function
    Registers a message interceptor that will determine the handler id and the handler title of controls of a specified class.
  • OraFormsUnregisterMessageInterceptor Function
    Unregisters and frees a message interceptor.
  • OraFormsResponseBoxCancel Function
    Presses the Cancel button on a response dialog.
  • OraFormsResponseBoxOk Function
    Presses the OK button on a Response dialog.
  • OraFormsResponseBoxValidate Function
    Sends a validation message for a response dialog.
  • OraFormsScrollerDrag Function
    Drags and drops the scroller to a specified position.
  • OraFormsScrollerLine Function
    Performs a scroll up or scroll down action on a scroller by a specified number of lines.
  • OraFormsScrollerPage Function
    Performs a page scroll up or page scroll down action on a scroller by a specified number of pages.
  • OraFormsTreeSelectNode Function
    Selects the specified tree node of a tree control.
  • OraFormsSetCancelQueryWindow Function
    Marks the specified Cancel Query dialog as the current active window.
  • OraFormsSetFocus Function
    Sets the focus for the specified control.
  • OraFormsSetWindow Function
    Marks the specified window as the current activate window.
  • OraFormsTabSelect Function
    Activates a tab page.
  • OraFormsTreeActivateNode Function
    Sends an activate message for the specified tree node of the tree control.
  • OraFormsTreeCollapseNode Function
    Collapses the specified node in a tree control.
  • OraFormsTreeExpandNode Function
    Expands the selected branch in a tree control.
  • OraFormsWindowMove Function
    Moves a specified window by provided coordinates.
  • OraFormsWindowResize Function
    Resizes a given window by specified coordinates.
  • OraFormsWindowUpdate Function
    Modifies the status of a specified window.
親トピック: Oracle Forms Functions Reference


OraFormsBeginMessageBlock Function

Action

OraFormsBeginMessageBlock and OraFormsEndMessageBlock bundle a set of requests that must be sent within a single round trip. The Silk Performer Recorder automatically detects which requests must be bundled as a message block.

Include file

OraForms.bdh

Syntax

OraFormsBeginMessageBlock( in sTimer : string ) : boolean;

Return value

  • true

    if successful

  • false

    otherwise
Parameter | Description
sTimer | The name of the message block. This is the same name as used for the corresponding OraFormsBeginMessageBlock function.

Example

 dcltrans
  transaction TMain
  begin
    ThinkTime(12.8);
    OraFormsBeginMessageBlock("Create Appointment#1");
    OraFormsWindowMove("Create Appointment", 200, 0);
    OraFormsSetFocus("CONTROL_PB_HOME_0"); //Home
    OraFormsEndMessageBlock("Create Appointment#1");
  end TMain;
親トピック: Control Functions
関連資料
OraFormsEndMessageBlock Function


OraFormsButtonPress Function

Action

OraFormsButtonPress presses a button on the current active window. The button is either identified by its logical name or its unique ID.

Include file

OraForms.bdh

Syntax

OraFormsButtonPress( in sName : string ) : boolean;

Return value

  • true

    if successful

  • false

    otherwise
Parameter | Description
sName | The control's unique name.

Example

 dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "EXIT1");
    OraFormsButtonPress( "EXIT1");

  end TMain;
親トピック: Control Functions


OraFormsCheckBoxSet Function

Action

OraFormsCheckBoxSet changes the state of a check box control.

Include file

OraForms.bdh

Syntax

OraFormsCheckBoxSet( in sName    : string,
                  in bChecked : boolean ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
bChecked

The new checked value of the control.

  • TRUE: to check the control
  • FALSE: to uncheck the control.

Example

dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_GENDER_MALE");
    OraFormsCheckBoxSet( "PERSON_GENDER_MALE",  true);

  end TMain;
親トピック: Control Functions


OraFormsChoiceBoxButton Function

Action

OraFormsChoiceBoxButton presses a button on the specified choice box messenger control. The control is either identified by its logical name or its unique ID. The button is identified by its label.

Include file

OraForms.bdh

Syntax

OraFormsChoiceBoxButton(    in sName  : string,
                            in sLabel : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control痴 unique ID.
sLabel | The button with the defined label (textual representation) will be pressed.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1    OraFormsSetWindow("WINDOW1");
    OraFormsMenuItem("WINDOW1", "Action::Exit");
    // ---
    // New window activated: Caution
    OraFormsSetWindow("Caution");
    // Exit Oracle Applications?    ThinkTime(4.3);
    OraFormsChoiceBoxButton("Caution", "OK");
  end TMain;
親トピック: Control Functions


OraFormsCloseCancelQueryDialog Function

Action

OraFormsCloseCancelQueryDialog performs a cancel action on a Cancel Query dialog.

Include file

OraForms.bdh

Syntax

OraFormsCloseCancelQueryDialog( in sName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The window’s unique name.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect("server module=javamail90.fmx usesdi=yes");
    OraFormsSetCancelQueryWindow("Cancel Query");
    OraFormsCloseCancelQueryDialog("Cancel Query");
  end TMain;
親トピック: Control Functions


OraFormsCloseDialog Function

Action

OraFormsCloseDialog closes an active dialog that is identified by its unique name or ID. A standard dialog can be closed by clicking either the OK or CANCEL button, where two different constant values can be used to indicate which button is to be used to close the dialog.

Inlcude file

OraForms.bdh

Syntax

 OraFormsCloseDialog( in sName : string,
                      in nButton : number ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The unique name of the dialog window that is to be closed.
nButton The button that is to be pressed to close the dialog:
  • ORA_DIALOG_OK
  • ORA_DIALOG_CANCEL

Example

 dcltrans
 transaction TMain
 var
    sValue :  string;
 begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Action::Calculator");
    // ---
    // New window activated: CALC_PROMPT
    OraFormsSetWindow( "CALC_PROMPT");
    OraFormsCloseDialog( "CALC_PROMPT", ORA_DIALOG_OK);
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsCloseWindow Function

Action

Closes the specified window.

Include file

OraForms.bdh

Syntax

OraFormsCloseWindow( in sName : string ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The window's unique name

Example

dcltrans
  transaction TMain
  var
  begin
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  20);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsSetString( "DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=iorganizer.fmx userid=iorg/iorg@ORCL_server sso_userid= usesdi=yes record=names");
    OraFormsSetFocus( "LOGIN_PB_ENTER_0");
    // Enter OraFormsButtonPress( "LOGIN_PB_ENTER_0");
    //Enter
    // Incorrect Login Information. Do you want to register?
    OraFormsMessageBoxButton( "Incorrect Login", ORA_ALERT_NO);
    OraFormsCloseWindow( "Oracle iOrganizer");
  end TMain;
親トピック: Control Functions


OraFormsComboActivate Function

Action

OraFormsComboActivate is used to send an activate message for an element in a combo box control. A control is identified by a unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsComboActivate(    in sName     : string,
                          in sLabel    : string,
                          in nIndex    : number optional,
                          in nPosition : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique ID.
sLabel | (if not NULL) The element with the defined label (textual representation) will be activated. If you pass NULL, you must define the index of the item that is to be activated in the next parameter.
nIndex | (if sLabel is NULL) This parameter defines the index of the element that is to be activated. The index of the first element is 0.
nPosition | If the control contains multiple entries with the same label, this parameter will be used to specify the nth position. The default value is 0.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsSetFocus("PERSON_GENDER");
    OraFormsComboActivate("PERSON_GENDER", "Male", 0);
    OraFormsComboClose("PERSON_GENDER");
    OraFormsMenuItem("WINDOW1", "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsComboClose Function

Action

OraFormsComboClose can be used to close an open combo box without selecting a new value. There is no actual command that opens the box. This method simulates the complete sequence of opening and closing a combo box without selecting a value. To select a value, use OraFormsComboSelect. The combo box is identified by its unique name or unique ID.

Include file

OraForms.bdh

Syntax

OraFormsComboClose( in sName : string ) : boolean;

Return value

  • true

    if successful

  • false

    otherwise
Parameter | Description
sName | The unique name of the dialog window that is to be closed.
nButton The button that is to be pressed to close the dialog:
  • ORA_DIALOG_OK
  • ORA_DIALOG_CANCEL

Example

dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME" , "Dialog" );
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsSetFocus("PERSON_GENDER", "Male", 0);
    OraFormsComboSelect("PERSON_GENDER", "Male", 0);
    OraFormsComboClose("PERSON_GENDER");

    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsComboSelect Function

Action

OraFormsComboSelect selects an entry in a combo box. The element that is to be selected can either be defined by its textual representation or by its index. A combo box is identified by its unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsComboSelect(    in sName     : string,
                        in sLabel    : string,
                        in nIndex    : number optional,
                        in nPosition : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique ID.
sLabel | (if not NULL) The element with the defined label (textual representation) will be activated. If you pass NULL, you must define the index of the item that is to be activated in the next parameter.
nIndex | (if sLabel is NULL) This parameter defines the index of the element that is to be activated. The index of the first element is 0.
nPosition | If the control contains multiple entries with the same label, this parameter will be used to specify the nth position. The default value is 0.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsSetFocus("PERSON_GENDER");
    OraFormsComboSelect("PERSON_GENDER", "Male", 0);
    OraFormsComboClose("PERSON_GENDER");
    OraFormsMenuItem("WINDOW1", "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsCreateMessageFromHandler Function

Action

This function creates a new message with same handler id and class id as the handler specified in the function call.

Include file

OraForms.bdh

Syntax

OraFormsCreateMessageFromHandler(
     in nHandlerName : number,
     in nType        : number) : number;

Return value

  • A handle to the created message on success.

  • 0 otherwise.

Parameter | Description
nHandlerName | The name of an existing handler. The message to be created will inherit the handler id and class id of this handler.
nType

Type of message to be created. Available options are:

  • ORA_MSG_TYPE_CREATE

  • ORA_MSG_TYPE_UPDATE

  • ORA_MSG_TYPE_DESTROY

  • ORA_MSG_TYPE_GET

  • ORA_MSG_TYPE_TERMINAL

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessageFromHandler("handler", ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyByte(gnUmsg, 2600, 0);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg,  2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;

親トピック: Control Functions


OraFormsEditorDialogOK Function

Action

Text controls allow you to open an editor dialog to edit the value of the control in a more advanced way. OraFormsEditorDialogOK closes this dialog and returns the edited value to the text control.

Include file

OraForms.bdh

Syntax

OraFormsEditorDialogOK( in sWindowName : string,
                        in sValue : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sWindowName | Name of the editor dialog window that should be closed.
sValue | The edited value that should be returned to the text control.

Example

dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1 OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Edit::Edit");
    // ---
    // New window activated: Editor OraFormsSetWindow( "Editor");
    OraFormsEditorDialogOK( "Editor",  "Edited value");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsEditSet Function

Action

OraFormsEditSet allows you to set a new value to a text control. The control is identified by its unique name or unique ID. Text controls have a special behavior in Oracle Forms Applications. Whenever a control becomes dirty (a value is changed by the client), the control sends a dirty message to the server. This happens when entering the first character in the text control. The complete value is sent when the control loses its focus (e.g., using the tab key to jump to a different control or changing the focus by clicking another control).

OraFormsEditSet allows you to either use the default method of dirty value handling (using the first character of the entered value) or a different dirty value can be defined. A different dirty value as the first character can occur if the user pastes a new value into a control that already contains a different value.

OraFormsEditSet also allows you to completely omit sending a dirty value.

Include file

OraForms.bdh

Syntax

OraFormsEditSet( in sName :  string,
                 in sValue :  string,
                 in nOption :  number optional,
                 in sDirtyVal :  string optional ) :  boolean;

Return value

  • true

    if successful

  • false

    otherwise
Parameter | Description
sName | The unique name of the edit control.
sValue | The new value that should be set for the control.
nOption

(optional):

There are two options for how the function should handle a dirty message that is sent when setting a new value to a text control:

  • ORA_EDIT_SEND_DIRTY (default):

    This option causes the function to send a dirty message with either the text defined in the parameter sDirtyVal or the first character of sValue if sDirtyVal is null or omitted.

  • ORA_EDIT_NO_DIRTY: No dirty value will be sent.
sDirtyVal

(optional):

If nOption is defined with ORA_EDIT_SEND_DIRTY, the function first sends a dirty notification to the server and then sends the real new value. By default, when recording an application, the dirty value is the first character of the new value that is entered in a text control. If sDirtyVal is omitted or null is passed, the first character of sValue will be sent as a dirty value. Otherwise the value defined in this parameter will be used.

Example

dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION",  608);
    OraFormsSetPoint( "INITIAL_RESOLUTION",  96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO",  8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsEditSet( "PERSON_FIRST_NAME",  "Andi");
    OraFormsKeyStroke( "PERSON_FIRST_NAME", ORA_KEY_TAB,  0);
    OraFormsEditSet( "PERSON_LAST_NAME",  "GRABNER", ORA_EDIT_SEND_DIRTY,  "Reithmayr");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsEndMessageBlock Function

Action

OraFormsBeginMessageBlock and OraFormsEndMessageBlock bundle a set of requests that must be sent within a single round trip. The Silk Performer Recorder automatically detects which requests must be bundled as a message block.

Include file

OraForms.bdh

Syntax

OraFormsEndMessageBlock( in sTimer : string ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sTimer | The name of the message block. This is the same name as used for the corresponding OraFormsBeginMessageBlock function.

Example

dcltrans
  transaction TMain
  begin
    ThinkTime(12.8);
    OraFromsBeginMessageBlock("Create Appointment#1");
    OraFormsWindowMove("Create Appointment", 200, 0);
    OraFormsSetFocus("CONTROL_PB_HOME0"); // Home
    OraFormsEndMessageBlock("Create Appointment#1);
  end TMain
親トピック: Control Functions
関連資料
OraFormsBeginMessageBlock Function


OraFormsFindAndSetWindow Function

Action

OraFormsFindAndSetWindow finds a window (based on any portion of the window’s name or the window’s full name) and sets it as the active window. On success, it returns the handler ID of the window. If the window cannot be found, it returns -1.

Include file

OraForms.bdh

Syntax

OraFormsFindAndSetWindow(    in sPartName : string,
                             in nCount    : number optional,
                             in nSearch   : number optional ): number;

Return value

  • The ID of the window on success.

  • -1 otherwise

Parameter | Description
sPartName | Substring of the window name to be matched.
nCount | More than one window may match the pattern. Specify the index of the window that is to be returned and set it as the active window.
nSearch

Serach options:

  • ORA_SEARCH_STARTSWITH

  • ORA_SEARCH_ENDSWITH

  • ORA_SEARCH_CONTAINS

Example

dcltrans
  transaction TMain
  var
    sValue : string;
    Id     : number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user",
"password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    Id := OraFormsFindAndSetWindow("WIND", 0, ORA_SEARCH_STARTSWITH);
  end TMain;

親トピック: Control Functions


OraFormsFlexDefaultBlock Function

Action

OraFormsFlexDefaultBlock sends a special default block message to the Forms server.

Include file

OraForms.bdh

Syntax

OraFormsFlexDefaultBlock( in sName : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexDefaultBlock("ADB Account");
  end TMain;
親トピック: Control Functions


OraFormsFlexDefaultField Function

Action

OraFormsFlexDefaultField sends a default field message for a flex window.

Include file

OraForms.bdh

Syntax

OraFormsFlexDefaultField(    in sName : string,
                             in sRow  : string,
                             in sCol  : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The name of the field’s row.
sCol | The name of the field’s column.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexDefaultField("ADB Account", "Transfer", "Low");
  end TMain;
親トピック: Control Functions


OraFormsFlexFieldFocus Function

Action

OraFormsFlexFieldFocus sets the focus to the specified flex field.

Include file

OraForms.bdh

Syntax

OraFormsFlexFieldFocus(    in sName : string,
                           in sRow  : string,
                           in sCol  : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexFieldFocus("ADB Account", "Transfer", "Low");
  end TMain;

親トピック: Control Functions


OraFormsFlexPressCancel Function

Action

OraFormsFlexPressCancel closes a flex window.

Include file

OraForms.bdh

Syntax

OraFormsFlexPressCancel( in sName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexPressCancel("ADB Account");
  end TMain;

親トピック: Control Functions


OraFormsFlexPressClear Function

Action

OraFormsFlexPressClear clears the values of a flex window.

Include file

OraForms.bdh

Syntax

OraFormsFlexPressClear( in sName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user",
"password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexPressClear("ADB Account");
  end TMain;
親トピック: Control Functions


OraFormsFlexPressFind Function

Action

OraFormsFlexPressFind presses the Find (or corresponding key combination) button in a flex field window.

Include file

OraForms.bdh

Syntax

OraFormsFlexPressFind( in sName : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server
module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user",
"password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexPressFind("ADB Account");
  end TMain;

親トピック: Control Functions


OraFormsFlexPressHelp Function

Action

OraFormsFlexPressHelp opens the help content associated with the flex window.

Include file

OraForms.bdh

Syntax

OraFormsFlexPressHelp( in sName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexPressHelp("ADB Account");
  end TMain;
親トピック: Control Functions


OraFormsFlexPressLov Function

Action

OraFormsFlexPressLov opens a LOV box for a flex field.

Include file

OraForms.bdh

Syntax

OraFormsFlexPressLov( in sName : string;
                      in sRow  : string;
                      in sCol  : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The name of the field’s row.
sCol | The name of the field’s column.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexPressLov("ADB Account", "Transfer", "Low");
  end TMain;

親トピック: Control Functions


OraFormsFlexPressOk Function

Action

OraFormsFlexPressOk confirms a flex window by pressing the OK button.

Include file

OraForms.bdh

Syntax

OraFormsFlexPressOk( in sName : string  ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexPressOk("ADB Account");
  end TMain;
親トピック: Control Functions


OraFormsFlexSetCellData Function

Action

OraFormsFlexSetCellData sets a the value for the specified flex field without closing the window.

Include file

OraForms.bdh

Syntax

OraFormsFlexSetCellData( in sName  : string,
                         in sRow   : string,
                         in sCol   : string,
                         in sValue : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The name of the field’s row.
sCol | The name of the field’s column.
sValue | The value to be set for the flex field.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexSetCellData("ADB Account", "Transfer", "Low", "TV");
  end TMain;
親トピック: Control Functions


OraFormsFlexSetCellDataOk Function

Action

OraFormsFlexSetCellDataOk sets the value for the specified flex field and confirms the flex window.

Include file

OraForms.bdh

Syntax

OraFormsFlexSetCellDataOk( in sName  : string,
                           in sRow   : string,
                           in sCol   : string,
                           in sValue : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The name of the field’s row.
sCol | The name of the field’s column.
sValue | The value to be set for the flex field.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexSetCellDataOk("ADB Account", "Transfer", "Low", "TV");
  end TMain;
親トピック: Control Functions


OraFormsFlexShowActions Function

Action

OraFormsFlexShowActions sends the show actions message to the Forms server.

Include file

OraForms.bdh

Syntax

OraFormsFlexShowActions( in sName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user",
"password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexShowActions("ADB Account");
  end TMain;

親トピック: Control Functions


OraFormsFlexShowValues Function

Action

OraFormsFlexShowValues sends the show values message to the Forms server.

Include file

OraForms.bdh

Syntax

OraFormsFlexShowValues( in sName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsFlexShowValues("ADB Account");
  end TMain;

親トピック: Control Functions


OraFormsGetClassIdFromControl Function

Action

This function returns the class id of a control specified by its handler title.

Include file

OraForms.bdh

Syntax

OraFormsGetClassIdFromControl(in sControl : string ) : number;

Return value

  • The class id of the control on success

  • 0 otherwise

Parameter | Description
sControl | The uniquely identifying id of the control.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
    nClassId: number;
    nId     : number;  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    nClassId := OraFormsGetClassIdFromControl("pass_undersc");
    nId := OraFormsGetIdFromControl("pass_undersc");
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Control Functions


OraFormsGetInterceptedControlId Function

Action

Returns the id of the intercepted control.

Include file

OraForms.bdh

Syntax

OraFormsGetInterceptedControlId( ) : number;

Return value

  • The id of the control on success

  • 0 otherwise

Example

  transaction TMain
  var
    nFlexId : number;
    nItc    : number;
    gnUmsg  : number;
    subMsg  : number;
    nClassId: number;
    nId     : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    nClassId := OraFormsGetClassIdFromControl("pass_undersc");
    nId := OraFormsGetIdFromControl("pass_undersc");
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2");

    nItc := OraFormsRegisterMessageInterceptor(1020);
    OraFormsKeyStroke("VNDR_END_DATE_ACTIVE_MIR_0", ORA_KEY_TAB, 0);// Inactive On
    nFlexId := OraFormsGetInterceptedControlId();
    OraFormsUnregisterMessageInterceptor(nItc);
    Print ("here is the id");
    Print(string(nflexId));
  end TMain;
親トピック: Control Functions


OraFormsGetInterceptedControlTitle Function

Action

Returns the title property of the intercepted control.

Include file

OraForms.bdh

Syntax

OraFormsGetInterceptedControlTitle( ) : string;

Return value

  • The title on success

  • Null otherwise

Example

  transaction TMain
  var
    nFlexId : number;
    nItc    : number;
    gnUmsg  : number;
    subMsg  : number;
    nClassId: number;
    nId     : number;
    sTitle  : string;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    nClassId := OraFormsGetClassIdFromControl("pass_undersc");
    nId := OraFormsGetIdFromControl("pass_undersc");
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2");
    nItc := OraFormsRegisterMessageInterceptor(1020);
    OraFormsKeyStroke("VNDR_END_DATE_ACTIVE_MIR_0", ORA_KEY_TAB, 0);

    // Inactive On
    sTitle := OraFormsGetInterceptedControlTitle();
    OraFormsUnregisterMessageInterceptor(nItc);
    Print ("here is the title");
    Print(string(nflexId));
  end TMain;
親トピック: Control Functions


OraFormsGetSessionId Function

Action

Once a connection with the Oracle Forms server is established, OraFormsGetSessionId can be used to capture the session ID cookie that was returned by the server during the connect process. The Recorder automatically scripts OraFormsGetSessionId and a WebCookieSet with the session ID on the applet's codebase. This ensures that all recorded HTTP requests use the session ID when additional files are requested that require valid session ID’s.

Include file

OraForms.bdh

Syntax

OraFormsGetSessionId( out sSessionId : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sSessionId | Contains the session cookie returned by the server during the connection process.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect("server module=javamail90.fmx usesdi=yes userid= "
                    "sso_userid=  temp_dir=C:\\orant\\forms90\\demos\\temp",
                    "http://myserver:8888/forms90demo/l90servlet?ifcfs=/forms90demo/f90servlet?config=iorg",
                    "http://myserver:8888/forms90demo/");
    OraFormsGetSessionId(gsSSessionID);
    WebCookieSet(gsSSessionID, "http://myserver:8888/forms90demo/java/");
  end TMain;
親トピック: Control Functions


OraFormsKeyStroke Function

Action

OraFormsKeyStroke sends a special key to the server (e.g., a tab key).

Include file

OraForms.bdh

Syntax

OraFormsEditSet(  in sName :  string,
                  in nChar :  number,
                  in nMod  :  number ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The unique name of the control where the special key is pressed.
nChar The ascii code of the special key that should be pressed. There are some constants that can be used for the most common special keys:
  • ORA_KEY_TAB
  • ORA_KEY_ENTER
  • ORA_KEY_PAGEUP
  • ORA_KEY_PAGEDOWN
  • ORA_KEY_LINEUP
  • ORA_KEY_LINEDOWN
nMod This parameter can be used to define a key modifier. A key modifier is a special key that is additionally pressed when pressing a special key. The following constants are available:
  • ORA_SKEY_ALTGR
  • ORA_SKEY_SHIFT
  • ORA_SKEY_CTRL
  • ORA_SKEY_META
  • ORA_SKEY_ALT
If no modifier should be used, pass 0 for this parameter.

Example

dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO",  8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsEditSet( "PERSON_FIRST_NAME", "Andi");
    OraFormsKeyStroke( "PERSON_FIRST_NAME", ORA_KEY_TAB,  0);
    OraFormsEditSet( "PERSON_LAST_NAME", "GRABNER", ORA_EDIT_SEND_DIRTY,  "Reithmayr");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsJavaContainerAction Function

Action

OraFormsJavaContainerAction allows you to call a function of the Java object that is hosted in the Java container on the current window. Different parameters for the function call can be set by preceding OraFormsSet{Type} calls. For each parameter, EVENT_ARGNAME and EVENT_ARGVALUE must be set. See the sample below.

Include file

OraForms.bdh

Syntax

OraFormsJavaContainerAction(  in sName :  string,
                              in sAction :  string ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | Name of the Java container that is hosted in the current application.
sAction | The name of the function that should be called.

Example

dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    OraFormsSetString( "EVENT_ARGNAME", "FileName");
    OraFormsSetString( "EVENT_ARGVALUE", "test.txt");
    OraFormsJavaContainerAction( "JAVA_UPLOAD",  "UploadFile");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsMenuCreate Function

Action

OraFormsMenuCreate can be used to activate a pop-up menu that is assigned to a control on a window. Popup menus are normally activated by a right-click in the control area.

Include file

OraForms.bdh

Syntax

OraFormsMenuCreate(  in sWindowName :  string,
                     in nX          :  number optional,
                     in nY          :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise

Example

 transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon"); OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_JOB_0");
    OraFormsMenuCreate( "PERSON_JOB_0",  109, 12);
    OraFormsMenuItem( "PERSON_JOB_0",  "Action1");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsMenuItem Function

Action

OraFormsMenuItem can select a menu item from a pop-up menu that is assigned to a control or from a main menu that is assigned to a form window. Or it can be used to select a button in a form window's toolbar.

Include file

OraForms.bdh

Syntax

OraFormsMenuItem ( in sWindowName :  string,
                   in sMenuName   :  string) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sWindowName | Unique name of the control or window that has an assigned toolbar or main window. Or where a pop-up menu has recently been activated by OraFormsMenuCreate.
sMenuName | The name of the menu item that should be selected. For pop-up menus, the item name is sufficient. For main menu items, the name consists of several parts where different parts are separated by '::'. The last part is the menu item. The parts preceding are names of the main or sub menus.

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_JOB_0");
    OraFormsMenuCreate( "PERSON_JOB_0", 109,  12);
    OraFormsMenuItem( "PERSON_JOB_0",  "Action1");

    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsMessageBoxButton Function

Action

OraFormsMessageBoxButton can be used to close a message box by choosing one of the available buttons (YES, NO, or CANCEL).

Include file

OraForms.bdh

Syntax

OraFormsMessageBoxButton( in sWindowName : string,
                          in nButton     :  number ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sWindowName | Name of the message box dialog.
nButton

The button that should be pressed to close the message box. There are some predefined constants that can be used:

  • ORA_ALERT_YES
  • ORA_ALERT_NO
  • ORA_ALERT_CANCEL

Be aware that there are Oracle Forms applications with message boxes that use labels other than YES, NO and CANCEL for their buttons.

Example

 transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Action::Calculator");
    // Do you want to do the calculation?
    OraFormsMessageBoxButton( "Do the calculation?", ORA_ALERT_YES);
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsMouseClick Function

Action

OraFormsMouseClick can be used to simulate a single mouse click on a control or form window.

Include

OraForms.bdh

Syntax

OraFormsMouseClick(  in sName :  string,
                     in nX    :  number,
                     in nY    :  number,
                     in nMod  :  number optional ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | Unique name of the control or window on which the mouse click should occur.
nX | X-Coordinate of the mouse click.
nY | Y-Coordinate of the mouse click.
nMod

(optional):

This parameter can be used to define a key modifier. A key modifier is a special key that is additionally pressed when the mouse button is clicked. The following constants are available:

  • ORA_SKEY_ALTGR
  • ORA_SKEY_SHIFT
  • ORA_SKEY_CTRL
  • ORA_SKEY_META
  • ORA_SKEY_ALT

If no modifier should be used, pass 0 for this parameter.

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMouseClick( "TREE_BLK_PROD_TREE_0",  65,  125,  0);
    OraFormsMouseDblClick( "TREE_BLK_PROD_TREE_0",  65,  125,  0);

    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsMouseDblClick Function

Action

OraFormsMouseDblClick can be used to simulate a double mouse click on a control or form window.

Include file

OraForms.bdh

Syntax

OraFormsMouseDblClick(  in sName :  string,
                        in nX    :  number,
                        in nY    :  number,
                        in nMod  :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | Unique name of the control or window on which the double mouse click is to occur.
nX | X-Coordinate of the double mouse click.
nY | Y-Coordinate of the double mouse click.
nMod

(optional):

This parameter can be used to define a key modifier. A key modifier is a special key that is additionally pressed when the mouse button is double clicked. The following constants are available:

  • ORA_SKEY_ALTGR
  • ORA_SKEY_SHIFT
  • ORA_SKEY_CTRL
  • ORA_SKEY_META
  • ORA_SKEY_ALT

If no modifier should be used, pass 0 for this parameter.

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMouseClick( "TREE_BLK_PROD_TREE_0",  65,  125,  0);
    OraFormsMouseDblClick( "TREE_BLK_PROD_TREE_0",  65,  125,  0);
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsOnMessageGet Function

Action

OraFormsOnMessageGet allows you to define properties that can be queried by the server. The Oracle Forms Server sometimes queries controls for their internal property values. You can use OraFormsSet{Type} methods to define several property values that will be assigned to a control in the following OraFormsOnMessageGet and will be returned to the server if there is a request message.

Include file

OraForms.bdh

Syntax

OraFormsOnMessageGet( in sName : string ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The unique name or ID of the control/component that may be queried by the server.

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    OraFormsSetRectangle("VISIBLERECT", 0, 0, 119, 24, ORA_SET_TYPE_MESSAGEGET);
    OraFormsOnMessageGet("LINE_CUSTOMER_ITEM_DSP_0"); // Requested Item
    OraFormsMouseClick("LINE_CUSTOMER_ITEM_DSP_0", 70, 18, 0); // Requested Item
  end  TMain;

親トピック: Control Functions


OraFormsListActivate Function

Action

OraFormsListActivate is used to send an activate message for an element in a list box control. A control is identified by a unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsListActivate( in sName     : string,
                      in sLabel    : string,
                      in nIndex    : number optional,
                      in nPosition : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique ID.
sLabel | (if not NULL) The element with the defined label (textual representation) will be activated. If you pass NULL, you must define the index of the item that is to be activated in the next parameter.
nIndex | (if sLabel is NULL) This parameter defines the index of the element that is to be activated. The index of the first element is 0.
nPosition | If the control contains multiple entries with the same label, this parameter will be used to specify the nth position. The default value is 0.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsSetFocus("PERSON_GENDER");
    OraFormsListActivate("PERSON_GENDER", "Male", 0);
    OraFormsListClose("PERSON_GENDER");
  end TMain;
親トピック: Control Functions


OraFormsListClose Function

Action

OraFormsListClose can be used to close an open list box without selecting a new value. There is no actual command that opens the box. This method simulates the complete sequence of opening and closing a list box without selecting a value. To select a value, use OraFormsListSelect. A list box is identified by its unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsListClose( in  sName : string) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION",  608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_GENDER");
    OraFormsListSelect( "PERSON_GENDER", "Male",  0);
    OraFormsListClose( "PERSON_GENDER");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsListSelect Function

Action

OraFormsListSelect selects an entry in a list box. The element that is to be selected can either be defined by its textual representation or by its index. A list box is identified by a unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsListSelect(    in sName     : string,
                       in sLabel    : string,
                       in nIndex    : number optional,
                       in nPosition : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique ID.
sLabel | (if not NULL) The element with the defined label (textual representation) will be selected. If you pass NULL, in the next parameter, you have to define the index of the item that is to be selected.
nIndex | (if sLabel is NULL) This parameter defines the index of the element that is to be selected. The index of the first element is 0.
nPosition | If the control contains multiple entries with the same label, this parameter will be used to specify the nth position. The default value is 0.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsSetFocus("PERSON_GENDER");
    OraFormsListSelect("PERSON_GENDER", "Male", 0);
    OraFormsListClose("PERSON_GENDER");
    OraFormsMenuItem("WINDOW1", "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsLogon Function

Action

Performs a logon to an Oracle Forms Server.

Include file

OraForms.bdh

Syntax

OraFormsLogon(  in sUser     :  string,
                in sPassword :  string,
                in sDatabase :  string ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sUser | User name for an Oracle database.
sPassword | The user's password.
sDatabase | Oracle TNS name.

Example

dcltrans
  transaction TMain
  begin
    OraFormsConnect( "server module=module.fmx userid= useSDI=yes");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
  end TMain;
親トピック: Control Functions


OraFormsLogonCancel Function

Action

Cancels a logon dialog by pressing the "Cancel" button.

Include file

OraForms.bdh

Syntax

OraFormsLogonCancel( ) : boolean;

Return value

  • true if successful
  • false otherwise

Example

dcltrans
  transaction TMain
  begin
    OraFormsConnect( "server module=module.fmx userid= useSDI=yes");
    OraFormsSetWindow( "Logon");
    OraFormsLogonCancel();
  end TMain;
親トピック: Control Functions


OraFormsLovAutoReduceChar Function

Action

OraFormsLovAutoReduceChar sends an auto-reduce message to a List Of Values dialog.

Include file

OraForms.bdh

Syntax

OraFormsLovAutoReduceChar(    in sName      : string,
                              in nCharacter : number,
                              in nOption    : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Unique name of the control where the List Of Values dialog is opened.
nCharacter | The ordinal number of the character to be sent.
nOptions | (unspecified) This value is 0 by default.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsSetFocus("PERSON_GENDER");
    OraFormsLovAutoReduceChar("PERSON_GENDER", 114, 0);
    OraFormsLovUnReduce("PERSON_GENDER");
  end TMain;
親トピック: Control Functions


OraFormsLovFind Function

Action

OraFormsLovFind allows you to define a new search pattern for the List Of Values dialog.

Include file

OraForms.bdh

Syntax

OraFormsLovFind( in sName       : string,
                 in sPattern    : string) : boolean

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | Unique name of the control where the List Of Values dialog is opened.
sPattern | The new search pattern for the List Of Values dialog.

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION",  96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE",  1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "FENSTER1",  "Edit::Display List...");
    OraFormsSetWindow( "lovjob");
    OraFormsLovOpen( "lovjob", nFetched);
    OraFormsLovFind( "lovjob",  "%S%");
    OraFormsLovSelect( "lovjob",  "SUPER-MAN");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsLovGetItems Function

Action

OraFormsLovGetItems retrieves a specified of number of LOV box entries from the server. OraFormsLovGetItems uses a 1-based index.

Include file

OraForms.bdh

Syntax

OraFormsLovGetItems( in sName      : string,
                     in nFirstItem : number,
                     in nItemCount : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The name of the LOV dialog.
nFirstItem | The index of the first item to be fetched. The index is 1-based.
nItemCount | The number of items to be fetched.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsLovOpen("Window Lov Dialog", 0, ORA_LOV_FETCHLATER);
    OraFormsLovGetItems("Window Lov Dialog", 1, 4);
  end TMain;
親トピック: Control Functions


OraFormsLovOpen Function

Action

OraFormsLovOpen opens a List Of Values dialog for a text control that has a LOV assigned to it. The function also returns the initial number of items in the LOV when the LOV dialog is opened with the default search string.

Include file

OraForms.bdh

Syntax

OraFormsLovOpen( in sName          : string,
                 out nItemsFetched :  number,
                 in nFetchFlag     :  number optional ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | Unique name of the control where the List Of Values dialog should be opened.
nItemsFetched | Number of items that are returned by the default query string of the LOV Dialog.
nFetchFlag

(otional) Can be:

  • ORA_LOV_FETCHALL: Immediately retrieve all items for the LOV box.
  • ORA_LOV_FETCHLATER: Retrieve the items for the LOV box later with OraFormsLovGetItems.

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "FENSTER1",  "Edit::Display List...");

    OraFormsSetWindow( "lovjob");
    OraFormsLovOpen( "lovjob", nFetched);
    OraFormsLovFind( "lovjob",  "%S%");
    OraFormsLovSelect( "lovjob",  "SUPER-MAN");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsLovSelect Function

Action

OraFormsLovSelect allows you to select an entry of the search result in the List Of Values dialog. The value will be used in the control that has the List of Values assigned to it. The entry can either be defined by its value or by the index in the current search result.

Include file

OraForms.bdh

Syntax

OraFormsLovSelect(  in sName  :   string,
                    in sValue :  string,
                    in nIndex :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | Unique name of the control where the List Of Values dialog is opened.
sValue | The value that should be selected from the current LOV result. If NULL, the nIndex parameter can be used to define the index that should be selected.
nIndex | (optional) If sValue is NULL, this parameter can be used to define the index of the entry that should be selected.

Example

transaction TMain
  var
    sValue :  string;
    nFetched :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION",96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "FENSTER1",  "Edit::Display List...");

    OraFormsSetWindow( "lovjob");
    OraFormsLovOpen( "lovjob", nFetched);
    OraFormsLovFind( "lovjob",  "%S%");
    OraFormsLovSelect( "lovjob",  "SUPER-MAN");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end  TMain;
親トピック: Control Functions


OraFormsLovUnReduce Function

Action

OraFormsLovUnReduce sends an un-reduce message to a List Of Values dialog.

Include file

OraForms.bdh

Syntax

OraFormsLovUnReduce( in sName  : string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Unique name of the control where the List Of Values dialog is opened.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsSetFocus("PERSON_GENDER");
    OraFormsLovAutoReduceChar("PERSON_GENDER", 114, 0);
    OraFormsLovUnReduce("PERSON_GENDER");
  end TMain;
親トピック: Control Functions


OraFormsRadioSet Function

Action

OraFormsRadioSet changes the selected state of a radio button control.

Include

OraForms.bdh

Syntax

OraFormsRadioSet( in sName : string, in bSet : boolean ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
bSet

The new selected state value of the control.

  • TRUE: to select the control.
  • FALSE: to unselect the control.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_GENDER_MALE");
    OraFormsRadioSet( "PERSON_GENDER_MALE",  true);
  end  TMain;
親トピック: Control Functions


OraFormsPopListActivate Function

Action

OraFormsPopListActivate is used to send an activate message for an element in a pop-up list box control. A control is identified by a unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsPopListActivate( in sName     :  string,
                         in sLabel    :  string,
                         in nIndex    :  number optional,
                         in nPosition :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique ID.
sLabel | If not NULL - The element with the defined label (textual representation) will be activated. If you pass NULL, you have to define the index of the item that should be activated in the next parameter.
nIndex | If sLabel is NULL - This parameter defines the index of the element that should be activated. The index of the first element is 0.
nPosition | If the control contains multiple entries with the same label, this parameter will be used to specify the nth position. The default value is 0.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION",  96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO",  8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_GENDER");
    OraFormsPopListActivate( "PERSON_GENDER",  "Male",  0);
    OraFormsPopListClose( "PERSON_GENDER");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsPopListClose Function

Action

OraFormsPopListClose can be used to close an open pop-up list box without selecting a new value. There is no actual command that opens the box. This method simulates the complete sequence of opening and closing a pop-up list box without selecting a value. To select a value, use OraFormsPopListSelect. A pop-up list box is identified by its unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsPopListClose( in sName : string ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_GENDER");
    OraFormsPopListSelect( "PERSON_GENDER", "Male",  0);
    OraFormsPopListClose( "PERSON_GENDER");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsPopListSelect Function

Action

OraFormsPopListSelect selects an entry in a pop-up list. The element that is to be selected can either be defined by its textual representation or its index. A pop-up list is identified by a unique name or ID.

Include file

OraForms.bdh

Syntax

OraFormsPopListSelect( in sName    :  string;
                      in sLabel    :  string;
                      in nIndex    :  number optional,
                      in nPosition :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique ID.
sLabel | If not NULL - The element with the defined label (textual representation) will be activated. If you pass NULL, you have to define the index of the item that should be activated in the next parameter.
nIndex | If sLabel is NULL - This parameter defines the index of the element that should be activated. The index of the first element is 0.
nPosition | If the control contains multiple entries with the same label, this parameter will be used to specify the nth position. The default value is 0.

Example

 transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION",  96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO",  8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsSetFocus( "PERSON_GENDER");
    OraFormsPopListSelect( "PERSON_GENDER",  "Male",  0);
    OraFormsPopListClose( "PERSON_GENDER");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Control Functions


OraFormsPutMessage Function

Action

This function adds a new message to the virtual users message pump.

Include file

OraForms.bdh

Syntax

OraFormsPutMessage( in nMsg   : number );
Parameter | Description
nMsg | The handler of the message to be added to the message pump.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Control Functions


OraFormsPutTerminalAndWait Function

Action

This function adds a terminal message to the message queue, performs a flush and returns when the message is processed.

Include file

OraForms.bdh

Syntax

OraFormsPutTerminalAndWait( );

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Control Functions


OraFormsRegisterMessageInterceptor Function

Action

This function registers a message interceptor that will determine the handler id and the handler title of controls of a specified class. This function can be used to determine the handler id of controls during runtime, especially when these handlers do not have a title property.

Include file

OraForms.bdh

Syntax

OraFormsRegisterMessageInterceptor( in nClassId : number ) : number;

Return value

  • The handle to the message interceptor on success

  • 0 otherwise

Parameter | Description
nClassId | Register an interceptor for controls with this class id.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
    nItc    : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2");

    nItc := OraFormsRegisterMessageInterceptor(1020);
    OraFormsKeyStroke("VNDR_END_DATE_ACTIVE_MIR_0", ORA_KEY_TAB, 0);

    // Inactive On
    nFlexId := OraFormsGetInterceptedControlId();
    OraFormsUnregisterMessageInterceptor(nItc);
    Print ("here is the id");
    Print(string(nFlexId));
  end TMain;
親トピック: Control Functions


OraFormsUnregisterMessageInterceptor Function

Action

Unregisters and frees a message interceptor.

Include file

OraForms.bdh

Syntax

OraFormsUnregisterMessageInterceptor(in nHandle : number );
Parameter | Description
nHandle | Register an interceptor for controls with this class id.

Example

  transaction TMain
  var
    nFlexId : number;
    nItc    : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2");
    nItc := OraFormsRegisterMessageInterceptor(1020);
    OraFormsKeyStroke("VNDR_END_DATE_ACTIVE_MIR_0", ORA_KEY_TAB, 0);

    // Inactive On
    nflexId := OraFormsGetInterceptedControlId();
    OraFormsUnregisterMessageInterceptor(nItc);
    Print ("here is the id");
    Print(string(nflexId));
  end TMain;
親トピック: Control Functions


OraFormsResponseBoxCancel Function

Action

OraFormsResponseBoxCancel presses the Cancel button on a response dialog.

Include file

OraForms.bdh

Syntax

OraFormsResponseBoxCancel(   in sName  : string,
                             in nIndex : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nIndex | Index of the selected row.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsResponseBoxCancel("ADB Account", 0);
  end TMain;
親トピック: Control Functions


OraFormsResponseBoxOk Function

Action

OraFormsResponseBoxOk presses the OK button on a Response dialog.

Include file

OraForms.bdh

Syntax

OraFormsResponseBoxOk( in sName  : string,
                       in nIndex : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nIndex | The selected row.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsResponseBoxOk("ADB Account", 0);
  end TMain;
親トピック: Control Functions


OraFormsResponseBoxValidate Function

Action

OraFormsResponseBoxValidate sends a validation message for a response dialog.

Include file

OraForms.bdh

Syntax

OraFormsResponseBoxValidate( in sName  : string,
                             in sType  : string,
                             in nIndex : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sType | String specifying how the verification is to be performed.
nIndex | Index of the row to be verified.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsResponseBoxValidate("ADB Account", "L", 0);
  end TMain;
親トピック: Control Functions


OraFormsScrollerDrag Function

Action

Drags and drops the scroller to a specified position.

Include file

OraForms.bdh

Syntax

OraFormsScrollerDrag( in sName : string,
                      in nDrag : number ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nDrag | The new position of the scroller.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "clemens",  "clemens",  "orcl_sunserver");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
    OraFormsScrollerDrag( "SCROLLER_1",  4)
  end TMain;
親トピック: Control Functions


OraFormsScrollerLine Function

Action

Performs a scroll up or scroll down action on a scroller by a specified number of lines.

Include file

OraForms.bdh

Syntax

OraFormsScrollerLine( in sName : string,
                      in nLines : number ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nLines | The number of lines to scroll. Positive numbers for scrolling down and negative numbers for scrolling up.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "clemens",  "clemens",  "orcl_sunserver");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
    // Scroll line down to position: 1
    OraFormsScrollerLine( "17",  1);
    // Scroll line down to position: 2
    OraFormsScrollerLine( "17",  1);
    // Scroll line up to position: 1
    OraFormsScrollerLine( "17",  -1);
    // Scroll line up to position: 0
    OraFormsScrollerLine( "17",  -1);
  end TMain;
親トピック: Control Functions


OraFormsScrollerPage Function

Action

Performs a page scroll up or page scroll down action on a scroller by a specified number of pages.

Include file

OraForms.bdh

Syntax

OraFormsScrollerPage( in sName  : string,
                      in nPages : number) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPages | The number of pages to scroll. Positive numbers for scrolling down and negative numbers for scrolling up.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "clemens",  "clemens",  "orcl_sunserver");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
    // Scroll line down to position: 1
    OraFormsScrollerPage( "SCROLLER_1",  1);
    // Scroll line down to position: 2 OraFormsScrollerPage( "SCROLLER ",  1);
    // Scroll line up to position: 1
    OraFormsScrollerPage( "SCROLLER ",  -1);
    // Scroll line up to position: 0
    OraFormsScrollerPage( "SCROLLER ",  -1);
  end TMain;
親トピック: Control Functions


OraFormsTreeSelectNode Function

Action

Selects the specified tree node of a tree control.

Include file

OraForms.bdh

Syntax

OraFormsTreeSelectNode(  in sName  :  string,
                         in sLabel :  string allownull,
                         in nNode  :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The tree control's unique name.
sLabel | The value of the tree node. This value may be NULL if the node is specified by its index.
nNode | The node index. Will only be used when the previous parameter is set to NULL.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // --- OraFormsBeginMessageBlock( "WINDOW1#1");
    OraFormsMouseClick( "24",  74,  149,  0);
    // Selected entry: Oliver Tuvault
    OraFormsTreeSelectNode( "24",  "John Russell\\Oliver Tuvault");
    OraFormsEndMessageBlock( "WINDOW1#1");
  end  TMain;
親トピック: Control Functions
関連資料
OraFormsTreeActivateNode Function
OraFormsTreeCollapseNode Function
OraFormsTreeExpandNode Function


OraFormsSetCancelQueryWindow Function

Action

Marks the specified Cancel Query dialog as the current active window. This function doesn’t send any requests to the server. It is recorded to make the BDL script more readable.

Include file

OraForms.bdh

Syntax

OraFormsSetCancelQueryWindow( in sName : string );
Parameter | Description
sName | The window’s unique name.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect("server module=javamail90.fmx usesdi=yes");
    OraFormsSetCancelQueryWindow("Cancel Query");
    OraFormsCloseCancelQueryDialog("Cancel Query");
  end TMain;
親トピック: Control Functions


OraFormsSetFocus Function

Action

Sets the focus for the specified control.

Include file

OraForms.bdh

Syntax

OraFormsSetFocus( in sName : string) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION",  608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    OraFormsSetFocus( "PUSH_BUTTON");
    OraFormsButtonPress( "PUSH_BUTTON");
  end TMain;
親トピック: Control Functions


OraFormsSetWindow Function

Action

Marks the specified window as the current activate window. This function doesn't send any requests to the server. It is recorded to make the BDL script more readable.

Include file

OraForms.bdh

Syntax

OraFormsSetWindow( in sName : string ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The window's unique name.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetString( "DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=javamail90.fmx usesdi=yes");
    OraFormsSetWindow( "BASE_DEMO_WINDOW");
    OraFormsWindowMove( "BASE_DEMO_WINDOW", 0,  -24);
  end TMain;
親トピック: Control Functions


OraFormsTabSelect Function

Action

Activates a tab page.

Include file

OraForms.bdh

Syntax

OraFormsTabSelect(  in sName  :  string,
                    in sTab   : string ,
                    in nIndex :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The tab control's unique name.
sTab | Specifies the tab sheet to be selected. If this parameter is set to NULL the index of the tab sheet as specified in the next parameter will be taken.
nIndex | The index of the tab sheet to be selected. The index will be used whenever the sLabel parameter is set to NULL.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    OraFormsTabSelect( "FIRST_TAB",  "", 1);
  end  TMain;
親トピック: Control Functions


OraFormsTreeActivateNode Function

Action

Sends an activate message for the specified tree node of the tree control.

Include file

OraForms.bdh

Syntax

OraFormsTreeActivateNode( in sName  : string,
                          in sLabel : string allownull,
                          in nNode  : number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The tree control's unique name.
sLabel | The value of the tree node to be activated.
nNode | The index of the tree node if the previous value is NULL.

Example

 transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    OraFormsBeginMessageBlock( "WINDOW1#1");
    OraFormsMouseClick( "24",  74,  149,  0);
    // Selected entry: Oliver Tuvault
    OraFormsTreeActivateNode( "24",  "John Russell\\Oliver Tuvault");
    OraFormsEndMessageBlock( "WINDOW1#1");
  end  TMain;
親トピック: Control Functions
関連資料
OraFormsTreeCollapseNode Function
OraFormsTreeExpandNode Function
OraFormsTreeSelectNode Function


OraFormsTreeCollapseNode Function

Action

Collapses the specified node in a tree control.

Include file

OraForms.bdh

Syntax

OraFormsTreeCollapseNode(  in sName  :  string,
                           in sLable :  string allownull,
                           in nNode  :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Descripton
sName | The control's unique name.
sLable | The value of the node to be selected.
nNode | The index of the node to be selected. This value will be ignored if the previous parameter is not NULL.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // --- OraFormsBeginMessageBlock( "WINDOW1#1");
    OraFormsMouseClick( "24",  74,  149,  0);
    // Selected entry: Oliver Tuvault
    OraFormsTreeCollapseNode( "24",  "John Russell\\Oliver Tuvault");
    OraFormsEndMessageBlock( "WINDOW1#1");
  end  TMain;
親トピック: Control Functions
関連資料
OraFormsTreeActivateNode Function
OraFormsTreeExpandNode Function
OraFormsTreeSelectNode Function


OraFormsTreeExpandNode Function

Action

Expands the selected branch in a tree control.

Include file

OraForms.bdh

Syntax

OraFormsTreeExpandNode(  in sName  :  string,
                         in sLabel :  string allownull,
                         in nNode  :  number optional ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
sLabel | The value of the node to be expanded.
nNode | The index of the node to be expanded. This value will be ignored if the previous parameter is not NULL.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION",  96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO",  8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // --- OraFormsBeginMessageBlock( "WINDOW1#1");
    OraFormsMouseClick( "24",  74,  149,  0);
    // Selected entry: Oliver Tuvault
    OraFormsTreeExpandNode( "24",  "John Russell\\Oliver Tuvault");
    OraFormsEndMessageBlock( "WINDOW1#1");
  end  TMain;
親トピック: Control Functions
関連資料
OraFormsTreeActivateNode Function
OraFormsTreeCollapseNode Function
OraFormsTreeSelectNode Function


OraFormsWindowMove Function

Action

Moves a specified window by provided coordinates.

Include file

OraForms.bdh

Syntax

OraFormsWindowMove(  in sName :  string,
                     in nX    :  number,
                     in nY    :  number ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The window's unique name.
nX | x part of the coordinates.
nY | y part of the coordinates.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetString( "DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=javamail90.fmx usesdi=yes");
    OraFormsSetWindow( "BASE_DEMO_WINDOW");
    OraFormsWindowMove( "BASE_DEMO_WINDOW",  0,  -24);
  end TMain;
親トピック: Control Functions


OraFormsWindowResize Function

Action

Resizes a given window by specified coordinates.

Include file

OraForms.bdh

Syntax

OraFormsWindowResize(  in sName :  string,
                        in nX :  number,
                        in nY :  number ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The window's unique name.
nX | x part of the coordinates.
nY | y part of the coordinates.

Example

 dcltrans
  transaction TMain
  begin
    OraFormsSetString( "DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=javamail90.fmx usesdi=yes");
    OraFormsSetWindow( "BASE_DEMO_WINDOW");
    OraFormsWindowResize( "BASE_DEMO_WINDOW",  45,  24);
  end TMain;
親トピック: Control Functions


OraFormsWindowUpdate Function

Action

Modifies the status of a specified window.

Include file

OraForms.bdh

Syntax

OraFormsWindowUpdate(  in sName   :  string,
                       in nAction :  number,
                       in bStatus :  boolean ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The window's unique name.
nAction

Can be any of these values:

  • ORA_WINDOW_VISIBLE
  • ORA_WINDOW_MAXIMIZED
  • ORA_WINDOW_ICONIFIED
  • ORA_WINDOW_ACTIVATED
bStatus | Specifies whether to set the status as defined by the previous parameter.

Example

dcltrans
  transaction TMain
  var
  begin
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  20);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsSetString( "DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=iorganizer.fmx userid=iorg/iorg@ORCL_server sso_userid= usesdi=yesrecord=names");
    OraFormsSetFocus( "LOGIN_PB_ENTER_0"); // Enter
    OraFormsButtonPress( "LOGIN_PB_ENTER_0");  // Enter
    // Incorrect Login Information. Do you want to register?
    OraFormsMessageBoxButton( "Incorrect Login", ORA_ALERT_NO);
    OraFormsWindowUpdate( "Oracle iOrganizer", ORA_WINDOW_ACTIVATED, true);
    OraFormsCloseWindow( "Oracle iOrganizer");
  end TMain;
親トピック: Control Functions


Properties Functions

  • OraFormsAddPropertyBoolean Function
    Adds a property of type boolean to a message.
  • OraFormsAddPropertyByte Function
    Adds a property of type byte to a message.
  • OraFormsAddPropertyInt Function
    Adds a property of type integer to a message.
  • OraFormsAddPropertyMessage Function
    Adds a property from type message to another message.
  • OraFormsAddPropertyPoint Function
    Adds a property of type point to a message.
  • OraFormsAddPropertyRectangle Function
    Adds a property of type rectangle to a message.
  • OraFormsAddPropertyString Function
    Adds a property of type string to a message.
  • OraFormsGetFlexCellData Function
    Feturns the value of the field in a flex window.
  • OraFormsGetFlexCellPropBoolean Function
    Returns the Boolean property of a cell.
  • OraFormsGetFlexCellPropBooleanByIndex Function
    Returns the Boolean property of a cell.
  • OraFormsGetFlexCellPropInt Function
    Returns a specified cell’s integer property.
  • OraFormsGetFlexCellPropIntByIndex Function
    Returns a specified cell’s integer property.
  • OraFormsGetFlexCellPropString Function
    Returns a flex window cell’s string property.
  • OraFormsGetFlexCellPropStringByIndex function
    Returns a flex window cell’s string property.
  • OraFormsGetFlexColumnCount Function
    Returns the number of columns in a flex window.
  • OraFormsGetFlexColumnIndex Function
    Returns the index of the specified column.
  • OraFormsGetFlexColumnName Function
    Returns a column’s name.
  • OraFormsGetFlexPropBoolean Function
    Returns a specified Boolean type flex window property.
  • OraFormsGetFlexPropString Function
    Returns the specified string property of a flex window.
  • OraFormsGetFlexRowCount Function
    Returns the number of rows within a flex window.
  • OraFormsGetFlexRowIndex Function
    Returns the index of the specified row.
  • OraFormsGetFlexRowName Function
    Returns the name of the specified row within a flex window.
  • OraFormsGetPropByte Function
    Returns the specified property's value for the given control.
  • OraFormsGetPropByteArray Function
    Returns an element of a byte array for a specified property within a control.
  • OraFormsGetPropByteArrayLen Function
    Returns the length for a byte array property.
  • OraFormsGetPropInt Function
    Returns the specified property's value for the given control.
  • OraFormsGetPropNull Function
    Determines whether a property for the specified control is NULL.
  • OraFormsGetPropPoint Function
    Gets the value for a point property of a specified control.
  • OraFormsGetPropRectangle Function
    Returns the value of a rectangle property for the specified control.
  • OraFormsGetPropString Function
    Returns the specified property's value for the given control.
  • OraFormsGetPropStringArray Function
    Returns an element of a string array property at a given position.
  • OraFormsGetPropStringArrayLen Function
    Returns the length (a number) of a string array property.
  • OraFormsSetBoolean Function
    Sets a boolean property that must be sent with the next request.
  • OraFormsSetByte Function
    Sets a byte property that must be sent with the next request.
  • OraFormsSetByteArray Function
    Sets a byte array that must be sent with the next request.
  • OraFormsSetCharacter Function
    Sets a character property that must be sent with the next request.
  • OraFormsSetInt Function
    Sets an integer property that must be sent with the next request.
  • OraFormsSetPoint Function
    Sets a point property that must be sent with the next request.
  • OraFormsSetRectangle Function
    Sets a rectangle property that must be sent with the next request.
  • OraFormsSetString Function
    Sets a string property that must be sent with the next request.
  • OraFormsSetStringArray Function
    Sets an array of string properties that must be sent with the next request.
親トピック: Oracle Forms Functions Reference


OraFormsAddPropertyBoolean Function

Action

This function adds a property of type boolean to a message.

Include file

OraForms.bdh

Syntax

OraFormsAddPropertyBoolean(in nMsg   : number,
                           in nPid   : number,
                           in bValue : boolean );
Parameter | Description
nMsg | The handle to a message
nPid | The id of the property to be added.
bValue | Value of the property.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New windowmactivated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyBoolean(gnUmsg, 2600, false);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Properties Functions


OraFormsAddPropertyByte Function

Action

This function adds a property of type byte to a message.

Include file

OraForms.bdh

Syntax

OraFormsAddPropertyByte( in nMsg   : number,
                         in nPid   : number,
                         in nValue : number);
Parameter | Description
nMsg | The handle to a message
nPid | The id of the property to be added.
nValue | A value of type number.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyByte(gnUmsg, 2600, 0);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Properties Functions


OraFormsAddPropertyInt Function

Action

This function adds a property of type integer to a message.

Include file

OraForms.bdh

Syntax

OraFormsAddPropertyInt( in nMsg   : number,
                        in nPid   : number,
                        in bValue : boolean );
Parameter | Description
nMsg | The handle to a message
nPid | The id of the property to be added.
bValue | Value of the property.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyByte(gnUmsg, 2600, 0);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Properties Functions


OraFormsAddPropertyMessage Function

Action

This function adds a property from type message to another message.

Include file

OraForms.bdh

Syntax

OraFormsAddPropertyMessage( in nMsg   : number,
                            in nPid   : number,
                            in bValue : boolean );
Parameter | Description
nMsg | The handle to a message
nPid | The id of the property to be added.
bValue | Value of the property.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyByte(gnUmsg, 2600, 0);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Properties Functions


OraFormsAddPropertyPoint Function

Action

This function adds a property of type point to a message.

Include file

OraForms.bdh

Syntax

OraFormsAddPropertyPoint( in nMsg   : number,
                          in nPid   : number,
                          in nX     : number,
                          in nY     : number );
Parameter | Description
nMsg | The handle to a message.
nPid | The id of the property to be added.
nX | The x part of the point structure.
nY | The y part of the point structure.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);

    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyByte(gnUmsg, 2600, 0);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Properties Functions


OraFormsAddPropertyRectangle Function

Action

This function adds a property of type rectangle to a message.

Include file

OraForms.bdh

Syntax

OraFormsAddPropertyRectangle( in nMsg   : number,
                              in nPid   : number,
                              in nX1    : number,
                              in nY1    : number,
                              in nX2    : number ,
                              in nY2    : number );
Parameter | Description
nMsg | The handle to a message
nPid | The id of the property to be added.
nX1 | The x part of the first coordinates.
nY1 | The y part of the first coordinates.
nX2 | The x part of the second coordinates.
nY2 | The y part of the second coordinates.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg, 2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyByte(gnUmsg, 2600, 0);
    OraFormsAddPropertyRectangle(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0, 20, 30);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Properties Functions


OraFormsAddPropertyString Function

Action

This function adds a property of type string to a message.

Include file

OraForms.bdh

Syntax

OraFormsAddPropertyString(in nMsg   : number,
                          in nPid   : number,
                          in sValue : string );
Parameter | Description
nMsg | The handle to a message
nPid | The id of the property to be added.
sValue | Value of the property.

Example

  transaction TMain
  var
    nFlexId : number;
    gnUmsg  : number;
    subMsg  : number;
  begin
    OraFormsSetConnectMode(ORA_HTTP_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    OraFormsBeginMessageBlock("Block#2");
    gnUmsg := OraFormsCreateMessage(20, 40, ORA_MSG_TYPE_UPDATE);
    subMsg := OraFormsCreateMessage(30, 40, ORA_MSG_TYPE_UPDATE);
    OraFormsAddPropertyMessage(gnUmsg, ORA_PID_BP_FOREFILLCOL, subMsg);
    OraFormsAddPropertyInt(gnUmsg,2601, 91);
    OraFormsAddPropertyInt(gnUmsg, 2600, 0);
    OraFormsAddPropertyByte(gnUmsg, 2600, 0);
    OraFormsAddPropertyPoint(gnUmsg, ORA_PID_INITIAL_RESOLUTION, 0, 0);
    OraFormsAddPropertyString(gnUmsg, 2600, "E");
    OraFormsPutMessage(gnUmsg);
    OraFormsPutTerminalAndWait();
    OraFormsFree(gnUmsg);
    OraFormsEndMessageBlock("Block#2")
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexCellData Function

Action

OraFormsGetFlexCellData returns the value of the field in a flex window.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexCellData( in sName : string,
    in sRow  : string,
    in sCol  : string optional) : string;

Return value

  • The value of the field on success.

  • Null otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    sValue := bin(OraFormsGetFlexCellData("ADB Account", "Transfer", "Low"));
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexCellPropBoolean Function

Action

OraFormsGetFlexCellPropBoolean returns the Boolean property of a cell.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexCellPropBoolean( in sName : string,
                                in sRow  : string,
                                in sCol  : string,
                                in nProp : number ) : boolean;

Return value

  • true or false

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexCellPropBoolean("ADB Account", "Transfer", "Low",ORA_FLEX_CELL_IS_QUERYABLE);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexCellPropBooleanByIndex Function

Action

OraFormsGetFlexCellPropBooleanByIndex returns the Boolean property of a cell.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexCellPropBooleanByIndex( in sName : string,
                                       in nRow  : number,
                                       in nCol  : number,
                                       in nProp : number ) : boolean;

Return value

  • true or false

Parameter | Description
sName | The control's unique name.
nRow | The field’s row.
nCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexCellPropBooleanByIndex("ADB Account", 0, 0,ORA_FLEX_CELL_IS_QUERYABLE);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexCellPropInt Function

Action

OraFormsGetFlexCellPropInt returns a specified cell’s integer property.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexCellPropInt( in sName : string,
                            in sRow  : string,
                            in sCol  : string,
                            in nProp : number ) : number ;

Return value

  • The value on success.

  • -1 otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexCellPropInt("ADB Account", "Transfer", "Low",ORA_FLEX_CELL_IS_QUERYABLE);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexCellPropIntByIndex Function

Action

OraFormsGetFlexCellPropIntByIndex returns a specified cell’s integer property.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexCellPropIntByIndex( in sName : string,
                                   in nRow  : number,
                                   in nCol  : number,
                                   in nProp : number ) : number;

Return value

  • The value on success

  • -1 otherwise

Parameter | Description
sName | The control's unique name.
nRow | The field’s row.
nCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexCellPropIntByIndex("ADB Account", 0, 0,ORA_FLEX_CELL_IS_QUERYABLE);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexCellPropString Function

Action

OraFormsGetFlexPropString returns a flex window cell’s string property.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexCellPropString( in sName : string,
                               in sRow  : string,
                               in sCol  : string,
                               in nProp : number ) : string;

Return value

  • The value on success.

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexCellPropString("ADB Account", "Transfer", "Low",ORA_FLEX_CELL_IS_QUERYABLE);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexCellPropStringByIndex function

Action

OraFormsGetFlexPropStringByIndex returns a flex window cell’s string property.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexCellPropStringByIndex( in sName : string,
                                      in nRow  : number,
                                      in nCol  : number,
                                      in nProp : number ) : string;

Return value

  • The value of the property on success.

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
nRow | The field’s row.
nCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexCellPropStringByIndex("ADB Account", 0, 0,ORA_FLEX_CELL_IS_QUERYABLE);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexColumnCount Function

Action

OraFormsGetFlexColumnCount returns the number of columns in a flex window.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexColumnCount( in name : string ) : number;

Return value

  • If successful, the number of columns.

  • -1 otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexColumnCount("ADB Account");
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexColumnIndex Function

Action

OraFormsGetFlexColumnIndex returns the index of the specified column.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexColumnIndex( in sName   : string,
                            in sColumn : string ) : number;

Return value

  • The 0-based index of the column if successful.

  • -1 otherwise

Parameter | Description
sName | The control's unique name.
sColumn | The field’s column.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexColumnIndex("ADB Account", "Low")
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexColumnName Function

Action

OraFormsGetFlexColumnName returns a column’s name.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexColumnName( in sName   : string,
                           in nColumn : number ) : string;

Return value

  • The name of the row on success.

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
nColumn | The 0-based index of the column.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    sValue := bin(OraFormsGetFlexColumnName("ADB Account", 0));
    if (StrIsNull(sValue)) then
      Print("No Column name");
    else
      Print(sValue);
    end;
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexPropBoolean Function

Action

OraFormsGetFlexPropBoolean returns a specified Boolean type flex window property.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexPropBoolean( in sName : string,
                            in nProp : number ) : boolean;

Return value

  • true or false

Parameter | Description
sName | The control's unique name.
nReturn

Can be one of these constants:

  • ORA_FLEX_WND_IS_AUTOPIK

  • ORA_FLEX_WND_IS_AUTOSKIP

  • ORA_FLEX_WND_IS_COMBO_AVAILABLE

  • ORA_FLEX_WND_IS_READONLY

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexPropBoolean("ADB Account", ORA_FLEX_WND_IS_READONLY);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexPropString Function

Action

OraFormsGetFlexPropString returns the specified string property of a flex window.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexPropString( in sName : string,
                           in nProp : number ) : string;

Return value

  • The value of the property on success.

  • NULL otherwisee

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA_FLEX_WND_LABEL

  • ORA_FLEX_WND_PROTOCOL

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexPropString("ADB Account", ORA_FLEX_WND_LABEL);
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexRowCount Function

Action

OraFormsGetFlexRowCount returns the number of rows within a flex window.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexRowCount( in sName : string ) : number;

Return value

  • The number of rows on success.

  • -1 otherwise

Parameter | Description
sName | The control's unique name.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexRowCount("ADB Account");
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexRowIndex Function

Action

OraFormsGetFlexRowIndex returns the index of the specified row.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexRowIndex( in sName : string,
                         in sRow  : string ) : number;

Return value

  • The index of the row on success.

  • -1 otherwise

Parameter | Description
sName | The control's unique name.
sRow | The name of the row.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetFlexRowIndex("ADB Account", "Transfer");
  end TMain;
親トピック: Properties Functions


OraFormsGetFlexRowName Function

Action

OraFormsGetFlexRowName returns the name of the specified row within a flex window.

Include file

OraForms.bdh

Syntax

OraFormsGetFlexRowName( in sName : string,
                        in nRow  : number ) : string;

Return value

  • The name of the row on success.

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
nRow | The 0-based index of the row.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    sValue := bin(OraFormsGetFlexRowName("ADB Account", 0));
    if (StrIsNull(sValue)) then
      Print("No Column name");
    else
      Print(sValue);
    end;
  end TMain;
親トピック: Properties Functions


OraFormsGetPropByte Function

Action

Returns the specified property's value for the given control.

Include file

OraForms.bdh

Syntax

OraFormsGetPropByte( in sName   : string,
                     in nPropId : number ) : number;

Return value

The value of the property.

Parameter | Description
sName | The control's unique name.
nPropId | The ID of the property.

Example

dcltrans
  transaction TMain
  var
    nValue : number;
  begin
    OraFormsConnect("server module=javamail90.fmx usesdi=yes userid=");
    OraFormsSetWindow("BASE_DEMO_WINDOW");
    OraFormsWindowMove("BASE_DEMO_WINDOW", 0, -24);
    nValue := OraFormsGetPropByte("1", ORA_PID_IMAGE_VALUE);
  end TMain;
親トピック: Properties Functions


OraFormsGetPropByteArray Function

Action

Returns an element of a byte array for a specified property within a control.

Include file

OraForms.bdh

Syntax

OraFormsGetPropByteArray( in sName   : string,
                          in nPropId : number,
                          in nIndex  : number) : number;

Return value

The property's value at the specified position.

Parameter | Description
sName | The control's unique name.
nPropId | The property ID for the byte array property, for example ORA_PID_BP_CHUNK.
nIndex | The position of the element to be returned. This array index is 1-based.

Example

  var i, aByte :number;
    for i := 1 to OraFormsGetPropByteArrayLen("143", ORA_PID_IMAGE_VALUE) do
      aByte := OraFormsGetPropByteArray("143", ORA_PID_IMAGE_VALUE, i-1);
      Write(string(aByte)+",");
    end;
親トピック: Properties Functions


OraFormsGetPropByteArrayLen Function

Action

Returns the length for a byte array property.

Include file

OraForms.bdh

Syntax

OraFormsGetPropByteArrayLen(  in sName   :  string,
                               in nPropId :  number ) :  number;

Return value

  • The length of the array on success
  • -1 otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID for the byte array property, for example ORA_PID_BP_CHUNK.

Example

dcltrans
  transaction TMain
  var
    nLen, nIndex : number;
  begin
    OraFormsConnect("server module= iorganizer.fmx usesdi=yes userid= record=names);
    OraFormsSetWindow( "BASE_DEMO_WINDOW");
    OraFormsMessageBoxButton("Question", ORA_ALERT_YES);
    nLen := OraFormsGetPropByteArrayLen("164", ORA_PID_BP_CHUNK);
    Print("nLen = "+string(nLen));
    for nIndex := 0 to nLen - 1 do
      Print(string(OraFormsGetPropByteArray("164", ORA_PID_BP_CHUNK, nIndex)));
    end;
  end TMain;
親トピック: Properties Functions


OraFormsGetPropInt Function

Action

Returns the specified property's value for the given control.

Include file

OraForms.bdh

Syntax

OraFormsGetPropInt(  in sName :  string,
                     in nPropId :  number ) :  number;

Return value

  • The property's value
Parameter | Description
sName | The control's unique name.
nPropId | The property to be returned.

Example

dcltrans
  transaction TMain
  var
    nValue :  number;
  begin
    OraFormsConnect( "server module=javamail90.fmx usesdi=yes userid=");
    OraFormsSetWindow( "BASE_DEMO_WINDOW");
    OraFormsWindowMove( "BASE_DEMO_WINDOW", 0,  -24);
    nValue :=  OraFormsGetPropInt( "1", ORA_PID_FONT_SIZE);
  end TMain;
親トピック: Properties Functions


OraFormsGetPropNull Function

Action

Determines whether a property for the specified control is NULL.

Include file

OraForms.bdh

Syntax

OraFormsGetPropNull( in sName   : string,
                     in nPropId : number ) : boolean;

Return value

  • true if the property is null

  • false otherwise

Parameter | Description
sName | The control’s unique name.
nPropId | The property to be tested for NULL.

Example

dcltrans
  transaction TMain
  var
    bIsNull : boolean;
  begin
    OraFormsConnect("server module=javamail90.fmx usesdi=yes userid=");
    OraFormsSetWindow("BASE_DEMO_WINDOW");
    OraFormsWindowMove("BASE_DEMO_WINDOW", 0, -24);
    bIsNull := OraFormsGetPropNull("1", ORA_PID_IMAGE_VALUE);
  end TMain;
親トピック: Properties Functions


OraFormsGetPropPoint Function

Action

Gets the value for a point property of a specified control.

Include file

OraForms.bdh

Syntax

OraFormsGetPropPoint(  in sName   :  string,
                       in nPropId :  number,
                       out nX     :  number,
                       out nY     :  number ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
nX | Will be assigned the x value of the point property.
nY | Will be assigned the y value of the point property.

Example

dcltrans
  transaction TMain
  var
    nX :  number;
    nY :  number;
  begin
    OraFormsConnect( "server module=javamail90.fmx usesdi=yes userid=");
    OraFormsSetWindow( "BASE_DEMO_WINDOW");
    OraFormsWindowMove( "BASE_DEMO_WINDOW", 0,  -24);
    OraFormsGetPropPoint( "MAIN", ORA_PID_SIZE, nX, nY);
  end TMain;
親トピック: Properties Functions


OraFormsGetPropRectangle Function

Action

Returns the value of a rectangle property for the specified control.

Include file

OraForms.bdh

Syntax

OraFormsGetPropRectangle(  in sName   :  string,
                           in nPropId :  number,
                           out nX0    :  number,
                           out nY0    :  number,
                           out nX1    :  number,
                           out nY0    :  number ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | A property ID for a rectangle property.
nX0 | x part of the first coordinates.
nY0 | y part of the first coordinates.
nX1 | x part of the second coordinates.
nY1 | y part of the second coordinates.
親トピック: Properties Functions


OraFormsGetPropString Function

Action

Returns the specified property's value for the given control. The function may also return a NULL string. Use the function StrIsNull to determine whether a string is NULL.

Include file

OraForms.bdh

Syntax

OraFormsGetPropString(  in sName   :  string,
                        in nPropId :  number ) :  string;

Return value

  • The string on success
  • NULL otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The string property's ID.

Example

dcltrans
  transaction TMain
  var
    sValue :  string;
  begin
    OraFormsConnect( "server module=javamail90.fmx usesdi=yes userid=");
    OraFormsSetWindow( "BASE_DEMO_WINDOW");
    OraFormsWindowMove( "BASE_DEMO_WINDOW", 0,  -24);
    sValue:=  OraFormsGetPropString( "MAIN", ORA_PID_TITLE);
    if StrIsNull(sValue)  then
      Print( "sValue is null");
    end;
  end TMain;
親トピック: Properties Functions


OraFormsGetPropStringArray Function

Action

Returns an element of a string array property at a given position.

Include file

OraForms.bdh

Syntax

OraFormsGetPropStringArray(  in sName   :  string,
                             in nPropId :  number,
                             in nIndex  :  number ):  string;

Return value

The string at the specified position within the array

Parameter | Description
sName | The control's unique name or ID. The ID can be retrieved from the TrueLog's In Body page.
nPropId | The property ID for the string array property, for example ORA_PID_VALUE.
nIndex | The position of the element to be returned. This index is 0-based.

Example

dcltrans
  transaction TMain
  var
    nLen   :  number;
    nIndex :  number;
  begin
    OraFormsConnect("server module= iorganizer.fmx usesdi=yes userid= record=names);
    OraFormsSetWindow("BASE_DEMO_WINDOW");
    OraFormsMessageBoxButton("Question", ORA_ALERT_YES);
    nLen := OraFormsGetPropStringArrayLen("146", ORA_PID_VALUE);
    Print("nLen = "+string(nLen));
    for nIndex := 0 to nLen - 1 do
      Print(OraFormsGetPropStringArray("146", ORA_PID_VALUE, nIndex));
    end;
  end TMain;
親トピック: Properties Functions


OraFormsGetPropStringArrayLen Function

Action

Returns the length (a number) of a string array property.

Include file

OraForms.bdh

Syntax

OraFormsGetPropStringArrayLen(  in sName   :  string,
                                in nPropId :  number ):  number;

Return value

Number representing the length of the string array.

Parameter | Description
sName | The control's unique name or ID. The ID can be retrieved from the TrueLog's In Body page.
nPropId | The property ID for the string array property, for example ORA_PID_VALUE.

Example

dcltrans
  transaction TMain
  var
    nLen   :  number;
    nIndex :  number;
  begin
    OraFormsConnect("server module= iorganizer.fmx usesdi=yes userid= record=names);
    OraFormsSetWindow("BASE_DEMO_WINDOW");
    OraFormsMessageBoxButton("Question", ORA_ALERT_YES);
    nLen := OraFormsGetPropStringArrayLen("146", ORA_PID_VALUE);
    Print("nLen = "+string(nLen));
    for nIndex := 0 to nLen - 1 do
      Print(OraFormsGetPropStringArray("146", ORA_PID_VALUE, nIndex));
    end;
  end TMain;
親トピック: Properties Functions


OraFormsSetBoolean Function

Action

Sets a boolean property that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetBoolean( in sProperty : string,
                    in bValue    : boolean );
Parameter | Description
sProprety | The property name.
bValue | True or false.

Example

dcltrans
  transaction TMain
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
  end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


OraFormsSetByte Function

Action

Sets a byte property that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetByte( in sProperty : string,
                 in nValue    : number,
                 in nFlag     : number optional );
Parameter | Description
sProperty | The property name.
nValue | The property value.
nFlag

The type of function that will send the property (optional) Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
  transaction TMain
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
  end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


OraFormsSetByteArray Function

Action

Sets a byte array that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetByteArray( in sPropertry : string,
                      in byteArray  : array of number,
                      in nLen       : number,
                      in nFlag      : number optional );
Parameter | Description
sProperty | The property name.
byteArray | The property value.
nLen | The length of the array.
nFlag

The type of function that will send the property (optional) Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
  transaction TMain
  var    nArray : array of number init 1, 2, 3, 4, 5;  begin
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");    OraFormsSetByteArray("KEYBINDING", nArray, 5);
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
  end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


OraFormsSetCharacter Function

Action

Sets a character property that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetCharacter( in sProperty : string,
                      in nChar     : number,
                      in nFlag     : number optional );
Parameter | Description
sProperty | The property name.
nChar | The property value.
nFlag

The type of function that will send the property (optional) Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
  transaction TMain
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsSetCharacter("DRAWN_CANVASUSAGE", 65);
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
  end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


OraFormsSetInt Function

Action

Sets an integer property that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetInt(  in sProperty : string,
                                                                    in sValue 				:  number,
                                                                    in nFlag  				:  number optional );
Parameter | Description
sProperty | The property name.
sValue | The property value.
nFlag

The type of function that will send the property

Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
  transaction TMain
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
end TMain;
親トピック: Properties Functions


OraFormsSetPoint Function

Action

Sets a point property that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetPoint( in sProperty : string,
                  in nX        : number,
                  in nY        : number,
                  in nFlag     : number optional );
Parameter | Description
sProperty | The property name.
nX | x part of the point property.
nY | y part of the point property.
nFlag

The type of function that will send the property Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
  transaction TMain
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


OraFormsSetRectangle Function

Action

Sets a rectangle property that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetRectangle( in sProperty : string,
                      in nX0       : number,
                      in nY0       : number,
                      in nX1       : number,
                      in nY1       : number,
                      in nFlag     : number optional );
Parameter | Description
sProperty | The property name.
nX0 | The x part of the first coordinates.
nY0 | The y part of the first coordinates.
nX1 | The x part of the second coordinates.
nY1 | The y part of the second coordinates.
nFlag

The type of function that will send the property Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
   transaction TMain
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsSetRectangle("INIITAL_SCREENSIZE", 0, 0, 1024, 768);
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
  end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


OraFormsSetString Function

Action

Sets a string property that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetString( in sProperty : string,
                   in sValue    : string,
                   in nFlag     : number optional );
Parameter | Description
sProperty | The property name.
sValue | The property value.
nFlag

The type of function that will send the property Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
  transaction TMain
  begin
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
  end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


OraFormsSetStringArray Function

Action

Sets an array of string properties that must be sent with the next request.

Include file

OraForms.bdh

Syntax

OraFormsSetStringArray( in sProperty : string,
                        in strArray  : array of string,
                        in nLen      : number,
                        in nFlag     : number optional );
Parameter | Description
sProperty | The property name.
strArray | The property value.
nLen | The length of the array.
nFlag

The type of function that will send the property Possible values:

  • ORA_SET_TYPE_NORMAL (default)

  • ORA_SET_TYPE_MESSAGEGET, which is currently only used for the OraFormsOnMessageGet function.

Example

dcltrans
  transaction TMain
  var
    nArray : array of string init "1", "2", "3", "4", "5";
  begin
    OraFormsSetInt("INITIAL_VERSION", 90290);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 0);
    OraFormsSetInt("WINSYS_COLOR_ADD", 255);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65535);
    OraFormsSetInt("WINSYS_COLOR_ADD", 4210752);
    OraFormsSetInt("WINSYS_COLOR_ADD", 8421504);
    OraFormsSetInt("WINSYS_COLOR_ADD", 65280);
    OraFormsSetInt("WINSYS_COLOR_ADD", 12632256);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711935);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16762880);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16756655);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16711680);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16777215);
    OraFormsSetInt("WINSYS_COLOR_ADD", 16776960);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsSetStringArray("KEYBINDING", nArray, 5);
    OraFormsConnect( "server module=c:\\orant\\forms90\\EDITCOMBO.fmx usesdi=yes userid= sso_userid=");
  end TMain;
親トピック: Properties Functions
関連資料
OraFormsConnect Function
OraFormsOnMessageGet Function


Parsing Functions

  • OraFormsGetChildren Function
    Returns a handle that can be used to iterate over the children of a specified control.
  • OraFormsGetNextChild Function
    Positions the pointer to the next child of an iterator created with OraFormsGetChildren.
  • OraFormsGetNrOfResponseBoxValues Function
    Returns the number of entries in a response dialog.
  • OraFormsGetResponseBoxValue Function
    Returns the value of a response box at a specified index.
  • OraFormsParseCheckValue Function
    Returns the check state of a check box.
  • OraFormsParseChoiceBoxProperty Function
    Returns a choice box’s property.
  • OraFormsParseInfoBoxProperty Function
    Returns an info dialog’s property.
  • OraFormsParseListEntries Function
    Returns the number of elements in a list item, combo box, or pop-up list item.
  • OraFormsParseListEntry Function
    Returns the value of a combo box, list item, or pop-up list item at a specified index.
  • OraFormsParseListIndex Function
    Returns the index of the selected item in a combo box, pop-up list box, or list box.
  • OraFormsParseListValue Function
    Returns the selected value of a combo box, list box, or pop-up list box.
  • OraFormsParseRadioValue Function
    Returns the check state of the radio button.
  • OraFormsParseResponseBoxProperty Function
    Returns a response dialog’s property.
  • OraFormsParseSelectedTreeItem Function
    Returns the value of the selected tree node.
  • OraFormsParseTextValue Functions
    Returns the value of a text field or text area control.
親トピック: Oracle Forms Functions Reference


OraFormsGetChildren Function

Action

OraFormsGetChildren returns a handle that can be used to iterate over the children of a specified control. Use any property retrieval functions to access the control’s properties.

Include file

OraForms.bdh

Syntax

OraFormsGetChildren( in sName : string ) : number;

Return value

  • A value other than 0 on success

  • 0 if the control is not found or does not have children

Parameter | Description
sName | The control’s unique name.

Example

dcltrans
  transaction TMain
  var
    sValue     : string;
    nIterator  : number;
    nHandlerId : number;
 begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    nIterator := OraFormsGetChildren("WINDOW1");
    if nIterator <> 0 then
      while OraFormsGetNextChild(nIterator, nHandlerId) do
        sValue := OraFormsGetPropString(string(nHandlerId),
        ORA_PID_TITLE);
        Print(sValue);
      end;
      OraFormsFree(nIterator);
    end;
end TMain;
親トピック: Parsing Functions


OraFormsGetNextChild Function

Action

OraFormsGetNextChild positions the pointer to the next child of an iterator created with OraFormsGetChildren.

Include file

OraForms.bdh

Syntax

OraFormsGetNextChild( in  nIterator  : number,
    out nHandlerId : number ) : boolean;

Return value

  • true if the iterator is set to the next position

  • false otherwise

Parameter | Description
nIterator | The iterator handle
nHandlerId | This parameter is assigned the handler ID of the next control.

Example

dcltrans
  transaction TMain
  var
    sValue     : string;
    nIterator  : number;
    nHandlerId : number;
 begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    nIterator := OraFormsGetChildren("WINDOW1");
    if nIterator <> 0 then
      while OraFormsGetNextChild(nIterator, nHandlerId) do
        sValue := OraFormsGetPropString(string(nHandlerId), ORA_PID_TITLE);
        Print(sValue);
      end;
      OraFormsFree(nIterator);
    end;
end TMain;
親トピック: Parsing Functions


OraFormsGetNrOfResponseBoxValues Function

Action

OraFormsGetNrOfResponseBoxValues returns the number of entries in a response dialog.

Include file

OraForms.bdh

Syntax

OraFormsGetNrOfResponseBoxValues( in sName : string ) : number;

Return value

  • The number of entries on success.

  • -1 otherwise

Parameter | Description
sName | The control's unique name.to a .NET Object

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetNrOfResponseBoxValues("ADB Account");
  end TMain;
親トピック: Parsing Functions


OraFormsGetResponseBoxValue Function

Action

OraFormsGetResponseBoxValue returns the value of a response box at a specified index.

Include file

OraForms.bdh

Syntax

OraFormsGetResponseBoxValue( in sName  : string,
                             in nIndex : number): string;

Return value

  • The value on success.

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
nIndex | The 0-based index of the value to be returned.

Example

dcltrans
  transaction TMain
  var
    sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsGetResponseBoxValue("ADB Account", 0);
  end TMain;
親トピック: Parsing Functions


OraFormsParseCheckValue Function

Action

Returns the check state of a check box.

Include file

OraForms.bdh

Syntax

OraFormsParseCheckValue ( in sName : string) : boolean;

Return value

  • true if the checkbox is checked
  • false otherwise
Parameter | Description
sName | The checkbox control's unique name.

Example

transaction TMain
var
  bValue :  boolean;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  // New window activated: Logon
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // --- // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query"); bValue :=
  OraFormsParseCheckValue( "PERSON_HAS_REGISTERED_0");
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end  TMain;
親トピック: Parsing Functions
関連概念
Verifying Functions


OraFormsParseChoiceBoxProperty Function

Action

OraFormsParseChoiceBoxProperty returns a choice box’s property.

Include file

OraForms.bdh

Syntax

OraFormsParseChoiceBoxProperty( in sName : string,
    in nProp : number ) : string;

Return value

  • The value of the property on success.

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA_CHOICEBOX_MESSAGE

  • ORA_CHOICEBOX_TITLE

  • ORA_CHOICEBOX_ICON

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsParseChoiceBoxProperty("ADB Account", ORA_CHOICEBOX_MESSAGE);
  end TMain;
親トピック: Parsing Functions


OraFormsParseInfoBoxProperty Function

Action

OraFormsParseInfoBoxProperty returns an info dialog’s property.

Include file

OraForms.bdh

Syntax

OraFormsParseInfoBoxProperty( in sName : string,
                              in nProp : number ) : string;

Return value

  • The value of the property on success.

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA_INFOBOX_MESSAGE

  • ORA_INFOBOX_TITLE

  • ORA_INFOBOX_ICON

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsParseInfoBoxProperty("ADB Account", ORA_INFOBOX_TITLE);
  end TMain;
親トピック: Parsing Functions


OraFormsParseListEntries Function

Action

Returns the number of elements in a list item, combo box, or pop-up list item.

Include file

OraForms.bdh

Syntax

OraFormsParseListEntries ( in sName : string ) :number;

Return value

  • The number of items of success
  • -1 otherwise
Parameter | Description
sName | The control's unique name

Example

transaction TMain
var
  nValue :  number;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  // New window activated: Logon
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  nValue :=  OraFormsParseListEntries( "PERSON_JOBS_0");
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end  TMain;
親トピック: Parsing Functions


OraFormsParseListEntry Function

Action

Returns the value of a combo box, list item, or pop-up list item at a specified index.

Include file

OraForms.bdh

Syntax

OraFormsParseListEntry( in sName : string,
                        in nPos  : number ) : string;

Return value

  • The string representation at the specified position on success

  • NULL otherwise

Parameter | Description
sName | The control’s unique name.
nPos | The position of the entry. The first element is at position 0.

Example

transaction TMain
var
 sValue : string;  nElems : number;
begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);

    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsMenuItem("WINDOW1", "Query::Execute Query");
    nElems := OraFormsParseListEntries("PERSON_JOBS_0");
    sValue := OraFormsParseListEntry("PERSON_JOBS_0", 0);
    OraFormsMenuItem("WINDOW1", "Action::Exit");
  end TMain;
親トピック: Parsing Functions
関連概念
Verifying Functions


OraFormsParseListIndex Function

Action

Returns the index of the selected item in a combo box, pop-up list box, or list box.

Include file

OraForms.bdh

Syntax

OraFormsParseListIndex( in sName : string) : number;

Return value

  • The index on success
  • -1 otherwise
Parameter | Description
sName | The control's unique name.

Example

transaction TMain
  var
    nValue :  number;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Query::Execute Query"); nValue :=
    OraFormsParseListIndex( "PERSON_SECONDNAME_0");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Parsing Functions


OraFormsParseListValue Function

Action

Returns the selected value of a combo box, list box, or pop-up list box.

Include file

OraForms.bdh

Syntax

OraFormsParseListValue( in sName : string) : string;

Return value

  • The value of the select item on success
  • NULL otherwise
Parameter | Description
sName | The control's unique name.

Example

transaction TMain
  var
    sValue :  string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Query::Execute Query"); sValue :=
    OraFormsParseListValue( "PERSON_JOB_0");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Parsing Functions
関連概念
Verifying Functions


OraFormsParseRadioValue Function

Action

Returns the check state of the radio button.

Include file

OraForms.bdh

Syntax

OraFormsParseRadioValue( in sName : string ) : boolean;

Return value

  • true If the radio button is selected
  • false otherwise
Parameter | Description
sName | The control's unique name.

Example

transaction TMain
  var
    bValue :  boolean;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt( "INITIAL_VERSION", 608);
    OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
    OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
    OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString( "FONT_NAME" , "Dialog" );
    OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
    OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
    OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
    // New window activated: Logon
    OraFormsSetWindow( "Logon");
    OraFormsLogon( "user",  "password",  "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow( "WINDOW1");
    OraFormsMenuItem( "WINDOW1",  "Query::Execute Query"); bValue :=
    OraFormsParseRadioValue( "PERSON_RADIO_0");
    OraFormsMenuItem( "WINDOW1",  "Action::Exit");
  end TMain;
親トピック: Parsing Functions


OraFormsParseResponseBoxProperty Function

Action

OraFormsParseResponseBoxProperty returns a response dialog’s property.

Include file

OraForms.bdh

Syntax

OraFormsParseResponseBoxProperty( in sName : string,
                                  in nProp : number ) : string;

Return value

  • The value of the property on success

  • NULL otherwise

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA_RESPBOX_TITLE

  • ORA_RESPBOX_HEADER

  • ORA_RESPBOX_OKLABEL

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsParseResponseBoxProperty("ADB Account", ORA_RESPBOX_TITLE);
  end TMain;
親トピック: Parsing Functions


OraFormsParseSelectedTreeItem Function

Action

Returns the value of the selected tree node.

Include file

OraForms.bdh

Syntax

OraFormsParseSelectedTreeItem( in sName : string ) : string;

Return value

  • The string representation of the selected tree node.

  • NULL otherwise

Parameter | Description
sName | The tree control’s unique name.

Example

transaction TMain
  var
     sValue : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);

    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");

    // New window activated: Logon
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");

    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsMenuItem("WINDOW1", "Query::Execute Query");
    sValue := OraFormsParseSelectedTreeItem("TREE_CONTROL");
    if StrIsNull(sValue) then
    Print("sValue is null");
  end;
    OraFormsMenuItem("WINDOW1",
    "Action::Exit");
  end TMain;
親トピック: Parsing Functions
関連概念
Verifying Functions


OraFormsParseTextValue Functions

Action

Returns the value of a text field or text area control.

Include file

OraForms.bdh

Syntax

OraFormsParseTextValue( in sName : string) : string;

Return value

  • Returns the value as a string on success.
  • NULL otherwise
Parameter | Description
sName | The control's unique name.

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx
  userid= useSDI=yes record=names");
  // New window activated: Logon
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");

  sValue := OraFormsParseTextValue( "PERSON_SECONDNAME_0");
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain
親トピック: Parsing Functions
関連概念
Verifying Functions


Verifying Functions

There are a number of verification functions that allow you to verify control values and certain control properties. These functions allow you to verify if a certain control has a specific value or if a certain property of a control has a specific value. You can define severities that result in warnings and errors during test runs when verifications are not successful.

TrueLog Explorer

TrueLog Explorer assists you with wizards that add verification functions to your scripts. Simply select a control that you require, right-click on the grid row that displays the current value of the control and select Verify Element Value from the context menu.

Refer to the Oracle Forms Tutorial for detailed information.

  • OraFormsVerifyCheckValue Function
    Verifies whether a check box is checked or unchecked.
  • OraFormsVerifyChoiceBoxProperty Function
    Verifies a choice box property.
  • OraFormsVerifyFlexCellData Function
    Verifies the field of a flex window.
  • OraFormsVerifyFlexCellDataByIndex Function
    Verifies the field of a flex window.
  • OraFormsVerifyFlexCellPropBoolean Function
    Verifies a Boolean cell property.
  • OraFormsVerifyFlexCellPropBooleanByIndex Function
    Verifies a Boolean cell property.
  • OraFormsVerifyFlexCellPropInt Function
    Verifies a cell’s property.
  • OraFormsVerifyFlexCellPropIntByIndex Function
    Verifies an integer cell property within a flex window cell.
  • OraFormsVerifyFlexCellPropString Function
    Verifies a string property within a flex window cell.
  • OraFormsVerifyFlexCellPropStringByIndex Function
    Verifies a string property within a flex window cell.
  • OraFormsVerifyFlexPropBoolean Function
    Verifies Boolean properties within flex windows.
  • OraFormsVerifyFlexPropString Function
    Verifies a flex window’s string property.
  • OraFormsVerifyInfoBoxProperty Function
    Verifies a property within an Info dialog.
  • OraFormsVerifyListEntries Function
    Verifies the number of list entries in a combo box, list box, or pop-up list.
  • OraFormsVerifyListIndex Function
    Verifies the selected item in a list control.
  • OraFormsVerifyListValue Function
    Verifies the selected list value of a combo box, list box, or pop-up list.
  • OraFormsVerifyPropByte Function
    Verifies a byte property.
  • OraFormsVerifyPropByteArray Function
    Verifies all elements in a byte array.
  • OraFormsVerifyPropInt Function
    Verifies an integer property for a specified control.
  • OraFormsVerifyPropNull Function
    Verifies if a property value is NULL.
  • OraFormsVerifyPropPoint Function
    Verifies a point property.
  • OraFormsVerifyPropRectangle Function
    Verifies a rectangle property.
  • OraFormsVerifyPropString Function
    Verifies the properties value.
  • OraFormsVerifyPropStringArray Function
    Verifies all strings in an array.
  • OraFormsVerifyRadioValue Function
    Verifies the value of a radio button.
  • OraFormsVerifySelectedTreeItem Function
    Verifies the selected tree node of a tree control with a provided value.
  • OraFormsVerifyTextValue Functions
    Verifies a text field or text area.
親トピック: Oracle Forms Functions Reference


OraFormsVerifyCheckValue Function

Action

Verifies whether a check box is checked or unchecked.

Include file

OraForms.bdh

Syntax

OraFormsVerifyCheckValue( in sName     : string,
                          in bVerify   : boolean,
                          in nOptions  : number optional,
                          in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
bVerify | Value to compare with the parsed value.
nOptions Two options are recognized by this function:
  • ORA_VERIFY_EQUAL (default)
  • ORA_VERIFY_NOT_EQUAL
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION",  96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO",  8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsCheckboxSet( "CHECKBOX_01", true);
  OraFormsVerifyCheckValue( "CHECKBOX_01",  true, ORA_VERIFY_EQUAL, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyChoiceBoxProperty Function

Action

OraFormsVerifyChoiceBoxProperty verifies a choice box property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyChoiceBoxProperty( in sName     : string,
                                 in nProp     : number,
                                 in sValue    : string,
                                 in nOptions  : number,
                                 in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA_CHOICEBOX_MESSAGE

  • ORA_CHOICEBOX_TITLE

  • ORA_CHOICEBOX_ICON

sValue | The value to be verified.
nOptions

Can be one of these flags or a combination:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_CASE_SENSITIVE

  • ORA_VERIFY_IGNORE_WHITESPACES

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyChoiceBoxProperty("ADB Account", ORA_CHOICEBOX_ICON, "value", ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellData Function

Action

OraFormsVerifyFlexCellData verifies the field of a flex window.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellData( in sName     : string,
                            in sRow      : string,
                            in sCol      : string,
                            in sValue    : string,
                            in nOptions  : number,
                            in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.
sValue | The string to be verified.
nOptions

Can be one of these flags or a combination:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_CASE_SENSITIVE

  • ORA_VERIFY_IGNORE_WHITESPACES

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellData("ADB Account", "Transfer", "Low", "value", ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellDataByIndex Function

Action

OraFormsVerifyFlexCellDataByIndex verifies the field of a flex window.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellDataByIndex( in sName     : string,
                                   in nRow      : number,
                                   in nCol      : number,
                                   in sValue    : string,
                                   in nOptions  : number,
                                   in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nRow | The field’s row.
nCol | The field’s column.
sValue | The string to be verified.
nOptions Can be one of these flags or a combination:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_CASE_SENSITIVE

  • ORA_VERIFY_IGNORE_WHITESPACES

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellDataByIndex("ADB Account", 0, 0, "value", ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellPropBoolean Function

Action

OraFormsVerifyFlexCellPropBoolean verifies a Boolean cell property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellPropBoolean( in sName     : string,
                                   in sRow      : string,
                                   in sCol      : string,
                                   in nProp     : number,
                                   in bValue    : boolean,
                                   in nOptions  : number,
                                   in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

  • ORA_FLEX_CELL_IS_VALID

  • ORA_FLEX_CELL_IS_ENABLED

bValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellPropBoolean("ADB Account", "Transfer", "Low", ORA_FLEX_CELL_IS_ENABLED, true, ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellPropBooleanByIndex Function

Action

OraFormsVerifyFlexCellPropBooleanByIndex verifies a Boolean cell property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellPropBooleanByIndex( in sName     : string,
                                          in nRow      : number,
                                          in nCol      : number,
                                          in nProp     : number,
                                          in bValue    : boolean,
                                          in nOptions  : number,
                                          in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nRow | The field’s row.
nCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_IS_QUERYABLE

  • ORA_FLEX_CELL_IS_FOCUSNOTIFY

  • ORA_FLEX_CELL_IS_REQUIRED

  • ORA_FLEX_CELL_IS_UPDATEABLE

  • ORA_FLEX_CELL_IS_FLEXFIELD

  • ORA_FLEX_CELL_IS_UPPERCASE

  • ORA_FLEX_CELL_IS_NUMERIC

  • ORA_FLEX_CELL_IS_VALID

  • ORA_FLEX_CELL_IS_ENABLED

bValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellPropBooleanByIndex("ADB Account", 0, 0, ORA_FLEX_CELL_IS_ENABLED, true, ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellPropInt Function

Action

OraFormsVerifyFlexCellPropInt verifies a cell’s property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellPropInt( in sName     : string,
                               in sRow      : string,
                               in sCol      : string,
                               in nProp     : number,
                               in nValue    : number,
                               in nOptions  : number,
                               in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_MAX_LEN

  • ORA_FLEX_CELL_LEN

  • ORA_FLEX_CELL_DESCR_LEN

nValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_GREATER

  • ORA_VERIFY_GREATEREQUAL

  • ORA_VERIFY_SMALLER

  • ORA_VERIFY_SMALLEREQUAL

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellPropInt("ADB Account", "Transfer", "Low", ORA_FLEX_CELL_LEN, 5, ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellPropIntByIndex Function

Action

OraFormsVerifyFlexCellPropIntByIndex verifies an integer cell property within a flex window cell.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellPropIntByIndex( in sName     : string,
                                      in nRow      : number,
                                      in nCol      : number,
                                      in nProp     : number,
                                      in nValue    : number,
                                      in nOptions  : number,
                                      in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nRow | The field’s row.
nCol | The field’s column.
nProp Can be one of these constants:

  • ORA_FLEX_CELL_MAX_LEN

  • ORA_FLEX_CELL_LEN

  • ORA_FLEX_CELL_DESCR_LEN

nValue | The value to be verified.
nOptions Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_GREATER

  • ORA_VERIFY_GREATEREQUAL

  • ORA_VERIFY_SMALLER

  • ORA_VERIFY_SMALLEREQUAL

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellPropIntByIndex("ADB Account", 0, 0, ORA_FLEX_CELL_LEN, 5, ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellPropString Function

Action

OraFormsVerifyFlexCellPropString verifies a string property within a flex window cell.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellPropString( in sName     : string,
                                  in sRow      : string,
                                  in sCol      : string,
                                  in nProp     : number,
                                  in sValue    : string,
                                  in nOptions  : number,
                                  in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
sRow | The field’s row.
sCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_VALUE

  • ORA_FLEX_CELL_DESCRIPTION

sValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_CASE_SENSITIVE

  • ORA_VERIFY_IGNORE_WHITESPACES

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellPropString("ADB Account", "Transfer", "Low", ORA_FLEX_CELL_VALUE, "value", ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexCellPropStringByIndex Function

Action

OraFormsVerifyFlexCellPropStringByIndex verifies a string property within a flex window cell.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexCellPropStringByIndex(  in sName     : string,
                                          in nRow      : number,
                                          in nCol      : number,
                                          in nProp     : number,
                                          in sValue    : string,
                                          in nOptions  : number,
                                          in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nRow | The field’s row.
nCol | The field’s column.
nProp

Can be one of these constants:

  • ORA_FLEX_CELL_VALUE

  • ORA_FLEX_CELL_DESCRIPTION

sValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_CASE_SENSITIVE

  • ORA_VERIFY_IGNORE_WHITESPACES

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexCellPropStringByIndex("ADB Account", 0, 0, ORA_FLEX_CELL_VALUE, "value", ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexPropBoolean Function

Action

OraFormsVerifyFlexPropBoolean verifies Boolean properties within flex windows.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexPropBoolean( in sName     : string,
                               in nProp     : number,
                               in bValue    : boolean,
                               in nOptions  : number,
                               in nSeverity : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA ORA_FLEX_WND_IS_AUTOPIK

  • ORA_FLEX_WND_IS_AUTOSKIP

  • ORA_FLEX_WND_IS_COMBO_AVAILABLE

  • ORA_FLEX_WND_IS_READONLY

bValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

nSeverity
Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexPropBoolean("ADB Account", ORA_FLEX_WND_IS_READONLY, true, ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyFlexPropString Function

Action

OraFormsVerifyFlexPropString verifies a flex window’s string property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyFlexPropString( in sName     : string,
                              in nProp     : number,
                              in sValue    : string,
                              in nOptions  : number,
                              in nSeverity : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA_FLEX_WND_LABEL

  • ORA_FLEX_WND_PROTOCOL

sValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_CASE_SENSITIVE

  • ORA_VERIFY_IGNORE_WHITESPACES

nSeverity
Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyFlexPropString("ADB Account", ORA_FLEX_WND_PROTOCOL, "value", ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyInfoBoxProperty Function

Action

OraFormsVerifyInfoBoxProperty verifies a property within an Info dialog.

Include file

OraForms.bdh

Syntax

OraFormsVerifyInfoBoxProperty( in sName     : string,
                               in nProp     : number,
                               in sValue    : string,
                               in nOptions  : number,
                               in nSeverity : number := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The control's unique name.
nProp

Can be one of these constants:

  • ORA_INFOBOX_MESSAGE

  • ORA_INFOBOX_TITLE

  • ORA_INFOBOX_ICON

sValue | The value to be verified.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL (default)

  • ORA_VERIFY_NOT_EQUAL

  • ORA_VERIFY_CASE_SENSITIVE

  • ORA_VERIFY_IGNORE_WHITESPACES

nSeverity
Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsVerifyInfoBoxProperty("ADB Account", ORA_INFOBOX_MESSAGE, "value", ORA_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


OraFormsVerifyListEntries Function

Action

Verifies the number of list entries in a combo box, list box, or pop-up list.

Include file

OraForms.bdh

Syntax

OraFormsVerifyListEntries( in sName     : string,
                           in nVerify   : number,
                           in nOptions  : number optional,
                           in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.nSeverity.
nVerify | The value to be verified with the number of list entries.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL (default)
  • ORA_VERIFY_NOT_EQUAL
  • ORA_VERIFY_GREATER
  • ORA_VERIFY_GREATEREQUAL
  • ORA_VERIFY_SMALLER
  • ORA_VERIFY_SMALLEREQUAL
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsListSelect( "LISTBOX_01",  "An Option",  2);
  OraFormsVerifyListEntries( "LISTBOX_01",  5, ORA_VERIFY_EQUAL, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyListIndex Function

Action

Verifies the selected item in a list control.

Include file

OraForms.bdh

Syntax

OraFormsVerifyListIndex( in sName     : string,
                         in nVerify   : number,
                         in nOptions  : number optional,
                         in nSeverity : number optional := SEVERITY_ERROR ) :  boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nVerify | The index to be verified with the selected item's index.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL (default)
  • ORA_VERIFY_NOT_EQUAL
  • ORA_VERIFY_GREATER
  • ORA_VERIFY_GREATEREQUAL
  • ORA_VERIFY_SMALLER
  • ORA_VERIFY_SMALLEREQUAL
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1 OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsListSelect( "LISTBOX_01",  "An Option",  2);
  OraFormsVerifyListIndex("LISTBOX_01",
  2, ORA_VERIFY_EQUAL, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyListValue Function

Action

Verifies the selected list value of a combo box, list box, or pop-up list.

Include file

OraForms.bdh

Syntax

OraFormsVerifyListValue(  in sName     :  string,
                          in sVerify   :  string,
                          in nOptions  :  number optional,
                          in nSeverity :  number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
sVerify | The value to verify the selected item in the list against.
nOptions

Can be one of these flags or a combination:

  • ORA_VERIFY_EQUAL (default)
  • ORA_VERIFY_NOT_EQUAL
  • ORA_VERIFY_CASE_SENSITIVE
  • ORA_VERIFY_IGNORE_WHITESPACES
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsListSelect( "LISTBOX_01",  "An Option",  2);
  OraFormsVerifyListValue( "LISTBOX_01",  "An Option", ORA_VERIFY_EQUAL, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyPropByte Function

Action

Verifies a byte property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyPropByte( in sName     : string,
                        in nPropId   : number,
                        in nVerify   : number,
                        in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
nVerify | Number to verify the parsed property against.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsVerifyPropByte( "1", ORA_PID_FONT_STYLE,  0, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyPropByteArray Function

Action

Verifies all elements in a byte array. The Oracle Forms type byte array is mainly used for transferring images from the server to the client.

Include file

OraForms.bdh

Syntax

OraFormsVerifyPropByteArray( in sName     : string,
                             in nPropId   : number,
                             in vArray    : array of byte,
                             in nLen      : number,
                             in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true is successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
vArray | The array to verify the parsed property value against.
nLen | Length of the array.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
親トピック: Verifying Functions


OraFormsVerifyPropInt Function

Action

Verifies an integer property for a specified control.

Include file

OraForms.bdh

Syntax

 OraFormsVerifyPropInt( in sName     : string,
                        in nPropId   : number,
                        in nVerify   : number,
                        in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
nVerify | The value to verify the parsed property against.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");

  OraFormsVerifyPropInt( "1", ORA_PID_FONT_SIZE,  900, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyPropNull Function

Action

Verifies if a property value is NULL.

Include file

OraForms.bdh

OraForms.bdh Syntax

OraFormsVerifyPropNull( in sName         : string,
                        in nPropId       : number,
                        in bShouldBeNull : boolean,
                        in nSeverity     : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
bShouldBeNull | Set to "true" when the property should be verified with NULL.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsVerifyPropNull( "PERSON_SECONDNAME_0", ORA_PID_VALUE,  true, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyPropPoint Function

Action

Verifies a point property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyPropPoint(  in sName     :  string,
                          in nPropId   :  number,
                          in nX        :  number,
                          in nY        :  number,
                          in nSeverity :  number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
nX | x part of the point property.
nY | y part of the point property.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION",  608);
  OraFormsSetPoint( "INITIAL_RESOLUTION",  96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsVerifyPropPoint( "WINDOW1", ORA_PID_OUTERSIZE,  720,  463, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyPropRectangle Function

Action

Verifies a rectangle property.

Include file

OraForms.bdh

Syntax

OraFormsVerifyPropRectangle( in sName     : string,
                             in nPropId   : number,
                             in nX0       : number,
                             in nY0       : number,
                             in nX1       : number,
                             in nY1       : number,
                             in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
nX0 | x part of the first coordinates.
nY0 | y part of the first coordinates.
nX1 | x part of the second coordinates.
nY1 | y part of the second coordinates.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
親トピック: Verifying Functions


OraFormsVerifyPropString Function

Action

Verifies the properties value.

Include file

OraForms.bdh

Syntax

OraFormsVerifyPropString( in sName     : string,
                          in nPropId   : number,
                          in sVerify   : string,
                          in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if the verification succeeded
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property to be verified.
sVerify | String to verify the parsed property against.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsVerifyPropString( "PERSON_SECONDNAME_0", ORA_PID_VALUE,  "Roydman", SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyPropStringArray Function

Action

Verifies all strings in an array.

Include file

OraForms.bdh

Syntax

OraFormsVerifyPropStringArray( in sName     : string,
                               in nPropId   : number,
                               in vArray    : array of string,
                               in nLen      : number,
                               in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if the verification was successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
nPropId | The property ID.
vArray | An array of strings to be verified.
nLen | The length of the array.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
親トピック: Verifying Functions


OraFormsVerifyRadioValue Function

Action

Verifies the value of a radio button.

Include file

OraForms.bdh

Syntax

OraFormsVerifyRadioValue( in sName     : string,
                          in bVerify   : boolean,
                          in nOptions  : number optional,
                          in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
bVerify | The value to verify the control's current value against.
nOptions

Can be one of these flags:

  • ORA_VERIFY_EQUAL (default)
  • ORA_VERIFY_NOT_EQUAL
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsRadioSet( "RADIO_1",  true);
  OraFormsVerifyRadioValue( "RADIO_1",  true, ORA_VERIFY_EQUAL, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifySelectedTreeItem Function

Action

Verifies the selected tree node of a tree control with a provided value.

Include file

OraForms.bdh

Syntax

OraFormsVerifySelectedTreeItem( in sName     : string,
                                in sItem     : string,
                                in nOptions  : number optional,
                                in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
sItem | The value to compare the selected value against.
nOptions Can be one of these flags:
  • ORA_VERIFY_EQUAL (default)
  • ORA_VERIFY_NOT_EQUAL
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsVerifySelectedTreeItem( "TREE_01",  "Node 1", ORA_VERIFY_EQUAL, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


OraFormsVerifyTextValue Functions

Action

Verifies a text field or text area.

Include file

OraForms.bdh

Syntax

OraFormsVerifyTextValue( in sName     : string,
                         in sVerify   : string,
                         in nOptions  : number optional,
                         in nSeverity : number optional := SEVERITY_ERROR ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sName | The control's unique name.
sVerify | The string to compare the control's value against.
nOptions Can be one of these flags or a combination
  • ORA_VERIFY_EQUAL (default)
  • ORA_VERIFY_NOT_EQUAL
  • ORA_VERIFY_CASE_SENSITIVE (default)
  • ORA_VERIFY_IGNORE_WHITESPACES
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
var
  sValue :  string;
begin
  OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
  // Connect - with connection properties
  OraFormsSetInt( "INITIAL_VERSION", 608);
  OraFormsSetPoint( "INITIAL_RESOLUTION", 96,  96);
  OraFormsSetPoint( "INITIAL_DISP_SIZE", 1024,  768);
  OraFormsSetInt( "INITIAL_COLOR_DEPTH", 256);
  OraFormsSetString( "FONT_NAME" , "Dialog" );
  OraFormsSetPoint( "INITIAL_SCALE_INFO", 8,  18);
  OraFormsSetBoolean( "WINSYS_REQUIREDVA_LIST",  false);
  OraFormsConnect( "server module=Person3.fmx userid= useSDI=yes record=names");
  OraFormsSetWindow( "Logon");
  OraFormsLogon( "user",  "password",  "orcl_server");
  // ---
  // New window activated: WINDOW1
  OraFormsSetWindow( "WINDOW1");
  OraFormsMenuItem( "WINDOW1",  "Query::Execute Query");
  OraFormsListSelect( "LISTBOX_01",  "An Option",  2);
  OraFormsVerifyTextValue( "TEXT_01",  "Sample", ORA_VERIFY_EQUAL | ORA_VERIFY_CASE_SENSITIVE, SEVERITY_WARNING);
  OraFormsMenuItem( "WINDOW1",  "Action::Exit");
end TMain;
親トピック: Verifying Functions


Synchronization Functions

  • OraFormsWaitForTimer Function
    Synchronizes script execution with the expiration of a timer.
  • OraFormsWaitForWindow Function
    Synchronizes script execution by waiting for a window to appear.
親トピック: Oracle Forms Functions Reference


OraFormsWaitForTimer Function

Action

OraFormsWaitForTimer synchronizes script execution with the expiration of a timer. The script waits within this function until the timer expires.

Include file

OraForms.bdh

Syntax

OraFormsWaitForTimer( in sName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The timer’s unique name.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server
    module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user",
"password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsWaitForTimer("ADB Account");
  end TMain;

親トピック: Synchronization Functions


OraFormsWaitForWindow Function

Action

OraFormsWaitForWindow synchronizes script execution by waiting for a window to appear. The script waits within this function until the window appears or until the wait function times out.

Include file

OraForms.bdh

Syntax

OraFormsWaitForWindow( in sName    : string;
                       in fTimeout : float optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | The window’s unique name.
fTimeout | A timeout specifying how long to wait for the window. (optional) If the value is omitted, the default timeout value is used.

Example

dcltrans
  transaction TMain
  var
    sValue   : string;
  begin
    OraFormsSetConnectMode(ORA_SOCKET_CONNECTION);
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 608);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1024, 768);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 18);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsConnect("server module=Person3.fmx userid= useSDI=yes record=names");
    OraFormsSetWindow("Logon");
    OraFormsLogon("user", "password", "orcl_server");
    // ---
    // New window activated: WINDOW1
    OraFormsSetWindow("WINDOW1");
    OraFormsWaitForWindow("ADB Account");
  end TMain;
親トピック: Synchronization Functions


TUXEDO Functions Reference

A number of functions are provided to handle TUXEDO function calls from within Silk Performer. While most of them are identical to the original TUXEDO ATMI functions, some additional functions serve to handle several buffer types within BDL.

  • Native TUXEDO ATMI Functions
    The following Silk Performer functions are identical to the TUXEDO ATMI functions of the same name without the Tux_ prefix.
  • Native TUXEDO FML Functions
    The following Silk Performer functions are identical to the TUXEDO FML functions of the same name without the Tux_ prefix.
  • TuxAuthInit Function
    Manages joining a TUXEDO System application.
  • TUXEDO Data Structures Overview
    Provides an overview of TUXEDO data structures that are supported by Silk Performer.
  • Buffer Handling Functions
    Lists BDL functions for initializing, allocating, and writing typed buffers.
  • Buffer Manipulating Functions
    Lists BDL functions for manipulating predefined buffer types.
親トピック: Application Server Functions


Native TUXEDO ATMI Functions

The following Silk Performer functions are identical to the TUXEDO ATMI functions of the same name without the Tux_ prefix.

Include file

TUXEDO.bdh

Function | Description
Tux_gettperrno | Retrieves the error code when a TUXEDO System function call returns a failure value.
Tux_tpstrerror | Retrieves the text of an error message when a TUXEDO System function call returns a failure value.
Tux_gettpurcode | Retrieves the user return code after a TUXEDO System function call.
Tux_tpbegin | Defines the begin of a transaction. In the TUXEDO System, a transaction is used to define a single logical unit of work.
Tux_tpcancel | Cancels a call descriptor returned by the Tux_tpacall function.
Tux_tpscmt | Sets the characteristic which affects the way the Tux_tpcommit function behaves with respect to returning control to its caller.
Tux_tpabort | Signifies the abnormal end of a transaction. When this function call returns, all changes made to resources during the transaction are undone.
Tux_tpcommit | Signifies the end of a transaction, using a two-phase commit protocol to coordinate participants. This function can be called only by the initiator of a transaction.
Tux_tpgetrply | Returns a reply from a previously sent request. By default, this function waits until the reply matching call descriptor arrives or a timeout occurs.
Tux_tpsuspend | Suspends the transaction active in the caller's process. A transaction begun with the Tux_tpbegin function may be suspended with the Tux_tpsuspend function.
Tux_tpresume | Resumes work on behalf of a previously suspended transaction. Once the caller resumes work on a transaction, it must either suspend it or complete it at a later time.
Tux_tpgetlev | Returns to the caller the current transaction level.
Tux_tx_begin | Places the calling thread of control in transaction mode. The calling thread must first ensure that its linked resource managers have been opened before it can start transactions
Tux_tx_close | Closes a set of resource managers in a portable manner. It invokes a transaction manager to read resource-manager-specific information in a transaction-manager-specific manner and pass this information to the resource managers linked to the caller.
Tux_tx_commit | Commits the work of the transaction active in the caller's thread of control.
Tux_tx_info | Returns global transaction information. In addition, this function returns a value indicating whether the caller is currently in transaction mode.
Tux_tx_open | Opens a set of resource managers in a portable manner. It invokes a transaction manager to read resource-manager-specific information in a transaction-manager-specific manner and pass this information to the resource managers linked to the caller.
Tux_tx_rollback | Rolls back the work of the transaction active in the caller's thread of control.
Tux_tx_set_commit_return | Sets the characteristic which affects the way the Tux_tx_commit function behaves with respect to returning control to its caller.
Tux_tx_set_transaction_control | Sets the characteristic which determines whether the Tux_tx_commit and the Tux_tx_rollback function start a new transaction before returning to their caller.
Tux_tx_set_transaction_timeout | Sets the characteristic which specifies the time period in which the transaction must complete before becoming susceptible to transaction timeout.
Tux_tpcall | Sends a request and synchronously awaits its reply. A call to this function is the same as calling the Tux_tpacall function immediately followed by the Tux_tpgetrply function.
Tux_tpacall | Sends a request message to a specified service. The request is sent out at the priority defined unless overridden by a previous call to the Tux_tpsprio function.
Tux_tpalloc | Returns a pointer to a buffer of a specified type. The TUXEDO System provides a variety of typed buffers, and applications are free to add their own buffer types.
Tux_tprealloc | Changes the size of a buffer to a specified number of bytes and returns a pointer to the new buffer.
Tux_tpfree | Releases a buffer previously obtained by either the Tux_tpalloc function or the Tux_tprealloc function.
Tux_tpinit | Allows a client to join a TUXEDO System application. Before a client can use any of the TUXEDO System communication or transaction routines, it must first join a TUXEDO System application.
Tux_tpterm | Removes a client from a TUXEDO System application. If the client is in transaction mode, then the transaction is rolled back.
Tux_tpconnect | Allows a program to set up a half-duplex connection to a conversational service. The name must be one of the conversational service names posted by a conversational server.
Tux_tpdiscon | Tears down a specified connection immediately.
Tux_tpsend | Sends data across an open connection to another program. The caller must have control of the connection.
Tux_tprecv | Receives data sent across an open connection from another program.
Tux_tpenqueue | Stores a message on a specified queue in a queue space. A queue space is a collection of queues, one of which must be the specified queue.
Tux_tpdequeue | Dequeues a message for processing from a specified queue in a queue space.
Tux_tpnotify | Allows a client or server to send an unsolicited message to an individual client
Tux_tpbroadcast | Allows a client or server to send unsolicited messages to registered clients within the system.
Tux_tpsubscribe | Subscribes the caller to a specified event or a set of events. Subscriptions are maintained by the TUXEDO System Event Broker, and are used to notify subscribers when events are posted.
Tux_tpunsubscribe | Removes an event subscription or a set of event subscriptions from the TUXEDO System Event Broker's list of active subscriptions.
Tux_tpchkauth | Checks if authentication is required by the application configuration.
Tux_tpsprio | Sets the priority for the next request sent or forwarded. The priority set affects only the next request sent.
Tux_tpgprio | Returns the priority for the last request sent or received.
Tux_tpconvert | Converts the string representation of interface structures to or from the binary representation.
Tux_tptypes | Returns the type and subtype of a specified buffer.
Tux_tuxgetenv | Searches the environment list for a specified string and, if the string is present, returns a pointer to the value in the current environment.
Tux_tuxputenv | Sets the value of a specified environment variable by altering an existing variable or creating a new one.
Tux_tuxreadenv | Reads a file containing environment variables and adds them to the environment, independent of platform.

Refer to the TUXEDO Reference Manual for detailed information, including syntax, parameter and return value descriptions for each function.

親トピック: TUXEDO Functions Reference


Native TUXEDO FML Functions

The following Silk Performer functions are identical to the TUXEDO FML functions of the same name without the Tux_ prefix.

Include file

FML.bdh

Function | Description
Tux_GetFerror | Produces a message on the standard error output, describing the last error encountered during a call to a system or library function.
Tux_Fldid | Provides a run-time translation of a field-name to its field identifier and returns a field identifier corresponding to its field name parameter.
Tux_Fname | Provides a run-time translation of a field identifier to its field name and returns a pointer to a character string containing the name corresponding to its argument.
Tux_Ftype | Returns a pointer to a string containing the name of the type of a field.
Tux_Fldtype | Returns the field type contained in a field identifier.
Tux_Fldno | Returns the field number contained in a field identifier.
Tux_Flen | Finds the value of a specified field occurrence in a buffer and returns its length.
Tux_Fielded | Tests whether a specified buffer is fielded.
Tux_Fneeded | Determines the space that must be allocated for a number of fields and bytes of value space.
Tux_Finit | Initializes a fielded buffer statically.
Tux_Falloc | Dynamically allocates space for a fielded buffer and calls the Tux_Finitfunction to initialize it.
Tux_Ffree | Recovers space allocated to a fielded buffer.
Tux_Fsizeof | Returns the size of a fielded buffer in bytes.
Tux_Fused | Returns the amount of used space in a fielded buffer in bytes, including both user data and the header.
Tux_Funused | Returns the amount of space currently unused in a buffer. Space is unused if it contains neither user data nor overhead data such as the header and index.
Tux_Frealloc | Re-allocates space to enlarge a fielded buffer.
Tux_Fmove | Copies data from a fielded buffer to any type of buffer.
Tux_Fcpy | Copies the contents of one fielded buffer to another fielded buffer.
Tux_Fadd | Adds a specified field value to the given buffer.
Tux_Fadds | Handles the case of conversion from a user string field type to a specified field type and add it to the fielded buffer.
Tux_Fappend | Adds a specified field value to the end of the given buffer.
Tux_Fchg | Changes the value of a field in a buffer.
Tux_Fchgs | Handles the case of conversion from a user string field type.
Tux_Fcmp | Compares the field identifiers and then the field values of two FML buffers.
Tux_Fdelall | Deletes all occurrences of the specified field in the buffer.
Tux_Fdelete | Deletes all occurrences of all fields listed in an array of field identifiers.
Tux_Fdel | Deletes a specified field occurrence from a buffer.
Tux_Ffindlast | Finds the last occurrence of a field in a buffer.
Tux_Ffind | Finds the value of a specified field occurrence in a buffer.
Tux_Ffindocc | Looks at occurrences of a specified field in a buffer and returns the occurrence number of the first field occurrence that matches the user specified field value.
Tux_Fget | Retrieves a field from a fielded buffer when the value is to be modified.
Tux_Fgets | Retrieves a field occurrence from the fielded buffer first converting the value to a user string field type.
Tux_Fgetsa | Gets a specified field from a buffer, allocates space, converts the field to the type specified by the user and returns a pointer to its location.
Tux_Fgetalloc | Acquires space for a field, then finds and makes a copy of a buffer field.
Tux_Fgetlast | Retrieves both the value and occurrence number of the last occurrence of a field.
Tux_Fnext | Finds the next field in a buffer after a specified field occurrence.
Tux_Fnum | Returns the number of fields contained in a specified buffer.
Tux_Foccur | Determines the number of occurrences of a field.
Tux_Fpres | Detects if a given occurrence of a specified field exists in a buffer.
Tux_Fvall | Works like the Tux_Ffind function for long and short values, but returns the actual value of the field as a long rather than a pointer to the value.
Tux_Fvals | Works like the Tux_Ffind function for string values but guarantees that a value is returned.
Tux_Fconcat | Adds fields from a source buffer to the fields that already exist in a destination buffer.
Tux_Fjoin | Joins two fielded buffers based on matching field id/occurrence.
Tux_Fojoin | Works like the Tux_Fjoin function, but it keeps fields from the destination buffer that have no corresponding field id/occurrence in the source buffer.
Tux_Fproj | Updates a buffer so as to keep only the desired fields.
Tux_Fprojcpy | Works like the Tux_Fproj function, but the projection is done into a destination buffer instead of in-place.
Tux_Fupdate | Updates a destination buffer with the field values in a source buffer.
Tux_Fvftos | Transfers data from a fielded buffer to a common data structure.
Tux_Fvstof | Transfers data from a common data structure to a fielded buffer.
Tux_Fvsinit | Initializes all members in a common data structure to the NULL values specified in a view description.
Tux_Fvopt | Allows users to specify buffer-to-structure mapping options at run time.
Tux_Fvnull | Determines if an occurrence of a structure element is null.
Tux_Fvselinit | Initializes an individual element of a common data structure to its appropriate NULL value.
Tux_Fvrefresh | Clears and re-initializes the internal cache of view structure mappings.
Tux_CFadd | Acts like the Tux_Fadd function, but first converts the value from the user-specified type to the type for which a field is added to the fielded buffer.
Tux_CFchg | Acts like the Tux_Fchg function, but first converts the value from the user-specified type to the type for which the field is changed in the fielded buffer.
Tux_CFfind | Finds a specified field in a buffer, converts it and returns a pointer to the converted value.
Tux_CFindocc | Acts like the Tux_Ffindocc function, but first converts the value from the user-specified type to a specified type.
Tux_CFget | Works like the Tux_Fget function. The main difference is that it copies a converted value to a user supplied buffer.
Tux_CFgetalloc | Gets a specified field from a buffer, allocates space, converts the field to the type specified by the user and returns a pointer to its location.
Tux_Ftypcvt | Converts a value from one field type to another.
Tux_Fstrerror | Retrieves the text of an error message.
Tux_Fidxused | Indicates the current amount of space used by a buffer's index.
Tux_Funindex | Discards a fielded buffer's index.
Tux_Findex | Serves to index a fielded buffer.
Tux_Frstrindex | Serves to re-index an unindexed buffer.
Tux_Fboolev | Checks whether a fielded buffer matches a number of specified conditions.
Tux_Fvboolev | Checks whether a fielded buffer matches a number of specified conditions.
Tux_Ffloatev | Returns the value of a specified arithmetic expression, represented by a tree.
Tux_Fboolco | Compiles a Boolean expression and returns a pointer to the evaluation tree.
Tux_Fvboolco | Compiles a Boolean expression and returns a pointer to the evaluation tree.
Tux_Fnmid_unload | Unloads the files used by the field tables loaded by the Tux_Fldid function.
Tux_Fidnm_unload | Recovers space allocated by the Tux_Fname function for field identifier to field name mapping tables.
Tux_Fchksum | Calculates a checksum for extra-reliable I/O and stores it in a fielded buffer.

Refer to the TUXEDO Reference Manual for detailed information, including syntax, parameter and return value descriptions for each function.

親トピック: TUXEDO Functions Reference


TuxAuthInit Function

Action

Manages joining a TUXEDO System application. Before a client is able to use any of the TUXEDO System communication or transaction routines, it must first join a TUXEDO System application. This function joins the client to a TUXEDO System application. In addition, this function is used to provide application authentication (if required). After this function successfully completes, the client can initiate service requests and define transactions.

To join a TUXEDO System application, use this function rather than the native Tux_tpinit function.

Include file

TUXEDO.bdh

Syntax

TuxAuthInit( in sUserName   : string optional,
             in sClientName : string optional,
             in sPassword   : string optional,
             in sGroupName  : string optional,
             in nFlags      : number optional,
             in nDataSize   : number optional,
             in sData       : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUserName | User name (optional). This parameter represents the name of the caller commonly entered in logon dialogs
sClientName | Client name (optional). The semantics of this parameter are application-specific
sPassword | Application password in unencrypted format (optional). This parameter is used for validation against the application password
sGroupName | Group name (optional). This parameter is used to associate the client with a resource manager group name
nFlags

Indicates the client-specific notification mechanism (optional). Any of the following flags is valid:

  • TPU_MASK. Unsolicited notification

  • TPU_SIG. Select unsolicited notification by signals

  • TPU_DIP. Select unsolicited notification by dip-in

  • TPU_IGN. Ignore unsolicited notification
nDataSize | Size of the application-specific data passed to the function (optional)
sData | Application-specific data that is forwarded to an application-defined authentication service (optional)

Example

dcltrans
  transaction TInit
  begin
    // set environment variables
    Tux_tuxputenv("TUXDIR=c:\\tuxedo");
    Tux_tuxputenv("WSNADDR=//server3:3000");
    // join TUXEDO System application    TuxAuthInit("user", "*", "pass", "", 2, 4, "pass");
    Tux_tuxputenv("FLDTBLDIR=C:\\TUXEDO\\apps\\bankapp");
  end TInit;

Sample scripts

bankappn.bdf

親トピック: TUXEDO Functions Reference


TUXEDO Data Structures Overview

Silk Performer supports the following data structures, each of which has to be defined as a string of the corresponding length and is accessed through a number of type-dependent Set and Get functions:

  • Queue control data structure

  • Event control data structure

  • TPINFO data structure

  • TXINFO data structure

Example

dcltrans
  transaction TInit
  const
    USERNAME   := "user";    // client user name
    CLIENTNAME := "*";       // application client name
    PASSWORD   := "pass";    // application password
    GROUPNAME  := "group";   // client group name
  var
    tpinfo: string(TPINFO_SIZE);
  begin
    // set TPINFO data structure elements
    SetString(tpinfo, TPINFO_USRNAME, USERNAME, Strlen(USERNAME));
    SetString(tpinfo, TPINFO_CLTNAME, CLIENTNAME, Strlen(CLIENTNAME));
    SetString(tpinfo, TPINFO_PASSWD, PASSWORD, Strlen(PASSWORD));
    SetString(tpinfo, TPINFO_GRPNAME, GROUPNAME, Strlen(GROUPNAME));
    SetLong(tpinfo, TPINFO_FLAGS, TPNOFLAGS);
    SetLong(tpinfo, TPINFO_DATALEN, 0);

    // join TUXEDO System application
    Tux_tpinit(tpinfo);
  end TInit;
  • Queue Control Data Structure
  • Event Control Data Structure
  • TPINFO Data Structure
  • TXINFO Data Structure
親トピック: TUXEDO Functions Reference


Queue Control Data Structure

Declaration

vartpqctl: string(TPQCTL_SIZE);
Offset | Type | Description
TPQCTL_FLAGS | number | Indicates which of the values are set.
TPQCTL_DEQ_TIME | number | Absolute/relative time for dequeuing.
TPQCTL_PRIORITY | number | Enqueue priority.
TPQCTL_DIAGNOSTIC | number | Indicates reason for failure.
TPQCTL_MSGID | string(32) | Id of message before which to queue.
TPQCTL_CORRID | string(32) | Correlation id used to identify message.
TPQCTL_REPLYQUEUE | string(16) | Queue name for reply message.
TPQCTL_FAILUREQUEUE | string(16) | Queue name for failure message.
TPQCTL_CLTID1 | number | Client identifier for originating client.
TPQCTL_CLTID2 | number |
TPQCTL_CLTID3 | number |
TPQCTL_CLTID4 | number |
TPQCTL_URCODE | number | Application user-return code.
TPQCTL_APPKEY | number | Application authentication client key.
親トピック: TUXEDO Data Structures Overview
関連資料
Event Control Data Structure
TPINFO Data Structure
TXINFO Data Structure


Event Control Data Structure

Declaration

varevctl: string(TPEVCTL_SIZE);
Offset | Type | Description
TPEVCTL_FLAGS | number | Indicates which of the values are set.
TPEVCTL_NAME1 | string(32) |
TPEVCTL_NAME2 | string(32) |
TPEVCTL_QCTL | TPQCTL | Queue control data structure.
親トピック: TUXEDO Data Structures Overview
関連資料
Queue Control Data Structure
TPINFO Data Structure
TXINFO Data Structure


TPINFO Data Structure

Declaration

var
tpinfo: string(TPINFO_SIZE);
Offset | Type | Description
TPINFO_USRNAME | string(32) | Client user name.
TPINFO_CLTNAME | string(32) | Application client name.
TPINFO_PASSWD | string(32) | Application password.
TPINFO_GRPNAME | string(32) | Client group name.
TPINFO_FLAGS | number | Initialization flags.
TPINFO_DATALEN | number | Length of application-specific data.
TPINFO_DATA | string | Application-specific data.
親トピック: TUXEDO Data Structures Overview
関連資料
Event Control Data Structure
Queue Control Data Structure
TXINFO Data Structure


TXINFO Data Structure

Declaration

var
txinfo: string(TXINFO_SIZE);
Offset | Type
TXINFO_XID_FORMATID | number
TXINFO_XID_GTRID_LENGTH | number
TXINFO_XID_BQUAL_LENGTH | number
TXINFO_XID_DATA | string(128)
TXINFO_COMMIT_RETURN | number
TXINFO_TRANSACTION_CONTROL | number
TXINFO_TRANSACTION_TIMEOUT | number
TXINFO_TRANSACTION_STATE | number
親トピック: TUXEDO Data Structures Overview
関連資料
Event Control Data Structure
Queue Control Data Structure
TPINFO Data Structure


Buffer Handling Functions

  • TuxGetBuffer Function
    Allocates a typed buffer. Depending on the buffer type, a subtype has to be specified.
  • TuxInitBuffer Function
  • TuxWriteBuffer Function
    Writes the content of a typed buffer to the output file.
親トピック: TUXEDO Functions Reference


TuxGetBuffer Function

Action

Allocates a typed buffer. Depending on the buffer type, a subtype has to be specified. The TUXEDO System provides a variety of typed buffers, and applications are free to add their own buffer types. Silk Performer's buffer handling and manipulating functions automatically detect any of the buffer types listed below and handles them appropriately. Custom buffer types are handled like binary buffers (CARRAY).

STRING, FML, FML32, VIEW, VIEW32, CARRAY

Include file

TUXEDO.bdh

Syntax

TuxGetBuffer( inout hBuffer  : number,
              in    sType    : string,
              in    sSubType : string optional,
              in    nSize    : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hBuffer | Variable receiving the handle to the typed buffer
sType

Buffer type. Predefined typed buffers are:

  • "STRING". String buffer.

  • "FML". Fielded buffer. Buffer containing any number of arrays of various data types.

  • "FML32". 32-bit fielded buffer.

  • "VIEW". View. Buffer containing any number of fields, each of which may hold a different data type.

  • "CARRAY". Binary data buffer.
sSubType | Buffer subtype identifying a set of characteristics (optional).
nSize

Buffer size (optional). Default buffer size is 1024 bytes for fielded buffers, and 512 bytes for any other buffer types.

注: The default buffer size values also represent the minimum size, allocating smaller buffers is impossible.

Example

const
  ID_ELEM1 := 16;
  ID_ELEM2 := 32;

dcltrans
  transaction TMain
  var
    hBuffer, olen: number;
  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store two integer values in buffer
    TuxSetInt(hBuffer, ID_ELEM1, 640);
    TuxSetInt(hBuffer, ID_ELEM2, 480);

    // create database table of the appropriate size
    Tux_tpcall("CREATETABLE", hBuffer, 0, hBuffer, olen, TPNOFLAGS);
    Tux_tpcommit(0);
  end TMain;

Sample scripts

bankappn.bdf

親トピック: Buffer Handling Functions
関連資料
TuxInitBuffer Function
TuxWriteBuffer Function
TuxSetString Function
TuxSetInt Function
TuxSetFloat Function
TuxSetCArray Function
TuxGetCArray Function
TuxGetFloat Function
TuxGetInt Function
TuxGetString Function


TuxInitBuffer Function

Action

Initializes an allocated typed buffer. This function can be used to clear the content of any allocated typed buffer.

Include file

TUXEDO.bdh

Syntax

TuxInitBuffer(in hBuffer: number): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
hBuffer | Typed buffer to initialize.

Example

dcltrans
  transaction TMain
  var
    hBuffer: number;
  begin
    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store dummy values in buffer
    TuxSetInt(hBuffer, 16, 832);
    TuxSetInt(hBuffer, 32, 173);

    // clear buffer for later reuse
    TuxInitBuffer(hBuffer);
  end TMain;
親トピック: Buffer Handling Functions
関連資料
TuxGetBuffer Function
TuxWriteBuffer Function


TuxWriteBuffer Function

Action

Writes the content of a typed buffer to the output file.

Include file

TUXEDO.bdh

Syntax

TuxWriteBuffer(in hBuffer : number,
               in sText   : string optional): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
hBuffer | Typed buffer that will be written to the output file.
sText | Additional text written to the output file (optional)

Example

dcltrans
  transaction TMain
  var
    hBuffer: number;
  begin
    // allocate buffer
    TuxGetBuffer(hBuffer,"FML", NULL, 1024);

    // store dummy values in fielded buffer
    TuxSetInt(hBuffer, 16, 832);
    TuxSetInt(hBuffer, 32, 173);

    // write buffer to output file
    TuxWriteBuffer(hBuffer, "buffer content");
  end TMain;
親トピック: Buffer Handling Functions
関連資料
TuxGetBuffer Function
TuxInitBuffer Function


Buffer Manipulating Functions

  • TuxFML2View Function
    Copies the content of a fielded buffer (FML, FML32) to a view buffer.
  • TuxView2FML Function
    Copies to content of a view buffer to a fielded buffer (FML, FML32).
  • TuxSetFloat Function
    Sets the value of a specified floating-point field within a typed buffer.
  • TuxGetFloat Function
    Retrieves the value of a specified floating-point field within a typed buffer.
  • TuxSetString Function
    Sets the content of a specified string field within a typed buffer.
  • TuxGetString Function
    Retrieves the content of a specified string field within a typed buffer.
  • TuxSetCArray Function
    Sets the content of a specified binary data field within a typed buffer.
  • TuxGetCArray Function
    Retrieves the content of a specified binary data field within a typed buffer.
  • TuxSetInt Function
    Sets the value of a specified integer field within a typed buffer.
  • TuxGetInt Function
    Retrieves the value of a specified integer field within a typed buffer.
親トピック: TUXEDO Functions Reference


TuxFML2View Function

Action

Copies the content of a fielded buffer (FML, FML32) to a view buffer.

Include file

TUXEDO.bdh

Syntax

TuxFML2View( in hFML  : number,
             in hView : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFML | Fielded buffer containing the data
hView | View buffer receiving the data

Example

const
  ID_ELEM1 := 16;
  ID_ELEM2 := 32;

dcltrans
  transaction TMain
  var
    hFML, hView: number;
  begin

    // allocate buffers
    TuxGetBuffer(hFML, "FML", NULL, 1024);
    TuxGetBuffer(hView, "VIEW", "MyView", 1024);

    // store dummy values in fielded buffer
    TuxSetInt(hFML, ID_ELEM1, 832);
    TuxSetInt(hFML, ID_ELEM2, 173);

    // convert fielded buffer to view buffer
    TuxFML2View(hFML, hView);
  end TMain;
親トピック: Buffer Manipulating Functions
関連資料
TuxView2FML Function


TuxView2FML Function

Action

Copies to content of a view buffer to a fielded buffer (FML, FML32).

Include file

TUXEDO.bdh

Syntax

TuxView2FML(in hFML  : number,
            in hView : number): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
hFML | Fielded buffer receiving the data
hView | View buffer containing the data

Example

const
  ID_ELEM1 := 16;
  ID_ELEM2 := 32;

dcltrans
    transaction TMain
  var
    hFML, hView: number;
  begin
    // allocate buffer
    TuxGetBuffer(hFML, "FML", NULL, 1024);
    TuxGetBuffer(hView, "VIEW", "MyView", 1024);

    // store dummy values in view buffer
    TuxSetInt(hView, ID_ELEM1, 832);
    TuxSetInt(hView, ID_ELEM2, 173);

    // convert view buffer to fielded buffer
    TuxView2FML(hFML, hView);
  end TMain;
親トピック: Buffer Manipulating Functions
関連資料
TuxFML2View Function


TuxSetFloat Function

Action

Sets the value of a specified floating-point field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32

Include file

TUXEDO.bdh

Syntax

TuxSetFloat(in hBuffer  : number,
            in nFieldId : number,
            in fValue   : float,
            in nIndex   : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc.
nFieldId | Identifier specifying a field of the typed buffer.
fValue | Floating-point value to copy to the typed buffer.
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies an array.

Example

const
  ID_NUMBERS :=  8;
  ID_PRODUCT := 16;

dcltrans
  transaction TMain
  var
  hBuffer, olen : number;
  fResult       : float;

  begin
  Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store two floating-point values in buffer
    TuxSetFloat(hBuffer, ID_NUMBERS, 807.33, 1);
    TuxSetFloat(hBuffer, ID_NUMBERS, 23.09, 2);

    // multiply floating-point values
    Tux_tpcall("MULTIPLY", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve product
    fResult := TuxGetFloat(hBuffer, ID_PRODUCT);
    Tux_tpcommit(0);
  end TMain;
親トピック: Buffer Manipulating Functions
関連資料
TuxSetString Function
TuxSetInt Function
TuxSetCArray Function
TuxGetBuffer Function
TuxGetFloat Function


TuxGetFloat Function

Action

Retrieves the value of a specified floating-point field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32

Include file

TUXEDO.bdh

Syntax

TuxGetFloat(in hBuffer  : number,
            in nFieldId : number,
            in nIndex   : number optional): float;

Return value

Floating-point value retrieved from the typed buffer.

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc.
nFieldId | Identifier specifying a field of the typed buffer
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies an array.

Example

const
  ID_NUMBERS :=  8;
  ID_PRODUCT := 16;

dcltrans
  transaction TMain
  var
    hBuffer, olen : number;
    fResult       : float;
  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store two floating-point values in buffer
    TuxSetFloat(hBuffer, ID_NUMBERS, 807.33, 1);
    TuxSetFloat(hBuffer, ID_NUMBERS, 23.09, 2);

    // multiply floating-point values
    Tux_tpcall("MULTIPLY", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve product
    fResult := TuxGetFloat(hBuffer, ID_PRODUCT);
    Tux_tpcommit(0);
  end TMain;

Sample scripts

bankappn.bdf

親トピック: Buffer Manipulating Functions
関連資料
TuxGetCArray Function
TuxGetInt Function
TuxGetString Function
TuxGetBuffer Function
TuxSetFloat Function


TuxSetString Function

Action

Sets the content of a specified string field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32, STRING

Include file

TUXEDO.bdh

Syntax

TuxSetString(in hBuffer  : number,
             in nFieldId : number,
             in sString  : string,
             in nIndex   : number optional): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc.
nFieldId | Identifier specifying a field of the typed buffer.
sString | String to copy to the typed buffer.
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies a string array.

Example

const
  ID_STRINGS      :=  8;
  ID_CONCATENATED := 16;

dcltrans
  transaction TMain
  var
    hBuffer, olen : number;
    sString       : string;

  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store two strings in buffer
    TuxSetString(hBuffer, ID_STRINGS, "Hello", 1);
    TuxSetString(hBuffer, ID_STRINGS, " world!", 2);

    // concatenate strings
    Tux_tpcall("CONCAT", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve concatenated string
    TuxGetString(hBuffer, ID_CONCATENATED, sString, sizeof(sString));
    Tux_tpcommit(0);
  end TMain;

Sample scripts

bankappn.bdf

親トピック: Buffer Manipulating Functions
関連資料
TuxSetInt Function
TuxSetFloat Function
TuxSetCArray Function
TuxGetBuffer Function
TuxGetString Function


TuxGetString Function

Action

Retrieves the content of a specified string field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32, STRING

Include file

TUXEDO.bdh

Syntax

TuxGetString( in  hBuffer     : number,
              in  nFieldId    : number,
              out sString     : string,
              in  nStringSize : number optional,
              in  nIndex      : number optional ): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc
nFieldId | Identifier specifying a field of the typed buffer.
sString | Variable receiving the string retrieved from the typed buffer.
nStringSize | Length of the variable receiving the string (optional).
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies a string array.

Example

const
  ID_STRINGS      :=  8;
  ID_CONCATENATED := 16;

dcltrans
  transaction TMain
  var
    hBuffer, olen : number;
    sString       : string;
  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store two strings in buffer
    TuxSetString(hBuffer, ID_STRINGS, "Hello", 1);
    TuxSetString(hBuffer, ID_STRINGS, " world!", 2);

    // concatenate string
    Tux_tpcall("CONCAT", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve concatenated string
    TuxGetString(hBuffer, ID_CONCATENATED, sString);
    Tux_tpcommit(0);
  end TMain;

Sample scripts

bankappn.bdf

親トピック: Buffer Manipulating Functions
関連資料
TuxSetString Function
TuxGetCArray Function
TuxGetFloat Function
TuxGetInt Function
TuxGetBuffer Function


TuxSetCArray Function

Action

Sets the content of a specified binary data field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32, CARRAY

Include file

TUXEDO.bdh

Syntax

TuxSetCArray( in hBuffer   : number,
              in nFieldId  : number,
              in sValue    : string,
              in nValueLen : number optional,
              in nIndex    : number optional ): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc.
nFieldId | Identifier specifying a field of the typed buffer.
sValue | Binary data to copy to the typed buffer.
nValueLen | Size of the binary data copied to the typed buffer (optional).
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies an array.

Example

const
  ID_DATA := 8;  ID_RESULT := 16;
dcltrans  transaction TMain
  var
    hBuffer, olen : number;
    sResult       : string;
    sString       : string;
  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store data and password in buffer
    TuxSetCArray(hBuffer, ID_DATA, "\h54396e31009f", 6, 1);
    TuxSetCArray(hBuffer, ID_DATA, "\h4034f83ad930", 6, 2);

    // encrypt data
    Tux_tpcall("XOR", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve encrypted data
    TuxGetCArray(hBuffer, ID_RESULT, sString);
    Tux_tpcommit(0);
  end TMain;
親トピック: Buffer Manipulating Functions
関連資料
TuxGetCArray Function
TuxSetString Function
TuxSetInt Function
TuxSetFloat Function
TuxGetBuffer Function


TuxGetCArray Function

Action

Retrieves the content of a specified binary data field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32, CARRAY

Include file

TUXEDO.bdh

Syntax

TuxGetCArray( in  hBuffer     : number,
              in  nFieldId    : number,
              out sBinary     : string,
              in  nBinarySize : number optional,
              in  nIndex      : number optional ): boolean;

Return value

  • true if successful.

  • false otherwise.

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc.
nFieldId | Identifier specifying a field of the typed buffer.
sBinary | Buffer receiving the binary data retrieved from the typed buffer.
nBinarySize | Size of the buffer receiving the binary data (optional).
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies an array.

Example

const
  ID_DATA   :=  8;
  ID_RESULT := 16;

dcltrans
  transaction TMain
  var
    hBuffer, olen : number;
    sResult       : string;
    sString       : string;
  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store data and password in buffer
    TuxSetCArray(hBuffer, ID_DATA, "\h54396e31009f", 6, 1);
    TuxSetCArray(hBuffer, ID_DATA, "\h4034f83ad930", 6, 2);

    // encrypt data
    Tux_tpcall("XOR", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve encrypted data
    TuxGetCArray(hBuffer, ID_RESULT, sString);
    Tux_tpcommit(0);
  end TMain;
親トピック: Buffer Manipulating Functions
関連資料
TuxSetCArray Function
TuxGetFloat Function
TuxGetInt Function
TuxGetString Function
TuxGetBuffer Function


TuxSetInt Function

Action

Sets the value of a specified integer field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32

Include file

TUXEDO.bdh

Syntax

TuxSetInt(in hBuffer  : number,
          in nFieldId : number,
          in nValue   : number,
          in nIndex   : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc.
nFieldId | Identifier specifying a field of the typed buffer.
nValue | Integer value to copy to the typed buffer.
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies an integer array.

Example

const
  ID_NUMBERS :=  8;
  ID_SUM     := 16;

dcltrans
  transaction TMain
  var
    hBuffer, olen, nSum: number;
  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store two values in buffer
    TuxSetInt(hBuffer, ID_NUMBERS, 8, 1);
    TuxSetInt(hBuffer, ID_NUMBERS, 4, 2);

    // calculate the sum of both values
    Tux_tpcall("SUM", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve result
    nSum := TuxGetInt(hBuffer, ID_SUM);
    Tux_tpcommit(0);
  end TMain;

Sample scripts

bankappn.bdf

親トピック: Buffer Manipulating Functions
関連資料
TuxGetInt Function
TuxSetString Function
TuxSetFloat Function
TuxSetCArray Function
TuxGetBuffer Function


TuxGetInt Function

Action

Retrieves the value of a specified integer field within a typed buffer. This function can be used to manipulate any of the following predefined buffer types:

FML, FML32

Include file

TUXEDO.bdh

Syntax

TuxGetInt(in hBuffer  : number,
          in nFieldId : number
          in nIndex   : number optional): number;

Return value

Integer value retrieved from the typed buffer.

Parameter | Description
hBuffer | Typed buffer allocated with TuxGetBuffer or Tux_tpalloc.
nFieldId | Identifier specifying a field of the typed buffer
nIndex | Array index (optional). This parameter has to be passed to the function if the field identifier specifies an integer array

Example

const
  ID_NUMBERS :=  8;
  ID_SUM     := 16;

dcltrans
  transaction TMain
  var
    hBuffer, olen, nResult: number;
  begin
    Tux_tpbegin(30, 0);

    // allocate buffer
    TuxGetBuffer(hBuffer, "FML", NULL, 1024);

    // store two integer value in buffer
    TuxSetInt(hBuffer, ID_NUMBERS, 8, 1);
    TuxSetInt(hBuffer, ID_NUMBERS, 4, 2);

    // calculate sum
    Tux_tpcall("SUM", hBuffer, 0, hBuffer, olen, TPNOFLAGS);

    // retrieve result
    nResult := TuxGetInt(hBuffer, ID_SUM);
    Tux_tpcommit(0);
  end TMain;

Sample scripts

bankappn.bdf

親トピック: Buffer Manipulating Functions
関連資料
TuxSetInt Function
TuxGetCArray Function
TuxGetFloat Function
TuxGetString Function
TuxGetBuffer Function


Jacada Functions Reference

A number of functions are provided to handle Jacada function calls from within Silk Performer. These functions are one-to-one wrappers of Jacada's own load testing API. Please refer to Jacada documentation for detailed information.

親トピック: Application Server Functions


Browser-Driven Web Load Testing Functions

Silk Performer provides the following functions for browser-driven Web load testing:

  • BrowserActivateWindow Function
    Activates the window (tab) inside the web browser so that all following locator-based API calls work on the window.
  • BrowserBack Function
    Equivalent to clicking the browser Back button.
  • BrowserButtonSelect Function
    Clicks a DOM button.
  • BrowserCheckBoxSelect Function
    Sets the state of a check box.
  • BrowserClick Function
    Clicks a DOM element with a specified mouse button.
  • BrowserCloseWindow Function
    Closes the window (tab) that is currently active in the web browser, or a window specified by a handle.
  • BrowserCreateWindow Function
    Opens a new window (or a new tab in the browser) programmatically.
  • BrowserDeleteCertificate Function
  • BrowserDlgDownload Function
    Creates a file download command in the dialog command storage.
  • BrowserDlgDownloadCancel Function
    Creates a file download cancel command in the dialog command storage.
  • BrowserDlgSetButton Function
    Stores a button press command in the dialog command storage.
  • BrowserDlgSetText Function
    Stores a text command in the dialog command storage.
  • BrowserDlgStop Function
    Clears the content of the dialog command storage and closes any open pop-up dialog boxes.
  • BrowserDlgVerifyDownloadSize Function
    Adds a download command to the dialog command storage that checks the size of the downloaded file.
  • BrowserDoubleClick Function
    Double-clicks a DOM element.
  • BrowserExecuteJavaScript Function
    Executes JavaScript code based on the currently loaded HTML content.
  • BrowserFileDownload Function
    Reads a file from a certain location and stores it to the local file system.
  • BrowserFind Function
    Finds a DOM element using a given locator.
  • BrowserFindAll Function
    Finds all DOM elements for a given locator.
  • BrowserFormSubmit Function
    Submits a DOM form.
  • BrowserForward Function
    Equivalent to clicking the Web browser Forward button.
  • BrowserGetActiveWindow Function
    Returns the handle of the active browser window (tab).
  • BrowserGetIEMode Function
    Returns the current IE mode.
  • BrowserGetOption Function
    Gets a BrowserEngine option.
  • BrowserGetProperty Function
    Reads the value of the specified DOM element's property.
  • BrowserGetProxy
    Retrieves the current proxy host name and port number either for all protocols or for a specific protocol.
  • BrowserGetProxyAutoConfigFile
    Retrieves the location of a PAC (Proxy Auto-Configuration) file.
  • BrowserGetProxyBypass
    Retrieves the names of hosts that are not to be accessed through a proxy.
  • BrowserGetScrollPos Function
    Returns the current scrollbar position of the active window.
  • BrowserGetStandardHost Function
    Gets the replacement name for the predefined host name standardhost.
  • BrowserGetText Function
    Retrieves the text of a DOM element.
  • BrowserGetUrl Function
    Retrieves the current URL from the browser.
  • BrowserHighlight Function
    Highlights an object by changing background and foreground colors.
  • BrowserIgnoreServerError Function
    Modifies the error severity of a specified server error for the subsequent browser-driven function call.
  • BrowserImportCertificate Function
    Imports the client certificate from a file into the certificate store of the operating system for later use by Internet Explorer.
  • BrowserLinkSelect Function
    Clicks a DOM link.
  • BrowserListBoxMultiSelect Function
    Selects multiple items in a DOM list box.
  • BrowserListBoxSelect Function
    Selects an item in a DOM listbox.
  • BrowserMouseMove Function
    Sends a DOM mouse-move event to the specified DOM element.
  • BrowserNativeClick Function
    Clicks a DOM element with a specified position and mouse button.
  • BrowserNativeDoubleClick Function
    Double-clicks a DOM element with a specified position and mouse button.
  • BrowserNativeMouseMove Function
    Sends a mouse-move event to the specified DOM element with a specified position.
  • BrowserNavigate Function
    Navigates to a specified URL.
  • BrowserPause Function
    Enables step-by-step mode so the execution of a Try Script run is paused before the next API call is executed.
  • BrowserRadioButtonSelect Function
    Selects a radio button.
  • BrowserReload Function
    Equivalent to clicking the Web browser Reload button.
  • BrowserReplayCompatibility Function
    Sets the replay compatibility by defining how locators are generated.
  • BrowserReset Function
    Resets the browser state (cookies, cache and history).
  • BrowserSetAuthentication Function
    Sets username and password for a subsequent authentication attempt.
  • BrowserSetBrowserType Function
    Sets the browser type to be used for the simulation.
  • BrowserSetCertificate Function
    Sets a client certificate of a given name for authentication and encryption purposes.
  • BrowserSetDomainSuppress Function
    Suppresses content in a Web page which is hosted on another domain, for example popup ads or requests submitted by social networking sites.
  • BrowserSetIEMode Function
    Sets the IE compatibility mode for the browser-driven Web load testing feature.
  • BrowserSetOption Function
    Sets a BrowserEngine option.
  • BrowserSetPassword Function
    Sets the password of a text field or text area element.
  • BrowserSetProperty Function
    Changes the property values of DOM elements.
  • BrowserSetProxy
    Sets the proxy host name and port for a specific protocol.
  • BrowserSetProxyAutoConfigFile
    Specifies the location of a PAC (Proxy Auto-Configuration) file.
  • BrowserSetProxyBypass
    Sets the names of hosts that are not be accessed through a proxy.
  • BrowserSetReplayBehavior Function (deprecated)
    Sets the replay behavior by defining how locators are generated.
  • BrowserSetScrollPos Function
    Scrolls to the specified position inside the active window.
  • BrowserSetStandardHost Function
    Sets the replacement name for the predefined host name "standardhost".
  • BrowserSetText Function
    Sets the text of a text field or text area element.
  • BrowserScreenshot Function
    Takes a screenshot during replay and stores it in the TrueLog.
  • BrowserStart Function
    Starts the browser and resets the virtual user.
  • BrowserStop Function
    Closes the browser.
  • BrowserStore Function
    Stores a handle to a DOM element for reuse.
  • BrowserTtiIncludeElement Function
    Marks an element as relevant for measuring the Time to Interact.
  • BrowserTypeKeys Function
    Replays keystrokes as if they were entered directly using the keyboard.
  • BrowserUnhighlight Function
    Unhighlights an object.
  • BrowserVerifyProperty Function
    Verifies that a property of a DOM element has a specified value.
  • BrowserVerifyText Function
    Checks if a DOM element has a specified caption.
  • BrowserWaitForDisappear Function
    Waits until the respective DOM element is invisible or detached from the document.
  • BrowserWaitForNewWindow Function
    Waits until a new browser window (tab) is created and returns the handle of this window (tab).
  • BrowserWaitForProperty Function
    Waits until the respective property has the specified value.
  • GetInternetExplorerInfo Function
    Returns the major and minor version and the build number of the installed Internet Explorer.
親トピック: Benchmark Description Language (BDL) Reference


BrowserActivateWindow Function

Action

Activates the window (tab) inside the web browser so that all following locator-based API calls work on the window.

Include file

BrowserAPI.bdh

Syntax

BrowserActivateWindow( uHandle : in number ): boolean;

Parameter | Description
uHandle | The handle returned by a previous BrowserGetActiveWindow call.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    wnd1   : number;
    wnd2   : number;
    check1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/multiplewindows/multipleWindows.html");
    wnd1 := BrowserGetActiveWindow("mainWindow");
    BrowserLinkSelect("//A[@name='window1']",  "Select, BODY (#1)");
    wnd2 := BrowserGetActiveWindow("first window");
    BrowserActivateWindow(wnd1);
    BrowserLinkSelect("//A[@name='window2']",  "Select, BODY (#1)");

    BrowserCloseWindow(wnd2); // close second window (tab)
    BrowserCloseWindow();     // close active window (tab)
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserCloseWindow Function
BrowserGetActiveWindow Function


BrowserBack Function

Action

Equivalent to clicking the browser Back button.

Include file

BrowserAPI.bdh

Syntax

BrowserBack(): boolean;

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/");
    BrowserClick("//A[@textContents='Demo Application']");

    BrowserBack();  // go one step back in your browser's history

    BrowserForward(); // go one step forward in your browser's history
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserForward Function
BrowserReload Function


BrowserButtonSelect Function

Action

Clicks a DOM button.

注: This function performs the same action as BrowserClick.

Include file

BrowserAPI.bdh

Syntax

BrowserButtonSelect( uTestObject : in union,
                     sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | Either a locator that identifies the button or a handle to a previously found button. Throws an error if an invalid handle is used or if the locator can not be resolved.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/gmopost/");

    BrowserButtonSelect("//INPUT[@name='bSubmit']");  // select (click) the "Enter GMO OnLine" button
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserClick Function


BrowserCheckBoxSelect Function

Action

Sets the state of a check box.

Include file

BrowserAPI.bdh

Syntax

BrowserCheckBoxSelect( uTestObject : in union,
                       nState      : in number,
                       sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | Either a locator that identifies the check box or a handle to a previously found check box. Throws an error if an invalid handle is used or if the locator can not be resolved.
nState | Use CHECKBOX_CHECKED to check the check box or CHECKBOX_UNCHECKED to uncheck the checkbox. Other values will raise an error.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwCheckBox");

    // check Monday
    BrowserCheckBoxSelect("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", CHECKBOX_CHECKED);
    // uncheck Monday
    BrowserCheckBoxSelect("//SPAN[@hideFocus='0'][1]/INPUT[@hideFocus='0']", CHECKBOX_UNCHECKED);
    // check Tuesday
    BrowserCheckBoxSelect("//SPAN[@hideFocus='0'][2]/INPUT[@hideFocus='0']", CHECKBOX_CHECKED);

    BrowserStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserClick Function

Action

Clicks a DOM element with a specified mouse button. A left-button click executes the default actions of the clicked element type.

Include file

BrowserAPI.bdh

Syntax

BrowserClick( uTestObject : in union,
              nButton     : in number optional,
              sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | Either a locator that identifies the DOM element or a handle to a previously found DOM element. Throws an error if an invalid handle is used or if the locator cannot be resolved.
nButton | Optional: The mouse button with which the DOM element is to be clicked. Specify BUTTON_LEFT to use the left mouse button (default), or BUTTON_RIGHT to use the right mouse button. You can combine mouse buttons with modifier keys using an OR operator. Specify MODIFIER_SHIFT, MODIFIER_ALT, or MODIFIER_CTRL for the respective modifier key. For example: BUTTON LEFT | MODIFIER_CTRL
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"
use "WebAPI.bdh"

dcluser
  user
    BDLTUser
  transactions
    TInit           : begin;
    TMain(BROWSER_MODE_DISPLAY_VISIBLE) : 1;

  var
    gDemoSite:string;

dclrand

dcltrans
  transaction TInit
  begin
    gDemoSite := "http://demo.borland.com/InsuranceWebExtJS/";
  end TInit;

  transaction TMain(mode:number)
  var
    sQuote,sExpected : string;
  begin
    BrowserStart(BROWSER_MODE_DISPLAY_VISIBLE | BROWSER_MODE_USERBEHAVIOR_FIRST_TIME);
    BrowserNavigate(gDemoSite, "Navigate to Demo Site");
    if BrowserFind(HANDLE_DESKTOP , "//LABEL[@textContents='John Smith']", false, 0, true) = HANDLE_INVALID then
      BrowserClick("//INPUT[@id='login-form:email']", BUTTON_Left);
      BrowserSetText("//INPUT[@id='login-form:email']", "john.smith@gmail.com");
      BrowserClick("//INPUT[@id='login-form:password']", BUTTON_Left);
      BrowserSetText("//INPUT[@id='login-form:password']", "john");
      BrowserButtonSelect("//INPUT[@id='login-form:login']", "BrowserButtonSelect (#1)");
    end;
    BrowserListBoxSelect("//SELECT[@id='quick-link:jump-menu']", "Auto Quote", "BrowserListBoxSelect (#1)");
    BrowserRadioButtonSelect("//INPUT[@id='autoquote:vehicle:0']");
    BrowserClick("//INPUT[@id='autoquote:zipcode']", BUTTON_Left);
    BrowserSetText("//INPUT[@id='autoquote:zipcode']", "555");
    BrowserClick("//INPUT[@id='autoquote:e-mail']", BUTTON_Left);
    BrowserSetText("//INPUT[@id='autoquote:e-mail']", "john.smith@gmail.com");
    BrowserButtonSelect("//INPUT[@id='autoquote:next']", "BrowserButtonSelect (#2)");
    BrowserRadioButtonSelect("//INPUT[@id='autoquote:gender:0']");
    BrowserRadioButtonSelect("//INPUT[@id='autoquote:type:0']");
    BrowserButtonSelect("//INPUT[@id='autoquote:next']", "BrowserButtonSelect (#3)");
    BrowserClick("//IMG[@hideFocus='0'][2]", BUTTON_Left, "BrowserClick (#3)");
    BrowserClick("//DIV[@textContents='Chrysler']", BUTTON_Left, "BrowserClick (#4)");
    BrowserClick("//IMG[@hideFocus='0'][3]", BUTTON_Left, "BrowserClick (#5)");
    BrowserClick("//DIV[@textContents='Aspen']", BUTTON_Left);
    BrowserRadioButtonSelect("//INPUT[@id='autoquote:finInfo:0']");
    BrowserButtonSelect("//INPUT[@id='autoquote:next']", "BrowserButtonSelect (#4)");
    BrowserLinkSelect("//A[@textContents='Home']", "Select, A, textContents=Home (#1)");
    BrowserButtonSelect("//INPUT[@id='logout-form:logout']",
      "Select, INPUT, href=http://demo.borland.com/InsuranceWebExtJS/index.jsf (#1)");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


BrowserCloseWindow Function

Action

Closes the window (tab) that is currently active in the web browser, or a window specified by a handle.

注: The first window opened (the main window) cannot be closed.

Include file

BrowserAPI.bdh

Syntax

BrowserCloseWindow( uHandle : in number optional ): boolean;

Parameter | Description
uHandle | Optional: The handle returned by a previous BrowserGetActiveWindow call. If not specified, the active window is closed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    wnd1   : number;
    wnd2   : number;
    check1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/multiplewindows/multipleWindows.html");
    wnd1 := BrowserGetActiveWindow("mainWindow");
    BrowserLinkSelect("//A[@name='window1']",  "Select, BODY (#1)");
    wnd2 := BrowserGetActiveWindow("first window");
    BrowserActivateWindow(wnd1);
    BrowserLinkSelect("//A[@name='window2']",  "Select, BODY (#1)");

    BrowserCloseWindow(wnd2); // close second window (tab)
    BrowserCloseWindow();     // close active window (tab)
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserActivateWindow Function
BrowserGetActiveWindow Function


BrowserCreateWindow Function

Action

Opens a new window (or a new tab in the browser) programmatically. Usually a BrowserNavigate has to be executed afterwards.

Include file

BrowserAPI.bdh

Syntax

BrowserCreateWindow(): boolean;

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserCreateWindow(); // create new window (tab)
    BrowserNavigate("http://demo.borland.com/");  // navigate to demo.borland.com
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserDeleteCertificate Function

Action

Deletes the client certificate from the operating system's certificate store. This function is similar to manually deleting a certificate.

The certificate APIs work with Microsoft Windows 7 or later, Microsoft Windows Server 2008 R2 or later, and Internet Explorer 8 or later.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserDeleteCertificate( sCertificatename : in string,
                          sCertstore       : in string optional ): boolean;

Parameter | Description
sCertificatename | The certificate to be deleted.
sCertstore | Optional: The certificate store name. When this parameter is not specified certificates are deleted from the My store, available on the certificate tab's Personal tab.

Return Value

  • true if successful

  • false otherwise

Example

注: The following example does not work out-of-the-box, as you first need to set up a certificate in order to execute actions on it.
benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // delete the certificate from the default certificate store
    BrowserDeleteCertificate("John Smith");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserImportCertificate Function
BrowserSetCertificate Function


BrowserDlgDownload Function

Action

Creates a file download command in the dialog command storage. BrowserDlgDownload provides enhanced file download functionality and replaces the BrowserFileDownload function when recording new scripts. The actual file download is triggered by a subsequent call like BrowserClick.

BrowserDlgStop is required to synchronize and end the file download procedure. The default timeout is 20 seconds, which can be customized by using BrowserSetOption with the BROWSER_OPT_FILEDOWNLOAD_BEGIN_TIMEOUT option. If the download starts within the defined timeout, the execution of the script is blocked within BrowserDlgStop until the download has finished. If the download does not start within the specified time, the API call fails and returns an error.

Whether and how the file is copied from the browser cache to the local disk depends on the type of executed test run and/or on the BROWSER_OPT_FILEDOWNLOAD_SAVEFILE option defined in the BrowserSetOption call that needs to be scripted before the BrowserDlgDownload call. If the BROWSER_OPT_FILEDOWNLOAD_SAVEFILE option is not specified, all downloaded files are copied from the browser cache to the results directory for Try Script runs, and for load test runs and find baseline runs no files are copied to the results directory. It is recommended not to copy any files to the results directory for load test runs, as this could result in huge amounts of data being saved on the local disk, and this data will also need to be copied from the agent machines to the controller.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserDlgDownload( sFileName : in string ): boolean;
Parameter | Description
sFilename | The name of the file which shall be downloaded to the local disk. For recording, files are stored in the current project folder. For replay, files are stored in the project's results folder. The results folders are called RecentTryScriptRun for Try Script runs, the specified load test folder name for load tests, and RecentBaseLineTest for find baseline runs.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans
  transaction TMain
  var
    wnd1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/common_main.asp#Download",
      "Navigate_http://demo.borland.com/TestSite/common_main.asp#Download (#1)");
    wnd1 := BrowserGetActiveWindow("wnd1");
    BrowserSetOption(BROWSER_OPT_FILEDOWNLOAD_SAVEFILE, FILEDOWNLOAD_SAVEFILE_SAVELAST);
    BrowserDlgDownload("SmallFile.exe");
    BrowserClick("//A[@textContents='Small File']", BUTTON_Left, "Click, A, textContents=Small File (#1)");
    BrowserDlgStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserFileDownload Function
BrowserSetOption Function
BrowserDlgStop Function
BrowserDlgDownloadCancel Function


BrowserDlgDownloadCancel Function

Action

Creates a file download cancel command in the dialog command storage. If a file download is triggered by one of the following API calls, for example BrowserClick, the download is canceled and no data is downloaded. The behavior of BrowserDlgDownloadCancel is similar to BrowserDlgDownload, but cancels the download instead of performing it.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserDlgDownloadCancel(): boolean;

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans
  transaction TMain
  var
    wnd1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/common_main.asp#Download",
      "Navigate_http://demo.borland.com/TestSite/common_main.asp#Download (#1)");
    wnd1 := BrowserGetActiveWindow("wnd1");
    BrowserDlgDownloadCancel();
    BrowserClick("//A[@textContents='Small File']", BUTTON_Left, "Click, A, textContents=Small File (#1)");
    BrowserDlgStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDlgDownload Function
BrowserSetOption Function
BrowserDlgStop Function


BrowserDlgSetButton Function

Action

Stores a button press command in the dialog command storage. If a dialog pops up during replay, this button press command is used for the specified dialog. Usually only the recorded API calls shall be used for replaying, because the captions and sequence numbers are detected during recording.

Include file

BrowserAPI.bdh

Syntax

BrowserDlgSetButton( sDialog : in string,
                     sButton : in string ): boolean;
Parameter | Description
sDialog | The caption of the dialog with a sequence number.
sButton | The name of the button.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/common_main.asp#Popup");

    // store the text "John Smith" to be inserted into a pop-up dialog's textbox
    BrowserDlgSetText("Explorer User Prompt #1", 0, "John Smith");
    // store the button press for the first popup
    BrowserDlgSetButton("Explorer User Prompt #1", "OK");
    // store the button press for the second popup
    BrowserDlgSetButton("Message from webpage #2", "OK");
    // click on prompt-button to start popping up dialogs
    BrowserClick("//INPUT[@value='Prompt']", BUTTON_Left);
    // clear the dialog command storage
    BrowserDlgStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDlgSetText Function
BrowserDlgStop Function


BrowserDlgSetText Function

Action

Stores a text command in the dialog command storage. If a dialog pops up during replay, the text is the user input for the specified text input field. Usually only the recorded API calls shall be used for replaying, because the captions and sequence numbers are detected during recording.

Include file

BrowserAPI.bdh

Syntax

BrowserDlgSetText( sDialog   : in string,
                   uPosition : in number,
                   sText     : in string ): boolean;
Parameter | Description
sDialog | The caption of the dialog with a sequence number.
uPosition | The text field position inside the dialog.
sText | The string which shall be used as user input.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/common_main.asp#Popup");

    // store the text "John Smith" to be inserted into a pop-up dialog's textbox
    BrowserDlgSetText("Explorer User Prompt #1", 0, "John Smith");
    // store the button press for the first popup
    BrowserDlgSetButton("Explorer User Prompt #1", "OK");
    // store the button press for the second popup
    BrowserDlgSetButton("Message from webpage #2", "OK");
    // click on prompt-button to start popping up dialogs
    BrowserClick("//INPUT[@value='Prompt']", BUTTON_Left);
    // clear the dialog command storage
    BrowserDlgStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDlgSetButton Function
BrowserDlgStop Function


BrowserDlgStop Function

Action

Clears the content of the dialog command storage and closes any open pop-up dialog boxes. This is necessary for clearing unused dialog commands. This should be done immediately after an API call evokes the opening of a dialog.

BrowserDlgStop is also required for synchronization of file downloads and should not be manually removed from a script. It is used to synchronize and end the file download procedure. If a file download command was initiated by BrowserDlgDownload or BrowserDlgCancel and triggered by a call such as BrowserClick, the execution of BrowserDlgStop waits until the download starts. The default timeout is 20 seconds, which can be customized by using BrowserSetOption with the BROWSER_OPT_FILEDOWNLOAD_BEGIN_TIMEOUT option. If the download starts within the defined timeout, the execution of the script is blocked within BrowserDlgStop until the download has finished. If the download does not start within the specified time, the API call fails and returns an error.

Whether and how the file is copied from the browser cache to the local disk depends on the type of executed test run and/or on the BROWSER_OPT_FILEDOWNLOAD_SAVEFILE option defined in the BrowserSetOption call that needs to be scripted before the BrowserDlgDownload call. If the BROWSER_OPT_FILEDOWNLOAD_SAVEFILE option is not specified, all downloaded files are copied from the browser cache to the results directory for Try Script runs, and for load test runs and find baseline runs no files are copied to the results directory. It is recommended not to copy any files to the results directory for load test runs, as this could result in huge amounts of data being saved on the local disk, and this data will also need to be copied from the agent machines to the controller.

Include file

BrowserAPI.bdh

Syntax

BrowserDlgStop(): boolean;

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans
  transaction TMain
  var
    wnd1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/common_main.asp#Download",
      "Navigate_http://demo.borland.com/TestSite/common_main.asp#Download (#1)");
    wnd1 := BrowserGetActiveWindow("wnd1");
    BrowserDlgDownload("SmallFile.exe");
    BrowserClick("//A[@textContents='Small File']", BUTTON_Left, "Click, A, textContents=Small File (#1)");
    BrowserDlgStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDlgSetButton Function
BrowserDlgSetText Function
BrowserDlgDownload Function
BrowserSetOption Function
BrowserDlgDownloadCancel Function


BrowserDlgVerifyDownloadSize Function

Action

Adds a download command to the dialog command storage that checks the size of the downloaded file. The file to be downloaded must be declared beforehand with the BrowserDlgVerifyDownloadSize function. The function must be called before the download starts. Multiple verifications can be applied to a single download command to ensure that the resulting file size lies in between certain bounds. During recording, you can add a BrowserDlgVerifyDownloadSize function by checking the Verify size of download checkbox in the save file dialog.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserDlgVerifyDownloadSize( in uExpectedSize : number,
                              in nOptions      : number optional := VERIFY_SIZE_EQUAL,
                              in nSeverity     : number optional := SEVERITY_ERROR      ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
uExpectedSize | The file size used for the verification
nOptions Describes how the actual size is compared to the expected size:
  • VERIFY_SIZE_EQUAL
  • VERIFY_SIZE_LARGER_THAN
  • VERIFY_SIZE_SMALLER_THAN

If this parameter is omitted, a check for equality is performed.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans
  transaction TMain
  var
    wnd1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/common_main.asp#Download",
      "Navigate_http://demo.borland.com/TestSite/common_main.asp#Download (#1)");
    wnd1 := BrowserGetActiveWindow("wnd1");
    BrowserSetOption(BROWSER_OPT_FILEDOWNLOAD_SAVEFILE, FILEDOWNLOAD_SAVEFILE_SAVELAST);
    BrowserDlgDownload("SmallFile.exe");
    BrowserDlgVerifyDownloadSize(200, VERIFY_SIZE_LARGER_THAN | VERIFY_SIZE_EQUAL); // actual file must contain 200 Bytes or more
    BrowserClick("//A[@textContents='Small File']", BUTTON_Left, "Click, A, textContents=Small File (#1)");
    BrowserDlgStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserDoubleClick Function

Action

Double-clicks a DOM element.

Include file

BrowserAPI.bdh

Syntax

BrowserDoubleClick( uTestObject : in union,
                    nButton     : in number optional,
                    sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | Either a locator that identifies the DOM element or a handle to a previously found DOM element. Throws an error if an invalid handle is used or if the locator can not be resolved.
nButton | Optional: Specify BUTTON_LEFT to use the left mouse button (default), or BUTTON_RIGHT to use the right mouse button. You can combine mouse buttons with modifier keys using an OR operator. Specify MODIFIER_SHIFT, MODIFIER_ALT, or MODIFIER_CTRL for the respective modifier key. For example: BUTTON LEFT | MODIFIER_CTRL
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    wnd1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 1230, 564);
    BrowserNavigate("http://demo.borland.com/InsuranceWebExtJS/", "Navigate to demo site (#1)");
    wnd1 := BrowserGetActiveWindow("wnd1");
    BrowserListBoxSelect("//SELECT[@id='quick-link:jump-menu']", "Agent Lookup",
      "ListBoxSelect, SELECT, name=quick-link:jump-menu (#1)");
    BrowserClick("//INPUT[@id='show-all:search-all']", BUTTON_Left, "Click, INPUT, name=show-all:search-all (#1)");
    BrowserDoubleClick("//DIV[@textContents='Walker']", BUTTON_Left, "DoubleClick, DIV, textContents=Walker (#1)");
    BrowserClick("//DIV[@unselectable='on'][30]/DIV[@hideFocus='0']", BUTTON_Left);
    BrowserClick("//A[@textContents='Home'][2]", BUTTON_Left, "Click, A, textContents=Home (#1)");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


BrowserExecuteJavaScript Function

Action

Executes JavaScript code based on the currently loaded HTML content.

Include file

BrowserAPI.bdh

Syntax

BrowserExecuteJavaScript( sScript     : in string
                          sResult     : out string optional
                          uTestObject : in union optional ): boolean;
Parameter | Description
sScript | The JavaScript code.
sResult | Optional: Variable receiving the result of the JavaScript execution, converted to a string.
uTestObject | The XPath locator or the handle to the DOM element. This element can be accessed as currentElement from within the script. 注: Return values are not supported when uTestObject is specified. In this case, NULL must be supplied as value for sResult.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TJavascript  : 1;

dcltrans
  transaction TJavascript
  var
    sScript  : string;
    sVersion : string;
    sObjectAsJSON : string;
    sResult : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    // define JavaScript to execute
    sScript := "window.open('http://demo.borland.com/gmoajax')";
    // execute the script (which opens a new window and navigates to demo.borland.com)
    BrowserExecuteJavaScript(sScript);

    // Check, if page is using "Modernizr"
    BrowserExecuteJavaScript("if (window.Modernizr) { window.Modernizr._version; }", sVersion);
    if (Strlen(sVersion) > 0) then
      Print("Page is using Modernizr, version " + sVersion);
    else
      Print("Page is not using Modernizr");
    end;

    // Acces object, stringifying it first
    BrowserExecuteJavaScript("JSON.stringify(window.Modernizr)", sObjectAsJSON);
    Print(sObjectAsJSON); // yields, e.g.: {"touch":false,"cssanimations":true,"csstransitions":true,"_version" ... }

    // run javascript for specific locator
    // return value can be retrieved via helper variable
    BrowserNavigate("http://demo.borland.com/gmoajax/");
    BrowserExecuteJavascript("document.body.sResult=currentElement.currentStyle.borderBottomColor", NULL, "//img[@id='logoIMG']");
    BrowserGetProperty("//body", "sResult", sResult);
    Print(sResult);      // yields, e.g.: hsl(120, 33%, 43%)
  end TJavascript;
親トピック: Browser-Driven Web Load Testing Functions


BrowserFileDownload Function

Action

Reads a file from a certain location and stores it to the local file system. This call can only be scripted manually. The recorded function is the improved BrowserDlgDownload function.

Include file

BrowserAPI.bdh

Syntax

BrowserFileDownload( sUrl      : in string,
                     sFilename : in string optional,
                     sTimer    : in string optional,
                     nFilesize : out number optional ): boolean;
Parameter | Description
sUrl | The location of the file to be downloaded.
sFilename | Optional: The name of the file (optionally including path) which shall be created on the local disk. If no path is specified, the file is stored in the current project folder.
sTimer | Optional: The name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.
nFilesize | Optional: The size of the file.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    javaScript : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    // start download of a file from the demo.borland.com site
    BrowserFileDownload("http://demo.borland.com/TestSite/temp/SmallFile.exe", "SmallFile.exe",
      "FileDownload SmallFile.exe (#1)");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDlgDownload Function


BrowserFind Function

Action

Finds a DOM element using a given locator.

Include file

BrowserAPI.bdh

Syntax

BrowserFind( nHandle        : in number,
             sLocator       : in string,
             bStoreHandle   : in boolean optional,
             nTimeout       : in union optional,
             bSuppressError : in boolean optional ): number;
Parameter | Description
nHandle | The handle where the search should be started. Use HANDLE_DESKTOP to search the complete DOM hierarchy.
sLocator | An XPath expression that describes the DOM element.
bStoreHandle | Optional: The browser engine can internally store the found handle for later use. You can use HANDLE_STORED to refer to the internally stored element in other function calls. If not specified, the default value FALSE is used and the handle will not be stored.
nTimeout | Optional: The wait timeout in milliseconds. If not specified, the default timeout specified in the profile settings or set by BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT) will be used. When the timeout is reached, an error is thrown, unless bSuppressError is TRUE. Use the data type number for this parameter. The data type float is not allowed.
bSuppressError | Optional: If set to TRUE, suppresses throwing the error if no element can be found. Default is FALSE.

Return value

The handle to the DOM element. HANDLE_INVALID if the element could not be found.

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    liHandle : number;
    liText : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");

    // find the first list item (LI) tag on this page and store it into a variable (liHandle)
    liHandle := BrowserFind(HANDLE_DESKTOP, "//LI");
    // Alternative: find the first list item (LI) tag on this page and store it internally (HANDLE_STORED)
    BrowserFind(HANDLE_DESKTOP, "//LI", true);
    // get the text of the list item and print it
    BrowserGetText(liHandle, liText);
    print(liText);
    //Alternative: get the text of the list item and print it
    BrowserGetText(HANDLE_STORED, liText);
    print(liText);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetOption Function
BrowserStore Function


BrowserFindAll Function

Action

Finds all DOM elements for a given locator.

Include file

BrowserAPI.bdh

Syntax

BrowserFindAll( in nHandle          : number,
                in sLocatorToSearch : string,
                out lHandles        : list,
                in nTimeout         : union optional ): boolean;
Parameter | Description
nHandle | The handle where the search should be started. Use HANDLE_DESKTOP to search the complete DOM hierarchy.
sLocatorToSearch | An XPath expression that describes the DOM elements.
lHandles | A list of handles in which the matching DOM elements will be returned.
nTimeout | Optional: The wait timeout in milliseconds. If not specified, the default timeout specified in the profile settings or set by BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT) will be used. Use the data type number for this parameter. The data type float is not allowed.

Return value

  • true if one or more DOM elements were found for the given locator
  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    lList: list of number;
    nHandle: number;
    sText  : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");

    // Find all list item (LI) tags on this page.
    BrowserFindAll(HANDLE_DESKTOP, "//LI", lList);
    // Print the result list of matching DOM elements.
    ListPrint(lList);
    // Get text of first item in result list and print it.
    ListGetAt(lList, 1, nHandle);
    BrowserGetText(nHandle, sText);
    print(sText);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserFormSubmit Function

Action

Submits a DOM form.

Include file

BrowserAPI.bdh

Syntax

BrowserFormSubmit( uTestObject : in union,
                   sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | Either a locator that identifies the DOM form or a handle to a previously found DOM form. Throws an error if an invalid handle is used or if the locator can not be resolved.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/common_main.asp#Common Forms");
    BrowserSetText("//INPUT[@value='value1']", "John Smith");

    // submit the form by pressing <RETURN> in the solely input element of the form
    BrowserFormSubmit("//FORM[@method='get'][2]", "Submit, FORM, action=data2html.asp?Intermediate (#2)");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserForward Function

Action

Equivalent to clicking the Web browser Forward button.

Include file

BrowserAPI.bdh

Syntax

BrowserForward(): boolean;

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/");
    BrowserClick("//A[@textContents='Demo Application']");

    BrowserBack();  // go one step back in your browser's history
    BrowserForward(); // go one step forward in your browser's history
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserBack Function
BrowserReload Function


BrowserGetActiveWindow Function

Action

Returns the handle of the active browser window (tab).

Include file

BrowserAPI.bdh

Syntax

BrowserGetActiveWindow( sWindowName : string optional ): number;

Parameter | Description
sWindowName | Optional: This window name is used in TrueLogs and the Browser Application. Whenever the window handle returned by BrowserWaitForNewWindow is passed to another window function, such as BrowserActivateWindow or BrowserCloseWindow, this window name is used for textual identification of the window.

Return value

  • The value of the window handle.

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans

  transaction TMain
  var
    mainWindow : number;
    newWindow  : number;
    check      : number;
   begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/multiplewindows/multipleWindows.html");

    mainWindow := BrowserGetActiveWindow("main window");
    BrowserLinkSelect("//A[@name='window1']",  "Select, BODY (#1)");

    newWindow := BrowserWaitForNewWindow("new window");

    BrowserActivateWindow(mainWindow);
    check := BrowserGetActiveWindow();

    if (check <> mainWindow) then
      RepMessage("Window handles are different", SEVERITY_ERROR);
    end;
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserActivateWindow Function
BrowserCloseWindow Function


BrowserGetIEMode Function

Action

Returns the current IE mode, which is set in the registry for the browser-driven Web load testing feature.

Include file

BrowserAPI.bdh

Syntax

BrowserGetIEMode(): number;

Return value

Returns the value of the IE mode which is set in the registry:
  • 0: BROWSER_IE_DEFAULT
  • 7000: BROWSER_IE7_MODE
  • 8000: BROWSER_IE8_MODE
  • 8888: BROWSER_IE8_REGARDLESS_OF_DOCTYPE
  • 9000: BROWSER_IE9_MODE
  • 9999: BROWSER_IE9_REGARDLESS_OF_DOCTYPE
  • 10000: BROWSER_IE10_MODE
  • 10001: BROWSER_IE10_REGARDLESS_OF_DOCTYPE
  • 11000: BROWSER_IE11_MODE
  • 11001: BROWSER_IE11_REGARDLESS_OF_DOCTYPE

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    ieMode : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // retrieve the IE mode and store it into a variable (ieMode)
    ieMode:= BrowserGetIEMode();
    // print out the ieMode
    print(string(ieMode));
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetIEMode Function


BrowserGetOption Function

Action

Gets a BrowserEngine option.

Include file

BrowserAPI.bdh

Syntax

BrowserGetOption( sOption : in string,
                  vValue  : inout union ): boolean;
Parameter | Description
sOption The BrowserEngine option to be read. Can be one of the following values:

  • BROWSER_OPT_WAIT_TIMEOUT - A timeout in milliseconds. Silk Performer waits to resolve an element until it is found or the timeout is reached. The default timeout is 5000 ms.

  • BROWSER_OPT_SYNC_TIMEOUT - A timeout in milliseconds after which the synchronization aborts. Synchronization normally waits until the browser is in an idle state. If this state is not achieved, synchronization aborts after the defined timeout. The default timeout is 300000 ms.

  • BROWSER_OPT_SYNC_MODE - The synchronization mode:

    • SYNC_MODE_AJAX - The AJAX mode synchronization waits for the browser to be in a kind of idle state, which is especially useful for AJAX applications or pages that contain AJAX components. Using the AJAX mode eliminates the need to manually script synchronization functions, which eases the script creation process dramatically. This automatic synchronization is also the basis for a successful record and replay approach.
    • SYNC_MODE_HTML - Using the HTML mode ensures that all HTML documents are in an interactive state. With this mode, you can test simple Web pages.
vValue | A variable that takes the value.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    nWaitTimeout : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // get the wait timeout and print it
    BrowserGetOption(BROWSER_OPT_WAIT_TIMEOUT, nWaitTimeout);
    print(string(nWaitTimeout));
    // set the wait timeout to a new value
    BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT, 6000);
    // revert it back to the old setting
    BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT, nWaitTimeout);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserGetProperty Function

Action

Reads the value of the specified DOM element's property.

Include file

BrowserAPI.bdh

Syntax

BrowserGetProperty( uTestObject       : in union,
                    sDomPropertyName  : in string,
                    vDomPropertyValue : inout union ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sDomPropertyName | The DOM property name.
vDomPropertyValue | The value of the property.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    propertyValue : boolean;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwCheckBox");

    // check Monday
    BrowserSetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", "checked", true);
    // get the value of the checked property and print it
    BrowserGetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']","checked", propertyValue);
    print(string(propertyValue));

    // uncheck Monday
    BrowserSetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", "checked", false);
    // get the value of the checked property and print it
    BrowserGetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']","checked", propertyValue);
    print(string(propertyValue));
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetProperty Function
BrowserVerifyProperty Function


BrowserGetProxy

Action

Retrieves the current proxy host name and port number either for all protocols or for a specific protocol.
注: This function only works with Internet Explorer.

Include file

BrowserAPI

Syntax

BrowserGetProxy( out sProxy     : string,
                 in  nProxyType : number optional ): boolean;
Parameter | Description
sProxy | A string buffer that receives the proxies.
nProxyType Proxy type. Can be one of the following types:
  • BROWSER_PROXY_HTTP
  • BROWSER_PROXY_FTP
  • BROWSER_PROXY_HTTPS
  • BROWSER_PROXY_SOCKS

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
var
  sProxy: string;
begin
  BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
  BrowserSetProxy(BROWSER_PROXY_HTTP, "proxy.mydomain.com", 8080);
  BrowserNavigate("www.mycompany.com");
  BrowserGetProxy(sProxy, BROWSER_PROXY_HTTP);
end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProxyAutoConfigFile
BrowserGetProxyBypass
BrowserSetProxy
BrowserSetProxyAutoConfigFile
BrowserSetProxyBypass


BrowserGetProxyAutoConfigFile

Action

Retrieves the location of a PAC (Proxy Auto-Configuration) file.
注: This function only works with Internet Explorer.

Include file

BrowserAPI

Syntax

BrowserGetProxyAutoConfigFile( out sConfigUrl : string ): boolean;
Parameter | Description
sConfigUrl | A string buffer that receives the location of the PAC file.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
var
  sConfigUrl: string;
begin
  BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
  BrowserSetProxyAutoConfigFile("http://proxy.mydomain.com/proxy.pac");
  BrowserNavigate("www.mycompany.com");
  BrowserGetProxyAutoConfigFile(sConfigUrl);
end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProxy
BrowserGetProxyBypass
BrowserSetProxy
BrowserSetProxyAutoConfigFile
BrowserSetProxyBypass


BrowserGetProxyBypass

Action

Retrieves the names of hosts that are not to be accessed through a proxy.
注: This function only works with Internet Explorer.

Include file

BrowserAPI

Syntax

BrowserGetProxyBypass( out sBypassList : string ): boolean;
Parameter | Description
sBypassList | String variable that receives the list of hosts that have been set to not be accessed through a proxy.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
var
  sBypassList: string;
begin
  BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
  BrowserSetProxy(BROWSER_PROXY_HTTP, "proxy.mydomain.com", 8080);
  BrowserSetProxyBypass(false, "www.mycompany.com");
  BrowserNavigate("www.mycompany.com");
  BrowserGetProxyBypass(sBypassList);
end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProxy
BrowserGetProxyAutoConfigFile
BrowserSetProxy
BrowserSetProxyAutoConfigFile
BrowserSetProxyBypass


BrowserGetScrollPos Function

Action

Returns the current scrollbar position of the active window. In case there are no vertical or horizontal scrollbars, the values are set to zero.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserGetScrollPos( nTop  : out number,
                     nLeft : out number ): boolean;
Parameter | Description
nTop | The current vertical position of the scrollbar.
nLeft | The current horizontal position of the scrollbar.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    top  : number;
    left : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/htmlparser/forms.asp");

    // scroll one whole page down (e.g. 600 pixels)
    BrowserSetScrollPos(600,0,BROWSER_RELATIVE_SCROLLING);
    // get the actual scroll position
    BrowserGetScrollPos(top, left);
    // print top, left coordinates
    print(string(top));
    print(string(left));
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetScrollPos Function


BrowserGetStandardHost Function

Action

Gets the replacement name for the predefined host name "standardhost" set by the BrowserSetStandardHost function, or initially defined in the active profile settings (Settings > Active Profile > Internet > Hosts > Standardhost).

Include file

BrowserAPI.bdh

Syntax

BrowserGetStandardHost( sHost   : out string,
                        nMaxLen : in number optional,
                        nPort   : out number optional ): boolean;
Parameter | Description
sHost | String buffer receiving the current name of the standardhost.
nMaxLen | Optional: The maximum length of the receive buffer sHost.
nPort | Optional: Variable receiving the current port number of the standardhost.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    sHost : string;
    nPort : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // get the standard host name & port and print them
    BrowserGetStandardHost(sHost, STRING_COMPLETE, nPort);
    print("Standardhost: '"+sHost+"'");
    print("Port: '"+string(nPort)+"'");
    // set the standard host name to demo.borland.com and port to 80
    BrowserSetStandardHost("demo.borland.com",80);
    // Navigate to demo.borland.com on port 80
    BrowserNavigate("http://standardhost");
    // set the standard host name to www.google.com and port to 80
    BrowserSetStandardHost("www.google.com");
    // Navigate to www.google.com
    BrowserNavigate("http://standardhost");

    // revert to previous state
    BrowserSetStandardHost(sHost, nPort);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetStandardHost Function


BrowserGetText Function

Action

Retrieves the text of any DOM element, like list boxes, radio buttons, and so on.

Include file

BrowserAPI.bdh

Syntax

BrowserGetText( uTestObject : in union,
                sText       : out string ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle of the DOM element.
sText | The text output parameter.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    liHandle : number;
    liText : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");

    // find the first list item (LI) tag on this page and store it into a variable (liHandle)
    liHandle := BrowserFind(HANDLE_DESKTOP, "//LI");
    // Alternative: find the first list item (LI) tag on this page and store it internally (HANDLE_STORED)
    BrowserFind(HANDLE_DESKTOP, "//LI", true);
    // get the text of the list item and print it
    BrowserGetText(liHandle, liText);
    print(liText);
    //Alternative: Get the text of the list item and print it
    BrowserGetText(HANDLE_STORED, liText);
    print(liText);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserGetUrl Function

Action

Retrieves the current URL from the browser.

Include file

BrowserAPI.bdh

Syntax

BrowserGetUrl( sUrl : out string ): boolean;
Parameter | Description
sUrl | The URL output parameter.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    url : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/");

    // get the url of the current browser-window and print it
    BrowserGetUrl(url);
    print(url);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserHighlight Function

Action

This function can be used to highlight an object by changing its background and foreground color.

注: All valid HTML color-name formats are supported by this function (for example, both Red and #ff0000 are supported).

Include file

BrowserAPI.bdh

Syntax

BrowserHighlight( uTestObject : in union,
                  sForeground : in string,
                  sBackground : in string ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sForeground | The foreground color that should be used to highlight the object, for example Red or #ff0000.
sBackground | The background color that should be used to highlight the object, for example Red or #ff0000.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    liHandle : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");
    liHandle := BrowserFind(HANDLE_DESKTOP, "//LI");

    // highlight the first list item with a yellow background, wait 5 seconds and then undo the highlighting
    BrowserHighlight(liHandle, "black", "yellow");
    Wait(5.0);
    BrowserUnhighlight(liHandle);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserUnhighlight Function


BrowserIgnoreServerError Function

Action

Modifies the error severity of a specified server error for the subsequent browser-driven function call. This can be done for a specified amount of server errors or for all. Only errors causing Internet Explorer's web browser control to display an error page due to an error in navigation are handled.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserIgnoreServerError( in nStatusCode : number,
                          in nSeverity   : number optional := SEVERITY_SUCCESS,
                          in nCount      : number optional );

Return value

  • none

Parameter | Description
nStatusCode | Server status code to ignore or change the severity for (e.g. 404).
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: (Default) Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nCount | The specified error can occur nCount times before an error with the default severity is raised. If this parameter is omitted the specified severity is valid for all server responses

Example

benchmark SilkPerformerRecorder

use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain : 1;

dcltrans

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserIgnoreServerError(404, SEVERITY_WARNING, 1);
    BrowserNavigate("http://demo.borland.com")

  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserImportCertificate Function

Action

Imports the client certificate from a file into the certificate store of the operating system for later use by Internet Explorer. This function is similar to manually importing certificate files. Note that certificates are shared resources in the operating system. In other words, all Internet Explorer instances access the same certificate store.

The certificate APIs work with Microsoft Windows 7 or later, Microsoft Windows Server 2008 R2 or later, and Internet Explorer 8 or later.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserImportCertificate( sFilename        : in  string,
                          sPassword        : in  string,
                          sCertificatename : out string optional,
                          sCertstore       : in  string optional ): boolean;
Parameter | Description
sFilename | The file containing the certificate (PFX or P12).
sPassword | The password for decrypting the contents of the file.
sCertificatename | Optional: The name of the client certificate.
sCertstore | Optional: The certificate store name. When this parameter is not specified certificates are imported into the My store, available on the certificate tab's Personal tab.

Return Value

  • true if successful

  • false otherwise

Example

注: The following example does not work out-of-the-box, as you first need to set up a certificate in order to execute actions on it.
benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    sCertificate : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // import a certificate into the default certificate store
    BrowserImportCertificate("C:\Users\johns\Desktop\BDLT\johns.pfx","password", sCertificate);
    // select the newly imported certificate
    BrowserSetCertificate("John Smith");
    // navigate to the secure site
    BrowserNavigate("https://testsite/clientcert/servervar.asp");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDeleteCertificate Function
BrowserSetCertificate Function


BrowserLinkSelect Function

Action

Clicks a DOM link. A DOM link represents all DOM elements that were specified using the <A> tag.

注: This function performs the same action as BrowserClick.

Include file

BrowserAPI.bdh

Syntax

BrowserLinkSelect( uTestObject : in union,
                   sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the Link.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    wnd1   : number;
    wnd2   : number;
    check1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/multiplewindows/multipleWindows.html");
    wnd1 := BrowserGetActiveWindow("mainWindow");
    BrowserLinkSelect("//A[@name='window1']",  "Select, BODY (#1)");
    wnd2 := BrowserGetActiveWindow("first window");
    BrowserActivateWindow(wnd1);
    BrowserLinkSelect("//A[@name='window2']",  "Select, BODY (#1)");

    BrowserCloseWindow(wnd2); // close second window (tab)
    BrowserCloseWindow();     // close active window (tab)
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserClick Function


BrowserListBoxMultiSelect Function

Action

Selects multiple items in a DOM list box. A DomListBox represents all DOM elements that are specified using the <select> tag.

Include file

BrowserAPI.bdh

Syntax

BrowserListBoxMultiSelect( uTestObject      : in union,
                           sItemIdentifiers : in string,
                           sTimer           : in string optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the list box.
sItemIdentifiers | A comma-separated list of item identifiers. The items can be identified by their name or by their zero-based index. Names can also be combined with an index (for example, you could use blue[2] to identify the second item that has the value of blue).
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwListBox");

    // select the first three items
    BrowserListBoxMultiSelect("//SELECT[@multiple='-1']", "compact, sedan, coupe");
    // alternatively you can select items based on their zero-based index (select fourth and fifth item)
    BrowserListBoxMultiSelect("//SELECT[@multiple='-1']", "[3], [4]");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserListBoxSelect Function


BrowserListBoxSelect Function

Action

Selects an item in a DOM listbox. A DomListBox represents all DOM elements that are specified using the <select> tag.

Include file

BrowserAPI.bdh

Syntax

BrowserListBoxSelect( uTestObject : in union,
                      vItem       : in union,
                      sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the Listbox.
vItem | The identifier of the list item to select. Items can be identified by their name or by their zero-based index. Names can also be combined with an index (for example, you could use blue[2] to identify the second item that has the value of blue).
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwListBox");

    // select the first item in the listbox
    BrowserListBoxSelect("//SELECT[@multiple='-1']", "compact");
    // alternatively you can select items by their index (zero-based)
    BrowserListBoxSelect("//SELECT[@multiple='-1']", 1);    // select the second item
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserListBoxMultiSelect Function


BrowserMouseMove Function

Action

Sends a DOM mouse-move event to the specified DOM Element.

Include file

BrowserAPI.bdh

Syntax

BrowserMouseMove( uTestObject : in union,
                  sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    liHandle : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");
    liHandle := BrowserFind(HANDLE_DESKTOP, "//LI");

    // move the mouse to the first list item on the page
    BrowserMouseMove(liHandle);
    // Alternatively you can use the native function
    // which also allows you to specify a relative margin
    BrowserNativeMouseMove(liHandle, 5, 5);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserNativeMouseMove Function


BrowserNativeClick Function

Action

Clicks a DOM element with a specified position and mouse button. A left-button click executes the default actions of the clicked element type.

Include file

BrowserAPI.bdh

Syntax

BrowserNativeClick( uTestObject : in union,
                    nX          : in number optional,
                    nY          : in number optional,
                    nButton     : in number optional,
                    sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | Either a locator that identifies the DOM element or a handle to a previously found DOM element. Throws an error if an invalid handle is used or if the locator can not be resolved.
nX | Optional: X position relative to the top left corner of the DOM element. Defaults to the middle of the DOM element. If the middle of the DOM element cannot be clicked, which can be the case when another element is placed in front of it, a different position will be used. If no such position can be found, a legacy click function will be used instead.
nY | Optional: Y position relative to the top left corner of the DOM element. Defaults to the middle of the DOM element. If the middle of the DOM element cannot be clicked, which can be the case when another element is placed in front of it, a different position will be used. If no such position can be found, a legacy click function will be used instead.
nButton | Optional: BUTTON_LEFT to use the left mouse button (default), BUTTON_RIGHT to use the right mouse button. You can combine mouse buttons with modifier keys using an OR operator. Specify MODIFIER_SHIFT, MODIFIER_ALT, or MODIFIER_CTRL for the respective modifier key. For example: BUTTON LEFT | MODIFIER_CTRL
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwBasicButton");

    // store the button press action to perform when if the dialog with the given name pops up during replay
    BrowserDlgSetButton("Message from webpage #1", "OK");
    // click the button to make the dialog pop up
    BrowserNativeClick("//BUTTON[@textContents='Normal Button']", 5, 5, BUTTON_Left);
    // clear the dialog command storage
    BrowserDlgStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


BrowserNativeDoubleClick Function

Action

Double clicks a DOM element with a specified position and mouse button.

The BrowserNativeDoubleClick function uses Windows API level events to simulate the mouse events. Another difference to the BrowserDoubleClick function is that you can specify a mouse position relative to the top left corner of the DOM element which is specified by the uTestObject parameter.

Include file

BrowserAPI.bdh

Syntax

BrowserNativeDoubleClick( uTestObject : in union,
                          nX          : in number optional,
                          nY          : in number optional,
                          nButton     : in number optional,
                          sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | Either a locator that identifies the DOM element or a handle to a previously found DOM element. Throws an error if an invalid handle is used or if the locator cannot be resolved.
nX | Optional: X position relative to the top left corner of the DOM element. Defaults to the middle of the DOM element. If the middle of the DOM element cannot be clicked, which can be the case when another element is placed in front of it, a different position will be used. If no such position can be found, a legacy click function will be used instead.
nY | Optional: Y position relative to the top left corner of the DOM element. Defaults to the middle of the DOM element. If the middle of the DOM element cannot be clicked, which can be the case when another element is placed in front of it, a different position will be used. If no such position can be found, a legacy click function will be used instead.
nButton | Optional: BUTTON_LEFT to use the left mouse button (default), BUTTON_RIGHT to use the right mouse button. You can combine mouse buttons with modifier keys using an OR operator. Specify MODIFIER_SHIFT, MODIFIER_ALT, or MODIFIER_CTRL for the respective modifier key. For example: BUTTON LEFT | MODIFIER_CTRL
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    wnd1 : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 1230, 564);
    BrowserNavigate("http://demo.borland.com/InsuranceWebExtJS/", "Navigate to demo site (#1)");
    wnd1 := BrowserGetActiveWindow("wnd1");
    BrowserListBoxSelect("//SELECT[@id='quick-link:jump-menu']", "Agent Lookup",
      "ListBoxSelect, SELECT, name=quick-link:jump-menu (#1)");
    BrowserClick("//INPUT[@id='show-all:search-all']", BUTTON_Left, "Click, INPUT, name=show-all:search-all (#1)");
    BrowserNativeDoubleClick("//DIV[@textContents='Walker']", 10, 20, BUTTON_Left, "DoubleClick, DIV, textContents=Walker (#1)");
    BrowserClick("//DIV[@unselectable='on'][30]/DIV[@hideFocus='0']", BUTTON_Left);
    BrowserClick("//A[@textContents='Home'][2]", BUTTON_Left, "Click, A, textContents=Home (#1)");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


BrowserNativeMouseMove Function

Action

Sends a mouse-move event to the specified DOM element with a specified position.

The BrowserNativeMouseMove function uses the Windows API level events to simulate the mouse events instead of Java script events. Another difference to the BrowserMouseMove function is that you can specify a mouse position relative to the top left corner of the DOM element which is specified by the uTestObject parameter.

Include file

BrowserAPI.bdh

Syntax

BrowserNativeMouseMove( uTestObject : in union,
                        nX          : in number optional,
                        nY          : in number optional,
                        sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
nX | Optional: X position relative to the top left corner of the DOM element. Defaults to the middle of the DOM element.
nY | Optional: Y position relative to the top left corner of the DOM element. Defaults to the middle of the DOM element.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    liHandle : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");
    liHandle := BrowserFind(HANDLE_DESKTOP, "//LI");

    // move the mouse to the first list item on the page
    BrowserMouseMove(liHandle);
    // Alternatively you can use the native function
    // which also allows you to specify a relative margin
    BrowserNativeMouseMove(liHandle, 5, 5);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserMouseMove Function


BrowserNavigate Function

Action

Navigates to a specified URL.

Include file

BrowserAPI.bdh

Syntax

BrowserNavigate( sUrl   : in string,
                 sTimer : in string optional ): boolean;
Parameter | Description
sUrl | The destination URL.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DISPLAY_VISIBLE, 800, 600);
    BrowserNavigate("http://demo.borland.com/"); // navigate to demo.borland.com
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetStandardHost Function


BrowserPause Function

Action

This API call only works in Try Script mode with the Visible client option enabled for Internet Explorer (Browser Application). This function enables step-by-step mode so the execution of a Try Script run is paused before the next API call is executed.

Include file

BrowserAPI.bdh

Syntax

BrowserPause( );

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"
use "WebAPI.bdh"

dcluser
  user
    BDLTUser
  transactions
    TInit           : begin;
    TMain(BROWSER_MODE_DISPLAY_VISIBLE) : 1;

  var
    gDemoSite:string;

dclrand

dcltrans
  transaction TInit
  begin
    gDemoSite := "http://demo.borland.com/InsuranceWebExtJS/";
  end TInit;

  transaction TMain(mode:number)
  var
    sQuote,sExpected : string;
  begin
    BrowserStart(BROWSER_MODE_DISPLAY_VISIBLE | BROWSER_MODE_USERBEHAVIOR_FIRST_TIME);
    BrowserNavigate(gDemoSite, "Navigate to Demo Site");
    if BrowserFind(HANDLE_DESKTOP , "//LABEL[@textContents='John Smith']", false, 0, true) = HANDLE_INVALID then
      BrowserClick("//INPUT[@id='login-form:email']", BUTTON_Left);
      BrowserSetText("//INPUT[@id='login-form:email']", "john.smith@gmail.com");
      BrowserClick("//INPUT[@id='login-form:password']", BUTTON_Left);
      BrowserSetText("//INPUT[@id='login-form:password']", "john");
      BrowserButtonSelect("//INPUT[@id='login-form:login']", "BrowserButtonSelect (#1)");
    BrowserClick("//IMG[@hideFocus='0'][2]", BUTTON_Left, "BrowserClick (#3)");
     BrowserPause();
    BrowserClick("//DIV[@textContents='Chrysler']", BUTTON_Left, "BrowserClick (#4)");
    BrowserClick("//IMG[@hideFocus='0'][3]", BUTTON_Left, "BrowserClick (#5)");
    BrowserClick("//DIV[@textContents='Aspen']", BUTTON_Left);
    BrowserRadioButtonSelect("//INPUT[@id='autoquote:finInfo:0']");
    BrowserButtonSelect("//INPUT[@id='autoquote:next']", "BrowserButtonSelect (#4)");
    BrowserLinkSelect("//A[@textContents='Home']", "Select, A, textContents=Home (#1)");
    BrowserButtonSelect("//INPUT[@id='logout-form:logout']",
      "Select, INPUT, href=http://demo.borland.com/InsuranceWebExtJS/index.jsf (#1)");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserRadioButtonSelect Function

Action

This function applies to <INPUT TYPE="RADIO"> HTML elements. It selects the radio button identified by the locator or handle respectively.

Include file

BrowserAPI.bdh

Syntax

BrowserRadioButtonSelect( uTestObject : in union,
                          sTimer      : in string optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
   begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwRadioButton");

    // check the first radio button
    BrowserRadioButtonSelect("//INPUT[@name='color'][1]");
    // chek the fourth radio button
    BrowserRadioButtonSelect("//INPUT[@name='color'][4]");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserReload Function

Action

Equivalent to clicking the Web browser Reload button.

Include file

BrowserAPI.bdh

Syntax

BrowserReload( bBypassCache : in boolean ): boolean;
Parameter | Description
bBypassCache | If true, the cache is not used for reload and resources are reloaded even if they are cached.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    // start the browser in visible mode with a width of 800 and a height of 600 pixels
    BrowserStart(BROWSER_MODE_DISPLAY_VISIBLE, 800, 600);
    // navigate to demo.borland.com
    BrowserNavigate("http://demo.borland.com/");
    // reload the page
    BrowserReload(true);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserBack Function
BrowserForward Function


BrowserReplayCompatibility Function

Action

Sets the replay compatibility by defining how locators are generated. During recording, Silk Performer automatically scripts this function to avoid compatibility issues. You can also manually add this function to your script to ensure flawless replay of older scripts with newer versions of Silk Performer. The replay compatibility can also be set in the Profile settings. If this function is omitted or removed from the script, the value configured in the Profile settings will be used.

Include file

BrowserAPI.bdh

Syntax

BrowserReplayCompatibility( in sCompatibility : string ): boolean;
Parameter Description
sCompatibility The replay compatibility option. Can be one of the following values:
  • SP_19_0: for Silk Performer 19.0 and newer
  • SP_15_5: for Silk Performer from version 15.5 to version 18.5
  • SP_10_0: for Silk Performer from version 10.0 to version 15.0
  • SP_9_5: for Silk Performer 9.5

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain : 1;

dcltrans

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserReplayCompatibility(SP_19_0);
    BrowserNavigate("http://demo.borland.com ")

  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserReset Function

Action

Resets the browser state (cookies, cache and history).

注: BrowserStart also resets the browser state.

Include file

BrowserAPI.bdh

Syntax

BrowserReset( nMode : in number optional ): boolean;
Parameter Description
nMode Optional: Configures virtual user behaviour and browser visibility. The following constants may be used:
  • BROWSER_MODE_DEFAULT: Uses the profile settings.
  • BROWSER_MODE_DISPLAY_VISIBLE: Shows the browser window of each virtual user.
  • BROWSER_MODE_DISPLAY_INVISIBLE (default): Runs the browsers of the virtual users in hidden mode (does not apply for Try Script runs).
  • BROWSER_MODE_USERBEHAVIOR_DISABLE: Disables resetting the browser at end of transaction.
  • BROWSER_MODE_USERBEHAVIOR_FIRST_TIME: Clears virtual user browser state. Overrides the profile settings.
  • BROWSER_MODE_USERBEHAVIOR_REVISITING: Resets the non-persistent session, but does not delete the persistent cookies, cache, and history. Overrides the profile settings.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    sHost : string;
    nPort : number;
  begin
    BrowserStart(BROWSER_MODE_USERBEHAVIOR_REVISITING, 800, 600);

    // get the standard host name & port and print them
    BrowserGetStandardHost(sHost, STRING_COMPLETE, nPort);
    print("Standardhost: '"+sHost+"'");
    print("Port: '"+string(nPort)+"'");
    // set the standard host name to demo.borland.com and port to 80
    BrowserSetStandardHost("demo.borland.com",80);
    // navigate to demo.borland.com on port 80
    BrowserNavigate("http://standardhost");
    // set the standard host name to www.google.com and port to 80
    BrowserSetStandardHost("www.google.com");
    // reset the browser state
    BrowserReset(BROWSER_MODE_USERBEHAVIOR_FIRST_TIME);
    // navigate to www.google.com
    BrowserNavigate("http://standardhost");

    // revert to previous state
    BrowserSetStandardHost(sHost, nPort);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserStart Function
BrowserStop Function


BrowserSetAuthentication Function

Action

Sets username and password for a subsequent authentication attempt. Usually the username and password must be typed into an authentication dialog for authentication purposes. This function stores both strings temporarily so that they can be used for authentication with the following API call. The password string is never visible in the replay pane of the browser application nor shown by TrueLog Explorer.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserSetAuthentication( sUsername : in string,
                          sPassword : in string ): boolean;
Parameter | Description
sUsername | The username for a subsequent authentication attempt.
sPassword | The password for a subsequent authentication attempt.

Return value

  • true if successful

  • false otherwise

Example:

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // set the authentication for the secure site
    BrowserSetAuthentication("BasicAuthUser", "BasicAuthPass");
    // navigate to the secure site
    BrowserNavigate("http://demo.borland.com/TestSite/secure_sub1/secure_authrequ.asp?LOGON_USER=BasicAuthUser");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserSetBrowserType Function

Action

Sets the browser type to be used for the simulation. Make sure that BrowserSetBrowserType is executed before BrowserStart.
注: BrowserSetBrowserType also overrules the browser defined in the Try Script dialog.

Include file

BrowserAPI.bdh

Syntax

BrowserSetBrowserType( in nBrowserType : number): boolean;
Parameter Description
nBrowserType The following constants can be used:
  • BROWSER_BROWSERTYPE_EMBEDDED_IE: Replays using Internet Explorer.
  • BROWSER_BROWSERTYPE_FIREFOX: Replays using the installed Mozilla Firefox browser.
  • BROWSER_BROWSERTYPE_CHROME: Replays using the installed Google Chrome browser.

Return value

  • true if successful
  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserSetBrowserType(BROWSER_BROWSERTYPE_CHROME);
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserSetCertificate Function

Action

Sets a client certificate of a given name for authentication and encryption purposes. Usually the certificate to be used must be selected via a selection dialog box. This function stores the certificate temporarily in the Silk Performer runtime so that it can be used by the following API call without user interaction.

The certificate APIs work with Microsoft Windows 7 or later, Microsoft Windows Server 2008 R2 or later, and Internet Explorer 8 or later.

注: Review the following Microsoft support article for more details: http://support.microsoft.com/KB/308087. In particular, note that the Internet Explorer option Check for server certificate revocation must be disabled.
注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserSetCertificate( sCertificatename : in string,
                       sCertstore       : in string optional ): boolean;
Parameter | Description
sCertificatename | The certificate to be used.
sCertstore | Optional: The certificate store name. When this parameter is not specified certificates are loaded from the My store, available on the certificate tab's Personal tab.

Return Value

  • true if successful

  • false otherwise

Example

注: The following example does not work out-of-the-box, as you first need to set up a certificate in order to execute actions on it.
benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // set the authentication for the secure site
    BrowserSetCertificate("John Smith");
    // navigate to the secure site
    BrowserNavigate("https://testsite/clientcert/servervar.asp");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDeleteCertificate Function
BrowserImportCertificate Function


BrowserSetDomainSuppress Function

Action

Suppresses content in a Web page which is hosted on another domain, for example popup ads or traffic to social networking sites. Connections to the suppressed domains will not be established so that the requests are not performed. Whenever a connection is suppressed, an informational line is scripted to the VU output pane. To reset the list of suppressed domains call BrowserSetDomainSuppress with an empty string as parameter value.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserSetDomainSuppress( in sDomains : string,
                          in bExclude : boolean optional );
Parameter | Description
sDomains | List of domains to be suppressed. Substrings of domains are also suppressed (for example, "us.com" will also suppress "microfocus.com"). Specify an empty string to lift the restrictions. Allowed separators are blank spaces, commas, and semicolons.
bExclude | Optional: If true, all domains except the domains in sDomains will be suppressed. Default is false.

Example

dcltrans
  transaction TMain
  begin
    BrowserSetDomainSuppress("addthis.com");
    BrowserNavigate("www.mycompany.com");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserSetIEMode Function

Action

Sets the IE compatibility mode for the browser-driven Web load testing feature. This API call has to be called before the BrowserStart function when browser applications are starting. Because this is a global setting, all running instances are affected when started depending on the current value.
注: This function only works if Compatibility View is disabled in Internet Explorer. To disable Compatibility View in Internet Explorer 9, choose Tools > Compatibility View settings and uncheck the Display intranet sites in Compatibility View check box.

Include file

BrowserAPI.bdh

Syntax

BrowserSetIEMode( nMode : in number ): boolean;
Parameter Description
nMode The IE mode used for the browser-driven Web load testing feature. The following values may be used:
  • BROWSER_IE_DEFAULT := 0;
  • BROWSER_IE7_MODE := 7000;
  • BROWSER_IE8_MODE := 8000;
  • BROWSER_IE8_REGARDLESS_OF_DOCTYPE := 8888;
  • BROWSER_IE9_MODE := 9000;
  • BROWSER_IE9_REGARDLESS_OF_DOCTYPE := 9999;
  • BROWSER_IE10_MODE := 10000;
  • BROWSER_IE10_REGARDLESS_OF_DOCTYPE := 10001;
  • BROWSER_IE11_MODE := 11000;
  • BROWSER_IE11_REGARDLESS_OF_DOCTYPE := 11001;

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    ieMode : number;
  begin
    BrowserSetIEMode(BROWSER_IE7_MODE);
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // retrieve the IE mode and store it into a variable (ieMode)
    ieMode:= BrowserGetIEMode();
    // print out the ieMode
    print(string(ieMode));
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ブラウザ駆動型負荷テストの概要
関連資料
BrowserGetIEMode Function


BrowserSetOption Function

Action

Sets a BrowserEngine option.

Include file

BrowserAPI.bdh

Syntax

BrowserSetOption( sOption : in string,
                  vValue  : in union ): boolean;
Parameter | Description
sOption The BrowserEngine option. Can be one of the following values:
  • BROWSER_OPT_WAIT_TIMEOUT: Defines a timeout in milliseconds. Silk Performer waits to resolve an element until it is found or the timeout is reached. The default timeout is 5000 ms.
  • BROWSER_OPT_SYNC_TIMEOUT: Defines a timeout in milliseconds after which the synchronization aborts. Synchronization normally waits until the browser is in an idle state. If this state is not achieved, synchronization aborts after the defined timeout. The default timeout is 300000 ms.
  • BROWSER_OPT_SYNC_MODE: Defines the synchronization mode:
    • SYNC_MODE_AJAX: The AJAX mode synchronization waits for the browser to be in a kind of idle state, which is especially useful for AJAX applications or pages that contain AJAX components. Using the AJAX mode eliminates the need to manually script synchronization functions, which eases the script creation process dramatically. This automatic synchronization is also the basis for a successful record and replay approach.
    • SYNC_MODE_HTML: Using the HTML mode ensures that all HTML documents are in an interactive state. With this mode, you can test simple Web pages.
  • BROWSER_OPT_FILEDOWNLOAD_SAVEFILE: Defines if downloaded files, triggered by BrowserDlgDownload, should be saved from the Internet Explorer cache to the results directory:
    • FILEDOWNLOAD_SAVEFILE_SAVENONE: Files are not copied from the cache to the results directory.
    • FILEDOWNLOAD_SAVEFILE_SAVELAST: Files are copied from the cache to the results directory. If a version of the file already exists it gets replaced, so only the last downloaded file is saved in the results directory.
    • FILEDOWNLOAD_SAVEFILE_SAVEALL: All downloaded files are copied from the cache to the results directory. A timestamp is added to the filename so that all filenames are unique.
    If the BROWSER_OPT_FILEDOWNLOAD_SAVEFILE option is not specified, all downloaded files are copied from the browser cache to the results directory for Try Script runs, and for load test runs and find baseline runs no files are copied to the results directory. It is recommended not to copy any files to the results directory for load test runs, as this could result in huge amounts of data being saved on the local disk, and this data will also need to be copied from the agent machines to the controller.
  • BROWSER_OPT_FILEDOWNLOAD_BEGIN_TIMEOUT: Defines a timeout in milliseconds. The BrowserDlgStop call waits for a download to begin until this timeout is reached before returning an error. If this value is not specified, the default value of 20 seconds is applied.
  • BROWSER_OPT_LEGACY_INPUT_MODE: Set this parameter to true to turn off the automatic native replay. This state is also referred to as the legacy input mode. The legacy input mode is turned on by default for all project profiles created using Silk Performer 9.0 or earlier.
vValue | The new value for the selected option. See sOption description for details.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    nWaitTimeout : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // get the wait timeout and print it
    BrowserGetOption(BROWSER_OPT_WAIT_TIMEOUT, nWaitTimeout);
    print(string(nWaitTimeout));
    // set the wait timeout to a new value
    BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT, 6000);
    // revert it back to the old setting
    BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT, nWaitTimeout);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserDlgDownload Function
BrowserDlgStop Function
BrowserDlgDownloadCancel Function


BrowserSetPassword Function

Action

Sets the password of a text field or text area element. This function is equivalent to the BrowserSetText function except that the password string is never visible in the replay pane of the browser application or shown by TrueLog Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserSetPassword( uTestObject           : in union,
                    sPassword             : in string,
                    bForceLegacyInputMode : in boolean optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sPassword | The password to be set.
bForceLegacyInputMode | Optional: Replays the BrowserSetPassword function in legacy input mode even if Legacy input mode is disabled or BrowserSetOption(BROWSER_OPT_LEGACY_INPUT_MODE, true) is scripted (JavaScript events instead of Windows API-level events). Default is FALSE.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // navigate to the login site
    BrowserNavigate("http://demo.borland.com/TestSite/LoginForm.html");
    // set the authentication for the secure site
    BrowserSetText("//INPUT[@name='user']", "BasicAuthUser");
    BrowserSetPassword("//INPUT[@name='pwd']", Decrypt3DES("Ax7/X9sk1kIfHlbAZ434Pq4="));
    // submit the form
    BrowserClick("//INPUT[@value='Submit Query']", BUTTON_Left);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserTypeKeys Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


BrowserSetProperty Function

Action

Changes the property values of the respective DOM element.

Include file

BrowserAPI.bdh

Syntax

BrowserSetProperty( uTestObject       : in union,
                    sDomPropertyName  : in string,
                    vDomPropertyValue : in union ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sDomPropertyName | The DOM property name.
vDomPropertyValue | The value of the property.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    propertyValue : boolean;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwCheckBox");

    // check Monday
    BrowserSetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", "checked", true);
    // get the value of the checked property and print it
    BrowserGetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']","checked", propertyValue);
    print(string(propertyValue));

    // uncheck Monday
    BrowserSetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", "checked", false);
    // get the value of the checked property and print it
    BrowserGetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']","checked", propertyValue);
    print(string(propertyValue));
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProperty Function
BrowserVerifyProperty Function


BrowserSetProxy

Action

Sets the proxy host name and port for a specific protocol.
注: This function only works with Internet Explorer.

Include file

BrowserAPI

Syntax

BrowserSetProxy( in nProxyType : number,
                 in sHost      : string,
                 in nPort      : number ): boolean;
Parameter | Description
nProxyType Proxy type. Can be one of the following types:
  • BROWSER_PROXY_HTTP
  • BROWSER_PROXY_FTP
  • BROWSER_PROXY_HTTPS
  • BROWSER_PROXY_SOCKS
sHost | Host name of the proxy server. Specify an empty string ("") to establish a direct connection for the specific protocol.
nPort | Port that the proxy server listens to.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
begin
  BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
  BrowserSetProxy(BROWSER_PROXY_HTTP, "proxy.mydomain.com", 8080);
  BrowserNavigate("www.mycompany.com");
end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProxy
BrowserGetProxyAutoConfigFile
BrowserGetProxyBypass
BrowserSetProxyAutoConfigFile
BrowserSetProxyBypass


BrowserSetProxyAutoConfigFile

Action

Specifies the location of a PAC (Proxy Auto-Configuration) file.
注: This function only works with Internet Explorer.

Include file

BrowserAPI

Syntax

BrowserSetProxyAutoConfigFile( in sConfigUrl : string ): boolean;
Parameter | Description
sConfigUrl | Specifies the location of the PAC file. This may be a Web URL like http://localhost:81/proxy.pac or it may be a file location like file://K:/temp/proxy.pac. Specify an empty string ("") to reset this setting.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
begin
  BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
  BrowserSetProxyAutoConfigFile("http://proxy.mydomain.com/proxy.pac");
  BrowserNavigate("www.mycompany.com");
end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProxy
BrowserGetProxyAutoConfigFile
BrowserGetProxyBypass
BrowserSetProxy
BrowserSetProxyBypass


BrowserSetProxyBypass

Action

Sets the names of hosts that are not be accessed through a proxy.
注: This function only works with Internet Explorer.

Include file

BrowserAPI

Syntax

BrowserSetProxyBypass( in bBypassLocal : boolean,
                       in sBypassList  : string optional ): boolean;
Parameter | Description
bBypassLocal | If this parameter is set to true, the browser-driven functions bypass proxies to hosts that do not contain a period in their names.
sBypassList | Optional: List of host names or IP addresses, or both, that should not be routed through the proxy. The host names are separated by semicolons (;). The list can contain wildcards. Specify an empty string ("") to clear the list.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
begin
  BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
  BrowserSetProxy(BROWSER_PROXY_HTTP, "proxy.mydomain.com", 8080);
  BrowserSetProxyBypass(false, "www.mycompany.com");
  BrowserNavigate("www.mycompany.com");
end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProxy
BrowserGetProxyAutoConfigFile
BrowserGetProxyBypass
BrowserSetProxy
BrowserSetProxyAutoConfigFile


BrowserSetReplayBehavior Function (deprecated)

Action

This function has been deprecated. If you use it in a script, the function BrowserReplayCompatibility will be called instead.

親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserReplayCompatibility Function


BrowserSetScrollPos Function

Action

Scrolls to the specified position inside the active window. In case there are no vertical or horizontal scrollbars, no scrolling will be done. When using the value BROWSER_NO_SCROLL the parameter is ignored.

注: This function only works with Internet Explorer.

Include file

BrowserAPI.bdh

Syntax

BrowserSetScrollPos( nTop               : in number,
                     nLeft              : in number,
                     nRelativeScrolling : in number optional ): boolean;
Parameter | Description
nTop | The vertical position of the scrollbar. If nRelativeScrolling is set to BROWSER_RELATIVE_SCROLLING this is the offset that is added. Set this parameter to BROWSER_NO_SCROLL if you only want to scroll horizontally.
nLeft | The horizontal position of the scrollbar. If nRelativeScrolling is set to BROWSER_RELATIVE_SCROLLING this is the offset that is added. Set this parameter to BROWSER_NO_SCROLL if you only want to scroll vertically.
nRelativeScrolling | Optional: If this value is set to BROWSER_RELATIVE_SCROLLING, the values of nTop and nLeft are interpreted as offsets.

Return value

  • true if successful
  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    top  : number;
    left : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/htmlparser/forms.asp");

    // scroll one whole page down (e.g. 600 pixels)
    BrowserSetScrollPos(600,0,BROWSER_RELATIVE_SCROLLING);
    // get the actual scroll position
    BrowserGetScrollPos(top, left);
    // print top, left coordinates
    print(string(top));
    print(string(left));
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetScrollPos Function


BrowserSetStandardHost Function

Action

Sets the replacement name for the predefined host name "standardhost". This replacement is only used for the BrowserNavigate function and is not used for Web functions. If not specified, the default setting is taken from the active profile settings (Settings > Active Profile > Internet > Hosts > Standardhost).

Include file

BrowserAPI.bdh

Syntax

BrowserSetStandardHost( sHost : in string,
                        nPort : in number optional ): boolean;
Parameter | Description
sHost | Replacement name for the predefined host name "standardhost".
nPort | Optional: Port number appended to the replacement name.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    sHost : string;
    nPort : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // get the standard host name & port and print them
    BrowserGetStandardHost(sHost, STRING_COMPLETE, nPort);
    print("Standardhost: '"+sHost+"'");
    print("Port: '"+string(nPort)+"'");
    // set the standard host name to demo.borland.com and port to 80
    BrowserSetStandardHost("demo.borland.com",80);
    // Navigate to demo.borland.com on port 80
    BrowserNavigate("http://standardhost");
    // set the standard host name to www.google.com and port to 80
    BrowserSetStandardHost("www.google.com");
    // Navigate to www.google.com
    BrowserNavigate("http://standardhost");

    // revert to previous state
    BrowserSetStandardHost(sHost, nPort);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetStandardHost Function
BrowserNavigate Function


BrowserSetText Function

Action

This function can be used to set the text of a text field or text area element. The BrowserSetText function applies to the HTML elements <input type='text'> and <textarea>.

Include file

BrowserAPI.bdh

Syntax

BrowserSetText( uTestObject           : in union,
                sText                 : in string
                bForceLegacyInputMode : in boolean optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sText | The text to be set.
bForceLegacyInputMode | Optional: Replays the BrowserSetText function in legacy input mode even if Legacy input mode is disabled or BrowserSetOption(BROWSER_OPT_LEGACY_INPUT_MODE, true) is scripted (JavaScript events instead of Windows API-level events). Default is FALSE.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // navigate to the login site
    BrowserNavigate("http://demo.borland.com/TestSite/LoginForm.html");
    // set the authentication for the secure site
    BrowserSetText("//INPUT[@name='user']", "BasicAuthUser");
    BrowserSetPassword("//INPUT[@name='pwd']", Decrypt3DES("Ax7/X9sk1kIfHlbAZ434Pq4="));
    // submit the form
    BrowserClick("//INPUT[@value='Submit Query']", BUTTON_Left);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserTypeKeys Function
BrowserSetPassword Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


BrowserScreenshot Function

Action

Takes a screenshot during replay and stores it in the TrueLog.

Include file

BrowserAPI.bdh

Syntax

BrowserScreenshot();

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain : 1;

dcltrans

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    if not BrowserNavigate("http://demo.borland.com/invalidtarget.html") then
      BrowserScreenshot();
    end;

  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserStart Function

Action

BrowserStart is used to start the browser and also to manage virtual user behavior. There are two types of VUsers: Revisiting users and first time users. For first time users, the browser state (cookies, cache, and history) is cleared on each call to BrowserStart. Revisiting users reuse persistent session information.

注: BrowserReset also resets the browser state.

Include file

BrowserAPI.bdh

Syntax

BrowserStart( nMode : in number optional,
              nHRes : in number optional,
              nVRes : in number optional,
              nXPos : in union optional,
              nYPos : in union optional ): boolean;
Parameter | Description
nMode Optional: Configures virtual user behavior and browser visibility. The following constants may be used:
  • BROWSER_MODE_DEFAULT: Uses the profile settings.
  • BROWSER_MODE_DISPLAY_VISIBLE: Shows the browser window of each virtual user.
  • BROWSER_MODE_DISPLAY_INVISIBLE (default): Runs the browsers of the virtual users in hidden mode (does not apply for Try Script runs).
  • BROWSER_MODE_USERBEHAVIOR_DISABLE: Disables resetting the browser at end of transaction.
  • BROWSER_MODE_USERBEHAVIOR_FIRST_TIME: Clears virtual user browser state. Overrides the profile settings.
  • BROWSER_MODE_USERBEHAVIOR_REVISITING: Resets the non-persistent session, but does not delete the persistent cookies, cache, and history. Overrides the profile settings.
nHRes | Optional: The width of the browser window. If this parameter is not specified, the system defaults are used.
nVRes | Optional: The height of the browser window. If this parameter is not specified, the system defaults are used.
nXPos | Optional: The X-position of the browser on the screen. If this parameter is not specified, the system defaults are used.
nYPos | Optional: The Y-position of the browser on the screen. If this parameter is not specified, the system defaults are used.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    options : number;
   begin
    // you can set multiple mode options by logically disjunctioning them.
    options := BROWSER_MODE_DISPLAY_VISIBLE | BROWSER_MODE_USERBEHAVIOR_FIRST_TIME;

    // start the browser with given options and a width of 480 and a height of 320 pixels
    BrowserStart(options, 480, 320);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserReset Function
BrowserStop Function


BrowserStop Function

Action

This function is used to close the browser of a virtual user.

注: If you only want to restart the browser, consider using BrowserReset or BrowserStart.

Include file

BrowserAPI.bdh

Syntax

BrowserStop(): boolean;

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwCheckBox");

    // check Monday
    BrowserCheckBoxSelect("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", CHECKBOX_CHECKED);
    // uncheck Monday
    BrowserCheckBoxSelect("//SPAN[@hideFocus='0'][1]/INPUT[@hideFocus='0']", CHECKBOX_UNCHECKED);
    // check Tuesday
    BrowserCheckBoxSelect("//SPAN[@hideFocus='0'][2]/INPUT[@hideFocus='0']", CHECKBOX_CHECKED);

    BrowserStop();
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserReset Function
BrowserStart Function


BrowserStore Function

Action

This function can be used to store a handle for reuse. A handle can be obtained by the BrowserFind function. The HANDLE_STORED constant refers to the last handle stored. Alternatively, you can store the handle by passing true to the BrowserFind function for the store parameter.

Include file

BrowserAPI.bdh

Syntax

BrowserStore( nHandle : in number );
Parameter | Description
nHandle | The handle that should be stored.

Return value

  • none

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    liHandle : number;
    liText : string;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");

    // find the first list item (LI) tag on this page and store it into a variable (liHandle)
    liHandle := BrowserFind(HANDLE_DESKTOP, "//LI");
    // store the handle into the internal handle variable (HANDLE_STORED)
    BrowserStore(liHandle);
    // get the text of the list item and print it
    BrowserGetText(liHandle, liText);
    print(liText);
    //get the text of item represented by the internally stored handle and print it
    BrowserGetText(HANDLE_STORED, liText);
    print(liText);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserFind Function


BrowserTtiIncludeElement Function

Action

Marks an element as relevant for measuring the Time to Interact. A subsequent API call such as BrowserNavigate or BrowserClick starts the actual measurement. You can define any number of TTI elements. The browser waits until all specified TTI elements are found. The slowest element determines the Time to Interact; this value is stored in the results. Furthermore, if TrueLog creation is enabled, additional information about each TTI element is presented in the Truelog file.

Include file

BrowserAPI.bdh

Syntax

BrowserTtiIncludeElement( uTestObject : in union );

Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.

Return value

  • none

Example

benchmark SilkPerformerRecorder

use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans
  // When navigating to the test site (see 'BrowserNavigate' function below), a download link is created after a few seconds.
  // We can interact with the page only after this download link has appeared.
  // Therefore we define this download link as a TTI element.
  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserReplayCompatibility(SP_15_5);

    // Mark the download link as TTI element:
    BrowserTtiIncludeElement("//a[@textContents='DOWNLOAD PDF NOW']");
    // Navigate with TTI measurement enabled.
    // The following call will be blocked until the download link appears.
    BrowserNavigate("http://demo.borland.com/testsite/download_appear.html", "Measure_Time_To_Interact");

    // Navigate without TTI measurement.
    // This navigation will finish almost immediately.
    BrowserNavigate("http://demo.borland.com/testsite/download_appear.html", "Measure_Navigation");
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連概念
操作開始時間
関連タスク
TTI に要素を含める


BrowserTypeKeys Function

Action

This function replays keystrokes as if they were entered directly using the keyboard.

BrowserTypeKeys is synchronized as a whole. If you want to synchronize single keystrokes, you have to use single function calls per keystroke.

The BrowserTypeKeys function uses the Windows API level events to simulate the keystrokes instead of Java script events.

To simulate a modifier key (like SHIFT, CTRL or ALT) pressed and held down while pressing another key, use the following syntax: BrowserTypeKeys("//INPUT[@id='gwt-debug-cwBasicText-textbox']","<LEFT_CTRL+a>"). This will simulate a pressed and held down CTRL key and a pressed a key.

Include file

BrowserAPI.bdh

Syntax

BrowserTypeKeys( uTestObject : in union,
                 sKeyChain   : in string,
                 sTimer      : in string optional,
                 uDelay      : in number optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sKeyChain | The key strokes to be issued. For all characters that have a visual representation, that representation can be used to issue the keystrokes. All other keys are referred to as named keys. Named keys can be replayed by using the name of the key within <> as in the example below.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.
uDelay | Optional: Delay (in milliseconds) between the separate key strokes. If omitted, there is no delay.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwBasicText");

    // set the text to 'Hello!'
    BrowserTypeKeys("//INPUT[@id='gwt-debug-cwBasicText-textbox']", "Hello!!<BACKSPACE><ENTER>");
  end TMain;
  • Named Keys
    Lists the named keys that can be recorded and scripted using the BrowserTypeKeys function.
親トピック: Browser-Driven Web Load Testing Functions
関連概念
ネイティブ再生
関連資料
BrowserClick Function
BrowserNativeClick Function
BrowserDoubleClick Function
BrowserNativeDoubleClick Function
BrowserSetText Function
BrowserSetPassword Function
BrowserMouseMove Function
BrowserNativeMouseMove Function


Named Keys

This table lists the named keys that can be recorded and scripted using the BrowserTypeKeys function. In the table below, each named key is associated with a virtual key code:

Named Key | Key Code | Named Key | Key Code
ACCEPT | 0x1E | NEXT_TRACK | 0xB0
APPLICATION_KEY | 0x5D | NONCONVERT | 0x1D
ATTN | 0xF6 | NUMLOCK | 0x90
BACKSPACE | 0x08 | NUMPAD_0 | 0x60
BROWSER_BACK | 0xA6 | NUMPAD_1 | 0x61
BROWSER_FAVORITES | 0xAB | NUMPAD_2 | 0x62
BROWSER_FORWARD | 0xA7 | NUMPAD_3 | 0x63
BROWSER_HOME | 0xAC | NUMPAD_4 | 0x64
BROWSER_REFRESH | 0xA8 | NUMPAD_5 | 0x65
BROWSER_SEARCH | 0xAA | NUMPAD_6 | 0x66
BROWSER_STOP | 0xA9 | NUMPAD_7 | 0x67
CAPSLOCK | 0x14 | NUMPAD_8 | 0x68
CLEAR | 0x0C | NUMPAD_9 | 0x69
CONVERT | 0x1C | NUMPAD_ADD | 0x6B
CR_SEL | 0xF7 | NUMPAD_DECIMAL | 0x6E
DELETE | 0x2E | NUMPAD_DELETE | 0x2E
DOWN | 0x28 | NUMPAD_DIVIDE | 0x6F
END | 0x23 | NUMPAD_DOWN | 0x28
ENTER | 0x0D | NUMPAD_END | 0x23
ER_EOF | 0xF9 | NUMPAD_ENTER | 0x0D
ESC | 0x1B | NUMPAD_HOME | 0x24
EX_SEL | 0xF8 | NUMPAD_INSERT | 0x2D
EXECUTE | 0x2B | NUMPAD_LEFT | 0x25
F1 | 0x70 | NUMPAD_PAGE_DOWN | 0x22
F10 | 0x79 | NUMPAD_PAGE_UP | 0x21
F11 | 0x7A | NUMPAD_RIGHT | 0x27
F12 | 0x7B | NUMPAD_SUBTRACT | 0x6D
F13 | 0x7C | NUMPAD_TIMES | 0x6A
F14 | 0x7D | NUMPAD_UP | 0x26
F15 | 0x7E | PA1 | 0xFD
F16 | 0x7F | PAGE_DOWN | 0x22
F17 | 0x80 | PAGE_UP | 0x21
F18 | 0x81 | PAUSE | 0x13
F19 | 0x82 | PLAY | 0xFA
F2 | 0x71 | PLAY_PAUSE_MEDIA | 0xB3
F20 | 0x83 | PREVIOUS_TRACK | 0xB1
F21 | 0x84 | PRINT | 0x2A
F22 | 0x85 | PRINT_SCREEN | 0x2C
F23 | 0x86 | PROCESS | 0xE5
F24 | 0x87 | RIGHT | 0x27
F3 | 0x72 | RIGHT_ALT | 0xA5
F4 | 0x73 | RIGHT_CTRL | 0xA3
F5 | 0x74 | RIGHT_SHIFT | 0xA1
F6 | 0x75 | RIGHT_WIN_KEY | 0x5C
F7 | 0x76 | SCROLL_LOCK | 0x91
F8 | 0x77 | SELECT | 0x29
F9 | 0x78 | SELECT_MEDIA | 0xB5
FINAL | 0x18 | SEPARATOR | 0x6C
HANJA | 0x19 | SLEEP | 0x5F
HELP | 0x2F | START_APPLICATION1 | 0xB6
HOME | 0x24 | START_APPLICATION2 | 0xB7
INSERT | 0x2D | START_MAIL | 0xB4
JUNJA | 0x17 | STOP_MEDIA | 0xB2
KANA | 0x15 | TAB | 0x09
LEFT | 0x25 | UP | 0x26
LEFT_ALT | 0xA4 | VOLUME_DOWN | 0xAE
LEFT_CTRL | 0xA2 | VOLUME_MUTE | 0xAD
LEFT_SHIFT | 0xA0 | VOLUME_UP | 0xAF
LEFT_WIN_KEY | 0x5B | ZOOM | 0xFB
MODE_CHANGE | 0x1F |  |
親トピック: BrowserTypeKeys Function


BrowserUnhighlight Function

Action

This function is the counterpart to the BrowserHighlight function. When a DOM element has been highlighted by calling the BrowserHighlight function it can be unhighlighted by calling the BrowserUnhighlight function.

Include file

BrowserAPI.bdh

Syntax

BrowserUnhighlight( uTestObject : in union ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    liHandle : number;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com");
    liHandle := BrowserFind(HANDLE_DESKTOP, "//LI");

    // highlight the first list item with a yellow background, wait 5 seconds and then undo the highlighting
    BrowserHighlight(liHandle, "black", "yellow");
    Wait(5.0);
    BrowserUnhighlight(liHandle);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserHighlight Function


BrowserVerifyProperty Function

Action

This function verifies that a property of a DOM element has a specified value. The logic of this function works as follows:

  1. Locates the object referred to in the locator string. If the object cannot be found, processing ends and an error with SEVERITY_ERROR is raised, regardless of the defined severity.
  2. Gets the list of properties for the object.
  3. Verifies that property x has value y.
  4. If the verification fails, an error with the defined severity is raised.
注: Do not attempt to verify an attribute that is contained in the locator string.

Include file

BrowserAPI.bdh

Syntax

BrowserVerifyProperty( uTestObject       : in union,
                       sDomPropertyName  : in string,
                       vDomPropertyValue : in union,
                       nOptions          : in number optional,
                       nSeverity         : in number optional := SEVERITY_ERROR ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sDomPropertyName | The name of the property of the DOM element.
vDomPropertyValue | The value of the property to be verified.
nOptions Optional: Flagmask to configure the verification. Can be one of the following values:
  • Default: VERIFY_EQUAL
  • VERIFY_NOT_EQUAL
  • VERIFY_STARTS_WITH
  • VERIFY_ENDS_WITH
  • VERIFY_CONTAINS
  • VERIFY_CASE_SENSITIVE (available additionally to the above options)
  • VERIFY_IGNORE_WHITESPACE (available additionally to the above options)
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  var
    propertyValue : boolean;
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwCheckBox");
    // check Monday
    BrowserCheckBoxSelect("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", CHECKBOX_CHECKED);
    // get the value of the checked property and print it
    BrowserGetProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", "checked", propertyValue);
    print(string(propertyValue));

    //verify that the property value is true
    BrowserVerifyProperty("//SPAN[@hideFocus='0']/INPUT[@hideFocus='0']", "checked",
      true, VERIFY_EQUAL | VERIFY_CASE_SENSITIVE, SEVERITY_INFORMATIONAL);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserGetProperty Function
BrowserSetProperty Function


BrowserVerifyText Function

Action

Verifies that a DOM element has a specified caption. The logic of this function works as follows:

  1. Locates the object referred to in the locator string. If the object cannot be found, processing ends and an error with SEVERITY_ERROR is raised, regardless of the defined severity.
  2. Gets the value of the property textContents.
  3. Verifies that the value of property textContents has the specified value.
  4. If the verification fails, an error with the defined severity is raised.
注: Do not call BrowserVerifyText() with a locator that contains the property textContents.

Include file

BrowserAPI.bdh

Syntax

BrowserVerifyText( uTestObject : in union,
                   sText       : in string,
                   nOptions    : in number optional,
                   nSeverity   : in number optional := SEVERITY_ERROR );
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sText | The caption that the element is expected to have.
nOptions Optional: Flagmask to configure the verification. Can be one of the following values:
  • Default: VERIFY_EQUAL
  • VERIFY_NOT_EQUAL
  • VERIFY_STARTS_WITH
  • VERIFY_ENDS_WITH
  • VERIFY_CONTAINS
  • VERIFY_CASE_SENSITIVE (available additionally to the above options)
  • VERIFY_IGNORE_WHITESPACE (available additionally to the above options)
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/gwt/Showcase.html#CwBasicText");
    // set the text to 'Hello World!'
    BrowserTypeKeys("//INPUT[@id='gwt-debug-cwBasicText-textbox']", "Hello World!");

    //verify if the textfield has the expected text - case sensitive and ignoring whitespaces.
    //If the verification fails, an error will be raised
    BrowserVerifyText("//INPUT[@id='gwt-debug-cwBasicText-textbox']", "Hello World!",
      VERIFY_CASE_SENSITIVE | VERIFY_IGNORE_WHITESPACE, SEVERITY_ERROR);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserWaitForDisappear Function

Action

This function is useful for custom synchronization. It can be used to wait until a certain DOM element becomes invisible or is detached from the document.

注: Automatic synchronization is also available. When automatic synchronization is turned on, replay functions wait until the browser has completed loading (including asynchronous remote calls and Javascript processing).

Include file

BrowserAPI.bdh

Syntax

BrowserWaitForDisappear( uTestObject : in union,
                         nTimeout    : in union optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
nTimeout | Optional: The wait timeout in milliseconds. If not specified, the default timeout specified in the profile settings or set by BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT) will be used. When the timeout is reached, an error is thrown. Use the data type number for this parameter. The data type float is not allowed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT | BROWSER_MODE_USERBEHAVIOR_FIRST_TIME, 800, 600);

    // wait for DOM element to disappear (should disappear after 2.5 seconds)
    BrowserNavigate("http://demo.borland.com/TestSite/JavaScriptDisappear.html");

    BrowserWaitForDisappear("//SPAN[@id='ToHide']", 1000);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetOption Function


BrowserWaitForNewWindow Function

Action

Waits until a new browser window (tab) is created and returns the handle of this window (tab). The timeout value for retrieving a handle is defined in the Profile settings in the Object resolve timeout field. To define a custom timeout value, use the nTimeout parameter.

Include file

BrowserAPI.bdh

Syntax

BrowserWaitForNewWindow( in sWindowName : string optional,
                         in nTimeout    : union optional ): number;

Parameter | Description
sWindowName | Optional: This window name is used in TrueLogs and the Browser Application. Whenever the window handle returned by BrowserWaitForNewWindow is passed to another window function, such as BrowserActivateWindow or BrowserCloseWindow, this window name is used for textual identification of the window.
nTimeout | Optional: The wait timeout in milliseconds. If not specified, the default timeout specified in the profile settings or set by BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT) will be used. When the timeout is reached, an error is thrown. Use the data type number for this parameter. The data type float is not allowed.

Return value

  • The value of the window handle.

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TMain           : 1;

dcltrans

  transaction TMain
  var
    mainWindow : number;
    newWindow  : number;
    check      : number;
   begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);
    BrowserNavigate("http://demo.borland.com/TestSite/multiplewindows/multipleWindows.html");

    mainWindow := BrowserGetActiveWindow("main window");
    BrowserLinkSelect("//A[@name='window1']",  "Select, BODY (#1)");

    newWindow := BrowserWaitForNewWindow("new window");

    BrowserActivateWindow(mainWindow);
    check := BrowserGetActiveWindow();

    if (check <> mainWindow) then
      RepMessage("Window handles are different", SEVERITY_ERROR);
    end;
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions


BrowserWaitForProperty Function

Action

This function is useful for custom synchronization. It can be used to wait until a property has a certain value. As soon as the property has the specified value, the function returns. When the timeout is reached, an error is thrown.

注: Automatic synchronization is also available. When automatic synchronization is turned on, replay functions wait until the browser has completed loading (including asynchronous remote calls and JavaScript processing).

Include file

BrowserAPI.bdh

Syntax

BrowserWaitForProperty( uTestObject       : in union,
                        sDomPropertyName  : in string,
                        vDomPropertyValue : in union,
                        nTimeout          : in union optional ): boolean;
Parameter | Description
uTestObject | The XPath locator or the handle to the DOM element.
sDomPropertyName | The DOM property name.
vDomPropertyValue | The value to be waited for.
nTimeout | Optional: The wait timeout in milliseconds. If not specified, the default timeout specified in the profile settings or set by BrowserSetOption(BROWSER_OPT_WAIT_TIMEOUT) will be used. When the timeout is reached, an error is thrown. Use the data type number for this parameter. The data type float is not allowed.

Return value

  • true if successful

  • false otherwise

Example

benchmark SilkPerformerRecorder

use "Kernel.bdh"
use "BrowserAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
  end TInit;

  transaction TMain
  begin
    BrowserStart(BROWSER_MODE_DEFAULT, 800, 600);

    // wait for dom element to alter checked state (should be checked after 2.5 seconds)
    BrowserNavigate("http://demo.borland.com/TestSite/JavaScriptDisappear.html");

    BrowserWaitForProperty("//INPUT[@id='ToChange']", "checked", true);
  end TMain;
親トピック: Browser-Driven Web Load Testing Functions
関連資料
BrowserSetOption Function


Database (DBMS) Functions

Silk Performer allows you to create load testing scripts for your database server at three different levels. You can combine scripting methods in a single script.

  • High-level Interface
    Describes the high-level database access interface. This interface is used to allow simple data base scripts, which can be generated manually (e.g. read value from table, update element, etc.).
  • Medium-level Interface
    Describes the characteristics and functions for accessing DBMSs via ODBC. This interface is used by the old ODBC Recorder. The interface is obsolete now and is just included to ensure backward compatibility.
  • Native-level Interface
    Enables you to use native interface API functions. This interface is used by the Recorder. It is the most powerful interface.
  • ODBC Functions Overview
    Lists the scripting functions used to load test database applications using the ODBC interface.
  • Oracle API Functions Overview
    Lists the Oracle API functions.
  • Oracle 8 API Functions Overview
    Lists the Oracle 8 API functions.
  • Binding Setting Functions
    Lists the binding setting functions.
  • Result Set Functions Overview
    Use the result set functions to get generalized access to the result sets of different database APIs.
親トピック: Benchmark Description Language (BDL) Reference


High-level Interface

The Silk Performer scripting language is easy to read and provides a high-level database access interface. The following example shows the TSelling transaction of a stock inventory management system using the high-level interface.

use "DBAPI.bdh"

dclrand
  rAno: RndUniN(1..2000);

var
  ano, stock: number;

dcltrans
  transaction TSelling
  var
    i: number;
  begin
    for i := 1 to RndUniN(4..7) do
      ano := rAno;
      c1: SelArticle();
      c2: UpdStock();
    end;
  end TSelling;

dclsql
  SelArticle:  SELECT a_name, a_cat, a_price, a_stock
  INTO *, *, *, :stock FROM article
  WHERE a_no = :ano;
  UpdStock:
  UPDATE article SET a_stock = 99999
  WHERE a_no = :ano;
親トピック: Database (DBMS) Functions
関連資料
Medium-level Interface
Native-level Interface
SQL Section


Medium-level Interface

The Silk Performer medium-level interface provides access to DBMSs via ODBC. The medium-level interface gives you more control when accessing the database than is possible with the high-level interface.

The main characteristics of the medium-level interface are:

  • DB_Api functions work with SQL commands defined in the dclsql section. See Datatype SQL.

  • Automatic binding is supported.

  • Automatic error handling is provided.

  • Cursors must be declared explicitly (in contrast to the high-level interface). See Datatype cursor.

  • Multiple connects to DBMSs are possible within a single transaction.

Example

The following example shows the TSelling transaction from above using the medium-level interface.

use "DBAPI.bdh";

dclrand
  rAno: RndUniN(1..2000);

var
  hDBC1, ano, stock : number;
  c1, c2 : cursor;

dcltrans
  transaction DBApiSelling
  var
    i      : number;
    bFirst : boolean init true;
  begin
    if bFirst then //connecting, only executed on first call
      bFirst := false;
      hDBC1 := DB_Connect("dsn=sample;uid=u1;pwd=u1");
      SQLSetConnectOption(hDBC1, SQL_AUTOCOMMIT, 0);
      DB_AllocCursor(hDBC1, c1);
      DB_AllocCursor(hDBC1, c2);
      DB_Prepare(c1, SelArticle);
      DB_Prepare(c2, UpdStock);
    end;

    for i := 1 to RndUniN(4..7) do
      ano := rAno;
      DB_Execute(c1);
      fetch c1 next 1;
      DB_Execute(c2);
    end;

    DB_Commit(hDBC1);
  end DBApiSelling;

dclsql
  SelArticle:
  SELECT a_name, a_cat, a_price, a_stock
  INTO *, *, *, :stock FROM article
  WHERE a_no = :ano;
  UpdStock:
  UPDATE article SET a_stock = 99999
  WHERE a_no = :ano;

The medium-level interface consists of the following database access functions (DB_Api functions):

  • Datatype Cursors
    Several DB_Api functions need cursors, which must be declared.
  • Datatype SQL
    The DB_Api functions DB_ExecDirect and DB_Prepare work with SQL commands defined in your dclsql section.
  • DB_AllocCursor Function
    Allocates memory for a cursor and associates the cursor with the connection specified by hDBC.
  • DB_CloseCursor Function
    Closes the cursor and discards all pending results.
  • DB_Commit Function
    Commits a transaction.
  • DB_Connect Function
    Establishes a connection to a database system and returns a handle to that system.
  • DB_Disconnect Function
    Disconnects from the database system and releases all resources.
  • DB_DropCursor Function
    Drops a cursor and deallocates the resources used by the cursor.
  • DB_ExecDirect Function
    Prepares and executes a SQL statement in one step.
  • DB_Execute Function
    Executes a prepared SQL statement.
  • DB_Prepare Function
    Prepares a SQL statement (declared in the SQL section) for execution.
  • DB_Rollback Function
    Rolls back a transaction.
  • Hstmt Function
    Retrieves the ODBC statement handle from the cursor data structure.
親トピック: Database (DBMS) Functions
関連資料
High-level Interface
Native-level Interface
SQL Section


Datatype Cursors

Several DB_Api functions need cursors, which must be declared. You can declare cursors explicitly in the global var section of Silk Performer (cursors have global scope).

Example

var
  c1: cursor;

dcltrans
  transaction DBApiSelling
  begin
    hDBC1 := DB_Connect("dsn=sample;uid=u1;pwd=u1");
    SQLSetConnectOption(hDBC1, SQL_AUTOCOMMIT, 0);
    DB_AllocCursor(hDBC1, c1);
  end DBApiSelling;
親トピック: Medium-level Interface


Datatype SQL

The DB_Api functions DB_ExecDirect and DB_Prepare work with SQL commands defined in your dclsql section. SQL commands you use in these DB_Api functions must be declared in a dclsql section of your script. You cannot use SQL commands in DB_Api functions that use parameters.

Example

var
 c1: cursor;

dcltrans
  transaction DBApiSelling
  begin
    ...
    DB_Prepare(c1, SelArticle);
    ...
  end DBApiSelling;

dclsql
  SelArticle:
    SELECT * FROM article
    WHERE a_stock > 5 AND a_price > 1000;
親トピック: Medium-level Interface


DB_AllocCursor Function

Action

Allocates memory for a cursor and associates the cursor with the connection specified by hDBC.

Include file

DBAPI.bdh

Syntax

DB_AllocCursor(in hDBC: number, out cCursor: cursor): number;

Return value

SQL return code

The following values are possible:

  • SQL_SUCCESS. Function completed successfully.

  • SQL_SUCCESS_WITH_INFO. Call native ODBC function SQLError for detailed information.

  • SQL_INVALID_HANDLE. Invalid database connection handle.

  • SQL_ERROR. Call native ODBC function SQLError for detailed information.

Parameter | Description
hDBC | Valid handle to a database connection. This handle must have been returned from a previous call to DB_Connect .
cCursor | Variable receiving the allocated cursor

Example

rCode := DB_AllocCursor(hDBC, c1);

Sample scripts

DBApi01.bdf, Trans.bdf, MutexLogin.bdf

親トピック: Medium-level Interface


DB_CloseCursor Function

Action

Closes the cursor and discards all pending results.

Include file

DBAPI.bdh

Syntax

DB_CloseCursor(in cCursor: cursor): number;

Return value

SQL return code

Parameter | Description
cCursor | Cursor to be closed

Example

rCode := DB_CloseCursor(c1);

Sample scripts

DBApi01.bdf

親トピック: Medium-level Interface
関連資料
DB_Connect Function


DB_Commit Function

Action

Commits a transaction.

Include file

DBAPI.bdh

Syntax

DB_Commit(in hDBC: number): number;

Return value

SQL return code

Parameter | Description
hDBC | Valid handle to a database connection. This handle must have been returned from a previous call to DB_Connect.

Example

rCode := DB_Commit(hDBC);

Sample scripts

DBApi01.bdf, Trans.bdf, MutexLogin.bdf

親トピック: Medium-level Interface


DB_Connect Function

Action

Establishes a connection to a database system and returns a handle to that system. This allows you to submit SQL statements to the database for execution.

Include file

DBAPI.bdh

Syntax

DB_Connect(in sConnectStr: string): number;

Return value

Handle to a database connection

Parameter Description
sConnectStr

A connection string identifying the database system and any additional logon information required by your driver. The connection string has the form:

"dsn=data source name;uid=user name;pwd=user password"

where data source name is the name you specified when you generated the ODBC.INI file during the installation of your ODBC driver, and user name is the User ID and password.

You can issue successive calls to DB_Connect to open simultaneous connections to different database systems, or simultaneous connections to the same database system (if supported by that database system). Use DB_Disconnect to close the connection and release the resources.

Example

// To connect to SQL Server:

hDBC := DB_Connect("dsn=qa_sql_server;uid=u1;pwd=u1");

Sample scripts

DBApi01.bdf, Trans.bdf, MutexLogin.bdf

親トピック: Medium-level Interface
関連資料
DB_Disconnect Function


DB_Disconnect Function

Action

Disconnects from the database system and releases all resources.

Include file

DBAPI.bdh

Syntax

DB_Disconnect(inout hDBC: number): number;

Return value

SQL return code

Parameter | Description
hDBC | Valid handle to a database connection. This handle must have been returned from a previous call to DB_Connect.

Example

rCode := DB_Disconnect(hDBC);

Sample scripts

Trans.bdf, MutexLogin.bdf

親トピック: Medium-level Interface
関連資料
DB_Connect Function


DB_DropCursor Function

Action

Drops a cursor and deallocates the resources used by the cursor.

Include file

DBAPI.bdh

Syntax

DB_DropCursor(in cCursor: cursor): number;

Return value

SQL return code

Parameter | Description
cCursor | Cursor to be dropped

Example

rCode := DB_DropCursor(c1);

Sample scripts

Trans.bdf, MutexLogin.bdf

親トピック: Medium-level Interface


DB_ExecDirect Function

Action

Prepares and executes a SQL statement in one step. DB_ExecDirect is the fastest way to submit a SQL statement for one-time execution. Binding of program variables and random variables used in the SQL statement is done automatically.

Include file

DBAPI.bdh

Syntax

DB_ExecDirect(in cCursor: cursor, in sqlStat: sql): number;

Return value

SQL return code

Parameter | Description
cCursor | Cursor
sqlStat | SQL statement name (defined in the SQL section); the statement is executed directly

Example

dcltrans
  transaction TExecDirect
  var
    nRetCode: number;
  begin
    ...
    nRetCode := DB_ExecDirect(c1, InsSelling);
    ...
  end TExecDirect;

dclsql
  InsSelling:
    INSERT INTO sale VALUES (:gAno, "121297", 'N', :rTerm);

Sample scripts

Trans.bdf, MutexLogin.bdf

親トピック: Medium-level Interface


DB_Execute Function

Action

Executes a prepared SQL statement.

Include file

DBAPI.bdh

Syntax

DB_Execute(in cCursor: cursor): number;

Return value

SQL return code

Parameter | Description
cCursor | Cursor holding the prepared statement

Example

rCode := DB_Execute(c1);

Sample scripts

DBApi01.bdf

親トピック: Medium-level Interface


DB_Prepare Function

Action

Prepares a SQL statement (declared in the SQL section) for execution. Binding of program variables and random variables used in the SQL statement is done automatically.

Include file

DBAPI.bdh

Syntax

DB_Prepare( in cCursor: cursor, in sqlStat: sql ): number;

Return value

SQL return code

Parameter | Description
cCursor | Cursor for prepared SQL statement
sqlStat | SQL statement name (defined in the SQL section) to be prepared for further executing

Example

dcltrans
  transaction TPrepare
  var
    nRetCode: number;
  begin
    ...
    nRetCode := DB_Prepare(c1, InsSelling);
    ...
  end TPrepare;

dclsql
  InsSelling:
    INSERT INTO sale VALUES (:gAno, "121297", 'N', :rTerm);

Sample scripts

DBApi01.bdf

親トピック: Medium-level Interface


DB_Rollback Function

Action

Rolls back a transaction.

Include file

DBAPI.bdh

Syntax

DB_Rollback(in hDBC: number): number;

Return value

SQL return code

Parameter | Description
hDBC | Valid handle to a database connection. This handle must have been returned from a previous call to DB_Connect.

Example

rCode := DB_Rollback(hDBC);

Sample scripts

DBApi01.bdf, Trans.bdf, MutexLogin.bdf

親トピック: Medium-level Interface
関連資料
DB_Connect Function


Hstmt Function

Action

Retrieves the ODBC statement handle from the cursor data structure. The statement handle is used for native ODBC function calls.

Include file

DBAPI.bdh

Syntax

Hstmt(in cCursor: cursor): number;

Return value

ODBC statement handle

Parameter | Description
cCursor | Cursor

Example

var
  c1: cursor;

dcltrans
  transaction THstmt
  begin
    ...
    DB_Execute(c1);
    SQLFreeStmt(Hstmt(c1), ...);
    ...
  end THstmt;
親トピック: Medium-level Interface


Native-level Interface

The Silk Performer native-level interface enables you to use native interface API functions (via external function calls) for any database system or transaction monitor.

Example

The following example uses Oracle's OCI as the native-level interface.

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sName             : string;
    nFetched, nAge, i : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    // insert two persons: Jimmy and Ronald
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_CHR, 32, 2);
    OraBind(cCursor, ":age", SQLT_INT, 0, 2);
    OraSetString(cCursor, ":name", "Jimmy", 1);
    OraSetInt(cCursor, ":age", 55, 1);
    OraSetString(cCursor, ":name", "Ronald", 2);
    OraSetInt(cCursor, ":age", 18, 2);
    OraExec(cCursor, 2);
    // select all persons
    OraParse(cCursor, sqlSelect);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor, 1, 50, 0, 0, nFetched);

    for i := 1 to nFetched do
      sName := OraGetString(cCursor, "1", i);
      nAge := OraGetInt(cCursor, "2", i);
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);
  sqlSelect:
    SELECT * FROM persons;
親トピック: Database (DBMS) Functions
関連資料
High-level Interface
Medium-level Interface


ODBC Functions Overview

ODBC, an acronym for Open Database Connectivity, is a standardized set of application programming interface functions that can be used to access data stored in both relational and non-relational database management systems.

Silk Performer provides the following scripting functions to load test database applications using the ODBC interface:

  • Memory Management Functions
  • Connection Handling Functions
  • Cursor Handling Functions
  • Value Setting Functions
  • SQL Statement Execution Functions
  • Value Retrieving Functions
  • Transaction Handling Functions
  • Error Handling Functions
親トピック: Database (DBMS) Functions


Memory Management Functions

  • OdbcAlloc Function
    Allocates memory for a connection, environment or descriptor handle.
  • OdbcFree Function
    Releases a handle and frees all memory associated with it.
親トピック: ODBC Functions Overview


OdbcAlloc Function

Action

Allocates memory for a connection, environment or descriptor handle.

Include file

ODBC.bdh

Syntax

OdbcAlloc( in nType    : number,
           out hHandle : number,
           in hParent  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nType

Type of the handle to be allocated. This parameter must be one of the following:

  • SQL_HANDLE_ENV. Environment handle.

  • SQL_HANDLE_DBC. Connection handle.

  • SQL_HANDLE_DESC. Descriptor handle.
hHandle | Variable receiving the handle.
hParent

Existing handle in whose context the new handle is to be allocated.

  • To allocate a connection handle, this parameter must be an environment handle that refers to a previously allocated environment information storage buffer.

  • To allocate a descriptor handle, this parameter must be a connection handle.

  • To allocate an environment handle, omit this parameter.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Memory Management Functions
関連資料
OdbcFree Function


OdbcFree Function

Action

Releases a handle and frees all memory associated with it.

Include file

ODBC.bdh

Syntax

OdbcFree( inout hHandle : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hHandle | Handle to release. The handle must have been allocated with the OdbcAlloc function.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Memory Management Functions
関連資料
OdbcAlloc Function


Connection Handling Functions

  • OdbcConnect Function
    Establishes a connection to a database.
  • OdbcSetEnvAttr Function
    Modifies the current value of a specified environment attribute.
  • OdbcSetConnectAttr Function
    Modifies the current value of a specified connection attribute.
  • OdbcSetDescField Function
    Modifies the value of a specified descriptor record field.
  • OdbcDisconnect Function
    Closes a connection to a database.
親トピック: ODBC Functions Overview


OdbcConnect Function

Action

Establishes a connection to a database. Using this function, you can establish multiple connections to either a single database or to several instances at the same time.

Include file

ODBC.bdh

Syntax

OdbcConnect( in hConnection : number,
             in sDataSource : string,
             in sUserName   : string optional,
             in sPassword   : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hConnection | Handle to a database connection.
sDataSource | Name of the data source to connect to.
sUserName | User’s authorization name (optional). When the user identifier is specified in the sDataSource parameter, this parameter may be omitted.
sPassword | Password for the specified authorization name (optional). When the password is specified in the sDataSource parameter, this parameter may be omitted.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Connection Handling Functions
関連資料
OdbcSetEnvAttr Function
OdbcSetConnectAttr Function
OdbcSetDescField Function
OdbcDisconnect Function


OdbcSetEnvAttr Function

Action

Modifies the current value of a specified environment attribute. All environment attributes persist until the environment handle is freed with the OdbcFree function.

Because more than one environment handle can be allocated simultaneously, environment attribute settings on one environment are not affected when another environment is allocated. Once an environment attribute is set, that attribute’s value affects all data source connections that exist or become allocated under the specified environment.

Include file

ODBC.bdh

Syntax

OdbcSetEnvAttr( in hEnvironment : number,
                in nAttribute   : number,
                in sValue       : string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hEnvironment | Environment handle that refers to a previously allocated environment information storage buffer.
nAttribute

Environment attribute of which the value is to be modified. This parameter must be set to one of the following values:

  • SQL_ATTR_CONNECTION_POOLING

  • SQL_ATTR_CP_MATCH

  • SQL_ATTR_ODBC_VERSION

  • SQL_ATTR_OUTPUT_NTS
sValue

New value for the environment attribute nAttribute. The following parameters are allowed:

For nAttribute SQL_ATTR_CONNECTION_POOLING:

  • SQL_CP_OFF

  • SQL_CP_ONE_PER_DRIVER

  • SQL_CP_ONE_PER_HENV

For nAttribute SQL_ATTR_CP_MATCH:

  • SQL_CP_STRICT_MATCH

  • SQL_CP_RELAXED_MATCH

For nAttribute SQL_ATTR_ODBC_VERSION:

  • SQL_OV_ODBC2

  • SQL_OV_ODBC3

For nAttribute SQL_ATTR_OUTPUT_NTS:

  • SQL_TRUE

  • SQL_FALSE

Example

var
  hEnv, hDbc: number;

dcltrans
  transaction TConnect
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcSetEnvAttr(hEnv, SQL_ATTR_CONNECTION_POOLING, SQL_CP_ONE_PER_DRIVER);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
  end TConnect;
親トピック: Connection Handling Functions
関連資料
OdbcConnect Function
OdbcSetConnectAttr Function
OdbcSetDescField Function
OdbcDisconnect Function
OdbcFree Function


OdbcSetConnectAttr Function

Action

Modifies the current value of a specified connection attribute.

Include file

ODBC.bdh

Syntax

OdbcSetConnectAttr( in hDbc       : number,
                    in nAttribute : number,
                    in sValue     : string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDbc | Handle to a database connection.
nAttribute

Connection attribute whose value is to be modified . This parameter must be set to one of the following values:

  • SQL_ATTR_AUTOCOMMIT

  • SQL_ATTR_CONNECTION_TIMEOUT

  • SQL_ATTR_CURRENT_CATALOG

  • SQL_ATTR_LOGIN_TIMEOUT

  • SQL_ATTR_METADATA_ID

  • SQL_ATTR_ODBC_CURSORS

  • SQL_ATTR_PACKET_SIZE

  • SQL_ATTR_TRACE

  • SQL_ATTR_TRACEFILE

  • SQL_ATTR_TRANSLATE_LIB

  • SQL_ATTR_TRANSLATE_OPTION

  • SQL_ATTR_TXN_ISOLATION
sValue | New value for the connection attribute.

Example

var
  hEnv, hDbc : number;

dcltrans
  transaction TLogon
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_ON);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
  end TLogon;
親トピック: Connection Handling Functions
関連資料
OdbcConnect Function
OdbcSetEnvAttr Function
OdbcSetDescField Function
OdbcDisconnect Function


OdbcSetDescField Function

Action

Modifies the value of a specified descriptor record field.

Include file

ODBC.bdh

Syntax

OdbcSetDescField( in hDescriptor : number,
                  in nRecord     : number,
                  in nIdentifier : number,
                  in sValue      : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDescriptor | Descriptor handle that refers to a previously allocated descriptor information storage buffer.
nRecord | Descriptor record to modify. If any field of the descriptor header record is specified in the nIdentifier parameter, this parameter is ignored. Otherwise, this parameter should contain a number greater than or equal to 0. Descriptor records are numbered, starting at 0, with record 0 being the bookmark record.
nIdentifier

Field of the descriptor header record or descriptor parameter/column record whose value is to be modified. This parameter must be set to one of the following values:

  • SQL_DESC_AUTO_UNIQUE_VALUE

  • SQL_DESC_BASE_COLUMN_NAME

  • SQL_DESC_BASE_TABLE_NAME

  • SQL_DESC_CASE_SENSITIVE

  • SQL_DESC_CATALOG_NAME

  • SQL_DESC_CONCISE_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE

  • SQL_DESC_DATETIME_INTERVAL_PRECISION

  • SQL_DESC_DISPLAY_SIZE

  • SQL_DESC_FIXED_PREC_SCALE

  • SQL_DESC_LABEL

  • SQL_DESC_LENGTH

  • SQL_DESC_LITERAL_PREFIX

  • SQL_DESC_LITERAL_SUFFIX

  • SQL_DESC_LOCAL_TYPE_NAME

  • SQL_DESC_NAME

  • SQL_DESC_NULLABLE

  • SQL_DESC_NUM_PREC_RADIX

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PARAMETER_TYPE

  • SQL_DESC_PRECISION

  • SQL_DESC_ROWVER

  • SQL_DESC_SCALE

  • SQL_DESC_SCHEMA_NAME

  • SQL_DESC_SEARCHABLE

  • SQL_DESC_TABLE_NAME

  • SQL_DESC_TYPE

  • SQL_DESC_TYPE_NAME

  • SQL_DESC_UNNAMED

  • SQL_DESC_UNSIGNED

  • SQL_DESC_UPDATABLE
sValue | New value of the descriptor record field.
親トピック: Connection Handling Functions
関連資料
OdbcConnect Function
OdbcSetEnvAttr Function
OdbcSetConnectAttr Function
OdbcDisconnect Function


OdbcDisconnect Function

Action

Closes a connection to a database. When a program establishes multiple simultaneous active connections, separate OdbcDisconnect function calls must be performed for each active connection.

Include file

ODBC.bdh

Syntax

OdbcDisconnect( in hConnection : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hConnection | Handle to a database connection.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Connection Handling Functions
関連資料
OdbcConnect Function
OdbcSetEnvAttr Function
OdbcSetConnectAttr Function
OdbcSetDescField Function


Cursor Handling Functions

  • OdbcOpen Function
    Associates a cursor with a database connection.
  • OdbcSetStmtAttr Function
    Modifies the current value of a specified SQL statement attribute.
  • OdbcGetStmtAttr Function
    Retrieves the current value of a specified SQL statement attribute.
  • OdbcSetCursorName Function
    Assigns a user-defined name to a cursor.
  • OdbcGetCursorName Function
    Retrieves the name of a cursor.
  • OdbcBind Function
    Binds a place holder in a SQL statement.
  • OdbcClose Function
    Closes a cursor.
親トピック: ODBC Functions Overview


OdbcOpen Function

Action

Associates a cursor with a database connection. A cursor serves to maintain state information about processing a SQL statement. In a test script, multiple cursors can be used at the same time. Usually, immediately after opening a cursor, the OdbcPrepare function is called to prepare a SQL statement and associate the statement with a cursor.

Include file

ODBC.bdh

Syntax

OdbcOpen( out cCursor     : cursor,
          in  hConnection : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Variable receiving the cursor associated with the database connection
hConnection | Handle to a database connection.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Cursor Handling Functions
関連資料
OdbcSetStmtAttr Function
OdbcGetStmtAttr Function
OdbcSetCursorName Function
OdbcGetCursorName Function
OdbcBind Function
OdbcClose Function
OdbcPrepare Function


OdbcSetStmtAttr Function

Action

Modifies the current value of a specified SQL statement attribute.

Include file

ODBC.bdh

Syntax

OdbcSetStmtAttr(
   in cCursor    : cursor,
   in nAttribute : number,
   in sValue     : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
nAttribute

SQL statement attribute whose value is to be modified. This parameter must be set to one of the following values:

  • SQL_ATTR_CONCURRENCY

  • SQL_ATTR_CURSOR_TYPE

  • SQL_ATTR_MAX_LENGTH

  • SQL_ATTR_MAX_ROWS

  • SQL_ATTR_NOSCAN

  • SQL_ATTR_QUERY_TIMEOUT

  • SQL_ATTR_RETRIEVE_DATA

  • SQL_ATTR_SIMULATE_CURSOR

  • SQL_ATTR_USE_BOOKMARKS
sValue | New value for the SQL statement attribute.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcSetStmtAttr(cCursor, SQL_ATTR_QUERY_TIMEOUT, 15);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    while OdbcFetch(cCursor) do
      write("name: " + OdbcGetString(cCursor, "1"));
      writeln(" age: " + (string)OdbcGetInt(cCursor, "2"));
    end;
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Cursor Handling Functions
関連資料
OdbcOpen Function
OdbcGetStmtAttr Function
OdbcSetCursorName Function
OdbcGetCursorName Function
OdbcBind Function
OdbcClose Function


OdbcGetStmtAttr Function

Action

Retrieves the current value of a specified SQL statement attribute.

Include file

ODBC.bdh

Syntax

OdbcGetStmtAttr( in  cCursor    : cursor,
                 in  nAttribute : number,
                 out nValue     : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
nAttribute

SQL statement attribute whose value is to be retrieved. This parameter must be set to one of the following values:

  • SQL_ATTR_CONCURRENCY

  • SQL_ATTR_CURSOR_TYPE

  • SQL_ATTR_MAX_LENGTH

  • SQL_ATTR_MAX_ROWS

  • SQL_ATTR_NOSCAN

  • SQL_ATTR_QUERY_TIMEOUT

  • SQL_ATTR_RETRIEVE_DATA

  • SQL_ATTR_SIMULATE_CURSOR

  • SQL_ATTR_USE_BOOKMARKS
nValue | Variable that will receive the value of the SQL statement attribute.

Example

var
  hEnv, hDbc : number;
  cCursor    : cursor;

dcltrans
  transaction TMain
  var
    nTimeout : number;
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcSetStmtAttr(cCursor, SQL_ATTR_QUERY_TIMEOUT, 15);
    OdbcGetStmtAttr(cCursor, SQL_ATTR_QUERY_TIMEOUT, nTimeout );
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);

    while OdbcFetch(cCursor) do
      write("name: " + OdbcGetString(cCursor, "1"));
      writeln(" age: " + (string)OdbcGetInt(cCursor, "2"));
    end;

    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Cursor Handling Functions
関連資料
OdbcOpen Function
OdbcSetStmtAttr Function
OdbcSetCursorName Function
OdbcGetCursorName Function
OdbcBind Function
OdbcClose Function


OdbcSetCursorName Function

Action

Assigns a user-defined name to a cursor. Usually, Silk Performer generates and uses an internally generated cursor name whenever a SQL query statement is either prepared or executed directly. This function enables you to replace this internally generated cursor name with a user-defined name. This user-defined cursor name can then be used in place of the internally generated cursor name in positioned UPDATE and positioned DELETE statements.

Include file

ODBC.bdh

Syntax

OdbcSetCursorName( in cCursor : cursor,
                   in sName   : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sName | User-defined cursor name that Silk Performer uses instead of the internally generated name.

Example

var
  hEnv, hDbc : number;
  c1, c2     : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc,mhEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(c1, hDbc);
    OdbcPrepare(c1, sqlSelect);
    OdbcSetCursorName(c1, "cursor_persons");
    OdbcExecute(c1);
    OdbcFetch(c1);
    OdbcOpen(c2, hDbc);
    OdbcPrepare(c2, sqlDelete);
    OdbcExecute(c2);
    OdbcClose(c1, SQL_DROP);
    OdbcClose(c2, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons;
  sqlDelete:
    DELETE FROM persons WHERE CURRENT OF cursor_persons;
親トピック: Cursor Handling Functions
関連資料
OdbcOpen Function
OdbcSetStmtAttr Function
OdbcGetStmtAttr Function
OdbcGetCursorName Function
OdbcBind Function
OdbcClose Function


OdbcGetCursorName Function

Action

Retrieves the name of a cursor.

Include file

ODBC.bdh

Syntax

OdbcGetCursorName( in  cCursor : cursor,
                   out sName   : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sName | String receiving the user-defined

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sName: string;
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcGetCursorName(cCursor, sName); writeln(sName);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);

    while OdbcFetch(cCursor) do
       write("name: " + OdbcGetString(cCursor, "1"));
       writeln(" age: " + (string)OdbcGetInt(cCursor, "2"));
    end;

    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons;
親トピック: Cursor Handling Functions
関連資料
OdbcOpen Function
OdbcSetStmtAttr Function
OdbcGetStmtAttr Function
OdbcSetCursorName Function
OdbcBind Function
OdbcClose Function


OdbcBind Function

Action

Binds a place holder in a SQL statement. The bound place holder — identified by number — is then accessible through the OdbcSet and OdbcGet functions. This function must be called after preparing the SQL statement and before calling the OdbcSet functions.

Include file

ODBC.bdh

Syntax

OdbcBind( in cCursor      : cursor,
          in sPlaceholder : string,
          in nDataType    : number optional,
          in nSize        : number optional,
          in nSqlDataType : number optional,
          in nSqlSize     : number optional,
          in nPrecision   : number optional,
          in nParamType   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sPlaceholder

Location of the place holder in the SQL statement. This parameter must include the preceding colon identifying it as a place holder.

Place holders are numbered sequentially from left to right, starting with 1, as they appear in the SQL statement.
nDataType

C language data type of the place holder (optional). This parameter must be set to one of the following values:

  • SQL_C_CHAR

  • SQL_C_SHORT

  • SQL_C_SSHORT

  • SQL_C_USHORT

  • SQL_C_LONG

  • SQL_C_SLONG

  • SQL_C_ULONG

  • SQL_C_FLOAT

  • SQL_C_DOUBLE

  • SQL_C_BIT

  • SQL_C_TINYINT

  • SQL_C_STINYINT

  • SQL_C_UTINYINT

  • SQL_C_BINARY

  • SQL_C_DATE

  • SQL_C_TIME

  • SQL_C_TIMESTAMP

  • SQL_C_SBIGINT

  • SQL_C_UBIGINT

  • SQL_C_TYPE_DATE

  • SQL_C_TYPE_TIME

  • SQL_C_TYPE_TIMESTAMP

  • SQL_C_WCHAR

  • SQL_C_NUMERIC

  • SQL_C_DEFAULT (default)
nSize | Size of the C language data type in bytes (optional).
nSqlDataType

SQL data type of the place holder being bound (optional). This parameter must be set to one of the following values:

  • SQL_CHAR

  • SQL_VARCHAR

  • SQL_LONGVARCHAR

  • SQL_DECIMAL

  • SQL_NUMERIC

  • SQL_SMALLINT

  • SQL_INTEGER

  • SQL_REAL

  • SQL_FLOAT

  • SQL_DOUBLE

  • SQL_BIT

  • SQL_TINYINT

  • SQL_BIGINT

  • SQL_BINARY

  • SQL_VARBINARY

  • SQL_LONGVARBINARY

  • SQL_DATE

  • SQL_TIME

  • SQL_TIMESTAMP

  • SQL_INTERVAL_YEAR

  • SQL_INTERVAL_MONTH

  • SQL_INTERVAL_DAY

  • SQL_INTERVAL_HOUR

  • SQL_INTERVAL_MINUTE

  • SQL_INTERVAL_SECOND

  • SQL_INTERVAL_YEAR_TO_MONTH

  • SQL_INTERVAL_DAY_TO_HOUR

  • SQL_INTERVAL_DAY_TO_MINUTE

  • SQL_INTERVAL_DAY_TO_SECOND

  • SQL_INTERVAL_HOUR_TO_MINUTE

  • SQL_INTERVAL_HOUR_TO_SECOND

  • SQL_INTERVAL_MINUTE_TO_SECOND

  • SQL_TYPE_DATE

  • SQL_TYPE_TIME

  • SQL_TYPE_TIMESTAMP

  • SQL_WCHAR

  • SQL_WVARCHAR

  • SQL_WLONGVARCHAR
nSqlSize | Size of the SQL data type in bytes (optional).
nPrecision | Number of digits to the right of the decimal point (optional).
nParamType

Type of place holder being bound (optional). This parameter must be set to one of the following values:

  • SQL_PARAM_INPUT

  • SQL_PARAM_OUTPUT

  • SQL_PARAM_INPUT_OUTPUT

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end  TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Cursor Handling Functions
関連資料
OdbcOpen Function
OdbcSetStmtAttr Function
OdbcGetStmtAttr Function
OdbcSetCursorName Function
OdbcGetCursorName Function
OdbcClose Function


OdbcClose Function

Action

Closes a cursor.

Include file

ODBC.bdh

Syntax

OdbcClose( in cCursor    : cursor,
           in nOperation : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
nOperation

Specifies which operation to perform. This parameter must be set to one of the following values:

  • SQL_CLOSE (default). Use this option to Close the cursor when the cursor is re-used later.

  • SQL_DROP. Destroys the cursor and frees all memory allocated for the cursor ( use this option (at the end of the transaction) when the cursor is not re-used anymore).

  • SQL_UNBIND. Disposes the result data columns.

  • SQL_RESET_PARAMS. Disposes the bound parameters.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Cursor Handling Functions
関連資料
OdbcOpen Function
OdbcSetStmtAttr Function
OdbcGetStmtAttr Function
OdbcSetCursorName Function
OdbcGetCursorName Function
OdbcBind Function


Value Setting Functions

  • OdbcSetBinary Function
    Assigns binary data to a bound place holder of a SQL statement or to a result data column of a SQL query.
  • OdbcSetFloat Function
    Assigns a floating-point value to a bound place holder of a SQL statement or to a result data column of a SQL query.
  • OdbcSetInt Function
    Assigns a number to a bound place holder of a SQL statement or to a result data column of a SQL query.
  • OdbcSetString Function
    Assigns a string to a bound place holder of a SQL statement or to a result data column of a SQL query.
  • OdbcSetNull Function
    Assigns a NULL value to a bound place holder of a SQL statement or to a result data column of a SQL query.
  • OdbcSetMode Function
    Sets the indicator for an item of a bound place holder or a result data column.
親トピック: ODBC Functions Overview


OdbcSetBinary Function

Action

Assigns binary data to a bound place holder of a SQL statement or to a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcSetBinary( in cCursor     : cursor,
               in sIdentifier : string,
               in sBinary     : string,
               in nLength     : number,
               in nIndex      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
sBinary | Binary data that is assigned to the place holder or the result data column.
nLength | Amount of binary data (in bytes) that is assigned to the place holder or the result data column.
nIndex | Array index for the place holder or column item to be set (optional). By default, this function sets the first item.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_BINARY);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetBinary(cCursor, ":2", "\h54516170", 4, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetBinary(cCursor, ":2", "\h5458516170", 5, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, password) VALUES (?, ?);
親トピック: Value Setting Functions
関連資料
OdbcSetFloat Function
OdbcSetInt Function
OdbcSetString Function
OdbcSetNull Function
OdbcSetMode Function


OdbcSetFloat Function

Action

Assigns a floating-point value to a bound place holder of a SQL statement or to a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcSetFloat( in cCursor     : cursor,
              in sIdentifier : string,
              in fValue      : float,
              in nIndex      : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
fValue | Floating-point value that is assigned to the place holder or the result data column.
nIndex | Array index for the place holder or column item to be set (optional). By default, this function sets the first item.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_FLOAT);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetFloat(cCursor, ":2", 1704.4, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetFloat(cCursor, ":2", 2844.7, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, balance) VALUES (?, ?);
親トピック: Value Setting Functions
関連資料
OdbcSetBinary Function
OdbcSetInt Function
OdbcSetString Function
OdbcSetNull Function
OdbcSetMode Function


OdbcSetInt Function

Action

Assigns a number to a bound place holder of a SQL statement or to a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcSetInt( in cCursor     : cursor,
            in sIdentifier : string,
            in nValue      : number,
            in nIndex      : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
nValue | Number that is assigned to the place holder or the result data column.
nIndex | Array index for the place holder or column item to be set (optional). By default, this function sets the first item.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Value Setting Functions
関連資料
OdbcSetBinary Function
OdbcSetFloat Function
OdbcSetString Function
OdbcSetNull Function
OdbcSetMode Function


OdbcSetString Function

Action

Assigns a string to a bound place holder of a SQL statement or to a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcSetString( in cCursor     : cursor,
               in sIdentifier : string,
               in sString     : string,
               in nIndex      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
sString | String that is assigned to the place holder or the result data column.
nIndex | Array index for the place holder or column item to be set (optional). By default, this function sets the first item.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Value Setting Functions
関連資料
OdbcSetBinary Function
OdbcSetFloat Function
OdbcSetInt Function
OdbcSetNull Function
OdbcSetMode Function


OdbcSetNull Function

Action

Assigns a NULL value to a bound place holder of a SQL statement or to a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcSetNull( in cCursor     : cursor,
             in sIdentifier : string,
             in nIndex      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
nIndex | Array index for the place holder or column item to be set (optional). By default, this function sets the first item.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetNull(cCursor, ":2", 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Value Setting Functions
関連資料
OdbcSetBinary Function
OdbcSetFloat Function
OdbcSetInt Function
OdbcSetString Function
OdbcSetMode Function


OdbcSetMode Function

Action

Sets the indicator for an item of a bound place holder or a result data column.

Include file

ODBC.bdh

Syntax

OdbcSetMode( in cCursor     : cursor ,
             in sIdentifier : string,
             in nMode       : number,
             in nIndex      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
nMode

Indicator for the place holder or column item. This parameter must be set to one of the following values:

  • SQL_NULL_DATA. The data value associated with the place holder or result data column is NULL.

  • SQL_DATA_AT_EXEC. The data value must be sent to the data source at SQL statement execution time.

  • SQL_DEFAULT_PARAM. The default parameters of a stored procedure are used when calling a stored procedure.

  • SQL_IGNORE. The respective column is ignored when processing result data columns.
nIndex | Array index for the place holder or column item whose indicator is to be set (optional). By default, this function sets the indicator for the first item.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sIdentifier : string;
    nRow        : number;
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetMode(cCursor, ":1", SQL_DATA_AT_EXEC);
    OdbcSetMode(cCursor, ":2", SQL_DATA_AT_EXEC);
    OdbcExecute(cCursor);
    OdbcParamData(cCursor, sIdentifier, nRow);

    if sIdentifier = ":1" then
      OdbcSetString(cCursor, "", "Jim");
      OdbcParamData(cCursor);
      OdbcSetInt(cCursor, "", 25);
    elseif sIdentifier = ":2" then
      OdbcSetInt(cCursor, "", 25);
      OdbcParamData(cCursor);
      OdbcSetString(cCursor, "", "Jim");
    end;

    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
  INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Value Setting Functions
関連資料
OdbcSetBinary Function
OdbcSetFloat Function
OdbcSetInt Function
OdbcSetString Function
OdbcSetNull Function


SQL Statement Execution Functions

  • OdbcPrepare Function
    Prepares a SQL statement and associates it with a cursor.
  • OdbcExecute Function
    Executes a SQL statement associated with a cursor.
  • OdbcExecDirect Function
    Prepares and executes a SQL statement.
  • OdbcParamData Function
    Determines which data the script has to send to the data source.
  • OdbcCancel Function
    Terminates the SQL statement processing.
親トピック: ODBC Functions Overview


OdbcPrepare Function

Action

Prepares a SQL statement and associates it with a cursor.

Include file

ODBC.bdh

Syntax

OdbcPrepare( in cCursor      : cursor,
             in sqlStatement : sql ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sqlStatement | SQL statement to prepare.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: SQL Statement Execution Functions
関連資料
OdbcExecute Function
OdbcExecDirect Function
OdbcParamData Function
OdbcCancel Function


OdbcExecute Function

Action

Executes a SQL statement associated with a cursor.

Before calling this function, you have to prepare the SQL statement using the OdbcPprepare function. Array binding can be used to process multiple rows of data in a single execute operation. If the SQL statement contains place holders, it is necessary to call the OdbcBind function for each place holder first.

Include file

ODBC.bdh

Syntax

OdbcExecute( in cCursor    : cursor,
             in nArraySize : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
nArraySize | Size of the data array. Arrays are used to process multiple rows of data in a single execute operation.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: SQL Statement Execution Functions
関連資料
OdbcPrepare Function
OdbcExecDirect Function
OdbcParamData Function
OdbcCancel Function
OdbcBind Function


OdbcExecDirect Function

Action

Prepares and executes a SQL statement. This function is the fastest way to submit a SQL statement that is to be executed only once to the data source. Because the SQL statement is both prepared and executed in the same step, the specified SQL statement must be reprepared each time it is executed.

Include file

ODBC.bdh

Syntax

OdbcExecDirect(  in cCursor      : cursor,
                 in sqlStatement : sql,
                 in nArraySize   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sqlStatement | SQL statement to prepare and execute.
nArraySize | Size of the data array. Arrays are used to process multiple rows of data in a single execute operation.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecDirect(cCursor, sqlInsert);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: SQL Statement Execution Functions
関連資料
OdbcPrepare Function
OdbcExecute Function
OdbcParamData Function
OdbcCancel Function


OdbcParamData Function

Action

Determines which data the script has to send to the data source.

When a Silk Performer script executes a SQL statement, the ODBC driver requests data when it encounters a data-at-execution parameter or column. This function then determines which data the script should send. Once the script knows what data to send, it must call the OdbcSet functions repeatedly until all the data-at-execution data has been sent to the data source.

Include file

ODBC.bdh

Syntax

OdbcParamData(
   in  cCursor     : cursor,
   out sIdentifier : string optional,
   out nIndex      : number optional ) : boolean;

Return value

  • true if the data source expects data

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Variable receiving the identifier of the place holder or result data column whose item has to be sent to the data source (optional).
nIndex | Variable receiving the array index of the place holder or column item that has to be sent to the data source (optional).

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sIdentifier : string;
    nRow        : number;
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetMode(cCursor, ":1", SQL_DATA_AT_EXEC);
    OdbcSetMode(cCursor, ":2", SQL_DATA_AT_EXEC);
    OdbcExecute(cCursor);
    OdbcParamData(cCursor, sIdentifier, nRow);
    if sIdentifier = ":1" then
      OdbcSetString(cCursor, "", "Jim");
      OdbcParamData(cCursor);
      OdbcSetInt(cCursor, "", 25);
    elseif sIdentifier = ":2" then
      OdbcSetInt(cCursor, "", 25);
      OdbcParamData(cCursor);
      OdbcSetString(cCursor, "", "Jim");
    end;
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
  INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: SQL Statement Execution Functions
関連資料
OdbcPrepare Function
OdbcExecute Function
OdbcExecDirect Function
OdbcCancel Function
OdbcSetBinary Function
OdbcSetFloat Function
OdbcSetInt Function
OdbcSetString Function
OdbcSetNull Function


OdbcCancel Function

Action

Terminates the SQL statement processing.

Include file

ODBC.bdh

Syntax

OdbcCancel( in cCursor : cursor ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetMode(cCursor, ":1", SQL_DATA_AT_EXEC);
    OdbcSetMode(cCursor, ":2", SQL_DATA_AT_EXEC);
    OdbcExecute(cCursor);
    OdbcParamData(cCursor);
    OdbcCancel(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: SQL Statement Execution Functions
関連資料
OdbcPrepare Function
OdbcExecute Function
OdbcExecDirect Function
OdbcParamData Function


Value Retrieving Functions

  • OdbcDefine Function
    Defines an output variable for a specified select-list item in a SQL query.
  • OdbcFetch Function
    Performs a specified number of fetch operations in order to retrieve data from a SQL query.
  • OdbcSetPos Function
    Sets the cursor position in a row set, refreshes data in a row set, or adds, updates and/or deletes data in an updatable result data set.
  • OdbcMoreResults Function
    Determines whether more result data sets or row counts are available for a cursor, and if so, initializes processing for the next result data set or row count information available.
  • OdbcGetValue Function
    Retrieves any value either from a bound place holder of a SQL statement or from a result data column of a SQL query.
  • OdbcGetFloat Function
    Retrieves a floating-point value either from a bound place holder of a SQL statement or from a result data column of a SQL query.
  • OdbcGetInt Function
    Retrieves a number either from a bound place holder of a SQL statement or from a result data column of a SQL query.
  • OdbcGetString Function
    Retrieves a string either from a bound place holder of a SQL statement or from a result data column of a SQL query.
親トピック: ODBC Functions Overview


OdbcDefine Function

Action

Defines an output variable for a specified select-list item in a SQL query. It is necessary to call this function for each select-list item of a SQL query. After the OdbcExecute and OdbcFetch functions have been called, the OdbcGet functions can be used to retrieve the values of the select-list items:

Include file

ODBC.bdh

Syntax

OdbcDefine(
   in cCursor   : cursor,
   in sPosition : string,
   in nDataType : number optional,
   in nSize     : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sPosition | Index of the select-list item in the SQL query. Position indices start at 1 for the first (left-most) select-list item.
nDataType | ODBC data type of the select-list item (optional). The default value is SQL_C_CHAR.
nSize | Length of the select-list item in bytes (optional). This parameter should be omitted for data types of fixed length.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    OdbcDefine(cCursor, "1", SQL_C_CHAR, 32);
    OdbcDefine(cCursor, "2", SQL_C_LONG);
    while OdbcFetch(cCursor) do
      write("name: " + OdbcGetString(cCursor, "1"));
      writeln(" age: " + (string)OdbcGetInt(cCursor, "2"));
    end;
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;
dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Value Retrieving Functions
関連資料
OdbcFetch Function
OdbcSetPos Function
OdbcMoreResults Function
OdbcGetValue Function
OdbcGetFloat Function
OdbcGetInt Function
OdbcGetString Function


OdbcFetch Function

Action

Performs a specified number of fetch operations in order to retrieve data from a SQL query. This function is used to fetch both single and multiple rows. It can be called only while a result data set exists. That is, after a SQL statement that creates a result set is executed and before the cursor associated with that result data is closed.

Include file

ODBC.bdh

Syntax

OdbcFetch( in  cCursor     : cursor,
           in  nIterations : number optional,
           in  nArraySize  : number optional,
           in  nDirection  : number optional,
           in  nOption     : number optional,
           in  nBookmark   : number optional,
           out nFetched    : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
nIterations

Number of iterations to perform (optional). Predefined options are:

  • SQL_FETCH_ALL. Repeat the fetch operation until all rows have been fetched

The default option is to perform a single iteration
nArraySize | Number of rows to fetch per iteration (optional). The default option is to fetch a single row per iteration.
nDirection

Specifies the direction and type of fetch to perform (optional). This parameter must be set to one of the following values:

  • SQL_FETCH_NEXT

  • SQL_FETCH_FIRST

  • SQL_FETCH_LAST

  • SQL_FETCH_PRIOR

  • SQL_FETCH_ABSOLUTE

  • SQL_FETCH_RELATIVE

  • SQL_FETCH_RESUME

  • SQL_FETCH_BOOKMARK
nOption | Ordinal position of the first row in the row set to fetch (optional).
nBookmark | Bookmark value used to identify a row of data (optional).
nFetched | Variable receiving the actual number of rows fetched (optional).

Example

var
  hEnv, hDbc : number;
  c1, c2 : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(c1, hDbc);
    OdbcPrepare(c1, sqlSelect);
    OdbcSetCursorName(c1, "cursor_persons");
    OdbcExecute(c1);
    OdbcFetch(c1);
    OdbcOpen(c2, hDbc);
    OdbcPrepare(c2, sqlDelete);
    OdbcExecute(c2);
    OdbcClose(c1, SQL_DROP);
    OdbcClose(c2, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons;
  sqlDelete:
    DELETE FROM persons WHERE CURRENT OF cursor_persons;
親トピック: Value Retrieving Functions
関連資料
OdbcDefine Function
OdbcSetPos Function
OdbcMoreResults Function
OdbcGetValue Function
OdbcGetFloat Function
OdbcGetInt Function
OdbcGetString Function


OdbcSetPos Function

Action

Sets the cursor position in a row set, refreshes data in a row set, or adds, updates and/or deletes data in an updatable result data set.

Include file

ODBC.bdh

Syntax

OdbcSetPos(
   in cCursor    : cursor,
   in nRow       : number,
   in nOperation : number,
   in nLockType  : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
nRow | Ordinal position of the row in the row set on which to perform the operation specified in the nOperation parameter. If this parameter is set to 0, the operation specified is performed on every row in the row set.
nOperation

Operation to perform. This parameter must be set to one of the following values:

  • SQL_POSITION

  • SQL_REFRESH

  • SQL_UPDATE

  • SQL_DELETE

  • SQL_ADD
nLockType

Specifies how to lock the row after performing the operation specified in the nOperation parameter. This parameter must be set to one of the following values:

  • SQL_LOCK_NO_CHANGE

  • SQL_LOCK_EXCLUSIVE

  • SQL_LOCK_UNLOCK

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    OdbcDefine(cCursor, "1", SQL_C_CHAR, 32);
    OdbcDefine(cCursor, "2", SQL_C_LONG);
    OdbcFetch(cCursor, 20);
    OdbcSetPos(cCursor, 5, SQL_POSITION, SQL_LOCK_NO_CHANGE);
    write("name: " + OdbcGetString(cCursor, "1"));
    writeln(" age: " + (string)OdbcGetInt(cCursor, "2"));
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Value Retrieving Functions
関連資料
OdbcDefine Function
OdbcFetch Function
OdbcMoreResults Function
OdbcGetValue Function
OdbcGetFloat Function
OdbcGetInt Function
OdbcGetString Function


OdbcMoreResults Function

Action

Determines whether more result data sets or row counts are available for a cursor, and if so, initializes processing for the next result data set or row count information available.

Include file

ODBC.bdh

Syntax

OdbcMoreResults( in cCursor: cursor ) : boolean;

Return value

  • true if more result data sets or row counts are available for the cursor

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    OdbcDefine(cCursor, "1", SQL_C_CHAR, 32);
    OdbcDefine(cCursor, "2", SQL_C_LONG);
    OdbcFetch(cCursor);
    write("name: " + OdbcGetString(cCursor, "1"));
    writeln(" age: " + (string)OdbcGetInt(cCursor, "2"));
    if OdbcMoreResult(cCursor) then
      writeln("more entries available");
    end;
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Value Retrieving Functions
関連資料
OdbcDefine Function
OdbcFetch Function
OdbcSetPos Function
OdbcGetValue Function
OdbcGetFloat Function
OdbcGetInt Function
OdbcGetString Function


OdbcGetValue Function

Action

Retrieves any value either from a bound place holder of a SQL statement or from a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcGetValue( in  cCursor     : cursor,
              in  sIdentifier : string,
              out sBuffer     : string,
              in  nBufferSize : number,
              in  nIndex      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
sBuffer | Variable receiving either the data assigned to the place holder or the data retrieved from a fetched row, as the case may be.
nBufferSize | Size of the variable receiving the value.
nIndex | Array index for the place holder or column item to be retrieved (optional). By default, this function retrieves the first item. An index greater than 1 requires the preceding OdbcFetch call to retrieve more than one data row at once by specifying the optional nArraySize parameter accordingly.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sBuffer : string;
    nLength : number;
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    OdbcDefine(cCursor, "1", SQL_C_CHAR, 32);
    OdbcDefine(cCursor, "2", SQL_C_BINARY);

    while OdbcFetch(cCursor) do
      write("name: " + OdbcGetString(cCursor, "1"));
      OdbcGetValue(cCursor, "2", sBuffer, nLength);
      WriteData(sBuffer, nLength);
    end;

    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons;
親トピック: Value Retrieving Functions
関連資料
OdbcDefine Function
OdbcFetch Function
OdbcSetPos Function
OdbcMoreResults Function
OdbcGetFloat Function
OdbcGetInt Function
OdbcGetString Function


OdbcGetFloat Function

Action

Retrieves a floating-point value either from a bound place holder of a SQL statement or from a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcGetFloat(
   in cCursor     : cursor,
   in sIdentifier : string,
   in nIndex      : number optional ): float;

Return value

Either the floating-point value assigned to the place holder or the value retrieved from a fetched row.

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
nIndex | Array index for the place holder or column item to be retrieved (optional). By default, this function retrieves the first item. An index greater than 1 requires the preceding OdbcFetch call to retrieve more than one data row at once by specifying the optional nArraySize parameter accordingly.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    OdbcDefine(cCursor, "1", SQL_C_CHAR, 32);
    OdbcDefine(cCursor, "2", SQL_C_FLOAT);
    while OdbcFetch(cCursor) do
      write("name: " + OdbcGetString(cCursor, "1"));
      writeln(" balance: " + (string)OdbcGetFloat(cCursor, "2"));
    end;
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Value Retrieving Functions
関連資料
OdbcDefine Function
OdbcFetch Function
OdbcSetPos Function
OdbcMoreResults Function
OdbcGetValue Function
OdbcGetInt Function
OdbcGetString Function


OdbcGetInt Function

Action

Retrieves a number either from a bound place holder of a SQL statement or from a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcGetInt(
   in cCursor     : cursor,
   in sIdentifier : string,
   in nIndex      : number optional ) : number;

Return value

Either the number assigned to the place holder or the number retrieved from a fetched row.

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
nIndex | Array index for the place holder or column item to be retrieved (optional). By default, this function retrieves the first item. An index greater than 1 requires the preceding OdbcFetch call to retrieve more than one data row at once by specifying the optional nArraySize parameter accordingly.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    OdbcDefine(cCursor, "1", SQL_C_CHAR, 32);
    OdbcDefine(cCursor, "2", SQL_C_LONG);
    while OdbcFetch(cCursor) do
      write("name: " + OdbcGetString(cCursor, "1"));
      writeln(" age: " + String(OdbcGetInt(cCursor, "2"));
    end;
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Value Retrieving Functions
関連資料
OdbcDefine Function
OdbcFetch Function
OdbcSetPos Function
OdbcMoreResults Function
OdbcGetValue Function
OdbcGetFloat Function
OdbcGetString Function


OdbcGetString Function

Action

Retrieves a string either from a bound place holder of a SQL statement or from a result data column of a SQL query. Place holders and data columns are identified by number.

Include file

ODBC.bdh

Syntax

OdbcGetString(
   in cCursor     : cursor,
   in sIdentifier : string,
   in nIndex      : number optional ) : string;

Return value

Either the string assigned to the place holder or the string retrieved from a fetched row.

Parameter | Description
cCursor | Cursor associated with a database connection.
sIdentifier | Identifier of the place holder or the result data column. To identify a place holder, begin this parameter with a colon.
nIndex | Array index for the place holder or column item to be retrieved (optional). By default, this function retrieves the first item. An index greater than 1 requires the preceding OdbcFetch call to retrieve more than one data row at once by specifying the optional nArraySize parameter accordingly.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlSelect);
    OdbcExecute(cCursor);
    OdbcDefine(cCursor, "1", SQL_C_CHAR, 32);
    OdbcDefine(cCursor, "2", SQL_C_LONG);
   while OdbcFetch(cCursor) do
      write("name: " + OdbcGetString(cCursor, "1"));
      writeln(" age: " + (string)OdbcGetInt(cCursor, "2"));
    end;
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;
親トピック: Value Retrieving Functions
関連資料
OdbcDefine Function
OdbcFetch Function
OdbcSetPos Function
OdbcMoreResults Function
OdbcGetValue Function
OdbcGetFloat Function
OdbcGetInt Function


Transaction Handling Functions

  • OdbcCommit Function
    Commits the current transaction.
  • OdbcRollback Function
    Rolls back the current transaction.
親トピック: ODBC Functions Overview


OdbcCommit Function

Action

Commits the current transaction. All SQL statements since the last call of the OdbcConnect, OdbcCommit or OdbcRollback function are committed.

Include file

ODBC.bdh

Syntax

OdbcCommit( in hConnection : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hConnection | Handle to a database connection.

Example

var
  hEnv, hDbc : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcCommit(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Transaction Handling Functions
関連資料
OdbcRollback Function
OdbcConnect Function


OdbcRollback Function

Action

Rolls back the current transaction. All SQL statements since the last call of the OdbcConnect, OdbcCommit or OdbcRollback function are rolled back.

Include file

ODBC.bdh

Syntax

OdbcRollback( in hConnection : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hConnection | Handle to a database connection.

Example

var
  hEnv, hDbc : number;
  cCursor    : cursor;

dcltrans
  transaction TMain
  begin
    OdbcAlloc(SQL_HANDLE_ENV, hEnv);
    OdbcAlloc(SQL_HANDLE_DBC, hDbc, hEnv);
    OdbcConnect(hDbc, "DSN=database;UID=user;PWD=pass;");
    OdbcOpen(cCursor, hDbc);
    OdbcPrepare(cCursor, sqlInsert);
    OdbcBind(cCursor, ":1", SQL_C_CHAR, 32);
    OdbcBind(cCursor, ":2", SQL_C_LONG);
    OdbcSetString(cCursor, ":1", "Bob", 1);
    OdbcSetInt(cCursor, ":2", 25, 1);
    OdbcSetString(cCursor, ":1", "Marcy", 2);
    OdbcSetInt(cCursor, ":2", 33, 2);
    OdbcExecute(cCursor);
    OdbcClose(cCursor, SQL_DROP);
    OdbcRollback(hDbc);
    OdbcDisconnect(hDbc);
    OdbcFree(hDbc);
    OdbcFree(hEnv);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (?, ?);
親トピック: Transaction Handling Functions
関連資料
OdbcCommit Function
OdbcConnect Function


Error Handling Functions

  • OdbcIgnoreError Function
    Specifies that a specific ODBC error is to be ignored if it occurs during the next ODBC function call.
親トピック: ODBC Functions Overview


OdbcIgnoreError Function

Action

Specifies that a specific ODBC error is to be ignored if it occurs during the next ODBC function call. Since the error is then treated in the same way as a warning, the simulation will not be aborted.

Include file

ODBC.bdh

Syntax

OdbcIgnoreError( in sState  : string,
                 in nNative : number optional );
Parameter | Description
sState | SQL state value that is generated when an ODBC function fails. This five-character string value must consist of a two-character class value followed by a three-character subclass value.
nNative | For general errors that generate an “HY000” SQL state, this parameter specifies the native ODBC error code (optional).
親トピック: Error Handling Functions


Oracle API Functions Overview

Silk Performer provides Oracle API functions along with Oracle database traffic recording and replaying support. The new functions replace the obsolete Oracle call interface (OCI) functions whose names start with Ora_ and Oci_ (used in previous Silk Performer versions). Although the old OCI functions still work, use the new Oracle API functions since the Oracle OCI Recorder generates scripts based on these functions.

Oracle API functions provide a simple and powerful interface to Oracle databases version 7.x and version 8.x. All features of Oracle 7.x and Oracle 8.x except Oracle object support are accessible through these Oracle API functions, including

  • array binding and fetching

  • piecewise binding and fetching

  • binding PL/SQL tables

  • calling PL/SQL blocks and stored procedures

  • cursor binding

  • support for all Oracle data types, including LOB (Large Object) data types

All Oracle API functions were implemented with the help of Oracle's OCI functions version 7. The optional parameters concept enables both simple usage of the API on the one hand and performing specific database operations using the same functions on the other hand. All functions listed below are available:

  • Connection-handling and Cursor-handling Functions
    Lists the Oracle connection-handling and cursor-handling functions.
  • Parameter Binding Functions
    Lists the Oracle parameter binding functions.
  • Result Set Definition Functions
    Lists the Oracle result set definition functions.
  • Statement Processing Functions
    Lists the Oracle statement processing functions.
  • Placeholder Binding Functions
    Lists the Oracle placeholder binding functions.
  • Data Fetching Functions
    Lists the Oracle data fetching functions.
  • Date Functions
    Lists the Oracle date functions.
  • Error Handling Functions
    Lists the Oracle error handling functions.
  • Functions Identical to Original OCI Functions
    Lists the Oracle functions that are identical to the original OCI functions.
  • General Information About Oracle and OCI
    Distinguishes the Oracle version from the OCI version.
  • Oracle Data Types
    Lists the Oracle external data types that are supported in Oracle functions.
親トピック: Database (DBMS) Functions


Connection-handling and Cursor-handling Functions

  • OraLogon Function
    Establishes a connection to an Oracle database.
  • OraLogoff Function
    Shuts down a connection to an Oracle database.
  • OraOpen Function
    Associates a cursor with a database connection.
  • OraClose Function
    Closes a cursor and releases all allocated resources.
親トピック: Oracle API Functions Overview


OraLogon Function

Action

Establishes a connection to an Oracle database. Using this function, you can establish multiple connections to either a single database or to several Oracle instances at the same time.

Include file

Ora.bdh

Syntax

OraLogon( out hConnection : number,
          in  sUser       : string,
          in  sPassword   : string optional,
          in  sConnect    : string optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
hConnection | Variable receiving the handle to the database connection.
sUser

User Identification. This parameter contains either only the user name or the user name, the password, and the host machine identifier. In the latter case, it is necessary to insert a / character between the user name and the password, and a @ character between the password and the connect string. Valid examples are shown below:

  • name

  • name/password

  • name@service_name

  • name/password@service_name
sPassword | Password (optional). If the password is specified through the sUser parameter, this parameter should be omitted or set to NULL
sConnect | SQL*Net V2 connect descriptor (optional). If the connect string is passed through the sUser parameter, this parameter should be omitted

Example

var
  hConnection: number;
dcltrans
  transaction TMain
  var
    bOk: boolean;
  begin
    bOk := OraLogon(hConnection, "user", "password", "orclnet2");

    if bOk then
      write("Connection to database established"); writeln;
    else      write("Error connecting to database"); writeln;
    end;
    ...
    OraLogoff(hConnection);
  end TMain;

Output

Connection to database established

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

親トピック: Connection-handling and Cursor-handling Functions
関連資料
OraLogoff Function
OraOpen Function
OraClose Function
OraOciError Function


OraLogoff Function

Action

Shuts down a connection to an Oracle database. When a program establishes multiple simultaneous active connections, separate OraLogoff function calls must be performed for each active connection.

Include file

Ora.bdh

Syntax

OraLogoff( in hConnection : number ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
hConnection | Valid handle to a database connection established using the OraLogon function

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    ...
    OraLogoff(hConnection);
  end TMain;

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

親トピック: Connection-handling and Cursor-handling Functions
関連資料
OraLogon Function
OraOpen Function
OraClose Function
OraOciError Function


OraOpen Function

Action

Associates a cursor with a database connection. A cursor serves to maintain state information about processing a SQL statement. In a test script, multiple cursors can be used at the same time. Usually, immediately after opening a cursor, the OraParse function is called to parse a SQL statement and associate the statement with a cursor.

Include file

Ora.bdh

Syntax

OraOpen( out cCursor     : cursor,
         in  hConnection : number): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Variable receiving the cursor associated with the database connection
hConnection | Valid handle to a database connection

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    ...
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

親トピック: Connection-handling and Cursor-handling Functions
関連資料
OraLogon Function
OraLogoff Function
OraClose Function
OraOciError Function
OraParse Function


OraClose Function

Action

Closes a cursor and releases all allocated resources.

Include file

Ora.bdh

Syntax

OraClose( inout cCursor: cursor ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection.

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    bOk  : boolean;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    ...

    bOk := OraClose(cCursor);
    if bOk then
      write("Cursor successfully closed"); writeln;
    else
      write("Could not close cursor"); writeln;
    end;

    OraLogoff(hConnection);
  end TMain;

Output

Cursor successfully closed

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

親トピック: Connection-handling and Cursor-handling Functions
関連資料
OraLogon Function
OraLogoff Function
OraOpen Function


Parameter Binding Functions

  • OraSetBinary Function
    Assigns binary data to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • OraSetFloat Function
    Assigns a floating-point value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • OraSetInt Function
    Assigns a number value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • OraSetNull Function
    Assigns a NULL value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • OraSetPieces Function
    Assigns any data to the program variable that is bound to the specified place holder in the SQL statement for a piecewise INSERT or UPDATE operation.
  • OraSetString Function
    Assigns a string to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
親トピック: Oracle API Functions Overview


OraSetBinary Function

Action

Assigns binary data to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Using this function, any data type listed below can be assigned to the program variable that is bound to the specified place holder:

  • SQLT_NUM
  • SQLT_VNU
  • SQLT_RID
  • SQLT_DAT
  • SQLT_VBI
  • SQLT_BIN
  • SQLT_LBI
  • SQLT_LVB
  • SQLT_CUR

Include file

Ora.bdh

Syntax

OraSetBinary( in cCursor : cursor,
              in sSqlVar : string,
              in sBinary : string,
              in nLength : number,
              in nIndex  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder
sBinary | Binary data that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block
nLength | Length of the binary data block (in bytes)
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable

Example

var
  hConnection : number;
  cCursor     : cursor;
dcltrans
  transaction TMain
  const
    PUBLIC_KEY := "\h59b20094...";
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_CHR, 32);
    OraBind(cCursor, ":key", SQLT_BIN, 64);
    OraSetString(cCursor, ":name", "Michael");
    OraSetBinary(cCursor, ":key", PUBLIC_KEY, STRING_COMPLETE);
    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;
dclsql
  sqlInsert:
    INSERT INTO keys (name, key) VALUES (:name, :key);
親トピック: Parameter Binding Functions
関連資料
OraOciError Function


OraSetFloat Function

Action

Assigns a floating-point value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Include file

Ora.bdh

Syntax

OraSetFloat( in cCursor : cursor,
             in sSqlVar : string,
             in fValue  : float,
             in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder
fValue | Float value that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    sName    : string;
    fBalance : float;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_FLT);
    OraSetFloat(cCursor, ":1", 2000.0);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_FLT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := OraGetString(cCursor, "1");
      fBalance := OraGetFloat(cCursor, "2");
      write(sName, 32); write(fBalance); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM accounts WHERE balance > :1;

Output

Bob 13864.220000Pamela 4492.090000Richard 7309.580000

Sample scripts

OraSample.bdf

親トピック: Parameter Binding Functions
関連資料
OraOciError Function


OraSetInt Function

Action

Assigns a number value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Include file

Ora.bdh

Syntax

OraSetInt( in cCursor : cursor,
           in sSqlVar : string,
           in nValue  : number,
           in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder
nValue | Number value that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := OraGetString(cCursor, "1");
      nAge := OraGetInt(cCursor, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

親トピック: Parameter Binding Functions
関連資料
OraOciError Function


OraSetNull Function

Action

Assigns a NULL value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Include file

Ora.bdh

Syntax

OraSetNull( in cCursor : cursor,
            in sSqlVar : string,
            in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_CHR, 32);
    OraBind(cCursor, ":age", SQLT_INT);
    OraSetString(cCursor, ":name", "Peter");
    OraSetNull(cCursor, ":age");
    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;
dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);
親トピック: Parameter Binding Functions
関連資料
OraOciError Function


OraSetPieces Function

Action

Assigns any data to the program variable that is bound to the specified place holder in the SQL statement for a piecewise INSERT or UPDATE operation. The place holder is identified by the name or the number specified in the SQL statement.

Include file

Ora.bdh

Syntax

OraSetPieces( in cCursor     : cursor,
              in sSqlVar     : string,
              in sFilename   : string,
              in nCharacters : number optional,
              in nFirstChar  : number optional,
              in nLastChar   : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder
sFilename | Name of the file containing the data. If this parameter is set to NULL, random values are generated. In this case, you must specify the amount of random data to generate. The nFirstChar and the nLastChar parameters let you specify a set of characters used for random data generation
nCharacters | Number of random characters to generate (optional). This parameter has to be passed to the function only if sFilename is set to NULL
nFirstChar | First character belonging to the character set used for random data generation (optional). The default option is to use all characters defined in the ASCII table
nLastChar | Last character belonging to the character set used for random data generation (optional). The default option is to use all characters defined in the ASCII table

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_STR, 32);
    OraBind(cCursor, ":data", SQLT_LBI, 4096, 64000, ORA_PIECEWISE);
    OraSetString(cCursor, ":name", "Sunset");
    OraSetPieces(cCursor, ":data", "TestData.dat");
    OraExec(cCursor);

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO images (name, data) VALUES (:name, :data);

See also

Wrapped Oracle function: ogetpi, osetpi

親トピック: Parameter Binding Functions
関連資料
OraOciError Function


OraSetString Function

Action

Assigns a string to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Using this function, any of the following data types can be assigned to the program variable that is bound to the specified place holder:

  • SQLT_STR
  • SQLT_CHR
  • SQLT_VCS
  • SQLT_LVC
  • SQLT_AFC
  • SQLT_AVC
  • SQLT_LNG

Include file

Ora.bdh

Syntax

OraSetString( in cCursor : cursor,
              in sSqlVar : string,
              in sString : string,
              in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder
sString | String that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);

    // bind array containing two elements
    OraBind(cCursor, ":name", SQLT_CHR, 32, 2);
    OraBind(cCursor, ":age", SQLT_INT, 0, 2);

    // set values
    OraSetString(cCursor, ":name", "Bob", 1);
    OraSetInt(cCursor, ":age", 25, 1);

    OraSetString(cCursor, ":name", "Marcy", 2);
    OraSetInt(cCursor, ":age", 33, 2);

    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

親トピック: Parameter Binding Functions
関連資料
OraOciError Function


Result Set Definition Functions

  • OraDefine Function
    Defines an output variable for a specified select-list item in a SQL query.
  • OraDescribe Function
    Describes select-list items for SQL queries.
  • OraDescribeSP Function
    Describes the parameters of a PL/SQL procedure or function that is stored in an Oracle database.
親トピック: Oracle API Functions Overview


OraDefine Function

Action

Defines an output variable for a specified select-list item in a SQL query. In a BDL script, it is necessary to call this function for each select-list item of a SQL query. After the OraExec (and OraFetch) function has been called, the following functions can be used to retrieve the value of the program variable that is defined for the specified select-list item:

  • OraGetFloat
  • OraGetInt
  • OraGetString
  • OraGetValue

Include file

Ora.bdh

Syntax

OraDefine( in cCursor     : cursor,
           in nPosition   : number,
           in nDatatype   : number optional,
           in nSize       : number optional,
           in nMaxColSize : number optional,
           in nDefineType : number optional,
           in nPieces     : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
nPosition | Index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item
nDatatype

Oracle external data type of the select-list item (optional). See Oracle data types for a list of Oracle data types.

The default value is SQLT_STR (null-terminated string)
nSize

Length of the select-list item in bytes (optional).

This parameter should be omitted or set to 0 for data types of fixed length (SQLT_NUM, SQLT_INT, SQLT_FLT, SQLT_VNU, SQLT_RID, SQLT_DAT, SQLT_UIN, SQLT_CUR)
nMaxColSize | Maximum possible size of the select-list item in bytes (optional). This parameter has to be specified whenever the select-list item is retrieved in multiple pieces
nDefineType

Special select-list option (optional). Possible options are:

  • ORA_PIECEWISE. The select-list item is retrieved in multiple pieces using the OCI ogetpi/osetpi functions

  • ORA_FETCHLONG. The select-list item has to be retrieved from a long column using the OCI oflng function
nPieces | Number of pieces (optional). Whenever nDefineType is set to ORA_FETCHLONG, this parameter can be used to specify the number of pieces

Example

var
  hConnection : number;
  cCursor : cursor;
dcltrans
  transaction TMain
  var
    sName : string;
    nFetched, nAge, i : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor, 1, 50, 0, 0, nFetched);
    for i := 1 to nFetched do
      sName := OraGetString(cCursor, "1", i);
      nAge := OraGetInt(cCursor, "2", i);
      write(sName, 32);  write(nAge, 5); writeln;
    end;
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

 dclsql
  sqlSelect:
    SELECT * FROM persons;

Output

Howard 33Michael 44Bobby 61Sara 38

Sample scripts

OraArrayFetch.bdf, OraSample.bdf

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: odefin, odefinps
親トピック: Result Set Definition Functions
関連資料
OraDescribe Function
OraDescribeSP Function
OraOciError Function
OraGetFloat Function
OraGetInt Function
OraGetString Function
OraGetValue Function
OraBind Function
Oracle Data Types


OraDescribe Function

Action

Describes select-list items for SQL queries. This function returns internal data type description and size information for a specified select-list item.

If it is used without specifying the select-list item, all select-list items of the SELECT statement are described and OraDefine function calls are performed implicitly in order to define an output variable for each select-list item of a SQL query. In this case, no values are returned in the out parameters and the select-list items are bound as strings regardless of the Oracle internal data type. The functions listed below can be used to retrieve values from the program variable that is defined for the select-list item.

  • OraGetFloat
  • OraGetInt
  • OraGetString
  • OraGetValue

Include file

Ora.bdh

Syntax

OraDescribe( in    cCursor      : cursor,
             in    nPosition    : number optional,
             out   nDBSize      : number optional,
             out   nDBType      : number optional,
             out   sColName     : string optional,
             inout nNameLen     : number optional,
             out   nDisplaySize : number optional,
             out   nPrecision   : number optional,
             out   nScale       : number optional,
             out   nNullOk      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
nPosition | Position index of the select-list item in the SQL query (optional). Position indices start at 1 for the first (leftmost) select-list item.
nDBSize | Variable receiving the maximum size of the column, as stored in the Oracle data dictionary (optional)
nDBType | Variable receiving the data type code of the select-list item (optional). See Oracle data types for detailed information
sColName | Variable receiving the column name of the specified select-list item (optional)
nNameLen | Size of the variable receiving the column name (optional). After the function call, this parameter contains the actual length of the column name
nDisplaySize | Variable receiving the maximum display size of the select-list item if the select-list item is returned as a character string (optional)
nPrecision | Variable receiving the precision of numeric select-list items (optional). The precision is the total number of digits of a number.
nScale | Variable receiving the scale of numeric select-list items (optional)
nNullOk

Variable receiving an indicator whether null values are permitted.

  • If this parameter contains 0, null values are not permitted

  • Otherwise, null values are permitted

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    nDBSize, nDBType, nNameLength, nDisplaySize : number;
    nPrecision, nScale, nNullOk                 : number;
    sColumnName                                 : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    nNameLength := sizeof(sColumnName);
    OraDescribe(cCursor, 2, nDBSize, nDBType, sColumnName, nNameLength, nDisplaySize, nPrecision, nScale, nNullOk);
    write("maximum column size = "); write(nDBSize); writeln;
    write("column data type    = "); write(nDBType); writeln;
    write("column name         = "); write(sColumnName); writeln;
    write("name length         = "); write(nNameLength); writeln;
    write("display size        = "); write(nDisplaySize); writeln;
    write("precision           = "); write(nPrecision); writeln;
    write("scale               = "); write(nScale); writeln;
    write("NULL values         : ");

    if nNullOk = 0 then
      write("not permitted")
    else
      write("permitted")
    end;

    writeln;
    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM accounts;

Output

maximum column size = 22
column data type    = 2
column name         = BALANCE
name length         = 7
display size        = 40
precision           = 36
scale               = 2
NULL values         : permitted

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: odescr
親トピック: Result Set Definition Functions
関連資料
OraDefine Function
OraDescribeSP Function
OraOciError Function
OraGetFloat Function
OraGetInt Function
OraGetString Function
OraGetValue Function
OraBind Function
Oracle Data Types


OraDescribeSP Function

Action

Describes the parameters of a PL/SQL procedure or function that is stored in an Oracle database.

Include file

Ora.bdh

Syntax

OraDescribeSP( in    hConnection : number,
               inout sObjName    : string,
               inout nArraySize  : number optional,
               out   sName       : array of string(30) optional,
               out   nDatatype   : array of number optional,
               out   nMode       : array of number optional,
               out   nSize       : array of number optional ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Example

Parameter | Description
hConnection | Handle to an Oracle database connection
sObjName | Name of the PL/SQL procedure or function, including optional schema and package name. Quoted names are accepted. Synonyms are also accepted and are translated.
nArraySize | Array size of the sName, nDatatype, nMode and nSize parameter. This parameter receives the actual number of array elements described.
sName | String array receiving the name of each parameter of the PL/SQL procedure or function. 注: The size of each string buffer must be exactly 30 characters.
nDatatype | Array receiving the data type of each parameter of the procedure or function. See Oracle data types for a list of all data types.
nMode | Array receiving the mode of each parameter of the procedure or function. Zero (0) indicates an IN parameter, one (1) an OUT parameter, and two (2) an IN/OUT parameter.
nSize | Array receiving the size of each parameter of the procedure or function (in bytes). Character data types return the size of the parameter. For number types, 22 is returned.

Example

var
  hConnect : number;
  cCursor  : cursor;

dcltrans
  transaction TMain
  const
    MAXARR := 100;
  var
    nMaxArr, i : number;
    sParam     : array[MAXARR] of string(30);
  begin
    OraLogon(hConnect, "username/password@orclnet2");
    OraOpen(cCursor, hConnect);
    nMaxArr := MAXARR;
    OraDescribeSP(hConnect, "sp", nMaxArr, sParam);
    for i := 1 to nMaxArr do
      write("Param: "); write(sParam[i]); writeln;
    end;
    ...
  end TMain;

Output

Param: NO
Param: OPENING
Param: TITLE
Param: FIRSTNAME
Param: LASTNAME
Param: ALINE1
Param: ALINE2
Param: ZIP
Param: DISTRICT

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: odessp
親トピック: Result Set Definition Functions
関連資料
OraDefine Function
OraDescribe Function
OraOciError Function
Oracle Data Types


Statement Processing Functions

  • OraParse Function
    Parses a SQL statement or a PL/SQL block and associates it with a cursor.
  • OraParse2 Function
    Parses a SQL statement or PL/SQL block passed to the function as a string and associates it with a cursor.
  • OraExec Function
    Executes a SQL statement or PL/SQL block associated with a cursor.
  • OraFetch Function
    Performs a specified number of fetch operations in order to retrieve data from a SQL query.
親トピック: Oracle API Functions Overview


OraParse Function

Action

Parses a SQL statement or a PL/SQL block and associates it with a cursor. You can specify whether the parse should be deferred. If you defer parsing, the statement is parsed immediately before it is described or executed.

Include file

Ora.bdh

Syntax

OraParse( in cCursor      : cursor,
          in sqlStatement : sql,
          in nDeferred    : number optional,
          in nVersion     : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection.
sqlStatement | SQL statement or PL/SQL block to parse
nDeferred

Specifies whether the parse should be deferred (optional). Possible options are:

  • ORA_DEFERRED. The statement is parsed immediately before it is described or executed (default)

  • ORA_NONDEFERRED. The statement is parsed immediately

  • ORA_OSQL3. Indicates a call of the Oracle osql3 function rather than the oparse function
nVersion

Oracle version (optional). Possible options are:

  • ORA_VERSION_6

  • ORA_VERSION_DEFAULT (default)

  • ORA_VERSION_7

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlDelete, ORA_NONDEFERRED);
    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlDelete:
  DELETE FROM persons;

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

親トピック: Statement Processing Functions
関連資料
OraParse2 Function
OraExec Function
OraFetch Function
OraOciError Function
OraBind Function
OraDefine Function
OraDescribe Function


OraParse2 Function

Action

Parses a SQL statement or PL/SQL block passed to the function as a string and associates it with a cursor. It is possible to specify whether the parse should be deferred. In this case, it is parsed immediately before it is described or executed.

Include file

Ora.bdh

Syntax

OraParse2( in cCursor      : cursor,
           in sStatement   : string,
           in nDeferred    : number optional,
           in nVersion     : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection.
sStatement | SQL statement or PL/SQL block to parse
nDeferred

Specifies whether the parse should be deferred (optional). Possible options are:

  • ORA_DEFERRED. The statement is parsed immediately before it is described or executed (default)

  • ORA_NONDEFERRED. The statement is parsed immediately

  • ORA_OSQL3. Indicates a call of the Oracle osql3 function rather than the oparse function
nVersion

Oracle version (optional). Possible options are:

  • ORA_VERSION_6

  • ORA_VERSION_DEFAULT (default)

  • ORA_VERSION_7

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse2(cCursor, "DELETE FROM persons", ORA_NONDEFERRED);
    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;
親トピック: Statement Processing Functions
関連資料
OraParse Function
OraExec Function
OraFetch Function
OraOciError Function
OraBind Function
OraDefine Function
OraDescribe Function


OraExec Function

Action

Executes a SQL statement or PL/SQL block associated with a cursor. Besides executing a statement, this function can also fetch data after the execution if the statement is a SQL query.

Before calling this function, you have to parse the SQL statement using the OraParse function. Array binding can be used to process multiple rows of data in a single execute operation. If the SQL statement contains place holders, it is necessary to call the OraBind function for each place holder first.

Include file

Ora.bdh

Syntax

OraExec( in  cCursor     : cursor,
         in  nIterations : number optional,
         in  nRows       : number optional,
         in  nCancel     : number optional,
         in  nExact      : number optional,
         out nFetched    : number optional ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection.
nIterations | Number of iterations (optional). This parameter specifies whether to perform multiple execute operations in order to process array parameters
nRows | Numbers of rows to fetch (optional). This parameter specifies whether to fetch data after a SQL query
nCancel

Specifies whether to cancel the cursor afterwards (optional).

  • If this parameter is set to 1, the cursor is canceled after the fetch operation. See OraCancel function for detailed information

  • If this parameter is set to 0, the cursor is not canceled (default)
nExact

Specifies whether to report an error if the actual number of fetched rows is greater than the specified number of rows to fetch (nRows parameter)

  • If this parameter is set to 1, Silk Performer terminates the simulation if the actual number of fetched rows is greater than the specified number of rows to fetch

  • If this parameter is set to 0, no error message is displayed (default)
nFetched | Variable receiving the number of rows actually fetched (optional)

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sName : string;
    nFetched, nAge, i : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    // insert two persons: Jimmy and Ronald
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_CHR, 32, 2);
    OraBind(cCursor, ":age", SQLT_INT, 0, 2);
    OraSetString(cCursor, ":name", "Jimmy", 1);
    OraSetInt(cCursor, ":age", 55, 1);
    OraSetString(cCursor, ":name", "Ronald", 2);
    OraSetInt(cCursor, ":age", 18, 2);
    OraExec(cCursor, 2);
    // select all persons
    OraParse(cCursor, sqlSelect);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor, 1, 50, 0, 0, nFetched);

    for i := 1 to nFetched do
      sName := OraGetString(cCursor, "1", i);
      nAge := OraGetInt(cCursor, "2", i);
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlInsert:
  INSERT INTO persons (name, age) VALUES (:name, :age);
  sqlSelect:
    SELECT * FROM persons;

Output

Howard 33Michael 44Bobby 61Sara 38Jimmy 55Ronald 18

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

See also

Wrapped Oracle function: oexec, oexn, oexfet

親トピック: Statement Processing Functions
関連資料
OraParse Function
OraParse2 Function
OraFetch Function
OraOciError Function
OraBind Function
OraDefine Function
OraDescribe Function
OraCancel Function


OraFetch Function

Action

Performs a specified number of fetch operations in order to retrieve data from a SQL query. This function is used to fetch both single and multiple rows.

Afterwards, the following functions can be used to retrieve the fetched data:

  • OraGetFloat
  • OraGetInt
  • OraGetString
  • OraGetValue

Include file

Ora.bdh

Syntax

OraFetch( in  cCursor     : cursor,
          in  nIterations : number optional,
          in  nBatchSize  : number optional,
          out nFetched    : number optional ): boolean;

Return value

  • true if successful

  • false either if an error occurred during the fetch operation or if the number of rows actually fetched is not equal to the specified number of rows to fetch.

Parameter | Description
cCursor | Cursor associated with a database connection
nIterations

Number of iterations to perform (optional). Predefined options are:

  • ORA_FETCH_ALL. Repeat the fetch operation until all rows have been fetched

The default option is to perform a single iteration
nBatchSize | Number of rows to fetch per iteration (optional). The default option is to fetch a single row per iteration
nFetched | Variable receiving the actual number of rows fetched (optional)

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  const    MAX_ROWS := 1000; // maximum number of rows
  var
    nFetched, i, nAge : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    // first possibility to fetch all rows
    // in this case, nFetched must be smaller than MAX_ROWS
    OraExec(cCursor);
    OraFetch(cCursor, 1, MAX_ROWS, nFetched);

    for i := 1 to nFetched do
      sName := OraGetString(cCursor, "1", i);
      nAge := OraGetInt(cCursor, "2", i);
      write(sName, 32); write(nAge, 5); writeln;
    end;

     // second possibility to fetch all data
    OraExec(cCursor);

        while OraFetch(cCursor) do
      sName := OraGetString(cCursor, "1");
      nAge := OraGetInt(cCursor, "2");
      write(sName, 32);
 write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons;

Output

Howard 33Michael 44Bobby 61Sara 38

Sample scripts

OraArrayFetch.bdf, OraSample.bdf

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: ofetch, ofen
親トピック: Statement Processing Functions
関連資料
OraParse Function
OraParse2 Function
OraExec Function
OraDefine Function
OraDescribe Function
OraGetFloat Function
OraGetInt Function
OraGetString Function
OraGetValue Function


Placeholder Binding Functions

  • OraBind Function
    Binds a place holder in a SQL statement or PL/SQL block to a program variable.
  • OraBindCursor Function
    Binds a PL/SQL cursor variable to a BDL cursor.
親トピック: Oracle API Functions Overview


OraBind Function

Action

Binds a place holder in a SQL statement or PL/SQL block to a program variable. The variable is accessible through the OraSet and OraGet functions. The place holder is identified by the name or the number declared in the SQL statement or PL/SQL block. The functions listed below are used to assign values to the program variable that is bound to the specified place holder:

  • OraSetBinary
  • OraSetFloat
  • OraSetInt
  • OraSetNull
  • OraSetPieces
  • OraSetString

This function serves to bind place holders in SQL statements or PL/SQL blocks to both scalar and array variables. In addition, it can be used to bind place holders to be used in piecewise operations. The function must be called after parsing the SQL statement or PL/SQL block and before calling the OraSet function.

Include file

Ora.bdh

Syntax

OraBind( in cCursor     : cursor,
         in sSqlVar     : string,
         in nDatatype   : number optional,
         in nSize       : number optional,
         in nArraySize  : number optional,
         in nBindOption : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder
nDatatype

Oracle external data type of the program variable (optional). Oracle converts the program variable from external to internal format when the variable is sent to the database and vice versa when it is retrieved from the database. See Oracle data types for a list of data types

The default data type is SQLT_STR (null-terminated string)

nSize

Size of the program variable or the array element in bytes (optional). Since this function needs to be called only once for many different values on successive OraExec function calls, this parameter must contain the maximum size of the element to bind.

This parameter should be omitted for data types of fixed length (SQLT_NUM, SQLT_INT, SQLT_FLT, SQLT_VNU, SQLT_RID, SQLT_DAT, SQLT_UIN, SQLT_CUR). For string data types (SQLT_STR, SQLT_CHR, SQLT_LNG, SQLT_AFC, SQLT_AVC) omitting this parameter is possible when omitting the nArraySize parameter, too.

When performing piecewise binding of the variable to the place holder, this parameter specifies the piece size

nArraySize

Maximum number of array elements to bind (optional).

The default option is scalar binding.

When performing piecewise binding of the variable to the place holder, this parameter specifies the maximum column size

nBindOption

Specifies how to bind the place holder (optional). The following are the possible options for binding a place holder:

  • ORA_DEFAULT. This is the default option. A place holder is bound to a scalar or to an array program variable.

  • ORA_PIECEWISE. The program variable is bound to the place holder in multiple pieces. In this case, nSize specifies the piece size, and nArraySize the maximum column size. You have to call the OraSetPieces function in order to set the values for the pieces.

  • ORA_PLSQLTABLE_IN. The program variable is bound to a PL/SQL table that is used as an in parameter within a stored procedure.

  • ORA_PLSQLTABLE_OUT. The program variable is bound to a PL/SQL table that is used as an out parameter in a stored procedure.

  • ORA_PLSQLTABLE_INOUT: The program variable is bound to a PL/SQL table that is used as an inout parameter in a stored procedure.

A place holder in a SQL statement consists of a colon (:) followed by a SQL identifier. The place holder is not a test script variable. For example, the following SQL statement contains two place holders, :min_age and :max_age.

SELECT name, ageFROM personsWHERE age >= :min_age AND age <= :max_age;

It is also possible to define place holders that consist of a colon followed by a literal integer between 1 and 255.

The following SQL statement contains two place holders, :1 and :2.

SELECT name, age
FROM persons
WHERE age >= :1 AND age <= :2;

Example: scalar binding

var
  hConnection : number;
  cCursor : cursor;
dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);
    while OraFetch(cCursor) do
      sName := OraGetString(cCursor, "1");
      nAge:= OraGetInt(cCursor, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;
dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38

Example: array binding

var
  hConnection : number;
  cCursor : cursor;
dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);
    // bind array containing two elements
    OraBind(cCursor, ":name", SQLT_CHR, 32, 2);
    OraBind(cCursor, ":age", SQLT_INT, 0, 2);
    // set values
    OraSetString(cCursor, ":name", "Bob", 1);
    OraSetInt(cCursor, ":age", 25, 1);
    OraSetString(cCursor, ":name", "Marcy", 2);
    OraSetInt(cCursor, ":age", 33, 2);
    OraExec(cCursor, 2);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;
dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

Example: piecewise binding

var
  hConnection : number;
  cCursor : cursor;
dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_STR, 32);
    OraBind(cCursor, ":data", SQLT_LBI, 4096, 64000, ORA_PIECEWISE);
    OraSetString(cCursor, ":name", "Sunset");
    OraSetPieces(cCursor, ":data", "TestData.dat");
    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;
dclsql
  sqlInsert:
    INSERT INTO images (name, data) VALUES (:name, :data);

Example: PL/SQL table binding

var
  hConnection : number;
  cCursor : number;
dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlProcedureWithPLSQLTable);
    OraBind(cCursor, ":num", SQLT_INT);
    OraBind(cCursor, ":description", SQLT_STR, 20, 3, ORA_PLSQLTABLE_INOUT);
    OraSetInt(cCursor, ":num", 5);
    OraSetString(cCursor, ":description", "Frammis_1", 1);
    OraSetString(cCursor, ":description", "Frammis_2", 2);
    OraSetString(cCursor, ":description", "Frammis_3", 3);
    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;
dclsql
  sqlProcedureWithPLSQLTable:
  [BEGIN
    update_parts.add_parts(:num, :description);
  END;]

In this example, the parameter nBindOption specifies the option for binding the place holder. ORA_PLSQLTABLE_INOUT binds a PL/SQL table used as a parameter in a stored procedure with inout direction. The maximum length of a bind element is set to 20, the maximum number of array elements that can be sent/retrieved is set to 3.

Sample scripts

OraArrayFetch.bdf, OraSample.bdf, OraLoadPers.bdf

See also

Wrapped Oracle function: obndrn, obndrv, obndra, obindps, ogetpi, osetpi

親トピック: Placeholder Binding Functions
関連資料
OraBindCursor Function
OraOciError Function
OraSetBinary Function
OraSetFloat Function
OraSetInt Function
OraSetNull Function
OraSetPieces Function
OraSetString Function
OraExec Function


OraBindCursor Function

Action

Binds a PL/SQL cursor variable to a BDL cursor.

A cursor can be defined in a PL/SQL block and as a stored procedure parameter. Within a BDL script, it is possible to reference to a PL/SQL cursor by binding it to a BDL cursor.

Include file

Ora.bdh

Syntax

OraBindCursor( in cCursor      : cursor,
               in sName        : string,
               out cPLCursor   : cursor): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sName | Name of the cursor defined in the PL/SQL block. This parameter must include the preceding colon identifying it as a cursor
cPLCursor | Variable receiving the cursor defined in the PL/SQL block

Example

var
  hConnection : number;
  cCursor, cSelect : cursor;
dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBindCursor(cCursor, ":cursor", cSelect);
    OraExec(cCursor);
    OraDefine(cSelect, 1, SQLT_CHR, 32);
    OraDefine(cSelect, 2, SQLT_INT);
    while OraFetch(cSelect) do
      sName := OraGetString(cSelect, "1");
      nAge := OraGetInt(cSelect, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;
    OraClose(cCursor);
    OraClose(cSelect);
    OraLogoff(hConnection);
  end TMain;
dclsql
  sqlSelect:
  [BEGIN OPEN :cursor FOR SELECT * FROM persons; END;]

Output

Howard 33Mark 12Michael 44Bobby 61Sara 38

See also

Oracle: Programmer's Guide to the Oracle Call Interface: Using PL/SQL in an OCI Program

親トピック: Placeholder Binding Functions
関連資料
OraBind Function
OraOciError Function


Data Fetching Functions

  • OraGetFloat Function
    Retrieves a floating-point value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
  • OraGetInt Function
    Retrieves a number value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
  • OraGetString Function
    Retrieves a string either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
  • OraGetValue Function
    Retrieves any value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
親トピック: Oracle API Functions Overview


OraGetFloat Function

Action

Retrieves a floating-point value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

Include file

Ora.bdh

Syntax

OraGetFloat( in cCursor : cursor,
             in sSqlVar : string,
             in nIndex  : number optional): float;

Return value

Retrieved floating-point value

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar

This parameter can be one of the following:

  • the name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder

  • the index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item

注: In the latter case, the column number has to be passed to the function as a string.
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a value assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • the array index of the program variable

  • the row number for the floating-point value in the fetched data

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sName : string;
    fBalance : float;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_FLT);
    OraSetFloat(cCursor, ":1", 2000.0);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_FLT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := OraGetString(cCursor, "1");
      fBalance := OraGetFloat(cCursor, "2");
      write(sName, 32); write(fBalance); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM accounts WHERE balance > :1;

Output

Bob 13864.220000Pamela 4492.090000Richard 7309.580000

Sample scripts

OraArrayFetch.bdf, OraSample.bdf

親トピック: Data Fetching Functions
関連資料
OraGetInt Function
OraGetString Function
OraGetValue Function
OraDefine Function
OraDescribe Function
OraFetch Function


OraGetInt Function

Action

Retrieves a number value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

Include file

Ora.bdh

Syntax

OraGetInt( in cCursor : cursor,
           in sSqlVar : string,
           in nIndex  : number optional): number;

Return value

Retrieved long value

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar

This parameter can be one of the following:

  • the name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder

  • the index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item

注: In the latter case, the column number has to be passed to the function as a string.
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a value assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • the array index of the program variable

  • the row number for the long value in the fetched data

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := OraGetString(cCursor, "1");
      nAge := OraGetInt(cCursor, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38

Sample scripts

OraArrayFetch.bdf, OraSample.bdf

親トピック: Data Fetching Functions
関連資料
OraGetFloat Function
OraGetString Function
OraGetValue Function
OraDefine Function
OraDescribe Function
OraFetch Function


OraGetString Function

Action

Retrieves a string either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

If this function is used to retrieve one of the following data types, the retrieved value is automatically converted to a string:

  • SQLT_DAT
  • SQL_INT
  • SQLT_FLT

Include file

Ora.bdh

Syntax

OraGetString( in cCursor : cursor,
              in sSqlVar : string,
              in nIndex  : number optional): string;

Return value

Retrieved string, containing at most 253 characters. If the string to be retrieved consists of more than 253 characters, it is automatically cut off at the corresponding position.

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar

This parameter can be one of the following:

  • the name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder

  • the index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item

注: In the latter case, the column number has to be passed to the function as a string.
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a string assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • the array index of the program variable

  • the row number for the string in the fetched data

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := OraGetString(cCursor, "1");
      nAge := OraGetInt(cCursor, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38

Sample scripts

OraArrayFetch.bdf, OraSample.bdf

親トピック: Data Fetching Functions
関連資料
OraGetFloat Function
OraGetInt Function
OraGetValue Function
OraDefine Function
OraDescribe Function
OraFetch Function


OraGetValue Function

Action

Retrieves any value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

Include file

Ora.bdh

Syntax

OraGetValue( in  cCursor     : cursor,
             in  sSqlVar     : string,
             out buffer      : string,
             in  nBufferSize : number,
             in  nIndex      : number optional,
             in  nDatatype   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection
sSqlVar

This parameter can be one of the following:

  • the name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder

  • the index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item

注: In the latter case, the column number has to be passed to the function as a string
buffer | Variable receiving either the value assigned to the place holder or the data retrieved from a fetched row, as the case may be
nBufferSize | Size of the variable receiving the value
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a value assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • the array index of the program variable

  • the row number for the long value in the fetched data
nDatatype | Specifies which data type to retrieve (optional). See Oracle data types for a list of data types

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      OraGetValue(cCursor, "1", sName, STRING_COMPLETE);
      nAge := OraGetInt(cCursor, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38
親トピック: Data Fetching Functions
関連資料
OraGetFloat Function
OraGetInt Function
OraGetString Function
OraOciError Function
OraDefine Function
OraDescribe Function
OraFetch Function
Oracle Data Types


Date Functions

  • OraDateToInt Function
    Converts an Oracle internal date to a date in integer format (YYYYMMDD).
  • OraIntToDate Function
    Converts a date from integer format (YYYYMMDD) to an Oracle internal date.
  • OraDateToString Function
    Converts an Oracle internal date to a string containing the date in the YYYY-MM-DD:hh.mm.ss format.
親トピック: Oracle API Functions Overview


OraDateToInt Function

Action

Converts an Oracle internal date to a date in integer format (YYYYMMDD).

Include file

Ora.bdh

Syntax

OraDateToInt( in sOraDate: string ): number;

Return value

date in the YYYYMMDD integer format

Parameter | Description
sOraDate | Oracle internal date in the SQLT_DAT format

Example

var
  cCursor: cursor;

dcltrans
  transaction TMain
  var
    sOraDate : string;
    nDate    : number;
  begin
    ...
    OraGetValue(cCursor, ":colDATE", sOraDate, 7);
    nDate := OraDateToInt(sOraDate);
    write(nDate); writeln;
  end TMain;
親トピック: Date Functions
関連資料
OraIntToDate Function
OraDateToString Function


OraIntToDate Function

Action

Converts a date from integer format (YYYYMMDD) to an Oracle internal date. This function may be used to generate an Oracle internal date, which can then be bound using Oracle's SQLT_DAT data type.

Include file

Ora.bdh

Syntax

OraIntToDate( in  nDate    : number,
              out sOraDate : string );

Parameter | Description
nDate | Date in integer format (YYYYMMDD)
sOraDate | Variable receiving the Oracle internal date

Example

var
  cCursor: cursor;

dcltrans
  transaction TMain
  var
    sOraDate: string;
  begin
    ...
    OraBind(cCursor, ":colDATE", SQLT_DAT);
    OraIntToDate(19980924, sOraDate);
    OraSetBinary(cCursor, ":colDATE", sOraDate, 7);
  end TMain;
親トピック: Date Functions
関連資料
OraDateToInt Function
OraDateToString Function


OraDateToString Function

Action

Converts an Oracle internal date to a string containing the date in the YYYY-MM-DD:hh.mm.ss format.

Include file

Ora.bdh

Syntax

OraDateToString(in  sOraDate  : string,
                out sDate     : string,
                in  nDateSize : number);
Parameter | Description
sOraDate | Oracle date in the SQLT_DAT format
sDate | String receiving the date in the YYYY-MM-DD:hh.mm.ss format
nDateSize | Size of the string buffer receiving the converted date

Example

var
  cCursor: cursor;

dcltrans
  transaction TMain
  var
    sOraDate, sDate: string;
  begin
    ...
    OraGetValue(cCursor, ":colDATE", sOraDate, 7);
    OraDateToString(sOraDate, sDate, sizeof(sDate));
    write(sDate); writeln;
  end TMain;
親トピック: Date Functions
関連資料
OraDateToInt Function
OraIntToDate Function


Error Handling Functions

  • OraOciError Function
    Retrieves the Oracle OCI error code if an OCI error occurred during the last Silk Performer Oracle API function call.
  • OraApiError Function
    Retrieves the Silk Performer Oracle API error code if an API error occurred during the last Silk Performer Oracle API function call.
  • OraLastErrorText Function
    Retrieves the error message describing the last error that occurred.
  • OraIgnoreError Function
    Specifies that a specific Oracle OCI error is to be ignored if it occurs during the next Silk Performer Oracle API function call.
親トピック: Oracle API Functions Overview


OraOciError Function

Action

Retrieves the Oracle OCI error code if an OCI error occurred during the last Silk Performer Oracle API function call.

Include file

Ora.bdh

Syntax

OraOciError(): number;

Return value

Oracle OCI error code.

A Silk Performer Oracle API error has occurred if a Silk Performer Oracle API function fails and the OraOciError returns 0. In this case, the OraApiError function can be used to retrieve the Silk Performer Oracle API error code

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);

    // select row from non existing table
    OraIgnoreError(cCursor, 942);
    OraExec(cCursor);
    write("Oracle OCI error: "); write(OraOciError()); writeln;
    write(OraLastErrorText()); writeln;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM non_existing_table;

Output

Oracle OCI error: 942
OCI-API Class 0 Error (Warning) 942 in OraExec(OEXEC, OEXN):
ORA-00942: table or view does not exist
親トピック: Error Handling Functions
関連資料
OraApiError Function
OraLastErrorText Function
OraIgnoreError Function


OraApiError Function

Action

Retrieves the Silk Performer Oracle API error code if an API error occurred during the last Silk Performer Oracle API function call. A Silk Performer Oracle API error occurs because of incorrect use of the Silk Performer Oracle API and stops the simulation by default.

Include file

Ora.bdh

Syntax

OraApiError(): number;

Return value

Oracle API error code

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);

    // array binding: three elements
    OraBind(cCursor, ":name", SQLT_CHR, 32, 3);
    OraBind(cCursor, ":age", SQLT_INT, 0, 3);

    // cause API error: index is too large
    OraSetString(cCursor, ":name", "Tom", 5);
    write("Oracle API error: "); write(OraApiError()); writeln;
    write(OraLastErrorText()); writeln;

    OraExec(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

Output

Oracle API error: 26
ORA-API Class 0 Error (Warning) 26 in OraBind:
ORAAPI: 26 - Index in OraSet/OraGet function is larger than maximum
array size set in OraBind.
親トピック: Error Handling Functions
関連資料
OraOciError Function
OraLastErrorText Function
OraIgnoreError Function


OraLastErrorText Function

Action

Retrieves the error message describing the last error that occurred. The error code can be retrieved using the OraOciError function and the OraApiError function.

Include file

Ora.bdh

Syntax

OraLastErrorText(): string;

Return value

error message

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlDelete);

    // Oracle error 900: invalid SQL statement
    OraIgnoreError(cCursor, 900);

    // execute invalid SQL statement
    OraExec(cCursor);
     write(OraLastErrorText());

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlDelete:
    REMOVE FROM my_table;
    // invalid SQL statement

Output

OCI-API Class 0 Error (Warning) 900 in OraExec(OEXEC, OEXN):
ORA-00900: invalid SQL statement
親トピック: Error Handling Functions
関連資料
OraOciError Function
OraApiError Function
OraIgnoreError Function


OraIgnoreError Function

Action

Specifies that a specific Oracle OCI error is to be ignored if it occurs during the next Silk Performer Oracle API function call. Since the error is then treated in the same way as a warning, the simulation will not be aborted.

Include file

Ora.bdh

Syntax

OraIgnoreError( in cCursor    : cursor,
                in nErrorCode : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
cCursor | Cursor associated with a database connection
nErrorCode | Oracle OCI error code. This error will be treated as a class 0 error (warning) for the next Silk Performer Oracle API call

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlDelete);

    // ignore Oracle error 900: invalid SQL statement
    OraIgnoreError(cCursor, 900);

    // execute invalid SQL statement
    OraExec(cCursor);

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlDelete:
    REMOVE FROM my_table; // invalid SQL statement
親トピック: Error Handling Functions
関連資料
OraOciError Function
OraApiError Function
OraLastErrorText Function


Functions Identical to Original OCI Functions

  • OraCancel Function
    Cancels a query after a number of rows have been fetched.
  • OraCommit Function
    Commits the current transaction.
  • OraRollback Function
    Rolls back the current transaction.
  • OraFetchLong Function
    Fetches a portion of an Oracle LONG or LONG RAW column.
  • OraAutoCommit Function
    Enables or disables autocommit.
親トピック: Oracle API Functions Overview


OraCancel Function

Action

Cancels a query after a number of rows have been fetched. This function releases any resources associated with the cursor except the internal representation of the parsed SQL statement.

Include file

Ora.bdh

Syntax

OraCancel(in cCursor: cursor): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
cCursor | Cursor associated with a database connection.

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sName : string;
    nAge : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraExec(cCursor);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    // fetch first row
    OraFetch(cCursor);
    sName := OraGetString(cCursor, "1");
    nAge := OraGetInt(cCursor, "2");
    write(sName, 32); write(nAge, 3); writeln;
    OraCancel(cCursor);
    // Ignore Oracle error 1002: fetch out of sequence
    OraIgnoreError(cCursor, 1002);
    // try to fetch second row
    OraFetch(cCursor);
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons;

Output

Howard 33
OCI-API Class 0 Error (Warning) 1002 in OraFetch(OFETCH, OFEN):
ORA-01002: fetch out of sequence

See Also

Oracle's Programmer's Guide to Oracle Call Interface for the Wrapped Oracle function: ocan

親トピック: Functions Identical to Original OCI Functions
関連資料
OraCommit Function
OraRollback Function
OraFetchLong Function
OraAutoCommit Function
OraOciError Function
OraFetch Function


OraCommit Function

Action

Commits the current transaction. All SQL statements since the last call of any of the following functions are committed:

OraLogon, OraCommit, OraRollback

Include file

Ora.bdh

Syntax

OraCommit(in hConnection: number): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
hConnection | Handle to the database connection

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_CHR, 32, 2);
    OraBind(cCursor, ":age", SQLT_INT, 0, 2);
    OraSetString(cCursor, ":name", "Bob", 1);
    OraSetInt(cCursor, ":age", 25, 1);
    OraSetString(cCursor, ":name", "Marcy", 2);
    OraSetInt(cCursor, ":age", 33, 2);
    OraExec(cCursor);
    OraClose(cCursor);
    OraCommit(hConnection);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

Sample scripts

OraSample.bdf

親トピック: Functions Identical to Original OCI Functions
関連資料
OraCancel Function
OraRollback Function
OraFetchLong Function
OraAutoCommit Function
OraOciError Function


OraRollback Function

Action

Rolls back the current transaction. All SQL statements executed since the last call of any of the following functions are rolled back:

OraLogon, OraCommit, OraRollback

Include file

Ora.bdh

Syntax

OraRollback(in hConnection: number): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
hConnection | Handle to the database connection

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlInsert);
    OraBind(cCursor, ":name", SQLT_CHR, 32, 2);
    OraBind(cCursor, ":age", SQLT_INT, 0, 2);
    OraSetString(cCursor, ":name", "Bob", 1);
    OraSetInt(cCursor, ":age", 25, 1);
    OraSetString(cCursor, ":name", "Marcy", 2);
    OraSetInt(cCursor, ":age", 33, 2);
    OraExec(cCursor);
    OraClose(cCursor);
    OraRollback(hConnection);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

Sample scripts

OraSample.bdf

親トピック: Functions Identical to Original OCI Functions
関連資料
OraCancel Function
OraCommit Function
OraFetchLong Function
OraAutoCommit Function
OraOciError Function
OraLogon Function


OraFetchLong Function

Action

Fetches a portion of an Oracle LONG or LONG RAW column. This functions can be used to fetch amounts of data up to 64 KB, starting at any offset. This function uses the Oracle OCI oflng function to retrieve a long column in multiple pieces.

注: To fetch a portion of a long column, you must call the OraFetch function before performing the OraFetchLong function call.

Include file

Ora.bdh

Syntax

OraFetchLong( in  cCursor     : cursor,
              in  nPosition   : number,
              in  nBufferSize : number,
              in  nDatatype   : number,
              out nReturnLen  : number
              in  nOffset     : number ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
sCursor | Cursor associated with a database connection
nPosition | Index position of the long column in the row. The first (and leftmost) column is position 1
nBufferSize | Size of the buffer that receives the long column data
nDatatype | Oracle external data type of the select-list item. See Oracle data types for a list of Oracle data types.
nReturnLen | Number of bytes returned
nOffset | Offset of the first byte to receive within the select-list item

Example

var
  hConnection : number;
  cCursor : cursor;

dcltrans
  transaction TMain
  var
    sBuffer : string(64000);
    nLength : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraDefine(cCursor, 1, SQLT_LBI, 64000);
    OraExec(cCursor);
    OraFetch(cCursor);
    OraFetchLong(cCursor, 1, sizeof(sBuffer), SQLT_LBI, nLength, 0);
    OraGetValue(cCursor, "1", sBuffer, STRING_COMPLETE);
    write("image size = "); write(nLength); writeln;
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
    SELECT bitmap FROM images;

Output

image size = 48703

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: oflng

親トピック: Functions Identical to Original OCI Functions
関連資料
OraCancel Function
OraCommit Function
OraRollback Function
OraAutoCommit Function
OraFetch Function
OraOciError Function
Oracle Data Types


OraAutoCommit Function

Action

Enables or disables autocommit. If autocommit is enabled, every SQL data manipulation statement is automatically committed. Otherwise, OraCommit function calls are necessary to commit SQL statements.

Include file

Ora.bdh

Syntax

OraAutoCommit( in hConnection : number,
               in bAuto       : boolean): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the OraOciError function to retrieve the Oracle OCI error code

Parameter | Description
hConnection | Handle to the database connection
bAuto

  • If this parameter is set to true, autocommit is enabled

  • If this parameter is set to false, autocommit is disabled

Example

var
  hConnection: number;

dcltrans
  transaction TMain
  var
  bOk: boolean;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    bOk := OraAutoCommit(hConnection, true);
    if bOk thenwrite("Autocommit successfully set");
      writeln;
    elsewrite("Autocommit could not be set");
      writeln;
  end;
  OraLogoff(hConnection);
end TMain;

Output

Autocommit successfully set
親トピック: Functions Identical to Original OCI Functions
関連資料
OraCancel Function
OraCommit Function
OraRollback Function
OraFetchLong Function
OraOciError Function


General Information About Oracle and OCI

Basically we have to distinguish the Oracle version from the OCI version. The Oracle version represents the version number of the Oracle client software or the version number of the Oracle Database Server. The OCI (Oracle Call Interface) version depicts the version number of the OCI protocol, which is used for the communication between the client and the database server.

For example, available Oracle versions are (Oracle Databases as well as the Client software):

  • Oracle 7.3

  • Oracle 8.0.5

  • Oracle 8.1.5

  • Oracle 9.0.1

  • ...

And available OCI versions are (Oracle Call Interface protocols):

  • OCI 7.3

  • OCI 8.x

It is now possible that a client application uses OCI 7 to communicate with a Oracle 7.x database as well as with a Oracle 8.x or 9.x database. But when using OCI 7 to connect to an Oracle 8 database you will not be able to access the Oracle 8 Object features.

OCI 7.x contains about 40 API functions whereas OCI 8.x contains about 550 functions. The majority of the OCI 8 functions are necessary to assist Oracle 8 Objects.

Silk Performer specific information on Oracle and OCI

Silk Performer supports the complete OCI 7.x protocol, regardless if an Oracle 7.x or Oracle 8.x database is used (see above).

Silk Performer supports a subset of the OCI 8.x protocol.

Please note that the OCI 8 API includes also all functions from the OCI 7 API (OCI 7 API is a subset of the OCI 8 API). If a client appplication is now linked with the OCI 8 library, the Silk Performer Recorder will detect and record all functions used from the OCI 7 subset and a subset of the OCI 8 functions.

Rather than asking yourself if Silk Performer supports a specific Oracle version, ask yourself which OCI version does Silk Performer support.

The answer to this question will prove that Silk Performer supports the OCI 7 API as well as the OCI 7 subset of the OCI 8 API and a subset of the OCI 8 API.

Functions identical to original OCI functions

For a detailed description of Oracle's native call interface (foundation of all Oracle functions), refer to Oracle's Programmer's Guide to Oracle Call Interface.

親トピック: Oracle API Functions Overview
親トピック: Oracle 8 API Functions Overview


Oracle Data Types

The following Oracle external data types are supported in Oracle functions:

  • SQLT_CHR - (ORANET TYPE) character string
  • SQLT_NUM - (ORANET TYPE) oracle numeric
  • SQLT_INT - (ORANET TYPE) integer
  • SQLT_FLT - (ORANET TYPE) floating-point number
  • SQLT_STR - zero-terminated string
  • SQLT_VNU - NUM with preceding length byte
  • SQLT_PDN - (ORANET TYPE) Packed Decimal Numeric
  • SQLT_LNG - long
  • SQLT_VCS - variable character string
  • SQLT_NON - null/empty PCC Descriptor entry
  • SQLT_RID - rowid
  • SQLT_DAT - date in Oracle format
  • SQLT_VBI - binary in VCS format
  • SQLT_BIN - binary data (DTYBIN)
  • SQLT_LBI - long binary
  • SQLT_UIN - unsigned integer
  • SQLT_SLS - display sign leading separate
  • SQLT_LVC - longer longs (char)
  • SQLT_LVB - longer long binary
  • SQLT_AFC - ANSI fixed char
  • SQLT_AVC - ANSI Var char
  • SQLT_CUR - cursor type
  • SQLT_LAB - label type
  • SQLT_OSL - oslabel type
親トピック: Oracle API Functions Overview


Oracle 8 API Functions Overview

Silk Performer provides Oracle 8 API functions along with Oracle 8 database traffic recording and replaying support.

Oracle 8 API functions provide a simple and powerful interface to Oracle databases version 7.x, 8.x and version 9.x. All features of Oracle 7.x and Oracle 8.x except Oracle object support are accessible through these Oracle 8 API functions, including:

  • array binding and fetching

  • piecewise binding and fetching

  • binding PL/SQL tables

  • calling PL/SQL blocks and stored procedures

  • cursor binding

  • support for all Oracle data types, including LOB (Large Object) data types

Supported Functions

All Oracle API functions were implemented with the help of Oracle's OCI functions version 8. The optional parameters concept enables both simple usage of the API on the one hand and performing specific database operations using the same functions on the other hand. All functions listed below are available:

  • Connect, Authorize, and Initialize Functions
    Lists the Oracle 8 connect, authorize, and initialize functions.
  • Handle and Descriptor Functions
    Lists the Oracle 8 handle and descriptor functions.
  • Placeholder Binding Functions
    Lists the Oracle 8 placeholder binding functions.
  • Parameter Binding Functions
    Lists the Oracle 8 parameter binding functions.
  • Result Set Definition Functions
    Lists the Oracle 8 result set definition functions.
  • Statement Processing Functions
    Lists the Oracle 8 statement processing functions.
  • Data Fetching Functions
    Lists the Oracle 8 data fetching functions.
  • Transaction Functions
    Lists the Oracle 8 transaction functions.
  • Miscellaneous Functions
    Lists the Oracle 8 miscellaneous functions.
  • LOB Functions
    Lists the Oracle 8 LOB functions.
  • Error Handling Functions
    Lists the Oracle 8 error handling functions.
  • General Information About Oracle and OCI
    Distinguishes the Oracle version from the OCI version.
  • Oracle 8 Data Types
    Lists the Oracle external data types that are supported in Oracle functions.
親トピック: Database (DBMS) Functions


Connect, Authorize, and Initialize Functions

  • Ora8Init Function
    Initializes the OCI environment and allocates a handle to the initialized environment.
  • Ora8ServerAttach Function
    Creates an access path to a data source for OCI operations.
  • Ora8ServerDetach Function
    Deletes an access path to a data source for OCI operations.
  • Ora8SessionBegin Function
    Creates a user session and begins a user session for a given server.
  • Ora8SessionEnd Function
    Terminates a user session context which has been started with Ora8SessionBegin.
  • Ora8Logon Function
    Create a simple logon session.
  • Ora8Logoff Function
    Release a session that was retrieved using Ora8Logon.
親トピック: Oracle 8 API Functions Overview


Ora8Init Function

Action

Initializes the OCI environment and allocates a handle to the initialized environment.

Include file

Ora8.bdh

Syntax

Ora8Init (out hEnv  : number,
          in  nMode : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hEnv | Variable receiving the handle to the initialized environment.
nMode

Specifies initialization of an environment mode (optional).

Valid modes are:

  • OCI_DEFAULT (default)

  • OCI_THREADED

  • OCI_OBJECT

  • OCI_SHARED

  • OCI_EVENTS

  • OCI_NO_MUTEX

  • OCI_NO_UCB

Example

var
  ghEnv0        : number;

 dcltrans
  transaction TMain
  var
    bOK : boolean;
  begin
    bOK := Ora8Init(ghEnv0, OCI_DEFAULT);

    if bOK then
      write("OCI environment successfully initialized."); writeln;
    else
      write("Error initializing OCI environment."); writeln;
    end;

    ...

    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

Output

OCI environment successfully initialized.

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIEnvCreate, OCIEnvNlsCreate, OCIInitialize, OCIEnvInit
親トピック: Connect, Authorize, and Initialize Functions
関連資料
Ora8ServerAttach Function
Ora8ServerDetach Function
Ora8SessionBegin Function
Ora8SessionEnd Function
Ora8Logon Function
Ora8Logoff Function
Ora8HandleFree Function
Ora8HandleAlloc Function


Ora8ServerAttach Function

Action

Creates an access path to a data source for OCI operations.

Include file

Ora8.bdh

Syntax

Ora8ServerAttach( in hServer : number,
                  in sServer : string,
                  in nMode   : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hServer | An uninitialized server handle, which gets initialized by this call.
sServer | SQL*Net connect descriptor.
nMode

Specifies the various modes of operation.

The valid modes are:

  • OCI_DEFAULT (default)

  • OCI_CPOOL

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghServer0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8HandleAlloc(ghEnv0, ghServer0, OCI_HTYPE_SERVER);
    Ora8ServerAttach(ghServer0, "ORCLNET2");

    ...

    Ora8ServerDetach(ghServer0);
    Ora8HandleFree(ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIServerAttach
親トピック: Connect, Authorize, and Initialize Functions
関連資料
Ora8Init Function
Ora8ServerDetach Function
Ora8SessionBegin Function
Ora8SessionEnd Function
Ora8Logon Function
Ora8Logoff Function
Ora8HandleFree Function
Ora8HandleAlloc Function


Ora8ServerDetach Function

Action

Deletes an access path to a data source for OCI operations.

Include file

Ora8.bdh

Syntax

Ora8ServerDetach( in hServer : number,
                  in nMode   : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hServer | An initialized server handle, which gets reset to uninitialized state. The handle is not de-allocated.
nMode | Specifies the various modes of operation (optional). The only valid mode is OCI_DEFAULT for the default mode. Omit the parameter in order to use the default parameter.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghServer0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8HandleAlloc(ghEnv0, ghServer0, OCI_HTYPE_SERVER);
    Ora8ServerAttach(ghServer0, "ORCLNET2");

    ...

    Ora8ServerDetach(ghServer0);
    Ora8HandleFree(ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIServerDetach
親トピック: Connect, Authorize, and Initialize Functions
関連資料
Ora8Init Function
Ora8ServerAttach Function
Ora8SessionBegin Function
Ora8SessionEnd Function
Ora8Logon Function
Ora8Logoff Function
Ora8HandleFree Function
Ora8HandleAlloc Function


Ora8SessionBegin Function

Action

Creates a user session and begins a user session for a given server.

Include file

Ora8.bdh

Syntax

Ora8SessionBegin( in hSvcCtx  : number,
                  in hSession : number,
                  in nCredt   : number optional,
                  in nMode    : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | A handle to a service context. There must be a valid server handle set in the service context handle.
hSession | A handle to a user session context, which is initialized by this call.
nCredt

Specifies the type of credentials to use for establishing the user session (optional).

Valid values are:

  • OCI_CRED_RDBMS

  • OCI_CRED_EXT
nMode

Specifies the various modes of operation (optional).

Valid modes are:

  • OCI_DEFAULT (default)

  • OCI_MIGRATE

  • OCI_SYSDBA

  • OCI_SYSOPER

  • OCI_PRELIM_AUTH

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghServer0     : number;
  ghSvcCtx0     : number;
  ghSession0    : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8HandleAlloc(ghEnv0, ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8ServerAttach(ghServer0, "ORCLNET2");
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghServer0, OCI_ATTR_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSession0, OCI_HTYPE_SESSION);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "SCOTT", OCI_ATTR_USERNAME);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "TIGER", OCI_ATTR_PASSWORD);
    Ora8SessionBegin(ghSvcCtx0, ghSession0, OCI_CRED_RDBMS);
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghSession0, OCI_ATTR_SESSION);

    ...

    Ora8SessionEnd(ghSvcCtx0, ghSession0);
    Ora8HandleFree(ghSession0, OCI_HTYPE_SESSION);
    Ora8ServerDetach(ghServer0);
    Ora8HandleFree(ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8HandleFree(ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCISessionBegin
親トピック: Connect, Authorize, and Initialize Functions
関連資料
Ora8Init Function
Ora8ServerAttach Function
Ora8ServerDetach Function
Ora8SessionEnd Function
Ora8Logon Function
Ora8Logoff Function
Ora8HandleFree Function
Ora8HandleAlloc Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function


Ora8SessionEnd Function

Action

Terminates a user session context which has been started with Ora8SessionBegin.

Include file

Ora8.bdh

Syntax

Ora8SessionEnd( in hSvcCtx  : number,
                in hSession : number,
                in nMode    : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | The service context handle.
hSession | The session handle which should be de-authenticated.
nMode | Specifies the various modes of operation (optional). The only valid mode is OCI_DEFAULT. Omit the parameter in order to use the default parameter.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghServer0     : number;
  ghSvcCtx0     : number;
  ghSession0    : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8HandleAlloc(ghEnv0, ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8ServerAttach(ghServer0, "ORCLNET2");
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghServer0, OCI_ATTR_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSession0, OCI_HTYPE_SESSION);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "SCOTT", OCI_ATTR_USERNAME);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "TIGER", OCI_ATTR_PASSWORD);
    Ora8SessionBegin(ghSvcCtx0, ghSession0, OCI_CRED_RDBMS);
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghSession0, OCI_ATTR_SESSION);

    ...

    Ora8SessionEnd(ghSvcCtx0, ghSession0);
    Ora8HandleFree(ghSession0, OCI_HTYPE_SESSION);
    Ora8ServerDetach(ghServer0);
    Ora8HandleFree(ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8HandleFree(ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCISessionEnd
親トピック: Connect, Authorize, and Initialize Functions
関連資料
Ora8Init Function
Ora8ServerAttach Function
Ora8ServerDetach Function
Ora8SessionBegin Function
Ora8Logon Function
Ora8Logoff Function
Ora8HandleFree Function
Ora8HandleAlloc Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function


Ora8Logon Function

Action

Create a simple logon session.

Include file

Ora8.bdh

Syntax

Ora8Logon( in  hEnv      : number,
           out hSvcCtx   : number,
           in  sUser     : string,
           in  sPassword : string optional,
           in  sConnect  : string optional,
           in  nMode     : number optional): boolean;

Return value

  • true if successful

  • false otherwise; In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code.

Parameter | Description
hEnv | The environment handle.
hSvcCtx | Variable receiving the initialized service context handle.
sUser

User Identification. This parameter contains either only the user name or the user name, the password, and the host machine identifier. In the latter case, it is necessary to insert a / character between the user name and the password, and a @ character between the password and the connect string. Valid examples are shown below:

  • name

  • name/password

  • name@service_name

  • name/password@service_name
sPassword | Password (optional). If the password is specified through the sUser parameter, this parameter should be omitted or set to NULL.
sConnect | SQL*Net connect descriptor (optional). If the connect string is passed through the sUser parameter, this parameter should be omitted.
nMode

Specifies the various modes of operation (optional).

Valid values are:

  • OCI_DFAULT (default)

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;
  bOK           : boolean;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    bOK := Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    if bOk then
      write("Connection to database established."); writeln;
    else
      write("Error connecting to database."); writeln;
    end;

    ...

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

Output

Connection to database established.

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCILogon, OCILogon2
親トピック: Connect, Authorize, and Initialize Functions
関連資料
Ora8Init Function
Ora8ServerAttach Function
Ora8ServerDetach Function
Ora8SessionBegin Function
Ora8SessionEnd Function
Ora8Logoff Function
Ora8HandleFree Function
Ora8HandleAlloc Function


Ora8Logoff Function

Action

Release a session that was retrieved using Ora8Logon.

Include file

Ora8.bdh

Syntax

Ora8Logoff( in hSvcCtx: number ): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code

Parameter | Description
hSvcCtx | Valid service context handle established using the Ora8Logon function

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    ...

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See Also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCILogoff
親トピック: Connect, Authorize, and Initialize Functions
関連資料
Ora8Init Function
Ora8ServerAttach Function
Ora8ServerDetach Function
Ora8SessionBegin Function
Ora8SessionEnd Function
Ora8Logon Function
Ora8HandleFree Function
Ora8HandleAlloc Function
Ora8OciError Function


Handle and Descriptor Functions

  • Ora8HandleAlloc Function
    Allocates and initializes a handle of the specified type.
  • Ora8HandleFree Function
    Deallocates the given handle of the specified type and releases all allocated resources.
  • Ora8DescriptorAlloc Function
    Allocates and initializes a descriptor or LOB locator of the specified type.
  • Ora8DescriptorFree Function
    Deallocates a previously allocated descriptor.
  • Ora8AttrSetHandle Function
    Sets a handle attribute of a handle or a descriptor.
  • Ora8AttrSetString Function
    Sets a string attribute of a handle or a descriptor.
  • Ora8AttrSetNumber Function
    Sets a numeric attribute of a handle or a descriptor.
  • Ora8AttrSetBoolean Function
    Sets a boolean attribute of a handle or a descriptor.
  • Ora8AttrGetHandle Function
    Gets a handle attribute of a handle or a descriptor.
  • Ora8AttrGetString Function
    Gets a string attribute of a handle or a descriptor.
  • Ora8AttrGetNumber Function
    Gets a number attribute of a handle or a descriptor.
  • Ora8AttrGetBoolean Function
    Gets a boolean attribute of a handle or a descriptor.
  • Ora8ParamGet Function
    Returns a descriptor of a parameter specified by position in the describe handle or statement handle.
  • Ora8ParamSet Function
    Used to set a complex object retrieval (COR) descriptor into a COR handle.
親トピック: Oracle 8 API Functions Overview


Ora8HandleAlloc Function

Action

Allocates and initializes a handle of the specified type.

Include file

Ora8.bdh

Syntax

Ora8HandleAlloc( in  hEnv     : number,
                 out hHandle  : number,
                 in  nType    : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hEnv | An initialized environment handle. This is used as parent handle.
hHandle | Variable receiving the handle to be allocated.
nType

Specifies the type of handle to be allocated.

The allowed types are:

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  const
    PUBLIC_KEY := "\h59b20094...";
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32);
    Ora8Bind(ghStmt0, ":key", SQLT_BIN, 64);

    Ora8SetString(ghStmt0, ":name", "Michael");
    Ora8SetBinary(ghStmt0, ":key",  PUBLIC_KEY, STRING_COMPLETE);

    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO keys (name, key) VALUES (:name, :key);

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIHandleAlloc
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Bind Function
Ora8Define Function


Ora8HandleFree Function

Action

Deallocates the given handle of the specified type and releases all allocated resources. The handle must have been initialized with the given type.

Include file

Ora8.bdh

Syntax

Ora8HandleFree( in hHandle : number,
                in nType   : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hHandle | An allocated and initialized handle that should be freed.
nType

Specifies the type of the given handle.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  const
    PUBLIC_KEY := "\h59b20094...";
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32);
    Ora8Bind(ghStmt0, ":key", SQLT_BIN, 64);

    Ora8SetString(ghStmt0, ":name", "Michael");
    Ora8SetBinary(ghStmt0, ":key",  PUBLIC_KEY, STRING_COMPLETE);

    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO keys (name, key) VALUES (:name, :key);

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIHandleFree
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function


Ora8DescriptorAlloc Function

Action

Allocates and initializes a descriptor or LOB locator of the specified type.

Include file

Ora8.bdh

Syntax

Ora8DescriptorAlloc( in  hEnv        : number,
                     out hDescriptor : number,
                     in  nType       : number): boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hEnv | An initialized environment handle. This is used as parent handle.
hDescriptor | Variable receiving the descriptor or LOB locator to be allocated.
nType

Type of descriptor or LOB locator to be allocated.

Could be one of the following:

  • OCI_DTYPE_SNAP

  • OCI_DTYPE_LOB

  • OCI_DTYPE_FILE

  • OCI_DTYPE_ROWID

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8DescriptorAlloc(ghEnv0, ghDescriptor0, OCI_DTYPE_SNAP);

    ...

    Ora8DescriptorFree(ghDescriptor0, OCI_DTYPE_SNAP);
    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIDescriptorAlloc
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8DescriptorFree Function

Action

Deallocates a previously allocated descriptor.

Include file

Ora8.bdh

Syntax

Ora8DescriptorFree( in hDescriptor : number,
                    in nType       : number) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDescriptor | An allocated and initialized descriptor that should be freed.
nType

Specifies the type of the given descriptor.

Could be one of the following:

  • OCI_DTYPE_SNAP

  • OCI_DTYPE_LOB

  • OCI_DTYPE_FILE

  • OCI_DTYPE_ROWID

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8DescriptorAlloc(ghEnv0, ghDescriptor0, OCI_DTYPE_SNAP);

    ...

    Ora8DescriptorFree(ghDescriptor0, OCI_DTYPE_SNAP);
    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIDescriptorFree
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8AttrSetHandle Function

Action

Sets a handle attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrSetHandle( in hTargetHandle : number,
                   in nType         : number,
                   in hAttrValue    : number,
                   in nAttrType     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute gets modified.
nType

Specifies the type of the handle whose attribute gets modified.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
hAttrValue | Handle that should be set as attribute value into the target handle.
nAttrType

The type of attribute being set.

The valid types are listed in the table "ORA 8 attributes".

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghServer0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8HandleAlloc(ghEnv0, ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8ServerAttach(ghServer0, "ORCLNET2");
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghServer0, OCI_ATTR_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSession0, OCI_HTYPE_SESSION);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "SCOTT", OCI_ATTR_USERNAME);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "TIGER", OCI_ATTR_PASSWORD);
    Ora8SessionBegin(ghSvcCtx0, ghSession0, OCI_CRED_RDBMS);
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghSession0, OCI_ATTR_SESSION);
    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);

    ...

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8SessionEnd(ghSvcCtx0, ghSession0);
    Ora8HandleFree(ghSession0, OCI_HTYPE_SESSION);
    Ora8ServerDetach(ghServer0);
    Ora8HandleFree(ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8HandleFree(ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrSet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8AttrSetString Function

Action

Sets a string attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrSetString( in hTargetHandle : number,
                   in nType         : number,
                   in sAttrValue    : string,
                   in nAttrType     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute gets modified.
nType

Specifies the type of the handle whose attribute gets modified.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
sAttrValue | String that should be set as attribute value into the target handle.
nAttrType

The type of attribute being set.

The valid types are listed in the table "ORA 8 attributes".

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghServer0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0);
    Ora8HandleAlloc(ghEnv0, ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8ServerAttach(ghServer0, "ORCLNET2");
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghServer0, OCI_ATTR_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSession0, OCI_HTYPE_SESSION);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "SCOTT", OCI_ATTR_USERNAME);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "TIGER", OCI_ATTR_PASSWORD);
    Ora8SessionBegin(ghSvcCtx0, ghSession0, OCI_CRED_RDBMS);
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghSession0, OCI_ATTR_SESSION);
    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);

    ...

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8SessionEnd(ghSvcCtx0, ghSession0);
    Ora8HandleFree(ghSession0, OCI_HTYPE_SESSION);
    Ora8ServerDetach(ghServer0);
    Ora8HandleFree(ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleFree(ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrSet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8AttrSetNumber Function

Action

Sets a numeric attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrSetNumber( in hTargetHandle : number,
                   in nType         : number,
                   in nAttrValue    : number,
                   in nAttrType     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute gets modified.
nType

Specifies the type of the handle whose attribute gets modified.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
nAttrValue | Numeric value that should be set as attribute value into the target handle.
nAttrType

The type of attribute being set.

The valid types are listed in the table "ORA 8 attributes".

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghServer0     : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghSession0    : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0);
    Ora8HandleAlloc(ghEnv0, ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8ServerAttach(ghServer0, "ORCLNET2");
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghServer0, OCI_ATTR_SERVER);
    Ora8HandleAlloc(ghEnv0, ghSession0, OCI_HTYPE_SESSION);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "SCOTT", OCI_ATTR_USERNAME);
    Ora8AttrSetString(ghSession0, OCI_HTYPE_SESSION, "TIGER", OCI_ATTR_PASSWORD);
    Ora8SessionBegin(ghSvcCtx0, ghSession0, OCI_CRED_RDBMS);
    Ora8AttrSetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, ghSession0, OCI_ATTR_SESSION);
    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8AttrSetNumber(ghStmt0, OCI_HTYPE_STMT, 10, OCI_ATTR_PREFETCH_ROWS);

    ...

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8SessionEnd(ghSvcCtx0, ghSession0);
    Ora8HandleFree(ghSession0, OCI_HTYPE_SESSION);
    Ora8ServerDetach(ghServer0);
    Ora8HandleFree(ghServer0, OCI_HTYPE_SERVER);
    Ora8HandleFree(ghSvcCtx0, OCI_HTYPE_SVCCTX);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrSet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8AttrSetBoolean Function

Action

Sets a boolean attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrSetBoolean( in hTargetHandle : number,
                    in nType         : number,
                    in bAttrValue    : boolean,
                    in nAttrType     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute gets modified.
nType

Specifies the type of the handle whose attribute gets modified.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
bAttrValue | Boolean value that should be set as attribute value into the target handle.
nAttrType

The type of attribute being set.

The valid types are listed in the table "ORA 8 attributes".

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrSet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function


Ora8AttrGetHandle Function

Action

Gets a handle attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrGetHandle( in  hTargetHandle : number,
                   in  nType         : number,
                   out hAttrValue    : number,
                   in  nAttrType     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute is retrieved.
nType

Specifies the type of the handle whose attribute is retrieved.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
hAttrValue | Variable receiving the handle attribute value.
nAttrType

The type of attribute being retrieved.

The valid types are listed in the table "ORA 8 attributes".

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    hEnvironment : number;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8AttrGetHandle(ghSvcCtx0, OCI_HTYPE_SVCCTX, hEnvironment, OCI_ATTR_ENV);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrGet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8AttrGetString Function

Action

Gets a string attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrGetString( in  hTargetHandle : number,
                   in  nType         : number,
                   out sAttrValue    : string,
                   in  nAttrType     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute is retrieved.
nType

Specifies the type of the handle whose attribute is retrieved.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
sAttrValue | Variable receiving the string attribute value.
nAttrType

The type of attribute being retrieved.

The valid types are listed in the table "ORA 8 attributes".

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    sPwd : string;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8AttrGetString(ghSvcCtx0, OCI_HTYPE_SVCCTX, sPwd, OCI_ATTR_LDAP_CRED);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrGet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8AttrGetNumber Function

Action

Gets a number attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrGetNumber( in  hTargetHandle : number,
                   in  nType         : number,
                   out nAttrValue    : number,
                   in  nAttrType     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute is retrieved.
nType

Specifies the type of the handle whose attribute is retrieved.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
nAttrValue | Variable receiving the number attribute value.
nAttrType

The type of attribute being retrieved.

The valid types are listed in the table "ORA 8 attributes".

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    nCacheMaxSize: number;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8AttrGetNumber(ghSvcCtx0, OCI_HTYPE_SVCCTX, nCacheMaxSize, OCI_ATTR_CACHE_MAX_SIZE);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrGet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8ParamSet Function
Ora8Init Function


Ora8AttrGetBoolean Function

Action

Gets a boolean attribute of a handle or a descriptor. The type of the target handle whose attribute gets modified must be specified in the nType parameter. The attribute type must be specified in the nAttrType parameter.

Include file

Ora8.bdh

Syntax

Ora8AttrGetBoolean( in  hTargetHandle : number,
                    in  nType         : number,
                    out bAttrValue    : boolean,
                    in  nAttrType     : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTargetHandle | Initialized handle whose attribute is retrieved.
nType

Specifies the type of the handle whose attribute is retrieved.

The specific types are:

  • OCI_HTYPE_ENV

  • OCI_HTYPE_ERROR

  • OCI_HTYPE_SVCCTX

  • OCI_HTYPE_STMT

  • OCI_HTYPE_BIND

  • OCI_HTYPE_DEFINE

  • OCI_HTYPE_DESCRIBE

  • OCI_HTYPE_SERVER

  • OCI_HTYPE_SESSION

  • OCI_HTYPE_TRANS
bAttrValue | Variable receiving the boolean attribute value.
nAttrType

The type of attribute being retrieved.

The valid types are listed in the table "ORA 8 attributes".

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    bObject : boolean;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8AttrGetBoolean(ghEnv0, OCI_HTYPE_ENV, bObject, OCI_ATTR_OBJECT);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIAttrGet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8ParamGet Function
Ora8ParamSet Function


Ora8ParamGet Function

Action

Returns a descriptor of a parameter specified by position in the describe handle or statement handle.

Include file

Ora8.bdh

Syntax

Ora8ParamGet( in  hHandle     : number
              in  nType       : number,
              out hParamDesc  : number,
              in  nPosition   : number) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hHandle | A statement handle or describe handle.
nType

Specifies the type of the handle.

Valid types are:

  • OCI_HTYPE_STMT

  • OCI_DTYPE_PARAM

  • OCI_HTYPE_COMPLEXOBJECT
hParamDesc | Variable receiving the descriptor of the parameter at the given position, of handle type OCI_DTYPE_PARAM.
nPosition | Position number in the statement handle or describe handle.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8ParamGet(ghStmt0, OCI_HTYPE_STMT, ghDescriptor0, 1);

    ...

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT empno FROM emp;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIParamGet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamSet Function
Ora8Init Function


Ora8ParamSet Function

Action

Used to set a complex object retrieval (COR) descriptor into a COR handle.

Include file

Ora8.bdh

Syntax

Ora8ParamSet( in hHandle     : number,
              in nType       : number,
              in hParamDesc  : number,
              in nDescType   : number,
              in nPosition   : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hHandle | Target handle.
nType | Specifies the type of the handle.
hParamDesc | Descriptor to be set.
nDescType | Specifies the type of the descriptor. The descriptor type for a COR descriptor is OCI_DTYPE_COMPLEXOBJECTCOMP.
nPosition | Position number.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghSvcCtx0     : number;
  ghCOR         : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  const
    PUBLIC_KEY := "\h59b20094...";
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8ParamSet(ghCOR, OCI_HTYPE_COMPLEXOBJECT, ghDescriptor0, OCI_DTYPE_COMPLEXOBJECTCOMP, 1);

    ...

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIParamSet
親トピック: Handle and Descriptor Functions
関連資料
Ora8HandleAlloc Function
Ora8HandleFree Function
Ora8DescriptorAlloc Function
Ora8DescriptorFree Function
Ora8AttrSetHandle Function
Ora8AttrSetString Function
Ora8AttrSetNumber Function
Ora8AttrSetBoolean Function
Ora8AttrGetHandle Function
Ora8AttrGetString Function
Ora8AttrGetNumber Function
Ora8AttrGetBoolean Function
Ora8ParamGet Function
Ora8Init Function


Placeholder Binding Functions

  • Ora8Bind Function
    Binds a placeholder in a SQL statement or PL/SQL block to a program variable.
  • Ora8BindLob Function
    Binds a placeholder for a LOB parameter in a SQL statement or PL/SQL block to a program variable.
  • Ora8BindRefCur Function
    Binds a place holder in a SQL statement or PL/SQL block to a program variable.
親トピック: Oracle 8 API Functions Overview


Ora8Bind Function

Action

Binds a placeholder in a SQL statement or PL/SQL block to a program variable. The variable is accessible through the Ora8Set and Ora8Get functions. The placeholder is identified by the name or the number declared in the SQL statement or PL/SQL block. The functions listed below are used to assign values to the program variable that is bound to the specified placeholder:

  • Ora8SetString
  • Ora8SetBinary
  • Ora8SetInt
  • Ora8SetFloat
  • Ora8SetNull

This function serves to bind placeholders in SQL statements or PL/SQL blocks to both scalar and array variables. In addition, it can be used to bind placeholders to be used in piecewise operations. The function must be called after preparing the SQL statement or PL/SQL block and before calling the Ora8Set function.

Include file

Ora8.bdh

Syntax

Ora8Bind( in  hStmt        : number,
          in  sSqlVar      : string,
          in  nDatatype    : number optional,
          in  nSize        : number optional,
          in  nArraySize   : number optional,
          in  nBindOption  : number optional,
          out hBindHandle  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the placeholder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a placeholder.
nDatatype

Oracle external data type of the program variable (optional). Oracle converts the program variable from external to internal format when the variable is sent to the database and vice versa when it is retrieved from the database. See Oracle 8 data types for a list of data types

The default data type is SQLT_STR (null-terminated string)
nSize

Size of the program variable or the array element in bytes (optional). Since this function needs to be called only once for many different values on successive Ora8StmtExecute function calls, this parameter must contain the maximum size of the element to bind.

This parameter should be omitted for data types of fixed length (SQLT_NUM, SQLT_INT, SQLT_FLT, SQLT_VNU, SQLT_RID, SQLT_DAT, SQLT_UIN, SQLT_CUR). If specified, the parameter is ignored and set to the fixed length of the data type.

This parameter should not be omitted for the following data types: SQLT_CHR, SQLT_LNG, SQLT_BIN, SQLT_LBI, SQLT_AFC, SQLT_AVC, SQLT_VCS, SQLT_LVC, SQLT_VBI, SQLT_LVB

When performing piecewise binding of the variable to the placeholder, this parameter specifies the piece size.
nArraySize

Maximum number of array elements to bind (optional).

The default option is scalar binding.

When performing piecewise binding of the variable to the placeholder, this parameter specifies the maximum column size.
nBindOption

Specifies how to bind the placeholder (optional). The following are the possible options for binding a placeholder:

  • ORA_DEFAULT. This is the default option. A placeholder is bound to a scalar or to an array program variable.

  • ORA_PIECEWISE. The program variable is bound to the placeholder in multiple pieces. In this case, nSize specifies the piece size, and nArraySize the maximum column size. You have to call the Ora8SetPieces function in order to set the values for the pieces.

  • ORA_PLSQLTABLE_IN. The program variable is bound to a PL/SQL table that is used as an in parameter within a stored procedure.

  • ORA_PLSQLTABLE_OUT. The program variable is bound to a PL/SQL table that is used as an out parameter in a stored procedure.

  • ORA_PLSQLTABLE_INOUT: The program variable is bound to a PL/SQL table that is used as an inout parameter in a stored procedure.

  • ORA_PLSQL_IN. The program variable is bound to a PL/SQL scalar parameter that is used as an in parameter within a stored procedure.

  • ORA_PLSQL_OUT. The program variable is bound to a PL/SQL scalar parameter that is used as an out parameter in a stored procedure.

  • ORA_PLSQL_INOUT. The program variable is bound to a PL/SQL scalar parameter that is used as an inout parameter in a stored procedure.
hBindHandle | Variable receiving the bind handle (optional).

A placeholder in a SQL statement consists of a colon (:) followed by a SQL identifier. The placeholder is not a test script variable. For example, the following SQL statement contains two placeholders, :min_age and :max_age.

SELECT name, age
FROM persons
WHERE age >= :min_age AND age <= :max_age;

It is also possible to define placeholders that consist of a colon followed by a literal integer between 1 and 255.

The following SQL statement contains two placeholders, :1 and :2.

SELECT name, age
FROM persons
WHERE age >= :1 AND age <= :2;

Example: scalar binding

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":1", SQLT_INT);
    Ora8SetInt(ghStmt0, ":1", 25);
    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);
    while Ora8StmtFetch(ghStmt0, 1, 1) do
      sName := Ora8GetString(ghStmt0, "1");
      nAge  := Ora8GetInt(ghStmt0, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38

Example: array binding

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    // bind array containing two elements
    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32, 2);
    Ora8Bind(ghStmt0, ":age", SQLT_INT, 0, 2);
    // set values
    Ora8SetString(ghStmt0, ":name", "Bob", 1);
    Ora8SetInt(ghStmt0, ":age", 25, 1);
    Ora8SetString(ghStmt0, ":name", "Marcy", 2);
    Ora8SetInt(ghStmt0, ":age", 33, 2);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 2);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

Example: PL/SQL table binding

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlProcedureWithPLSQLTable, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":num", SQLT_INT);
    Ora8Bind(ghStmt0, ":description", SQLT_STR, 20, 3, ORA_PLSQLTABLE_INOUT);
    Ora8SetInt(ghStmt0, ":num", 5);
    Ora8SetString(ghStmt0, ":description", "Frammis_1", 1);
    Ora8SetString(ghStmt0, ":description", "Frammis_2", 2);
    Ora8SetString(ghStmt0, ":description", "Frammis_3", 3);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlProcedureWithPLSQLTable:
  [BEGIN
    update_parts.add_parts(:num, :description);
  END;]

In this example, the parameter nBindOption specifies the option for binding the placeholder. ORA_PLSQLTABLE_INOUT binds a PL/SQL table used as a parameter in a stored procedure with inout direction. The maximum length of a bind element is set to 20, the maximum number of array elements that can be sent/retrieved is set to 3.

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIBindByName, OCIBindByPos
親トピック: Placeholder Binding Functions
関連資料
Ora8BindLob Function
Ora8BindRefCur Function
Ora8SetString Function
Ora8SetBinary Function
Ora8SetInt Function
Ora8SetFloat Function
Ora8SetNull Function
Ora8OciError Function
Ora8StmtExecute Function
Ora8SetPieces Function
Oracle 8 Data Types


Ora8BindLob Function

Action

Binds a placeholder for a LOB parameter in a SQL statement or PL/SQL block to a program variable.

Include file

Ora8.bdh

Syntax

Ora8BindLob( in  hStmt        : number,
             in  sSqlVar      : string,
             in  nDatatype    : number,
             in  nSize        : number,
             in  nArraySize   : number,
             in  nBindOption  : number,
             out hDescriptor  : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
nDatatype | Oracle external data type of the program variable. Oracle converts the program variable from external to internal format when the variable is sent to the database and vice versa when it is retrieved from the database. See Oracle 8 data types for a list of data types.
nSize | Size of the program variable or the array element in bytes.
nArraySize

Maximum number of array elements to bind.

The default option is scalar binding.
nBindOption

Specifies how to bind the place holder. The following are the possible options for binding a place holder:

  • ORA_DEFAULT. This is the default option. A place holder is bound to a scalar or to an array program variable.

  • ORA_PIECEWISE. The program variable is bound to the place holder in multiple pieces. In this case, nSize specifies the piece size, and nArraySize the maximum column size. You have to call the Ora8SetPieces function in order to set the values for the pieces.

  • ORA_PLSQLTABLE_IN. The program variable is bound to a PL/SQL table that is used as an in parameter within a stored procedure.

  • ORA_PLSQLTABLE_OUT. The program variable is bound to a PL/SQL table that is used as an out parameter in a stored procedure.

  • ORA_PLSQLTABLE_INOUT: The program variable is bound to a PL/SQL table that is used as an inout parameter in a stored procedure.

  • ORA_PLSQL_IN. The program variable is bound to a PL/SQL scalar parameter that is used as an in parameter within a stored procedure.

  • ORA_PLSQL_OUT. The program variable is bound to a PL/SQL scalar parameter that is used as an out parameter in a stored procedure.

  • ORA_PLSQL_INOUT. The program variable is bound to a PL/SQL scalar parameter that is used as an inout parameter in a stored procedure.
hDescriptor | Variable that is bound to the placeholder in the SQL statement or PL/SQL block.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, TMain_SQL001, OCI_NTV_SYNTAX);
    Ora8DescriptorAlloc(ghEnv0, ghDescriptor0, OCI_DTYPE_LOB);

    Ora8Bind(ghStmt0, "1", SQLT_INT, 0, 1, ORA_PLSQL_IN);                     //p_productid, in, number
    Ora8BindLob(ghStmt0, "2", SQLT_BLOB, 4, 1, ORA_PLSQL_OUT, ghDescriptor0); //p_productimage, out, blob

    Ora8SetInt(ghStmt0, "1", 2254);  //p_productid

    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 1, 0, 0, 0, OCI_COMMIT_ON_SUCCESS);

    Ora8LobRead(ghSvcCtx0, ghDescriptor0, 9894, 9894, 1, 178);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  TMain_SQL001:
    [BEGIN getproductimage(:1,:2); END;]

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIBindByName, OCIBindByPos
親トピック: Placeholder Binding Functions
関連資料
Ora8Bind Function
Ora8BindRefCur Function
Ora8SetPieces Function
Oracle 8 Data Types
Ora8DefineLob Function
Ora8Define Function


Ora8BindRefCur Function

Action

Binds a place holder in a SQL statement or PL/SQL block to a program variable. The variable is accessible through the Ora8Set and Ora8Get functions. The place holder is identified by the name or the number declared in the SQL statement or PL/SQL block. The functions listed below are used to assign values to the program variable that is bound to the specified place holder:

  • Ora8SetString
  • Ora8SetBinary
  • Ora8SetInt
  • Ora8SetFloat
  • Ora8SetNull

This function serves to bind place holders in SQL statements or PL/SQL blocks to both scalar and array variables. In addition, it can be used to bind place holders to be used in piecewise operations. The function must be called after preparing the SQL statement or PL/SQL block and before calling the Ora8Set function.

Include file

Ora8.bdh

Syntax

Ora8BindRefCur( in  hStmt        : number,
                in  sSqlVar      : string,
                in  hStmtRefCur  : number): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
hStmtRefCur | REF CURSOR statement handle.

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIBindByName, OCIBindByPos
親トピック: Placeholder Binding Functions
関連資料
Ora8Bind Function
Ora8BindLob Function
Ora8SetString Function
Ora8SetBinary Function
Ora8SetInt Function
Ora8SetFloat Function
Ora8SetNull Function
Ora8OciError Function
Oracle 8 Data Types


Parameter Binding Functions

  • Ora8SetBinary Function
    Assigns binary data to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • Ora8SetInt Function
    Assigns a number value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • Ora8SetFloat Function
    Assigns a floating-point value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • Ora8SetPieces Function
    Assigns any data to the program variable that is bound to the specified place holder in the SQL statement for a piecewise INSERT or UPDATE operation.
  • Ora8SetNull Function
    Assigns a NULL value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
  • Ora8SetString Function
    Assigns a string to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
親トピック: Oracle 8 API Functions Overview


Ora8SetBinary Function

Action

Assigns binary data to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Using this function, any data type listed below can be assigned to the program variable that is bound to the specified place holder:

  • SQLT_NUM
  • SQLT_VNU
  • SQLT_RID
  • SQLT_DAT
  • SQLT_VBI
  • SQLT_BIN
  • SQLT_LBI
  • SQLT_LVB
  • SQLT_CUR

Include file

Ora8.bdh

Syntax

Ora8SetBinary( in hStmt   : number,
               in sSqlVar : string,
               in sBinary : string,
               in nLength : number,
               in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise; In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code.

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
sBinary | Binary data that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
nLength | Length of the binary data block (in bytes).
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  const
    PUBLIC_KEY := "\h59b20094...";
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32);
    Ora8Bind(ghStmt0, ":key", SQLT_BIN, 64);

    Ora8SetString(ghStmt0, ":name", "Michael");
    Ora8SetBinary(ghStmt0, ":key",  PUBLIC_KEY, 0);

    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO keys (name, key) VALUES (:name, :key);
親トピック: Parameter Binding Functions
関連資料
Ora8SetInt Function
Ora8SetFloat Function
Ora8SetPieces Function
Ora8SetNull Function
Ora8SetString Function
Ora8OciError Function
Ora8Bind Function


Ora8SetInt Function

Action

Assigns a number value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Include file

Ora8.bdh

Syntax

Ora8SetInt( in hStmt   : number,
            in sSqlVar : string,
            in nValue  : number,
            in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
nValue | Number value that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    sName : string;
    nAge  : number;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":1", SQLT_INT);

    Ora8SetInt(ghStmt0, ":1", 25);
    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    while Ora8StmtFetch(ghStmt0, 1, 1) do
      sName := Ora8GetString(ghStmt0, "1");
      nAge := Ora8GetInt(ghStmt0, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38
親トピック: Parameter Binding Functions
関連資料
Ora8SetBinary Function
Ora8SetFloat Function
Ora8SetPieces Function
Ora8SetNull Function
Ora8SetString Function
Ora8OciError Function
Ora8Bind Function


Ora8SetFloat Function

Action

Assigns a floating-point value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Include file

Ora8.bdh

Syntax

Ora8SetFloat( in hStmt   : number,
              in sSqlVar : string,
              in fValue  : float,
              in nIndex  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise; In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code.

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
fValue | Float value that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    sName    : string;
    fBalance : float;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":1", SQLT_FLT);

    Ora8SetFloat(ghStmt0, ":1", 2000.0);
    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_FLT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

     while Ora8StmtFetch(ghStmt0, 1, 1) do
      sName    := Ora8GetString(ghStmt0, "1");
      fBalance := Ora8GetFloat(ghStmt0, "2");
      write(sName, 32); write(fBalance); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM accounts WHERE balance > :1;

Output

Bob 13864.220000Pamela 4492.090000Richard 7309.580000
親トピック: Parameter Binding Functions
関連資料
Ora8SetBinary Function
Ora8SetInt Function
Ora8SetPieces Function
Ora8SetNull Function
Ora8SetString Function
Ora8OciError Function
Ora8Bind Function


Ora8SetPieces Function

Action

Assigns any data to the program variable that is bound to the specified place holder in the SQL statement for a piecewise INSERT or UPDATE operation. The place holder is identified by the name or the number specified in the SQL statement.

Include file

Ora8.bdh

Syntax

Ora8SetPieces( in hStmt       : number,
               in sSqlVar     : string,
               in sFilename   : string,
               in nCharacters : number optional,
               in nFirstChar  : number optional,
               in nLastChar   : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
sFilename | Name of the file containing the data. If this parameter is set to NULL, random values are generated. In this case, you must specify the amount of random data to generate. The nFirstChar and the nLastChar parameters let you specify a set of characters used for random data generation.
nCharacters | Number of random characters to generate (optional). This parameter has to be passed to the function only if sFilename is set to NULL.
nFirstChar | First character belonging to the character set used for random data generation (optional). The default option is to use all characters defined in the ASCII table.
nLastChar | Last character belonging to the character set used for random data generation (optional). The default option is to use all characters defined in the ASCII table.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  const
    PUBLIC_KEY := "\h59b20094...";
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32);
    Ora8Bind(ghStmt0, ":key", SQLT_BIN, 64);

    Ora8SetString(ghStmt0, ":name", "Michael");
    Ora8SetPieces(ghStmt0, ":data", "TestData.dat");

    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO images (name, data) VALUES (:name, :data);
親トピック: Parameter Binding Functions
関連資料
Ora8SetBinary Function
Ora8SetInt Function
Ora8SetFloat Function
Ora8SetNull Function
Ora8SetString Function
Ora8OciError Function
Ora8Bind Function


Ora8SetNull Function

Action

Assigns a NULL value to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Include file

Ora8.bdh

Syntax

Ora8SetNull( in hStmt   : number,
             in sSqlVar : string,
             in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");
        Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
        Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);
     Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32);
    Ora8Bind(ghStmt0, ":key", SQLT_BIN, 64);
        Ora8SetString(ghStmt0, ":name", "Michael");
    Ora8SetNull(ghStmt0, ":age");
        Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);
親トピック: Parameter Binding Functions
関連資料
Ora8SetBinary Function
Ora8SetInt Function
Ora8SetFloat Function
Ora8SetPieces Function
Ora8SetString Function
Ora8OciError Function
Ora8Bind Function


Ora8SetString Function

Action

Assigns a string to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block. The place holder is identified by the name or the number specified in the SQL statement or PL/SQL block. This function is used to assign values to both scalar and array program variables.

Using this function, any of the following data types can be assigned to the program variable that is bound to the specified place holder:

  • SQLT_STR
  • SQLT_CHR
  • SQLT_VCS
  • SQLT_LVC
  • SQLT_AFC
  • SQLT_AVC
  • SQLT_LNG
  • SQLT_RDD

Include file

Ora8.bdh

Syntax

Ora8SetString( in hStmt   : number,
               in sSqlVar : string,
               in sString : string,
               in nIndex  : number optional): boolean;

Return value

  • true if successful

  • false otherwise. In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code

Parameter | Description
hStmt | Statement handle.
sSqlVar | Name of the place holder in the SQL statement or PL/SQL block. This parameter must include the preceding colon identifying it as a place holder.
sString | String that is assigned to the program variable that is bound to the specified place holder in the SQL statement or PL/SQL block.
nIndex | Array index (optional). For array binding operations, this parameter specifies the array index of the program variable.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    // bind array containing two elements
    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32, 2);
    Ora8Bind(ghStmt0, ":age", SQLT_INT, 0, 2);

    // set values
    Ora8SetString(ghStmt0, ":name", "Bob", 1);
    Ora8SetInt(ghStmt0, ":age", 25, 1);

    Ora8SetString(ghStmt0, ":name", "Marcy", 2);
    Ora8SetInt(ghStmt0, ":age", 33, 2);

    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);
親トピック: Parameter Binding Functions
関連資料
Ora8SetBinary Function
Ora8SetInt Function
Ora8SetFloat Function
Ora8SetPieces Function
Ora8SetNull Function
Ora8OciError Function
Ora8Bind Function


Result Set Definition Functions

  • Ora8Define Function
    Defines an output variable for a specified select-list item in a SQL query.
  • Ora8DefineLob Function
    Defines the specified LOB descriptor as output variable for the specified select-list item in the SQL query.
親トピック: Oracle 8 API Functions Overview


Ora8Define Function

Action

Defines an output variable for a specified select-list item in a SQL query. In a BDL script, it is necessary to call this function for each select-list item of a SQL query. After the Ora8StmtExecute function (and Ora8StmtFetch function) has been called, the following functions can be used to retrieve the value of the program variable that is defined for the specified select-list item:

  • Ora8GetString
  • Ora8GetInt
  • Ora8GetFloat
  • Ora8GetValue

Include file

Ora8.bdh

Syntax

Ora8Define( in  hStmt          : number,
            in  nPosition      : number,
            in  nDatatype      : number optional,
            in  nSize          : number optional,
            in  nMaxColSize    : number optional,
            in  nDefineType    : number optional,
            in  nPieces        : number optional,
            out hDefineHandle  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise; In this case, you can use the Ora8ApiError function to retrieve the Oracle OCI error code.

Parameter | Description
hStmt | Statement handle.
nPosition | Index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item.
nDatatype

Oracle external data type of the select-list item (optional). See Oracle 8 data types for a list of Oracle data types.

The default value is SQLT_STR (null-terminated string).

nSize

Length of the select-list item in bytes (optional).

This parameter should be omitted or set to 0 for data types of fixed length (SQLT_NUM, SQLT_INT, SQLT_FLT, SQLT_VNU, SQLT_RID, SQLT_DAT, SQLT_UIN, SQLT_CUR).

nMaxColSize | Maximum possible size of the select-list item in bytes (optional). This parameter has to be specified whenever the select-list item is retrieved in multiple pieces.
nDefineType

Special select-list option (optional). Possible options are:

  • ORA_PIECEWISE

  • ORA_FETCHLONG

nPieces | Number of pieces (optional). Whenever nDefineType is set to ORA_FETCHLONG, this parameter can be used to specify the number of pieces.
hDefineHandle | Variable receiving the define handle (optional).

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    sName             : string;
    nFetched, nAge, i : number;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 1, 50, 0, 0, 0, nFetched);
    for i := 1 to nFetched do
      sName := Ora8GetString(ghStmt0, "1", i);
      nAge  := Ora8GetInt(ghStmt0, "2", i);
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons;

Output

Howard 33Michael 44Bobby 61Sara 38

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIDefineByPos
親トピック: Result Set Definition Functions
関連資料
Ora8DefineLob Function
Ora8GetInt Function
Ora8GetString Function
Ora8GetFloat Function
Ora8GetValue Function
Ora8StmtExecute Function
Ora8StmtFetch Function
Oracle 8 Data Types


Ora8DefineLob Function

Action

Defines the specified LOB descriptor as output variable for the specified select-list item in the SQL query.

Include file

Ora8.bdh

Syntax

Ora8DefineLob( in  hStmt       : number,
               in  nPosition   : number,
               in  nDatatype   : number,
               in  nSize       : number,
               in  hDescriptor : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hStmt | Statement handle.
nPosition | Index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item.
nDatatype | Oracle external data type of the select-list item. See Oracle 8 data types for a list of Oracle data types.
nSize | Length of the select-list item in bytes.
hDescriptor | Variable used as output buffer for the specified select-list item.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);
    Ora8DescriptorAlloc(ghEnv0, ghDescriptor0, OCI_DTYPE_LOB);
    Ora8DefineLob(ghStmt0, 1, SQLT_BLOB, 0, ghDescriptor0);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 0, 1); // rows fetched: 1

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT PRODUCT_IMAGE FROM PRODUCT_INFORMATION WHERE ROWID = 'AAAeUrAASAAABFUAAQ';

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCIDefineByPos
親トピック: Result Set Definition Functions
関連資料
Ora8Define Function
Oracle 8 Data Types
Ora8Bind Function


Statement Processing Functions

  • Ora8StmtPrepare Function
    Prepares a SQL statement or a PL/SQL block and associates it with a statement handle.
  • Ora8StmtPrepare2 Function
    Prepares a SQL statement or a PL/SQL block and associates it with a statement handle.
  • Ora8StmtPrepare3 Function
    Prepares a SQL statement or a PL/SQL block and associates it with a statement handle.
  • Ora8StmtRelease Function
    Releases the statement handle obtained by a call to Ora8StmtPrepare3.
  • Ora8StmtExecute Function
    Executes a SQL statement or PL/SQL block associated with a statement handle.
  • Ora8StmtFetch Function
    Performs a specified number of fetch operations in order to retrieve data from a SQL query.
親トピック: Oracle 8 API Functions Overview


Ora8StmtPrepare Function

Action

Prepares a SQL statement or a PL/SQL block and associates it with a statement handle.

Include file

Ora8.bdh

Syntax

Ora8StmtPrepare( in  hStmt     : number,
                 in  sql       : sql,
                 in  nLanguage : number optional,
                 in  nMode     : number optional ): boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hStmt | Statement handle.
sql | SQL statement or PL/SQL block to prepare.
nLanguage

Specifies language options (optional).

Possible values are:

  • OCI_NTV_SYNTAX

  • OCI_V7_SYNTAX

  • OCI_V8_SYNTAX
nMode

Specifies various modes of operation (optional).

The possible values are:

  • OCI_DEFAULT (default)

  • OCI_NO_SHARING

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlDelete, OCI_NTV_SYNTAX);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    DELETE FROM persons;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIStmtPrepare
親トピック: Statement Processing Functions
関連資料
Ora8StmtPrepare2 Function
Ora8StmtPrepare3 Function
Ora8StmtRelease Function
Ora8StmtExecute Function
Ora8StmtFetch Function
Ora8Bind Function
Ora8Define Function


Ora8StmtPrepare2 Function

Action

Prepares a SQL statement or a PL/SQL block and associates it with a statement handle.

Include file

Ora8.bdh

Syntax

Ora8StmtPrepare2( in  hStmt      : number,
                  in  sStatement : string,
                  in  nLanguage  : number optional,
                  in  nMode      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hStmt | Statement handle.
sStatement | SQL statement or PL/SQL to prepare.
nLanguage

Specifies language options (optional).

Possible values are:

  • OCI_NTV_SYNTAX

  • OCI_V7_SYNTAX

  • OCI_V8_SYNTAX
nMode

Specifies various modes of operation (optional).

The possible values are:

  • OCI_DEFAULT (default)

  • OCI_NO_SHARING

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare2(ghStmt0, "DELETE from persons", OCI_NTV_SYNTAX);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIStmtPrepare
親トピック: Statement Processing Functions
関連資料
Ora8StmtPrepare Function
Ora8StmtPrepare3 Function
Ora8StmtRelease Function
Ora8StmtExecute Function
Ora8StmtFetch Function
Ora8Bind Function
Ora8Define Function


Ora8StmtPrepare3 Function

Action

Prepares a SQL statement or a PL/SQL block and associates it with a statement handle.

Include file

Ora8.bdh

Syntax

Ora8StmtPrepare3( in  hCtx     : number,
                 out hStmt     : number,
                 in  sql       : sql,
                 in  sKey      : string optional,
                 in  nLanguage : number optional,
                 in  nMode     : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hCtx | Service context handle to be associated with the statement.
hStmt | Statement handle.
sql | SQL statement or PL/SQL block to prepare.
sKey | For statement caching only. The key to the returned statement in the cache. This can be used for future calls to Ora8StmtPrepare3, in which case there is no need to pass in the statement text and related parameters. If the key is passed in, then the statement text and other parameters are ignored and the search is solely based on the key.
nLanguage

Specifies language options (optional).

Possible values are:

  • OCI_V7_SYNTAX: V7 ORACLE parsing syntax
  • OCI_NTV_SYNTAX: Syntax depends upon the version of the server
nMode

Specifies various modes of operation (optional).

The possible values are:

  • OCI_DEFAULT (default)
  • OCI_STMTCACHE_SEARCH_ONLY

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8StmtPrepare3(ghSvcCtx0, ghStmt0, sqlDelete);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8StmtRelease(ghStmt0);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    DELETE FROM persons;

See also

Oracle Call Interface Programmer's Guide for wrapped Oracle function OCIStmtPrepare2.

親トピック: Statement Processing Functions
関連資料
Ora8StmtPrepare Function
Ora8StmtPrepare2 Function
Ora8StmtRelease Function
Ora8StmtExecute Function
Ora8StmtFetch Function


Ora8StmtRelease Function

Action

Releases the statement handle obtained by a call to Ora8StmtPrepare3.

Include file

Ora8.bdh

Syntax

Ora8StmtRelease( inout hHandle : number,
                 in   sKey     : string optional,
                 in   nMode    : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hHandle | The statement handle returned by Ora8StmtPrepare3.
sKey | For statement caching only. The key to the returned statement in the cache. This can be used for future calls to Ora8StmtPrepare3 or can be a new key. If a null key is passed in, the statement will not be tagged.
nMode

Specifies various modes of operation (optional).

The possible values are:

  • OCI_DEFAULT (default)
  • OCI_STMTCACHE_DELETE: Only valid for statement caching. The statement will not be kept in the cache any more.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8StmtPrepare3(ghSvcCtx0, ghStmt0, sqlDelete);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8StmtRelease(ghStmt0);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    DELETE FROM persons;

See also

Oracle Call Interface Programmer's Guide for wrapped Oracle function OCIStmtRelease.

親トピック: Statement Processing Functions
関連資料
Ora8StmtPrepare Function
Ora8StmtPrepare2 Function
Ora8StmtPrepare3 Function
Ora8StmtExecute Function
Ora8StmtFetch Function


Ora8StmtExecute Function

Action

Executes a SQL statement or PL/SQL block associated with a statement handle. Besides executing a statement, this function can also fetch data after the execution if the statement is a SQL query.

Before calling this function, you have to prepare the SQL statement using the Ora8StmtPrepare function. Array binding can be used to process multiple rows of data in a single execute operation. If the SQL statement contains place holders, it is necessary to call the Ora8Bind function for each place holder first.

Include file

Ora8.bdh

Syntax

Ora8StmtExecute( in  hSvcCtx     : number,
                 in  hStmt       : number,
                 in  nIterations : number optional,
                 in  nRows       : number optional,
                 in  nCancel     : number optional,
                 in  nExact      : number optional,
                 in  nMode       : number optional,
                 out nFetched    : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | Service context handle.
hStmt | Statement handle.
nIterations | Number of iterations (optional). This parameter specifies whether to perform multiple execute operations in order to process array parameters.
nRows | Numbers of rows to fetch (optional). This parameter specifies whether to fetch data after a SQL query.
nCancel | Reserved. (optional)
nExact | Reserved. (optional)
nMode

Specifies the various modes of operation (optional).

The modes are:

  • OCI_DEFAULT (default)

  • OCI_BATCH_ERRORS

  • OCI_COMMIT_ON_SUCCESS

  • OCI_DESCRIBE_ONLY

  • OCI_EXACT_FETCH

  • OCI_PARSE_ONLY

  • OCI_STMT_SCROLLABLE_READ_ONLY
nFetched | Variable receiving the actual number of rows fetched (optional)

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  const
    PUBLIC_KEY := "\h59b20094...";
  var
    nFetched, i, nAge : number;
    sName             : string;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    // insert two persons: Jimmy and Ronald
    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32, 2);
    Ora8Bind(ghStmt0, ":age", SQLT_INT, 0, 2);

    Ora8SetString(ghStmt0, ":name", "Jimmy", 1);
    Ora8SetInt(ghStmt0, ":age", 55, 1);
    Ora8SetString(ghStmt0, ":name", "Ronald", 2);
    Ora8SetInt(ghStmt0, ":age", 18, 2);

    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 2);

    // select all persons
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 1, 50, 0, 0, 0, nFetched);

    for i := 1 to nFetched do
      sName := Ora8GetString(ghStmt0, "1", i);
      nAge  := Ora8GetInt(ghStmt0, "2", i);
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

  sqlSelect:
    SELECT * FROM persons;

Output

Howard 33Michael 44Bobby 61Sara 38Jimmy 55Ronald 18

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIStmtExecute
親トピック: Statement Processing Functions
関連資料
Ora8StmtPrepare Function
Ora8StmtPrepare2 Function
Ora8StmtPrepare3 Function
Ora8StmtRelease Function
Ora8StmtFetch Function
Ora8Bind Function
Ora8Define Function


Ora8StmtFetch Function

Action

Performs a specified number of fetch operations in order to retrieve data from a SQL query. This function is used to fetch both single and multiple rows.

Afterwards, the following functions can be used to retrieve the fetched data:

  • Ora8GetString
  • Ora8GetInt
  • Ora8GetFloat
  • Ora8GetValue

Include file

Ora8.bdh

Syntax

Ora8StmtFetch( in  hStmt         : number,
               in  nIterations   : number optional,
               in  nBatchSize    : number optional,
               in  nOrientation  : number optional,
               in  nScrollOffset : number optional,
               in  nMode         : number optional,
               out nFetched      : number optional ) : boolean;

Return value

  • true if successful

  • false either if an error occurred during the fetch operation or if the number of rows actually fetched is not equal to the specified number of rows to fetch.

Parameter | Description
hStmt | Statement handle.
nIterations | Number of iterations to perform (optional). Predefined options are: ORA_FETCH_ALL. Repeat the fetch operation until all rows have been fetched. The default option is to perform a single iteration.
nBatchSize | Number of rows to fetch per iteration (optional). The default option is to fetch a single row per iteration
nOrientation | Orientation (optional).
nScrollOffset | Scroll offset (optional).
nMode | Mode. (optional)
nFetched | Variable receiving the actual number of rows fetched (optional).

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  const
    MAX_ROWS := 1000; // maximum number of rows
  var
    nFetched, i, nAge : number;
    sName             : string;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);

    // first possibility to fetch all rows
    // in this case, nFetched must be smaller than MAX_ROWS
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);
    Ora8StmtFetch(ghStmt0, 1, MAX_ROWS, 0, 0, 0, nFetched);

    for i := 1 to nFetched do
      sName := Ora8GetString(ghStmt0, "1", i);
      nAge  := Ora8GetInt(ghStmt0, "2", i);
      write(sName, 32); write(nAge, 5);  writeln;
    end;

    // second possibility to fetch all data
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    while Ora8StmtFetch(ghStmt0, 1, 1) do
      sName := Ora8GetString(ghStmt0, "1");
      nAge  := Ora8GetInt(ghStmt0, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons;

Output

Howard 33Michael 44Bobby 61Sara 38

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCIStmtFetch
親トピック: Statement Processing Functions
関連資料
Ora8StmtPrepare Function
Ora8StmtPrepare2 Function
Ora8StmtPrepare3 Function
Ora8StmtRelease Function
Ora8StmtExecute Function
Ora8Define Function
Ora8GetInt Function
Ora8GetString Function
Ora8GetFloat Function
Ora8GetValue Function


Data Fetching Functions

  • Ora8GetValue Function
    Retrieves any value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
  • Ora8GetInt Function
    Retrieves a number value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
  • Ora8GetFloat Function
    Retrieves a floating-point value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
  • Ora8GetString Function
    Retrieves a string either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query.
親トピック: Oracle 8 API Functions Overview


Ora8GetValue Function

Action

Retrieves any value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

Include file

Ora8.bdh

Syntax

Ora8GetValue( in  hStmt       : number,
              in  sSqlVar     : string,
              out sValue      : string,
              in  nBufferSize : number,
              in  nIndex      : number optional,
              in  nDatatype   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise; In this case, you can use the Ora8OciError function to retrieve the Oracle OCI error code.

Parameter | Description
hStmt | Statement handle.
sSqlVar

This parameter can be one of the following:

  • The name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder.

  • The index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item.

Note: In the latter case, the column number has to be passed to the function as a string.
sValue | Variable receiving either the value assigned to the place holder or the data retrieved from a fetched row, as the case may be
nBufferSize | Size of the variable receiving the value
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a value assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • The array index of the program variable.

  • The row number for the long value in the fetched data.
nDatatype | Specifies which data type to retrieve (optional). See Oracle 8 data types for a list of data types.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":1", SQLT_INT);
    Ora8SetInt(ghStmt0, ":1", 25);
    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    while Ora8StmtFetch(ghStmt0, 1, 1) do
      Ora8GetValue(ghStmt0, "1", sName, STRING_COMPLETE);
      nAge  := Ora8GetInt(ghStmt0, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38
親トピック: Data Fetching Functions
関連資料
Ora8GetInt Function
Ora8GetFloat Function
Ora8GetString Function
Ora8OciError Function
Oracle 8 Data Types


Ora8GetInt Function

Action

Retrieves a number value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

Include file

Ora8.bdh

Syntax

Ora8GetInt( in hStmt   : number,
            in sSqlVar : string,
            in nIndex  : number optional): number;

Return value

Retrieved long value

Parameter | Description
hStmt | Statement handle.
sSqlVar

This parameter can be one of the following:

  • The name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder.

  • The index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item.

注: In the latter case, the column number has to be passed to the function as a string.
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a value assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • The array index of the program variable.

  • The row number for the long value in the fetched data.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":1", SQLT_INT);
    Ora8SetInt(ghStmt0, ":1", 25);
    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    while Ora8StmtFetch(ghStmt0, 1, 1) do
      sName := Ora8GetString(ghStmt0, "1");
      nAge  := Ora8GetInt(ghStmt0, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38
親トピック: Data Fetching Functions
関連資料
Ora8GetValue Function
Ora8GetFloat Function
Ora8GetString Function


Ora8GetFloat Function

Action

Retrieves a floating-point value either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

Include file

Ora8.bdh

Syntax

Ora8GetFloat( in hStmt   : number,
              in sSqlVar : string,
              in nIndex  : number optional): float;

Return value

Retrieved floating-point value.

Parameter | Description
hStmt | Statement handle.
sSqlVar

This parameter can be one of the following:

  • The name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder.

  • The index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item.

Note: In the latter case, the column number has to be passed to the function as a string.
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a value assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • The array index of the program variable.

  • The row number for the floating-point value in the fetched data.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    sName    : string;
    fBalance : float;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":1", SQLT_INT);
    Ora8SetInt(ghStmt0, ":1", 25);
    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    while Ora8StmtFetch(ghStmt0, 1, 1) do
      sName    := Ora8GetString(ghStmt0, "1");
     fBalance := Ora8GetFloat(ghStmt0, "2");
      write(sName, 32); write(fBalance , 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM accounts WHERE balance > :1;

Output

Howard 33Michael 44Bobby 61Sara 38
親トピック: Data Fetching Functions
関連資料
Ora8GetValue Function
Ora8GetInt Function
Ora8GetString Function


Ora8GetString Function

Action

Retrieves a string either from the program variable that is bound with the specified place holder in the SQL statement or PL/SQL block, or from the output variable that is defined for the specified select-list item in the SQL query. This function is used to retrieve values from both scalar and array program variables that are defined for the specified select-list item.

If this function is used to retrieve one of the following data types, the retrieved value is automatically converted to a string:

  • SQLT_DAT
  • SQL_INT
  • SQLT_FLT

Include file

Ora8.bdh

Syntax

Ora8GetString( in hStmt   : number,
               in sSqlVar : string,
               in nIndex  : number optional): string;

Return value

Retrieved string, containing at most 253 characters. If the string to be retrieved consists of more than 253 characters, it is automatically cut off at the corresponding position.

Parameter | Description
hStmt | Statement handle.
sSqlVar

This parameter can be one of the following:

  • The name of the place holder in the SQL statement or PL/SQL block. In this case, the parameter must include the preceding colon identifying it as a place holder.

  • The index of the select-list item in the SQL query. Position indices start at 1 for the first (leftmost) select-list item.

注: In the latter case, the column number has to be passed to the function as a string.
nIndex

Index or row number (optional). This parameter has to be passed to the function whenever retrieving a string assigned to an array place holder or fetching data from multiple rows. It can be one of the following:

  • The array index of the program variable.

  • The row number for the string in the fetched data.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  var
    nAge : number;
    sName : string;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    Ora8Bind(ghStmt0, ":1", SQLT_INT);
    Ora8SetInt(ghStmt0, ":1", 25);
    Ora8Define(ghStmt0, 1, SQLT_CHR, 32);
    Ora8Define(ghStmt0, 2, SQLT_INT);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

      while Ora8StmtFetch(ghStmt0, 1, 1) do
      sName := Ora8GetString(ghStmt0, "1");
      nAge  := Ora8GetInt(ghStmt0, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM persons WHERE age > :1;

Output

Howard 33Michael 44Bobby 61Sara 38
親トピック: Data Fetching Functions
関連資料
Ora8GetValue Function
Ora8GetInt Function
Ora8GetFloat Function


Transaction Functions

  • Ora8TransCommit Function
    Commits the transaction associated with a specified service context.
  • Ora8TransDetach Function
    Detaches a transaction.
  • Ora8TransForget Function
    Causes the server to forget a heuristically completed global transaction.
  • Ora8TransPrepare Function
    Prepares a transaction for commit.
  • Ora8TransRollback Function
    Rolls back the current transaction.
  • Ora8TransStart Function
    Sets the beginning of a transaction.
親トピック: Oracle 8 API Functions Overview


Ora8TransCommit Function

Action

Commits the transaction associated with a specified service context.

Include file

Ora8.bdh

Syntax

Ora8TransCommit( in hSvcCtx  : number,
                 in nOptions : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hSvcCtx | The service context handle.
nOptions

Flags (optional).

Valid options are:

  • OCI_DEFAULT (default)

  • OCI_TRANS_TWOPHASE

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlDelete, OCI_NTV_SYNTAX);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8TransCommit(ghSvcCtx0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    DELETE FROM persons;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCITransCommit
親トピック: Transaction Functions
関連資料
Ora8TransDetach Function
Ora8TransForget Function
Ora8TransPrepare Function
Ora8TransRollback Function
Ora8TransStart Function


Ora8TransDetach Function

Action

Detaches a transaction.

Include file

Ora8.bdh

Syntax

Ora8TransDetach( in hSvcCtx  : number,
                 in nOptions : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hSvcCtx | The service context handle.
nOptions

Flags (optional).

Valid options are:

  • OCI_DEFAULT (default)

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8TransStart(ghSvcCtx0, 60, OCI_TRANS_NEW);
    ...
    Ora8TransDetach(ghSvcCtx0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCITransDetach
親トピック: Transaction Functions
関連資料
Ora8TransCommit Function
Ora8TransForget Function
Ora8TransPrepare Function
Ora8TransRollback Function
Ora8TransStart Function


Ora8TransForget Function

Action

Causes the server to forget a heuristically completed global transaction.

Include file

Ora8.bdh

Syntax

Ora8TransForget( in hSvcCtx  : number,
                 in nOptions : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hSvcCtx | The service context handle.
nOptions

Flags (optional).

Valid options are:

  • OCI_DEFAULT (default)

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8TransForget(ghSvcCtx0);

    ...

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCITransForget
親トピック: Transaction Functions
関連資料
Ora8TransCommit Function
Ora8TransDetach Function
Ora8TransPrepare Function
Ora8TransRollback Function
Ora8TransStart Function


Ora8TransPrepare Function

Action

Prepares a transaction for commit.

Include file

Ora8.bdh

Syntax

Ora8TransPrepare( in hSvcCtx  : number,
                  in nOptions : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hSvcCtx | The service context handle.
nOptions

Flags (optional).

Valid options are:

  • OCI_DEFAULT (default)

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8TransPrepare(ghSvcCtx0);

    ...

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCITransPrepare
親トピック: Transaction Functions
関連資料
Ora8TransCommit Function
Ora8TransDetach Function
Ora8TransForget Function
Ora8TransRollback Function
Ora8TransStart Function


Ora8TransRollback Function

Action

Rolls back the current transaction.

Include file

Ora8.bdh

Syntax

Ora8TransRollback( in hSvcCtx  : number,
                   in nOptions : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | The service context handle.
nOptions | Flags (optional). The only valid mode is OCI_DEFAULT. Omit the parameter in order to use the default parameter.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlDelete, OCI_NTV_SYNTAX);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8TransRollback(ghSvcCtx0);
    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    DELETE FROM persons;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCITransRollback
親トピック: Transaction Functions
関連資料
Ora8TransCommit Function
Ora8TransDetach Function
Ora8TransForget Function
Ora8TransPrepare Function
Ora8TransStart Function


Ora8TransStart Function

Action

Sets the beginning of a transaction.

Include file

Ora8.bdh

Syntax

Ora8TransStart( in hSvcCtx  : number,
                in nTimeout : number optional,
                in nOptions : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | The service context handle.
nTimeout | The time, in seconds, to wait for a transaction to become available for resumption when OCI_TRANS_RESUME is specified (optional). When OCI_TRANS_NEW is specified, the timeout parameter indicates the number of seconds the transaction can bee inactive before it is automatically aborted by the system.
nOptions

Flags (optional).

Valid options are:

  • OCI_TRANS_NEW

  • OCI_TRANS_TIGHT

  • OCI_TRANS_LOOSE

  • OCI_TRANS_RESUME

  • OCI_TRANS_READONLY

  • OCI_TRANS_SERIALIZABLE

  • OCI_TRANS_SEPARABLE

Example

  var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8TransStart(ghSvcCtx0, 60, OCI_TRANS_NEW);
    ...
    Ora8TransDetach(ghSvcCtx0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCITransStart
親トピック: Transaction Functions
関連資料
Ora8TransCommit Function
Ora8TransDetach Function
Ora8TransForget Function
Ora8TransPrepare Function
Ora8TransRollback Function


Miscellaneous Functions

  • Ora8SvcCtxToLda Function
    Converts a V8 or later service context handle into a V7 connection.
  • Ora8LdaToSvcCtx Function
    Converts a V7 connection into a V8 or later service context handle.
親トピック: Oracle 8 API Functions Overview


Ora8SvcCtxToLda Function

Action

Converts a V8 or later service context handle into a V7 connection.

Include file

Ora8.bdh

Syntax

Ora8SvcCtxToLda( in  hV8SvcCtx     : number,
                 out hV7Connection : number) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hV8SvcCtx | An initialized V8 or later service context handle.
hV7Connection | Variable receiving the handle to the V7 database connection.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghConnect0    : number;
  cCursor       : cursor;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8SvcCtxToLda(ghSvcCtx0, ghConnect0);

    OraOpen(cCursor, ghConnect0);
    OraParse(cCursor, sqlDelete, ORA_NONDEFERRED);
    OraExec(cCursor);
    OraClose(cCursor);

    Ora8LdaToSvcCtx(ghSvcCtx0, ghConnect0);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    DELETE FROM persons;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle function: OCISvcCtxToLda
親トピック: Miscellaneous Functions
関連概念
Oracle API Functions Overview
関連資料
Ora8LdaToSvcCtx Function
Ora8HandleFree Function
Ora8HandleAlloc Function
Ora8Init Function


Ora8LdaToSvcCtx Function

Action

Converts a V7 connection into a V8 or later service context handle.

This function should be used only for resetting a V7 connection obtained from Ora8SvcCtxToLda back to a V8 or later service context handle.

Include file

Ora8.bdh

Syntax

Ora8LdaToSvcCtx( out hV8SvcCtx     : number,
                 in  hV7Connection : number) : boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hV8SvcCtx | Variable receiving the V8 or later service context handle.
hV7Connection | The V7 connection returned by Ora8SvcCtxToLda from this service context.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghConnect0    : number;
  cCursor       : cursor;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8SvcCtxToLda(ghSvcCtx0, ghConnect0);

    OraOpen(cCursor, ghConnect0);
    OraParse(cCursor, sqlDelete, ORA_NONDEFERRED);
    OraExec(cCursor);
    OraClose(cCursor);

    Ora8LdaToSvcCtx(ghSvcCtx0, ghConnect0);

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    DELETE FROM persons;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCILdaToSvcCtx
親トピック: Miscellaneous Functions
関連概念
Oracle API Functions Overview
関連資料
Ora8SvcCtxToLda Function
Ora8HandleFree Function
Ora8HandleAlloc Function
Ora8Init Function


LOB Functions

  • Ora8LobGetLength Function
    Gets the length of a LOB.
  • Ora8LobRead Function
    Reads a portion of a LOB/FILE, as specified by the call.
  • Ora8LobWrite Function
    Writes data into a LOB.
  • Ora8LobCreateTemporary Function
    Creates a temporary LOB.
  • Ora8LobOpen Function
    Opens a LOB, internal or external, in the specified mode.
  • Ora8LobWrite2 Function
    Writes data into a LOB.
親トピック: Oracle 8 API Functions Overview


Ora8LobGetLength Function

Action

Gets the length of a LOB.

Include file

Ora8.bdh

Syntax

Ora8LobGetLength( in  hSvcCtx : number,
                  in  hLobLoc : number,
                  out nLength : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | An initialized service context handle.
hLobLoc | A LOB locator that references the LOB.
nLength | Variable receiving the length of the LOB (optional).

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  var
    nLen : number;
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    ...

    Ora8LobGetLength(ghSvcCtx0, ghDescriptor0, nLen);

    ...

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCILobGetLength
親トピック: LOB Functions
関連資料
Ora8LobRead Function
Ora8LobWrite Function
Ora8LobCreateTemporary Function
Ora8LobOpen Function
Ora8LobWrite2 Function


Ora8LobRead Function

Action

Reads a portion of a LOB/FILE, as specified by the call.

Include file

Ora8.bdh

Syntax

Ora8LobRead( in  hSvcCtx       : number,
             in  hLobLoc       : number,
             in  nSizeOfPieces : number,
             in  nSizeToRead   : number,
             in  nStartOffset  : number,
             in  nCharsetID    : number optional,
             in  nCharsetForm  : number optional,
             out nCntRead      : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hSvcCtx | The service context handle.
hLobLoc | A LOB/FILE locator that references the LOB/FILE.
nSizeOfPieces | Size of pieces to read.
nSizeToRead | Cumulated size to read.
nStartOffset | Start offset for first piece.
nCharsetID | Charset ID (optional).
nCharsetForm | Charset form (optional).
nCntRead | Count read (optional).

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    ...

    Ora8LobRead(ghSvcCtx0, ghDescriptor0, 500, 30000, 0);

    ...

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCILobRead
親トピック: LOB Functions
関連資料
Ora8LobGetLength Function
Ora8LobWrite Function
Ora8LobCreateTemporary Function
Ora8LobOpen Function
Ora8LobWrite2 Function


Ora8LobWrite Function

Action

Writes data into a LOB.

Include file

Ora8.bdh

Syntax

Ora8LobWrite( in  hSvcCtx      : number,
              in  hLobLoc      : number,
              in  nSizeOfPieces: number,
              in  nSizeToWrite : number,
              in  nStartOffset : number,
              in  nCharsetID   : number optional,
              in  nCharsetForm : number optional,
              out nCntWritten  : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise.

Parameter | Description
hSvcCtx | The service context handle.
hLobLoc | An internal LOB locator that references the LOB.
nSizeOfPieces | Size of pieces to write.
nSizeToWrite | Cumulated size to write.
nStartOffset | Start offset for first piece.
nCharsetID | Charset ID (optional).
nCharsetForm | Charset form (optional).
nCntWritten | Count written (optional).

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    ...

    Ora8LobWrite(ghSvcCtx0, ghDescriptor0, 100, 30000, 0);

    ...

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCILobWrite
親トピック: LOB Functions
関連資料
Ora8LobGetLength Function
Ora8LobRead Function
Ora8LobCreateTemporary Function
Ora8LobOpen Function
Ora8LobWrite2 Function


Ora8LobCreateTemporary Function

Action

Creates a temporary LOB.

Include file

Ora8.bdh

Syntax

Ora8LobCreateTemporary( in hSvcCtx      : number,
                        in hLobLoc      : number,
                        in nLobType     : number,
                        in nDuration    : number,
                        in bCache       : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | The service context handle.
hLobLoc | An internal LOB locator that references the LOB.
nLobType

The type of LOB to create.

Valid values are:

  • OCI_TEMP_BLOB

  • OCI_TEMP_CLOB
nDuration

The duration of the temporary LOB.

Valid values are:

  • OCI_DURATION_SESSION

  • OCI_DURATION_CALL
bCache | Boolean flag whether or not the temporary LOB should be read into the cache.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);

    Ora8StmtPrepare(ghStmt0, TMain_SQL001, OCI_NTV_SYNTAX);
    Ora8DescriptorAlloc(ghEnv0, ghDescriptor0, OCI_DTYPE_LOB);
    Ora8LobCreateTemporary(ghSvcCtx0, ghDescriptor0, OCI_TEMP_BLOB, OCI_DURATION_SESSION, true);
    Ora8LobOpen(ghSvcCtx0, ghDescriptor0, OCI_LOB_READWRITE);
    Ora8LobWrite(ghSvcCtx0, ghDescriptor0, 9894, 9894, 1);

    Ora8Bind(ghStmt0, "1", SQLT_CHR, 5, 1, ORA_PLSQL_IN);                    //p_productid, in, number
    Ora8BindLob(ghStmt0, "2", SQLT_BLOB, 4, 1, ORA_PLSQL_IN, ghDescriptor0); //p_productimage, in, blob

    Ora8SetString(ghStmt0, "1", "2254"); //p_productid

    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 1, 0, 0, 0, OCI_COMMIT_ON_SUCCESS);
    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

 dclsql
  TMain_SQL001:
    [BEGIN setproductimage(:1,:2); END;]

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCILobCreateTemporary
親トピック: LOB Functions
関連資料
Ora8LobGetLength Function
Ora8LobRead Function
Ora8LobWrite Function
Ora8LobOpen Function
Ora8LobWrite2 Function
Ora8DescriptorAlloc Function
Ora8BindLob Function


Ora8LobOpen Function

Action

Opens a LOB, internal or external, in the specified mode.

Include file

Ora8.bdh

Syntax

Ora8LobOpen( in hSvcCtx : number,
             in hLobLoc : number,
             in nMode   : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | The service context handle.
hLobLoc | An internal LOB locator that references the LOB.
nMode

The mode in which to open the LOB.

Valid modes are:

  • OCI_LOB_READONLY

  • OCI_LOB_READWRITE

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);

    Ora8StmtPrepare(ghStmt0, TMain_SQL001, OCI_NTV_SYNTAX);
    Ora8DescriptorAlloc(ghEnv0, ghDescriptor0, OCI_DTYPE_LOB);
    Ora8LobCreateTemporary(ghSvcCtx0, ghDescriptor0, OCI_TEMP_BLOB, OCI_DURATION_SESSION, true);
    Ora8LobOpen(ghSvcCtx0, ghDescriptor0, OCI_LOB_READWRITE);
    Ora8LobWrite(ghSvcCtx0, ghDescriptor0, 9894, 9894, 1);

    Ora8Bind(ghStmt0, "1", SQLT_CHR, 5, 1, ORA_PLSQL_IN);                    //p_productid, in, number
    Ora8BindLob(ghStmt0, "2", SQLT_BLOB, 4, 1, ORA_PLSQL_IN, ghDescriptor0); //p_productimage, in, blob

    Ora8SetString(ghStmt0, "1", "2254"); //p_productid

    Ora8StmtExecute(ghSvcCtx0, ghStmt0, 1, 0, 0, 0, OCI_COMMIT_ON_SUCCESS);
    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  TMain_SQL001:
    [BEGIN setproductimage(:1,:2); END;]

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCILobOpen
親トピック: LOB Functions
関連資料
Ora8LobGetLength Function
Ora8LobRead Function
Ora8LobWrite Function
Ora8LobCreateTemporary Function
Ora8LobWrite2 Function
Ora8DescriptorAlloc Function
Ora8BindLob Function


Ora8LobWrite2 Function

Action

Writes data into a LOB. The data to be written is read from the specified file.

Include file

Ora8.bdh

Syntax

Ora8LobWrite2( in  hSvcCtx       : number,
               in  hLobLoc       : number,
               in  nSizeOfPieces : number,
               in  sFile         : string,
               out nCntWritten   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSvcCtx | The service context handle.
hLobLoc | An internal LOB locator that references the LOB.
nSizeOfPieces | Size of pieces to write.
sFile | Name of the file containing the data.
nCntWritten | Count written (optional).

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;
  ghDescriptor0 : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");

    ...

    Ora8LobWrite2(ghSvcCtx0, ghDescriptor0, 5278, "Descriptor_103292907.dat");

    ...

    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

See also

Oracle's Programmer's Guide to Oracle Call Interface for Wrapped Oracle functions: OCILobWrite
親トピック: LOB Functions
関連資料
Ora8LobGetLength Function
Ora8LobRead Function
Ora8LobWrite Function
Ora8LobCreateTemporary Function
Ora8LobOpen Function
Ora8DescriptorAlloc Function


Error Handling Functions

  • Ora8OciError Function
    Retrieves the Oracle 8 OCI error code if an OCI error occurred during the last Silk Performer Oracle 8 API function call.
  • Ora8ApiError Function
    Retrieves the Silk Performer Oracle 8 API error code if an API error occurred during the last Silk Performer Oracle 8 API function call.
  • Ora8IgnoreError Function
    Specifies that a specific Oracle 8 OCI error is to be ignored if it occurs during the next Silk Performer Oracle 8 API function call.
親トピック: Oracle 8 API Functions Overview


Ora8OciError Function

Action

Retrieves the Oracle 8 OCI error code if an OCI error occurred during the last Silk Performer Oracle 8 API function call.

Include file

Ora8.bdh

Syntax

Ora8OciError(): number;

Return value

Oracle 8 OCI error code.

A Silk Performer Oracle API error has occurred if a Silk Performer Oracle API function fails and the Ora8OciError returns 0. In this case, the OraApiError function can be used to retrieve the Silk Performer Oracle API error code.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");
    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlSelect, OCI_NTV_SYNTAX);

    // select row from non existing table
    Ora8IgnoreError(ghStmt0, 942);
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);
    write("Oracle OCI error: "); write(Ora8OciError()); writeln;

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlSelect:
    SELECT * FROM non_existing_table;

Output

Oracle OCI error: 942OCI-API Class 0 Error (Warning) 942 in Ora8StmtExecute:
ORA-00942: table or view does not exist
親トピック: Error Handling Functions
関連資料
Ora8ApiError Function
Ora8IgnoreError Function


Ora8ApiError Function

Action

Retrieves the Silk Performer Oracle 8 API error code if an API error occurred during the last Silk Performer Oracle 8 API function call. A Silk Performer Oracle 8 API error occurs because of incorrect use of the Silk Performer Oracle 8 API and stops the simulation by default.

Include file

Ora8.bdh

Syntax

Ora8ApiError(): number;

Return value

Oracle 8 API error code

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");
    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlInsert, OCI_NTV_SYNTAX);

    // array binding: three elements
    Ora8Bind(ghStmt0, ":name", SQLT_CHR, 32, 3);
    Ora8Bind(ghStmt0, ":age", SQLT_INT, 0, 3);

    // cause API error: index is too large
    Ora8SetString(ghStmt0, ":name", "Tom", 5);
    write("Oracle API error: "); write(Ora8ApiError()); writeln;

    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv1, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlInsert:
    INSERT INTO persons (name, age) VALUES (:name, :age);

Output

Oracle API error: 26
ORA-API Class 0 Error (Warning) 26 in Ora8Bind:
ORAAPI: 26 - Index in Ora8Set/Ora8Get function is larger than maximum
array size set in Ora8Bind.
親トピック: Error Handling Functions
関連資料
Ora8OciError Function
Ora8IgnoreError Function


Ora8IgnoreError Function

Action

Specifies that a specific Oracle 8 OCI error is to be ignored if it occurs during the next Silk Performer Oracle 8 API function call. Since the error is then treated in the same way as a warning, the simulation will not be aborted.

Include file

Ora8.bdh

Syntax

Ora8IgnoreError( in hHandle    : number,
                 in nErrorCode : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hHandle | Handle.
nErrorCode | Oracle 8 OCI error code. This error will be treated as a class 0 error (warning) for the next Silk Performer Oracle 8 API call.

Example

var
  ghEnv0        : number;
  ghError0      : number;
  ghStmt0       : number;
  ghSvcCtx0     : number;

dcltrans
  transaction TMain
  begin
    Ora8Init(ghEnv0, OCI_DEFAULT);
    Ora8HandleAlloc(ghEnv0, ghError0, OCI_HTYPE_ERROR);
    Ora8Logon(ghEnv0, ghSvcCtx0, "user", "password", "orclnet2");
    Ora8HandleAlloc(ghEnv0, ghStmt0, OCI_HTYPE_STMT);
    Ora8StmtPrepare(ghStmt0, sqlDelete, OCI_NTV_SYNTAX);

    // ignore Oracle error 900: invalid SQL statement
    Ora8IgnoreError(ghStmt0, 942);

    // execute invalid SQL statement
    Ora8StmtExecute(ghSvcCtx0, ghStmt0);

    Ora8HandleFree(ghStmt0, OCI_HTYPE_STMT);
    Ora8Logoff(ghSvcCtx0);
    Ora8HandleFree(ghError0, OCI_HTYPE_ERROR);
    Ora8HandleFree(ghEnv0, OCI_HTYPE_ENV);
  end TMain;

dclsql
  sqlDelete:
    REMOVE FROM my_table;   // invalid SQL statement
親トピック: Error Handling Functions
関連資料
Ora8OciError Function
Ora8ApiError Function


Oracle 8 Data Types

The following Oracle external data types are supported in Oracle functions:

  • SQLT_CHR - (ORANET TYPE) character string

  • SQLT_NUM - (ORANET TYPE) oracle numeric

  • SQLT_INT - (ORANET TYPE) integer

  • SQLT_FLT - (ORANET TYPE) floating-point number

  • SQLT_STR - zero-terminated string

  • SQLT_VNU - NUM with preceding length byte

  • SQLT_PDN - (ORANET TYPE) Packed Decimal Numeric

  • SQLT_LNG - long

  • SQLT_VCS - variable character string

  • SQLT_NON - null/empty PCC Descriptor entry

  • SQLT_RID - rowid

  • SQLT_DAT - date in Oracle format

  • SQLT_VBI - binary in VCS format

  • SQLT_BIN - binary data (DTYBIN)

  • SQLT_LBI - long binary

  • SQLT_UIN - unsigned integer

  • SQLT_SLS - display sign leading separate

  • SQLT_LVC - longer longs (char)

  • SQLT_LVB - longer long binary

  • SQLT_AFC - ANSI fixed char

  • SQLT_AVC - ANSI Var char

  • SQLT_CUR - cursor type

  • SQLT_LAB - label type

  • SQLT_OSL - oslabel type

  • SQLT_CLOB - Character LOB

  • SQLT_BLOB - Binary LOB

  • SQLT_BFILEE - Binary File LOB

  • SQLT_CFILEE - Character File LOB

  • SQLT_RSET - Result Set

親トピック: Oracle 8 API Functions Overview
関連資料
Ora8Define Function
Ora8Bind Function


Binding Setting Functions

  • SetAutoBindCol Function
    Sets the Silk Performer autobindcol setting.
  • GetAutoBindCol Function
    Gets the value of the Silk Performer autobindcol setting.
親トピック: Database (DBMS) Functions


SetAutoBindCol Function

Action

Sets the Silk Performer autobindcol setting.

Include file

Kernel.bdh

Syntax

SetAutoBindCol( in bAutoBind: boolean );
Parameter Description
bAutoBind

  • true. Automatic binding for columns in a SELECT clause of a SQL statement

  • false. No automatic binding for columns in a SELECT clause

Example

dcltrans
  transaction TSetAutoBindCol
  begin
    SetAutoBindCol(true);
    write("automatic binding for columns set"); writeln;
  end TSetAutoBindCol;

Output

automatic binding for columns set
親トピック: Binding Setting Functions
関連概念
Database (DBMS) Functions
関連資料
GetAutoBindCol Function


GetAutoBindCol Function

Action

Gets the value of the Silk Performer autobindcol setting.

Include file

Kernel.bdh

Syntax

GetAutoBindCol(): boolean;

Return value

  • true. Automatic binding for columns in a SELECT clause of a SQL statement will be performed. If you have not specified an INTO clause for the columns in the SELECT clause, columns will be bound to a Silk Performer buffer array automatically.

  • false. No automatic binding for columns in a SELECT clause.

Example

dcltrans
  transaction TGetAutoBindCol
  var
    bAutoBind: boolean;
  begin
    bAutoBind := GetAutoBindCol();
    if bAutoBind then
      write("automatic binding"); writeln;
    else
      write("no automatic binding"); writeln;
    end;
  end TGetAutoBindCol;

Output

automatic binding
親トピック: Binding Setting Functions
関連概念
Database (DBMS) Functions
関連資料
SetAutoBindCol Function


Result Set Functions Overview

To get generalized access to the result sets of different database APIs (generated with e.g. OraFetch, OdbcFetch, AdoFetch,…), which can be used within Silk Performer, you can use the result set functions.

These functions provide a common interface to retrieve data from the result sets and to apply verification functions, which rely on result set data.

Silk Performer provides the following scripting functions for such tasks:

  • Value Retrieving Functions
    Lists the value retrieving functions.
  • Verification Functions
    Lists the verification functions.
親トピック: Database (DBMS) Functions
関連資料
OdbcFetch Function
OraFetch Function


Value Retrieving Functions

  • RsGetInt Function
    Retrieves a number value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsGetFloat Function
    Retrieves a floating-point value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsGetValue Function
    Retrieves any value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsGetString Function
    Retrieves a string from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsGetString2 Function
    Retrieves a string from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsIsNull Function
    Checks whether the value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement) no matter which database API (ORA, ODBC) has generated it, is null.
  • RsRows Function
    Retrieves the number of rows in the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsCols Function
    Retrieves the number of columns in the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
親トピック: Result Set Functions Overview


RsGetInt Function

Action

Retrieves a number value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsGetInt( in  sIdentifier : string,
          in  nIndex      : number optional,
          out nResultCode : number optional ): number;

Return value

  • Returns the number value of the chosen item in the result set.
Parameter | Description
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nResultCode

Variable receiving the result code of the operation (optional). It can be one of the following:

  • RS_RESULTCODE_SUCCESS: function succeeded

  • RS_RESULTCODE_INVALID_INPUTPARAMETER: invalid input parameter

  • RS_RESULTCODE_INVLAID_COLUMN: the 'sIdentifier' is invalid

  • RS_RESULTCODE_INVALID_CELL: there exists no item at the chosen position

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := RsGetString("1");
      nAge  := RsGetInt("2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetFloat Function
RsGetValue Function
RsGetString Function
RsGetString2 Function
RsIsNull Function
RsRows Function
RsCols Function
RsVerifyInt Function


RsGetFloat Function

Action

Retrieves a floating-point value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsGetFloat( in sIdentifier : string,
            in  nIndex      : number optional,
            out nResultCode : number optional ): float;

Return value

  • Returns the floating-point value of the chosen item in the result set.
Parameter | Description
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nResultCode

Variable receiving the result code of the operation (optional). It can be one of the following:

  • RS_RESULTCODE_SUCCESS: function succeeded

  • RS_RESULTCODE_INVALID_INPUTPARAMETER: invalid input parameter

  • RS_RESULTCODE_INVLAID_COLUMN: the 'sIdentifier' is invalid

  • RS_RESULTCODE_INVALID_CELL: there exists no item at the chosen position

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    sName    : string;
    fBalance : float;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_FLT);
    OraSetFloat(cCursor, ":1", 2000.0);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_FLT);    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName    := RsGetString("1");
      fBalance := RsGetFloat("2");
      write(sName, 32); write(fBalance); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM accounts WHERE balance > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetInt Function
RsGetValue Function
RsGetString Function
RsGetString2 Function
RsIsNull Function
RsRows Function
RsCols Function
RsVerifyFloat Function


RsGetValue Function

Action

Retrieves any value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsGetValue( out sResult       : string,
            in  nResultMaxLen : number,
            in  sIdentifier   : string,
            in  nIndex        : number optional,
            out nResultCode   : number optional ): boolean;

Return value

  • Returns true if successfull,
  • false otherwise
Parameter | Description
sResult | Variable receiving the data retrieved from a fetched row.
nResultMaxLen | Size of the variable receiving the value.
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nResultCode

Variable receiving the result code of the operation (optional). It can be one of the following:

  • RS_RESULTCODE_SUCCESS: function succeeded

  • RS_RESULTCODE_INVALID_INPUTPARAMETER: invalid input parameter

  • RS_RESULTCODE_INVLAID_COLUMN: the 'sIdentifier' is invalid

  • RS_RESULTCODE_INVALID_CELL: there exists no item at the chosen position

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      RsGetValue(sName, STRING_COMPLETE, "1");
      nAge  := RsGetInt("2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetInt Function
RsGetFloat Function
RsGetString Function
RsGetString2 Function
RsIsNull Function
RsRows Function
RsCols Function
RsVerifyValue Function


RsGetString Function

Action

Retrieves a string from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsGetString( in  sIdentifier : string,
             in  nIndex      : number optional,
             out nResultCode : number optional ): string;

Return value

  • Returns the number value of the chosen item in the result set.
Parameter | Description
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nResultCode

Variable receiving the result code of the operation (optional). It can be one of the following:

  • RS_RESULTCODE_SUCCESS: function succeeded

  • RS_RESULTCODE_INVALID_INPUTPARAMETER: invalid input parameter

  • RS_RESULTCODE_INVLAID_COLUMN: the 'sIdentifier' is invalid

  • RS_RESULTCODE_INVALID_CELL: there exists no item at the chosen position

Example

var
  hConnection : number;
  cCursor     : cursor;

 dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := RsGetString("1");
      nAge  := RsGetInt("2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

 dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetInt Function
RsGetFloat Function
RsGetValue Function
RsGetString2 Function
RsIsNull Function
RsRows Function
RsCols Function
RsVerifyString Function


RsGetString2 Function

Action

Retrieves a string from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsGetString2( out sResult       : string,
              in  nResultMaxLen : number,
              in  sIdentifier   : string,
              in  nIndex        : number optional,
              out nResultCode   : number optional ): boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sResult | Variable receiving the data retrieved from a fetched row.
nResultMaxLen | Size of the variable receiving the value.
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nResultCode

Variable receiving the result code of the operation (optional). It can be one of the following:

  • RS_RESULTCODE_SUCCESS: function succeeded

  • RS_RESULTCODE_INVALID_INPUTPARAMETER: invalid input parameter

  • RS_RESULTCODE_INVLAID_COLUMN: the 'sIdentifier' is invalid

  • RS_RESULTCODE_INVALID_CELL: there exists no item at the chosen position

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      RsGetString2(sName, STRING_COMPLETE, "1");
      nAge  := RsGetInt("2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetInt Function
RsGetFloat Function
RsGetValue Function
RsGetString Function
RsIsNull Function
RsRows Function
RsCols Function
RsVerifyString Function


RsIsNull Function

Action

Checks whether the value from the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement) no matter which database API (ORA, ODBC) has generated it, is null.

Include file

db.bdh

Syntax

RsIsNull( in sIdentifier : string,
          in nIndex      : number optional): boolean;

Return value

  • true if the value is null,
  • false otherwise.
Parameter | Description
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do

      if ( not RsIsNull("1")) then
        sName := RsGetString("1");
      end;

      fBalance := RsGetFloat("2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetInt Function
RsGetFloat Function
RsGetValue Function
RsGetString Function
RsGetString2 Function
RsRows Function
RsCols Function
RsVerifyNull Function


RsRows Function

Action

Retrieves the number of rows in the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsRows(): number;

Return value

  • Number of rows in the result set.

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nRows : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);

    OraSetFloat(cCursor, ":1", 2000.0);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_FLT);
    OraExec(cCursor);
    OraFetch(cCursor, ORA_FETCH_ALL);
    nRows := RsRows();

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM accounts WHERE balance > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetInt Function
RsGetFloat Function
RsGetValue Function
RsGetString Function
RsGetString2 Function
RsIsNull Function
RsCols Function
RsVerifyRowCount Function


RsCols Function

Action

Retrieves the number of columns in the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsCols(): number;

Return value

  • Number of columns in the result set

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nCols : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_FLT);
    OraSetFloat(cCursor, ":1", 2000.0);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_FLT);
    OraExec(cCursor);
    OraFetch(cCursor, ORA_FETCH_ALL);
    nCols := RsCols();

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM accounts WHERE balance > :1;
親トピック: Value Retrieving Functions
関連資料
RsGetInt Function
RsGetFloat Function
RsGetValue Function
RsGetString Function
RsGetString2 Function
RsIsNull Function
RsRows Function
RsVerifyRowCount Function


Verification Functions

  • RsVerifyFloat Function
    Verifies a floating-point element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsVerifyInt Function
    Verifies a number element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsVerifyNull Function
    Verifies, that an element is null at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statment), no matter which database API (ORA, ODBC) has generated it.
  • RsVerifyRowCount Function
    Checks whether the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it, has a specific amount of rows.
  • RsVerifyString Function
    Verifies a string element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
  • RsVerifyValue Function
    Verifies a binary element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.
親トピック: Result Set Functions Overview


RsVerifyFloat Function

Action

Verifies a floating-point element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsVerifyFloat( in fVerify     : float,
               in sIdentifier : string,
               in nIndex      : number optional,
               in nOptions    : number optional,
               in nSeverity   : number optional ): boolean;

Return value

  • true if verification was performed successfully,
  • false otherwise
Parameter | Description
fVerify | Floating-point value to verify.
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nOptions

Options (optional).

  • DB_FLAG_NONE (default)

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", QLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_FLT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := RsGetString("1");
      RsVerifyFloat(1.5, "2");
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Verification Functions
関連資料
RsGetFloat Function


RsVerifyInt Function

Action

Verifies a number element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsVerifyInt( in nVerify     : number,
             in sIdentifier : string,
             in nIndex      : number optional,
             in nOptions    : number optional,
             in nSeverity   : number optional ): boolean;

Return value

  • true if verification was performed successfully,
  • false otherwise
Parameter | Description
nVerify | Number value to verify.
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nOptions

Options (optional).

  • DB_FLAG_NONE (default)

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge  : number;
    sName : string;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      sName := RsGetString("1");
      RsVerifyInt(10, "2");
      write(sName, 32); write(nAge, 5); writeln;
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Verification Functions
関連資料
RsGetInt Function


RsVerifyNull Function

Action

Verifies, that an element is null at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statment), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsVerifyNull( in sIdentifier : string,
              in nIndex      : number optional,
              in nOptions    : number optional,
              in nSeverity   : number optional ): boolean;

Return value

  • true if verification was performed successfully,
  • false otherwise
Parameter | Description
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nOptions

Options. Can be one of the following (optional):

  • DB_FLAG_NONE (default)

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      RsVerifyNull("1");
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Verification Functions
関連資料
RsIsNull Function


RsVerifyRowCount Function

Action

Checks whether the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it, has a specific amount of rows.

Include file

db.bdh

Syntax

RsVerifyRowCount( in  nRows     : number,
                  in  nOptions  : number optional,
                  in  nSeverity : number optional,
                  out nActRows  : number optional ): boolean;

Return value

  • true if verification was performed successfully,
  • false otherwise
Parameter | Description
nRows | Number of rows to verify.
nOptions Specifies the relation of the given result row count and the row count of the received data (optional).

Can be one of the following:

  • DB_FLAG_EQUAL (default)

  • DB_FLAG_LESSEQUAL

  • DB_FLAG_GREATEREQUAL

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nActRows | If this variable is provided, it will receive the actual number of rows (optional).

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  var
    nAge : number;
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraDefine(cCursor, 2, SQLT_INT);
    OraExec(cCursor);
    OraFetch(cCursor, ORA_FETCH_ALL);

    if ( not RsVerifyRowCount(10, 0, SEVERITY_WARNING) ) then
      writeln("Wrong row count!!!");
    end;

    nAge := RsGetInt("2");
    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Verification Functions
関連資料
RsRows Function
RsCols Function


RsVerifyString Function

Action

Verifies a string element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsVerifyString( in sVerify     : string,
                in sIdentifier : string,
                in nIndex      : number optional,
                in nOptions    : number optional,
                in nSeverity   : number optional ): boolean;

Return value

  • true if verification was performed successfully,
  • false otherwise
Parameter | Description
sVerify | String value to verify.
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nOptions

Options. Can be one of the following (optional):

  • DB_FLAG_NONE (default)

  • DB_FLAG_CASE_SENSITIVE

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      RsVerifyString("Jones", "1");
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Verification Functions
関連資料
RsGetString Function
RsGetString2 Function


RsVerifyValue Function

Action

Verifies a binary element at a given row/column within the internal result set, which is filled whenever a data generating SQL statement is executed (SELECT statement), no matter which database API (ORA, ODBC) has generated it.

Include file

db.bdh

Syntax

RsVerifyValue( in sVerify     : string,
               in nVerifyLen  : number,
               in sIdentifier : string,
               in nIndex      : number optional,
               in nOptions    : number optional,
               in nSeverity   : number optional ): boolean;

Return value

  • true if verification was performed successfully,
  • false otherwise
Parameter | Description
sVerify | Binary value to verify.
nVerifyLen | Length of the binary value to verify.
sIdentifier | Identifier of the result data column.
nIndex | Array index for the column item (optional).
nOptions

Options (optional).

  • DB_FLAG_NONE (default)

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

var
  hConnection : number;
  cCursor     : cursor;

dcltrans
  transaction TMain
  begin
    OraLogon(hConnection, "user", "password", "orclnet2");
    OraOpen(cCursor, hConnection);
    OraParse(cCursor, sqlSelect);
    OraBind(cCursor, ":1", SQLT_INT);
    OraSetInt(cCursor, ":1", 25);
    OraDefine(cCursor, 1, SQLT_CHR, 32);
    OraExec(cCursor);

    while OraFetch(cCursor) do
      RsVerifyValue("\h8ADB4720A47CC8", 8, "1");
    end;

    OraClose(cCursor);
    OraLogoff(hConnection);
  end TMain;

dclsql
  sqlSelect:
  SELECT * FROM persons WHERE age > :1;
親トピック: Verification Functions
関連資料
RsGetValue Function


ERP/CRM Functions

  • Remedy Functions Reference
    Lists the functions for testing BMC Remedy IT Service Management.
  • SAP Functions
    Lists the function groups offered for SAP testing.
  • Siebel Functions Overview
    Lists the Siebel functions.
  • PeopleSoft Overview
    Describes Silk Performer support for load testing PeopleSoft applications.
親トピック: Benchmark Description Language (BDL) Reference


Remedy Functions Reference

Silk Performer provides functions for testing BMC Remedy IT Service Management.

  • RemedyInit Function
    Initializes Remedy Web support by installing global verification rules to catch application level errors.
  • RemedyBackChannelData Function
    Assembles a Remedy data string from the provided XML data.
  • WebRemedyBackChannelUrl Function
    Performs a WebPageUrl function call and converts the form data from an XML representation to the native Remedy BackChannel representation.
  • WebRemedyBackChannelPost Function
    Performs a WebPagePost to the server and converts the post data from an XML representation to the native Remedy BackChannel representation.
親トピック: ERP/CRM Functions


RemedyInit Function

Action

This function initializes Remedy Web support by installing global verification rules to catch application level errors.
注: This function is only available with Remedy projects.

Include file

Remedy.bdh

Syntax

RemedyInit( );

Example

dcltrans
transaction TInit
  begin
    RemedyInit();
  end TInit;
親トピック: Remedy Functions Reference
関連資料
RemedyBackChannelData Function
WebRemedyBackChannelUrl Function
WebRemedyBackChannelPost Function


RemedyBackChannelData Function

Action

Assembles a Remedy data string from the provided XML data.
注: This function is only available with Remedy projects.

Include file

Remedy.bdh

Syntax

RemedyBackChannelData( in sXmlData : string ): string;

Return value

Remedy data string to be used by functions WebPagePost and WebPageUrl.

Parameter | Description
sXmlData | XML representation of Remedy data to be submitted to the server.

Example

dcltrans
transaction TParam
begin
  Writeln(RemedyBackChannelData("<RemedyXml operation=\"GetURLForForm\">\r\n"
     "  <string name=\"server\">lab50</string>\r\n"
     "  <string name=\"app_name\"></string>\r\n"
     "  <string name=\"form\">Sample:Cities</string>\r\n"
     "  <string name=\"view\"></string>\r\n"
     "  <bool name=\"fetch_dimensions\">0</bool>\r\n"
     "  <string name=\"win_name\">lab50Sample:CitiesARRoot</string>\r\n"
     "  <string name=\"win_arg\">window.openingArgs={fvlist:{},wMode:&quot;2&quot;,wForceClear:1,fvSetDefaults:0};</string>\r\n"
     "</RemedyXml>"));
end TParam;
親トピック: Remedy Functions Reference
関連資料
RemedyInit Function
WebRemedyBackChannelUrl Function
WebRemedyBackChannelPost Function
WebPageUrl Function
WebPagePost Function


WebRemedyBackChannelUrl Function

Action

This function converts an XML representation of data, which is contained in the form formUrl, to the format expected by Remedy Web servers on the BackChannel URL by means of the function RemedyBackChannelData. It then performs a WebPageUrl call using this converted data.
注: This function is only available with Remedy projects.

Include file

Remedy.bdh

Syntax

WebRemedyBackChannelUrl( in sUrl    : string
                         in sTimer  : string optional
                         in formUrl : form optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the document on the server. All characters that are part of the query string are not URL-encoded.
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.
formUrl | Optional: Form identifier used in the dclform section. The expanded form is added to the URL after the "?". The XML representation of the BackChannel data which is contained in the form is converted to the Remedy native data format by use of the function RemedyBackChannelData.

Example

dcltrans
transaction TWeb
begin
  WebRemedyBackChannelUrl("http://10.10.1.30/arsys/BackChannel/",
  "BackChannel - GetURLForForm (#1)", ARSYS_BACKCHANNEL_016);
end TWeb;

dclform
ARSYS_BACKCHANNEL_016:
  "param"              := "<?xml version='1.0'?>\r\n"
                          "<RemedyXml operation=\"GetURLForForm\">\r\n"
                          "  <string name=\"server\">dev-sun-001</string>\r\n"
                          "  <string name=\"app_name\"></string>\r\n"
                          "  <string name=\"form\">PBCT:SelectClient_dlg</string>\r\n"
                          "  <string name=\"view\"></string>\r\n"
                          "  <bool name=\"fetch_dimensions\">1</bool>\r\n"
                          "  <string name=\"win_name\"></string>\r\n"
                          "  <string name=\"win_arg\"></string>\r\n"
                          "</RemedyXml>";
親トピック: Remedy Functions Reference
関連資料
RemedyInit Function
RemedyBackChannelData Function
WebRemedyBackChannelPost Function
WebPageUrl Function


WebRemedyBackChannelPost Function

Action

This function converts an XML representation of data, which is given by the parameter sData, to the format expected by Remedy Web servers on the BackChannel URL by means of the function RemedyBackChannelData. It then posts this converted data to the server by means of the function WebPagePost.
注: This function is only available with Remedy projects.

Include file

Remedy.bdh

Syntax

WebRemedyBackChannelPost( in sUrl        : string;
                          in sData       : string;
                          in nDataLength : number optional;
                          in sContent    : string optional;
                          in sTimer      : string optional;
                          in formUrl     : form optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the document on the server. All characters that are part of the query string are not URL-encoded.
sData | XML representation of Data to post to the server. The actual data which is posted is obtained by a call of the function WebRemedyBackChannelData.
nDataLength | Optional: This parameter is ignored. The purpose of this parameter is to make the parameter list of this function identical to the parameter list of the function WebPagePost.
sContent | Optional: Content type string used in the request, for example, "text/plain; charset=UTF-8".
sTimer | Optional: Name of the timer used for page measurements. If this parameter is omitted, no measurements are performed.
formUrl | Optional: Form identifier used in the dclform section. The expanded form is added to the URL after the "?".

Example

dcltrans
transaction TWeb
begin
  WebRemedyBackChannelPost("http://lab50/arsys/BackChannel", "<?xml version='1.0'?>\r\n"
    "<SegueRemedyXml operation=\"GetURLForForm\">\r\n"
    "  <string name=\"server\">lab50</string>\r\n"
    "  <string name=\"app_name\"></string>\r\n"
    "  <string name=\"form\">Sample:Cities</string>\r\n"
    "  <string name=\"view\"></string>\r\n"
    "  <bool name=\"fetch_dimensions\">0</bool>\r\n"
    "  <string name=\"win_name\">lab50Sample:CitiesARRoot" + GetTimeStamp() + "</string>\r\n"
    "  <string name=\"win_arg\">window.openingArgs={fvlist:{},wMode:&quot;2&quot;,wForceClear:1,fvSetDefaults:0};</string>\r\n"
    "</SegueRemedyXml>", STRING_COMPLETE, "text/plain; charset=UTF-8", "BackChannel - GetURLForForm");
end TWeb;
親トピック: Remedy Functions Reference
関連資料
RemedyInit Function
RemedyBackChannelData Function
WebRemedyBackChannelUrl Function
WebPagePost Function


SAP Functions

Silk Performer offers support for testing of SAP systems. It uses a testing interface called SAPGUI Scripting API, which has been introduced by SAP for SAPGUI Windows Clients.

In order to record and replay SAPGUI scripts some pre-requirements must be met. Read Checking your SAP Patch Level and Enable SAP Scripting in order to prepare your environment for SAP testing.

Silk Performer offers both - low and high-level API for testing SAP systems.

  • Low-Level Functions
    Lists the SAP low-level functions.
  • Connection and Session Functions
    Lists the SAP connection and session-handling functions.
  • Control Functions
    Lists the SAP control functions.
  • Logging Functions
    Lists the SAP logging functions.
  • Parsing Functions
    Lists the SAP parsing functions.
  • Verifying Functions
    Lists the SAP verifying functions.
親トピック: ERP/CRM Functions
関連タスク
SAP パッチ レベルをチェックする
サーバーの SAP パッチ レベルをチェックする
SAP R/3 サポート パッケージをチェックする
サーバーで SAPGUI スクリプト作成を有効にする
クライアントで SAPGUI スクリプト作成 API を有効にする


Low-Level Functions

  • SapGuiSetOption Function
    This function allows setting certain SapGui specific runtime settings such as timeouts during replay or enabling certain log options.
  • SapGuiInvokeMethod Function
    Calls any method exposed by SapGui controls.
  • SapGuiSetBoolean Function
    Sets a boolean value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiSetByte Function
    Sets a byte value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiSetFloat Function
    Sets a float value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiSetLong Function
    Sets a long value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiSetDouble Function
    Sets a double value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiSetShort Function
    Sets a short value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiSetNull Function
    Sets a null value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiSetString Function
    Sets a string value that will be used as a parameter with the next call of a SapGuiInvoke function.
  • SapGuiGetString Function
    Retrieves the return value of the last SapGuiInvokeMethod call.
  • SapGuiSetProperty Function
    Sets any accessible property of an SapGui control.
  • SapGuiGetProperty Function
    Retrieves any accessible property of a SapGui control.
  • SapGuiCreateCollection Function
    Creates a collection object that can be used as a parameter.
親トピック: SAP Functions


SapGuiSetOption Function

Action

This function allows setting certain SapGui specific runtime settings such as timeouts during replay or enabling certain log options.

Include file

SapGui.bdh

Syntax

SapGuiSetOption( in nOption : number,
                 in nValue  : number ) : boolean;
Parameter | Description
nOption

The SapGui runtime option to be set. Available options are:

  • SAPGUI_OPT_TIMEOUT - Set this option to the amount of seconds after which a timeout should occur. If an SapGui API function call takes longer than the specified amount of seconds, the SapGui replay process is considered stuck and gets restarted automatically. Additionally an error of severity SEVERITY_TRANS_EXIT is raised.
  • SAPGUI_OPT_LOGCONTROLS - Set this option to 1 to enable control logging. Note that logging controls has a severe impact on the SapGui client performance. Therefore, it is usually recommended that you disable this option.
  • SAPGUI_OPT_LOGCONTROLS_ON_ERROR - Set this option to 1 to enable control logging in case of an error. Logging controls has a severe impact on the SapGui client performance. Therefore, general logging is usually disabled. This option can be used to have controls logged only in case of an error.
  • SAPGUI_OPT_LOGSCREENSHOTS - Set this option to 1 to enable the logging of a screenshot for each new window during replay. This option only applies if the UI is displayed during replay.
  • SAPGUI_OPT_LOGSCREENSHOTS_ACTION - Set this option to 1 to enable the logging of screenshots for each individual action during replay. This option only applies if the UI is displayed during replay.
  • SAPGUI_OPT_LOGLEVEL - Set this option to specify the amount of data that is written to the Virtual User Log File. Possible values are:
    • 0 (Disabled) - Does not generate any log output.
    • 1 (Normal) - Generates some log output.
    • 2 (Debug) - Generate verbose log output.
  • SAPGUI_OPT_LOGON_BEHAVIOR - Set this option to specify how multiple login attempts of the same user account are handled. Possible values are:
    • 0 - Do not handle multiple login attempts automatically.
    • 1 - Do no allow multiple login attempts.
    • 2 - Allow multiple login attempts.
    • 3 - Allow multiple login attempt, but kill the existing sessions.
nValue | The value to be set for the specified option.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
  begin
    // Connecting to SAP
    SapGuiSetOption(SAPGUI_OPT_LOGCONTROLS_ON_ERROR, 1);
    SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU lab77 00 /3");
    SapGuiSetActiveConnection("/app/con[0]");
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
  end TMain;
親トピック: Low-Level Functions


SapGuiInvokeMethod Function

Action

This function can be used to call any method exposed by SapGui controls. It is a low level function and has to be used together with SapGuiSet* functions. These SapGuiSet* functions are used to push parameters on the callstack for the method to be executed by SapGuiInvokeMethod.

Include file

SapGui.bdh

Syntax

SapGuiInvokeMethod( in sControlId  : string allownull,
                    in sMethodName : string,
                    in sTimer      : string optional ) : boolean;
Parameter | Description
sControlId | This parameter uniquely identifies a SapGui control. The second parameter specifies the name of the method to be called on this control.
sMethodName | The name of the method to be called on the control.
sTimer | Name of the timer to be used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
  begin

    // Connecting to SAP
    gsConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(gsConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    // maximize
    // wnd[0]
    SapGuiInvokeMethod("wnd[0]", "maximize");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(3.1);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // press
    // btn[0]
    SapGuiInvokeMethod("tbar[0]/btn[0]", "press");

    // SAP Easy Access
    ThinkTime(20.2);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // expandNode
    // shell
    SapGuiSetString("0000000003");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "expandNode");

    // selectedNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "selectedNode", "0000000004");

    // topNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "topNode", "Favo");

    // doubleClickNode
    // shell
    SapGuiSetString("0000000004");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "doubleClickNode");

    // press
    // btn[15]
    ThinkTime(20.6);
    SapGuiInvokeMethod("tbar[0]/btn[15]", "press");

    // press
    // btn[15]
    SapGuiInvokeMethod("tbar[0]/btn[15]", "press");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // press
    // SPOP-OPTION1
    SapGuiInvokeMethod("usr/btnSPOP-OPTION1", "press");
  end TMain;
親トピック: Low-Level Functions
関連資料
SapGuiGetString Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiSetBoolean Function

Action

Sets a boolean value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetBoolean( in bParam : boolean );
Parameter | Description
bParam | The boolean value to be set as a parameter for the next call of SapGuiInvoke.
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiSetByte Function

Action

Sets a byte value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetByte( in bParam : unsigned short );
Parameter | Description
bParam | The byte value to be set as a parameter for the next call of SapGuiInvoke.
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetFloat Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiSetFloat Function

Action

Sets a float value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetFloat( in fParam : float );
Parameter | Description
fParam | The float value to be set as a parameter for the next call of SapGuiInvoke.
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiSetLong Function

Action

Sets a long value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetLong( in nParam : number );
Parameter | Description
nParam | The long value to be set as a parameter for the next call of SapGuiInvoke.
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetShort Function


SapGuiSetDouble Function

Action

Sets a double value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetDouble( dParam : in double );
Parameter | Description
dParam | The double value to be set as a parameter for the next call of SapGuiInvoke.
親トピック: Low-Level Functions


SapGuiSetShort Function

Action

Sets a short value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetShort( in nParam : number );
Parameter | Description
nParam | The short value to be set as a parameter for the next call of SapGuiInvoke.
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetLong Function


SapGuiSetNull Function

Action

Sets a null value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetNull();
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiSetString Function

Action

Sets a string value that will be used as a parameter with the next call of a SapGuiInvoke function.

Include file

SapGui.bdh

Syntax

SapGuiSetString( in sParam : string allownull );
Parameter | Description
sParam | The string value to be set as a parameter for the next call of SapGuiInvoke.

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    gsConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    // maximize
    // wnd[0]
    SapGuiInvokeMethod("wnd[0]", "maximize");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.5);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    ThinkTime(2.8);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // press
    // btn[0]
    SapGuiInvokeMethod("tbar[0]/btn[0]", "press");

    // SAP Easy Access
    ThinkTime(9.4);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // expandNode
    // shell
    SapGuiSetString("0000000003");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "expandNode");

    // selectedNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "selectedNode", "0000000004");

    // topNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "topNode", "Favo");

    // doubleClickNode
    // shell
    SapGuiSetString("0000000004");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "doubleClickNode");
    // Grid Control Info:
    // /app/con[0]/ses[0]/wnd[0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/0 columns
    // -------------------------------------

    // Business Workplace von DDIC
    ThinkTime(8.5);
    SapGuiSetActiveWindow("wnd[0]","Business Workplace von DDIC", SAPGUI_MATCH_Exact);
  end TMain;
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiGetString Function

Action

Retrieves the return value of the last SapGuiInvokeMethod call. A method invoked by SapGuiInvokeMethod may return a value, however this value is not returned by the SapGuiInvokeMethod call itself. Therefore you can use SapGuiGetString to get the return value of the invoked method. SapGuiGetString works on different return types, like String, numbers, Boolean. The values will be converted to a string.

Include file

SapGui.bdh

Syntax

SapGuiGetString( out sValue : string ): boolean;
Parameter | Description
sValue | Retrieves the return value of the last SapGuiInvokeMethod call

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    sConnID, sValue : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiSetString("0000003");
    SapGuiInvokeMethod("/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "GetNodeKeyByPath");

    // Get the return value of the previous InvokeMethod
    SapGuiGetString(sValue);
  end TMain;
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function


SapGuiSetProperty Function

Action

This function is used to set any accessible property of an SapGui control. It can be used for all data types.

Include file

SapGui.bdh

Syntax

SapGuiSetProperty( in sControlId     : string allownull,
                   in sPropertyName  : string,
                   in sPropertyValue : number,
                   in sTimer         : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a SapGui control.
sPropertyName | The name of the property to be set.
sPropertyValue | The value to be set for this property.
sTimer | Name of the timer to be used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    // maximize
    // wnd[0]
    SapGuiInvokeMethod("wnd[0]", "maximize");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.7);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.2);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // press
    // btn[0]
    SapGuiInvokeMethod("tbar[0]/btn[0]", "press");

    // SAP Easy Access
    ThinkTime(4.4);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access",SAPGUI_MATCH_Exact);

    // expandNode
    // shell
    SapGuiSetString("0000000003");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "expandNode");

    // selectedNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "selectedNode", "0000000004");

    // topNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "topNode", "Favo");

    // doubleClickNode
    // shell
    SapGuiSetString("0000000004");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "doubleClickNode");

    // press
    // btn[15]
    ThinkTime(6.0);
    SapGuiInvokeMethod("tbar[0]/btn[15]", "press");

    // press
    // btn[15]
    SapGuiInvokeMethod("tbar[0]/btn[15]", "press");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // press
    // SPOP-OPTION1
    SapGuiInvokeMethod("usr/btnSPOP-OPTION1", "press");
  end TMain;
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiGetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiGetProperty Function

Action

This function is used to retrieve any accessible property of a SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiGetProperty( in  sControlId     : string allownull,
                   in  sPropertyName  : string,
                   out sPropertyValue : string optional,
                   in  nSize          : number sizespec optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a SapGui control
sPropertyName | The name of the property to be set.
sPropertyValue | The buffer to be assigned the value
nSize | The size of the buffer

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    buffer : string;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    // maximize
    // wnd[0]
    SapGuiInvokeMethod("wnd[0]", "maximize");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.7);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    ThinkTime(2.2);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // press
    // btn[0]
    SapGuiInvokeMethod("tbar[0]/btn[0]", "press");

    // SAP Easy Access
    ThinkTime(4.4);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // expandNode
    // shell
    SapGuiSetString("0000000003");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "expandNode");

    // selectedNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "selectedNode", "0000000004");
    // topNode
    SapGuiSetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "topNode", "Favo");

    SapGuiGetProperty("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "topNode", buffer);

    // doubleClickNode
    // shell
    SapGuiSetString("0000000004");
    SapGuiInvokeMethod("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "doubleClickNode");

    // press
    // btn[15]
    ThinkTime(6.0);
    SapGuiInvokeMethod("tbar[0]/btn[15]", "press");

    // press
    // btn[15]
    SapGuiInvokeMethod("tbar[0]/btn[15]", "press");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // press
    // SPOP-OPTION1
    SapGuiInvokeMethod("usr/btnSPOP-OPTION1", "press");
  end TMain;
親トピック: Low-Level Functions
関連資料
SapGuiInvokeMethod Function
SapGuiSetProperty Function
SapGuiSetBoolean Function
SapGuiSetNull Function
SapGuiSetString Function
SapGuiSetByte Function
SapGuiSetFloat Function
SapGuiSetLong Function
SapGuiSetShort Function


SapGuiCreateCollection Function

Action

Some functions accept collections as parameters. This function creates a collection object that can then be used as a parameter.

Include file

SapGui.bdh

Syntax

SapGuiCreateCollection();
親トピック: Low-Level Functions


Connection and Session Functions

  • SapGuiCreateSession Function
    Creates a new SAP session for the current SAP connection.
  • SapGuiCloseSession Function
    Closes a specified session or all session of the current virtual user.
  • SapGuiLogon Function
    Logs on a user to the SAP system using the provided credentials.
  • SapGuiOpenConnection Function
    Opens a connection to the SAP server specified by a connection string.
  • SapGuiOpenConnectionByName Function
    Opens a connection to the SAP server specified by the name of connection as specified in the Saplogon tool.
  • SapGuiSetActiveConnection Function
    Sets the active SapGui connection.
  • SapGuiSetActiveSession Function
    Sets the active session to be used be the virtual user.
  • SapGuiRestart Function
    Restarts the SapGui engine.
親トピック: SAP Functions


SapGuiCreateSession Function

Action

Creates a new SAP session for the current SAP connection. The SAP system normally allows 6 sessions per connection.

Include file

SapGui.bdh

Syntax

SapGuiCreateSession( );

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
  begin
    // Connecting to SAP
    SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU lab77 00/3");
    SapGuiSetActiveConnection("/app/con[0]");
    SapGuiSetActiveSession("ses[0]");

    //SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);

    //Logon to SAP System// Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");
    SapGuiCreateSession();
    SapSetActiveSession("ses[1]");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // Continue (Enter)
    SapGuiPressButton("tbar[0]/btn[0]", "Continue (Enter)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Other menu
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");

    // Restrict Values
    SapGuiSetActiveWindow("wnd[1]", "Restrict Values", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[12]", "Cancel (F12)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Log off (Shift+F3)
    SapGuiPressButton("tbar[0]/btn[15]", "Log off (Shift+F3)");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "Yes");
  end TMain;
親トピック: Connection and Session Functions


SapGuiCloseSession Function

Action

This function closes a specified session or all session of the current virtual user.

Include file

SapGui.bdh

Syntax

SapGuiCloseSession( in sSession : string optional );
Parameter | Description
sSession | The id of the session to be closed. Set this parameter to NULL to close all assigned sessions.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    iCol : number;
    sName : string;
    sConnID : string;
  begin// Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0/3");

    SapGuiSetActiveConnection(gsConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiCloseSession();
  end TMain;
親トピック: Connection and Session Functions


SapGuiLogon Function

Action

Logs on a user to the SAP system using the provided credentials.

Include file

SapGui.bdh

Syntax

SapGuiLogon( in sUsername  : string,
             in sPassword  : string,
             in sClientNum : string,
             in sLanguage  : string,
             in sTimer     : string ) : boolean;
Parameter | Description
sUserName | The user to be logged using the SapGuiLogon function.
sPassword | The user's password.
sClientNum | SAP specific client number.
sLanguage | SAP specific language code.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin
    // Connecting to SAP
    sId := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU lab77 00 /3");
    SapGuiSetActiveConnection(sId);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System// Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "fantastic", "000", "");
  end TMain;
親トピック: Connection and Session Functions


SapGuiOpenConnection Function

Action

Opens a connection to the SAP server specified by a connection string.

Include file

SapGui.bdh

Syntax

SapGuiOpenConnection( in sConnString : string ) : string;
Parameter | Description
sConnString | SAP Connection String

Return value

  • Connection ID if successful
  • Null otherwise

Example

transaction TMain
  var
  begin
    // Connecting to SAP
    SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU lab77 00 /3");
    SapGuiSetActiveConnection("/app/con[0]");

    SapGuiSetActiveSession("ses[0]");

    //SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System// Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // Continue (Enter)
    SapGuiPressButton("tbar[0]/btn[0]", "Continue (Enter)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Other menu
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");

    // Restrict Values
    SapGuiSetActiveWindow("wnd[1]", "Restrict Values", SAPGUI_MATCH_Exact);

    // Cancel (F12)
    SapGuiPressButton("tbar[0]/btn[12]", "Cancel (F12)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Log off (Shift+F3)
    SapGuiPressButton("tbar[0]/btn[15]", "Log off (Shift+F3)");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "Yes");
  end TMain;
親トピック: Connection and Session Functions


SapGuiOpenConnectionByName Function

Action

Opens a connection to the SAP server specified by the name of connection as specified in the Saplogon tool.

Include file

SapGui.bdh

Syntax

SapGuiOpenConnectionByName( in    sConnName : string,
                            inout sId       : dstring optional ) : boolean;
Parameter | Description
sConnName | The name of the connection profile as specified in the SapLogon tool
sId | This parameter will be assigned the id of the connection.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin
    // Connecting to SAP
    SapGuiOpenConnectionByName("incantation", sId);

    SapGuiSetActiveConnection("/app/con[0]");

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // Continue (Enter)
    SapGuiPressButton("tbar[0]/btn[0]", "Continue (Enter)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Other menu
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");

    // Restrict Values
    SapGuiSetActiveWindow("wnd[1]", "Restrict Values", SAPGUI_MATCH_Exact);

    // Cancel (F12)
    SapGuiPressButton("tbar[0]/btn[12]", "Cancel (F12)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Log off (Shift+F3)
    SapGuiPressButton("tbar[0]/btn[15]", "Log off (Shift+F3)");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "Yes");
  end TMain;
親トピック: Connection and Session Functions


SapGuiSetActiveConnection Function

Action

This function sets the active SapGui connection. All subsequent SapGui calls will use this connection.

Include file

SapGui.bdh

Syntax

SapGuiSetActiveConnection( in sConnId : string ) : boolean;
Parameter | Description
sConnId | The id uniquely identifying the connection.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin
    // Connecting to SAP
    sId := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sId);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");
  end TMain;
親トピック: Connection and Session Functions


SapGuiSetActiveSession Function

Action

Sets the active session to be used be the virtual user. Any subsequent calls will be made using the active session.

Include file

SapGui.bdh

Syntax

SapGuiSetActiveSession( in sSessionId : string ) : boolean;
Parameter | Description
sSessionId | Id uniquely identifying the session to be set as the active one.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin
    // Connecting to SAP
    sId := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sId);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");
  end TMain;
親トピック: Connection and Session Functions


SapGuiRestart Function

Action

Restarts the SapGui engine. The restart is not performed gracefully, and open sessions or open connections will not be closed gracefully. Instead, the whole SapGui engine will be restarted, which involves starting a new process. Therefore, this function should only be called in exceptional situations where the script detects an unstable or inconsistent state from which it cannot recover to a consistent starting state for the next transaction.

Include File

SapGui.bdh

Syntax

SapGuiRestart() : boolean;

Return Value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    inconsistentStateDetected : boolean;
    gsConnID : string;
  begin
    // Connecting to SAP
    gsConnID := SapGuiOpenConnection("/SAP_CODEPAGE=1100  /FULLMENU  atlis-minisap 00 /3 /UPDOWNLOAD_CP=2", "SapGuiOpenConnection");
    SapGuiSetActiveConnection(gsConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE, "SapGuiWindowAction\\SAPGUI_WND_MAXIMIZE");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.8);
    SapGuiLogon("bcuser", "minisap", "001", "", "SapGuiLogon");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // do some SapGui actions ...
    inconsistentStateDetected := true;

    // TODO: write code to check for inconsistent state (dependent on the certain script)
    if (inconsistentStateDetected) then SapGuiRestart();

      // Now we have a clean state for the next transaction.
    else

      // In normal situations we just log out.
      SapGuiWindowAction(SAPGUI_WND_CLOSE, "SapGuiWindowAction\\SAPGUI_WND_CLOSE");
      ThinkTime(0.5);

      // Log Off
      SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_ExactNoCase);

      // Yes
      SapGuiPressButton("usr/btnSPOP-OPTION1", "SapGuiPressButton\\Yes");
    end;
  end TMain;
親トピック: Connection and Session Functions


Control Functions

  • SapGuiWindowAction Function
    Performs certain actions on the active window.
  • SapGuiWindowResize Function
    Resizes the active window.
  • SapGuiSetActiveWindow Function
    Sets the active window for the virtual users.
  • SapGuiCalendarFirstVisibleDate Function
    Scrolls to a date in the calendar and makes it visible.
  • SapGuiCalendarFocusDate Function
    Sets the focus to a specified date.
  • SapGuiCalendarSelectInterval Function
    Selects a date or a range of dates inside a calendar control.
  • SapGuiGetComboBoxEntry Function
    Retrieves the selected value of a combobox.
  • SapGuiContextMenuSelectItem Function
    Selects the specified cell in a SapGui grid control.
  • SapGuiContextMenuSelectItemByText Function
    Selects an item in a context menu.
  • SapGuiContextMenuSelectItemByPosition Function
    Selects an item in a context menu.
  • SapGuiGridDblClickCurrentCell Function
    Performs a double-click on the currently activated cell.
  • SapGuiTreeExpandNode Function
    Expands a specified node of a specified tree control.
  • SapGuiGetActiveWindowTitle Function
    Retrieves the title of the active window.
  • SapGuiGetCalendarFocusDate Function
    Retrieves the focused date of a calendar control.
  • SapGuiGridClick Function
    Clicks a cell of the grid control.
  • SapGuiGridClickCurrentCell Function
    Performs a simple click on the currently activated cell.
  • SapGuiGridContextMenu Function
    Opens a context menu for the currently selected cell.
  • SapGuiGridCurrentCellPressButton Function
    Emulates a button click in the currently selected cell of a grid.
  • SapGuiGridCurrentCellPressTotalRow Function
    Presses the total row button for the currently selected cell.
  • SapGuiGridDblClick Function
    Emulates a double-click in a cell of the grid.
  • SapGuiGridGetColumnTitles Function
    Returns a collection of strings that are used to display the title of a column.
  • SapGuiGridModifyCheckbox Function
    Checks a check box in a grid control.
  • SapGuiGridPressButton Function
    Clicks a button in a grid.
  • SapGuiGridPressColumnHeader Function
    Emulates a click on a column header of a grid.
  • SapGuiGridPressToolbarButton Function
    Emulates a click on a grid toolbar button.
  • SapGuiGridPressToolbarContextButton Function
    Emulates a virtual user opening a list of options by clicking on a context button.
  • SapGuiGridPressTotalRow Function
    Presses the total row button in a grid.
  • SapGuiGridScrollToRow Function
    Scrolls to the specified row of the SapGui grid control.
  • SapGuiGridSelectCell Function
    Selects the specified cell in a SapGui grid control.
  • SapGuiGridSelectContextMenu Function
    Selects an option from a context menu in a grid.
  • SapGuiGridSelectToolbarMenu Function
    Selects an option from a grid toolbar menu.
  • SapGuiGridSetCellData Function
    Writes data to the specified cell of a grid control.
  • SapGuiGridSetColumnWidth Function
    Sets the column width in a SapGui grid control to a specified value.
  • SapGuiIgnoreError Function
    Ignores SapGui errors.
  • SapGuiPressButton Function
    Performs a click on the specified SapGui button control.
  • SapGuiPressToolbarButton Function
    Presses a toolbar button.
  • SapGuiPressToolbarContextButton Function
    Presses the toolbar context button.
  • SapGuiSelectComboBoxEntry Function
    Selects an item in a SapGui combobox.
  • SapGuiSelectMenu Function
    Selects a menu from the SapGui menu bar.
  • SapGuiSelectRadioButton Function
    Selects the specifed SapGui radio button.
  • SapGuiSelectTab Function
    Activates the specified tab sheet inside a SapGui tab control.
  • SapGuiSelectToolbarMenuItem Function
    Selects a toolbar menu item.
  • SapGuiSelectToolbarMenuItemByText Function
    Selects a toolbar menu item using the text of the item.
  • SapGuiSelectTopNode Function
    Scrolls to a specified node in the SapGui tree control.
  • SapGuiSendVKey Function
    Sends a keyboard input event to the active window.
  • SapGuiSetCheckbox Function
    Checks or unchecks the specified SapGui check box.
  • SapGuiSetFileName Function
    Sets a file name that will be used to replace the next file selection using the Windows function GetOpenFileName.
  • SapGuiSetFocus Function
    Sets the focus to the specified control.
  • SapGuiSetOKCode Function
    Sets the text for a SapGui OK text field.
  • SapGuiSetText Function
    Enters text into a SapGui text field.
  • SapGuiTableGetRadioValue Function
    Checks whether a table cell's radio button is selected.
  • SapGuiTableGetRows Function
    Returns a collection of table rows for the specified table.
  • SapGuiTableGetRowSelected Function
    Returns the index of the current cell's row.
  • SapGuiTableGetRowCount Function
    Returns the number of rows for the specified table.
  • SapGuiTableGetText Function
    Returns the text of a specified table's cell.
  • SapGuiTableGetColumns Function
    Returns the collection of columns for the specified table.
  • SapGuiTableGetColumnCount Function
    Returns the number of columns for the specified table.
  • SapGuiTableIsCheckboxChecked Function
    Returns whether a check box in a table cell is checked.
  • SapGuiTablePressButton Function
    Presses a cell's button.
  • SapGuiTableSelectComboboxEntry Function
    Selects an entry from a cell's combobox.
  • SapGuiTableSelectRadioButton Function
    Select a cell's radio button.
  • SapGuiTableSelectRow Function
    Selects one row of a table.
  • SapGuiTableSetCheckbox Function
    Checks a cell's check box.
  • SapGuiTableSetFocusCell Function
    Sets the focus to a cell in a SapGui table control.
  • SapGuiTableSetText Function
    Sets text at the specified position in a SapGui table control.
  • SapGuiTreeChangeCheckbox Function
    Checks or unchecks a tree item's check box.
  • SapGuiTreeClickLink Function
    Clicks a tree's hyperlink.
  • SapGuiTreeCollapseNode Function
    Collapses a specified node of a specified tree control.
  • SapGuiTreeDblClickItem Function
    Performs a double click on the specified tree item.
  • SapGuiTreeDblClickNode Function
    Performs a double click on the specified node inside a SapGui tree control.
  • SapGuiTreeDefaultContextMenu Function
    Opens the default context menu for the tree.
  • SapGuiTreeGetColumnCol Function
    Returns the keys of all the items in the given column.
  • SapGuiTreeGetColumnHeaders Function
    Returns a collection of column headers for the specified tree.
  • SapGuiTreeGetColumnNames Function
    Returns a collection of column names for the specified tree.
  • SapGuiTreeGetItemText Function
    Returns the text of a tree item.
  • SapGuiTreeGetNodeChildrenCountByPath Function
    Returns the number of children of the node given by the path parameter.
  • SapGuiTreeGetNodeKeyByPath Function
    Returns the key of the node specified by the given path description.
  • SapGuiTreeGetNodesCol Function
    Returns the node keys of all the nodes in the tree.
  • SapGuiTreeGetNodeText Function
    Returns the text of a specified node of a SapGui tree control.
  • SapGuiTreeGetNodeTextByPath Function
    Returns the text of a node defined by the given path.
  • SapGuiTreeGetParent Function
    Returns the key of the parent node of the specified node in a SapGui tree control.
  • SapGuiTreeGetSubNodesCol Function
    Returns the keys of all subnodes of the node specified by the given key.
  • SapGuiTreeHeaderContextMenu Function
    Opens a context menu for a tree header.
  • SapGuiTreeItemContextMenu Function
    Opens a context menu for a tree item.
  • SapGuiTreeNodeContextMenu Function
    Opens a context menu for the specified tree node.
  • SapGuiTreePressButton Function
    Clicks a button in a SapGui tree.
  • SapGuiTreePressHeader Function
    Performs a click on the column header.
  • SapGuiTreePressKey Function
    Presses a keyboard key.
  • SapGuiTreeSelectColumn Function
    Selects a tree column.
  • SapGuiTreeSelectItem Function
    Selects an item from a SapGui tree control.
  • SapGuiTreeSelectNode Function
    Selects the specified node inside a SapGui tree control.
  • SapGuiTreeSetColumnWidth Function
    Sets the tree column width.
  • SapGuiTreeSetHierarchyWidth Function
    Sets the tree hierarchy width.
  • SapGuiTreeUnselectAll Function
    Cancels all selections in the tree.
  • SapGuiTreeUnselectColumn Function
    Unselects a tree column.
  • SapGuiTreeUnselectNode Function
    Unselects a tree node.
親トピック: SAP Functions


SapGuiWindowAction Function

Action

Performs certain actions on the active window. The window can be closed, minimized, restored or maximized.

Include file

SapGui.bdh

Syntax

SapGuiWindowAction( in nAction : number,
                        sTimer : in string optional) : boolean;
Parameter | Description
nAction

The action to be performed on the active window. Available options are:

  • SAPGUI_WND_CLOSE. Closes the active window.
  • SAPGUI_WND_MAXIMIZE. Maximized the active window.
  • SAPGUI_WND_RESTORE. Restores the active window.
  • SAPGUI_WND_ICONIFY. Minimizes the active window.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin

    // Connecting to SAP
    sId := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU lab77 00 /3");
    SapGuiSetActiveConnection(sId);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // Continue (Enter)
    SapGuiPressButton("tbar[0]/btn[0]", "Continue (Enter)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Other menu
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");

    // Restrict Values
    SapGuiSetActiveWindow("wnd[1]", "Restrict Values", SAPGUI_MATCH_Exact);

    // Cancel (F12)
    SapGuiPressButton("tbar[0]/btn[12]", "Cancel (F12)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Log off (Shift+F3)
    SapGuiPressButton("tbar[0]/btn[15]", "Log off (Shift+F3)");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "Yes");
  end TMain;
親トピック: Control Functions


SapGuiWindowResize Function

Action

Resizes the active window.

Include file

SapGui.bdh

Syntax

SapGuiWindowResize( in nWidth       : number,
                    in nHeight      : number,
                    in bThrowOnFail : boolean optional ) : boolean;
Parameter | Description
nWidth | New width to be set for the window.
nHeight | New height to be set for the window.
bThrowOnFail | If set to true, the window control will raise an exception in case resizing fails. Default value is false.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin

    // Connecting to SAP
    sId := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU lab77 00 /3");
    SapGuiSetActiveConnection(sId);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");
  end TMain;
親トピック: Control Functions


SapGuiSetActiveWindow Function

Action

Sets the active window for the virtual users. Any subsequent SapGui calls will be performed on the active window. This function also allows window title verifications.

Include file

SapGui.bdh

Syntax

SapGuiSetActiveWindow( in sWindowId : string,
                       in sCaption  : string optional,
                       in nMatch    : number optional ) : boolean;
Parameter | Description
sWindowId | Id uniquely identifying the window to be set as the active one.
sCaption | Caption of the window. This parameter will be used to perform a window title verification. The caption may also be provided using wildcards or regular expressions. How the function will evaluate the caption has to be specified in the third parameter of the function.
nMatch

Method how to perform the title verification. Available options are:

  • SAPGUI_MATCH_Exact. The function will report an error unless the caption parameter exactly matches the current window title. This method is the default behaviour when omitting this parameter.
  • SAPGUI_MATCH_ExactNoCase. Performs a case insensitive window title verification
  • SAPGUI_MATCH_Wildcard. Performs a window title verification using wildcards. The search string may contain '*' which matches 0 to n characters. '?' will match exactly one character. Characters enclosed by square brackets ([ ]) will match one character from the set enclosed by the brackets.
  • SAPGUI_MATCH_WildcardNoCase. Same as the previous option but the comparison is performed case insensitive.
  • SAPGUI_MATCH_RegExp. The window title verification is performed using regular expressions. Specify a regualar expression for the caption parameter.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin
    // Connecting to SAP
    sId := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sId);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiSetActiveWindow("wnd[0]", "S.*P", SAPGUI_MATCH_RegExp);
    SapGuiSetActiveWindow("wnd[0]", "S?P", SAPGUI_MATCH_Wildcard);
    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");

    // Copyright
  end TMain;
親トピック: Control Functions


SapGuiCalendarFirstVisibleDate Function

Action

Scrolls to a date in the calendar and makes it visible.

Include file

SapGui.bdh

Syntax

SapGuiCalendarFirstVisibleDate( in sControlId : stringallownull,
                                in sDate      : string,
                                in sTimer     : stringoptional ) : boolean;
Parameter | Description
sControlId | The calendar control's unique id.
sDate | The date field to be made visible. The date has to be specified in the following format YYYYMMDD (e.g. "20091031").
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
        var
        sConnID : string;
        begin// Connecting to SAP
        sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");

        SapGuiSetActiveConnection(sConnID);

        SapGuiSetActiveSession("ses[0]");

        // SAP
        SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

        SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

        // Logon to SAP System
        // Before running a test you have to customize the password parameter!
        SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
        ThinkTime(2.8);
        SapGuiLogon("ddic", "minisap", "000", "");
        // Copyright
        ThinkTime(2.1);
            SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

        SapGuiPressButton("tbar[0]/btn[0]");

        // SAP Easy Access
            ThinkTime(9.9);
        SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

        SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");

        SapGuiCalendarFirstVisibleDate("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20040809");

        end TMain;
親トピック: Control Functions


SapGuiCalendarFocusDate Function

Action

Sets the focus to a specified date.

Include file

SapGui.bdh

Syntax

SapGuiCalendarFocusDate( in sControlId : stringallownull,
                         in sDate      : string,
                         in sTimer     : string optional) : boolean;
Parameter | Description
sControlId | The calendar control's unique id.
sDate | The date to be focused. The date has to be specified in the following format YYYYMMDD (e.g. "20091031").
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
        var
        sConnID : string;
        begin// Connecting to SAP
        sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
        SapGuiSetActiveConnection(sConnID);

        SapGuiSetActiveSession("ses[0]");

        // SAP
        SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

        SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

        // Logon to SAP System// Before running a test you have to customize the password parameter!
        SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
        ThinkTime(2.8);
        SapGuiLogon("ddic", "minisap", "000", "");

        // Copyright
        ThinkTime(2.1);
        SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

        SapGuiPressButton("tbar[0]/btn[0]");

        // SAP Easy Access
        ThinkTime(9.9);
        SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

        // NodeName: Office
        // NodePath: 2\1
        SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");

        // NodeName: Appointment Calendar// NodePath: 2\1\3
        SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Appointment Calendar", "0000000008",
          "Expand\\Appointment Calendar"
        );

        // NodeName: Owner
        // NodePath: 2\1\3\1
        SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Owner", "0000000009", false, "SelNode\\Owner");

        // NodeName: Favorites// NodePath: 1
        SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");

        // NodeName: Owner// NodePath: 2\1\3\1
        SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Owner", "0000000009", SapGuiTreeDblClickNode
        ("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Owner", "0000000009", "DblClNode\\Owner");
        // Grid Control Info: /app/con[0]/ses[0]/wnd[0]/usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell/8 columns
        // -------------------------------------
            // 1: 1:Time
            // 2: 2:Monday
            // 3: 3:Tuesday
        // 4: 4:Wednesday
            // 5: 5:Thursday
        // 6: 6:Friday
            // 7: 7:Saturday
            // 8: 8:Sunday

        // Termine anzeigen: DDIC
        ThinkTime(9.3);
        SapGuiSetActiveWindow("wnd[0]", "Termine anzeigen: DDIC", SAPGUI_MATCH_Exact);

        ThinkTime(4.5);

        SapGuiCalendarFocusDate("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20041203");
      end TMain;
親トピック: Control Functions


SapGuiCalendarSelectInterval Function

Action

Selects a date or a range of dates inside a calendar control.

Include file

SapGui.bdh

Syntax

SapGuiCalendarSelectInterval( in sControlId : stringallownull,
                              in sInterval  : string,
                              in sTimer     : stringoptional ) : boolean;
Parameter | Description
sControlId | The calendar control's unique id.
sInterval | The interval to be selected.This interval has to be specified by two concatenated date strings (format YYYYMMDD) separated by a comma (e.g. "20091023,20091031").
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System// Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");
    SapGuiCalendarSelectInterval("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20041203,20041203");
  end TMain;
親トピック: Control Functions


SapGuiGetComboBoxEntry Function

Action

Retrieves the selected value of a combobox.

Include file

SapGui.bdh

Syntax

SapGuiGetComboBoxEntry( in sControl : string ) : string;
Parameter | Description
sControlId | The unique id of the control.

Return value

  • Selected entry on success.
  • Empty string otherwise.

Example

transaction TMain
      var
        sText : string;
        sConnID : string;

      begin// Connecting to SAP
        sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

        SapGuiSetActiveConnection(sConnID);

        SapGuiSetActiveSession("ses[0]");

        // SAP
        SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

        SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

        SapGuiLogon("ddic", "*******", "000", "");

        sText := SapGuiGetComboBoxEntry("/usr/tab/combobox");
      end TMain;
親トピック: Control Functions


SapGuiContextMenuSelectItem Function

Action

Selects an item of a context menu using the unique identifier of the item.

Include file

SapGui.bdh

Syntax

SapGuiContextMenuSelectItem( in sControl : stringallownull,
                             in sItem    : string,
                             in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The context menu's unique id.
sItem | The menu item to be selected from the context menu.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System// Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy AccessThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office// NodePath: 2\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", false, "SelNode\\Office");

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeNodeContextMenu("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "NodeCtxt\\Office");
    SapGuiContextMenuSelectItem("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "XXEXPD");
  end TMain;
親トピック: Control Functions


SapGuiContextMenuSelectItemByText Function

Action

Selects an item of a context menu using the text of the item.

Include file

SapGui.bdh

Syntax

SapGuiContextMenuSelectItemByText( sControl : in string allownull,
                                   sText    : in string,
                                   sTimer   : in string optional) : boolean;
Parameter | Description
sControl | The context menu's unique ID
sText | The text of the item to be selected
sTimer | Timer name for measurements

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
  begin
    // Connecting to SAP
    gsConnID := SapGuiOpenConnection("   /SAP_CODEPAGE=1100  /FULLMENU  atlid-test1 00 /3 /UPDOWNLOAD_CP=2",
    "SapGuiOpenConnection");
    SapGuiSetActiveConnection(gsConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE, "SapGuiWindowAction\\SAPGUI_WND_MAXIMIZE");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(4.4);
    SapGuiLogon("bcuser", "*******", "001", "", "SapGuiLogon");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", false,
    "SelNode\\Office");

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeNodeContextMenu("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003",
    "NodeCtxt\\Office");

    ThinkTime(9.9);
    SapGuiContextMenuSelectItemByText("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Open folder");

    // Log off
    ThinkTime(7.9);
    SapGuiSelectMenu("mbar/menu[4]/menu[12]", "SapGuiSelectMenu\\Log off");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_ExactNoCase);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "SapGuiPressButton\\Yes");
  end TMain;
親トピック: Control Functions


SapGuiContextMenuSelectItemByPosition Function

Action

Selects an item in a context menu by specifying the item's (zero-based) index.

Include file

SapGui.bdh

Syntax

SapGuiContextMenuSelectItemByPosition( sControl  : in string allownull,
                                       sPosition : in string,
                                       sTimer    : in string optional) : boolean;
Parameter | Description
sControl | The context menu's unique ID
sPosition | The menu item's index (zero-based) to be selected from the context menu
sTimer | Timer name for measurements

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
  begin
    // Connecting to SAP
    gsConnID := SapGuiOpenConnection("   /SAP_CODEPAGE=1100  /FULLMENU  atlid-test1 00 /3 /UPDOWNLOAD_CP=2",
    "SapGuiOpenConnection");
    SapGuiSetActiveConnection(gsConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE, "SapGuiWindowAction\\SAPGUI_WND_MAXIMIZE");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(4.4);
    SapGuiLogon("bcuser", "*******", "001", "", "SapGuiLogon");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", false,
    "SelNode\\Office");

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeNodeContextMenu("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003",
    "NodeCtxt\\Office");

    ThinkTime(9.9);
    SapGuiContextMenuSelectItemByPosition("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "0");

    // Log off
    ThinkTime(7.9);
    SapGuiSelectMenu("mbar/menu[4]/menu[12]", "SapGuiSelectMenu\\Log off");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_ExactNoCase);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "SapGuiPressButton\\Yes");
  end TMain;
親トピック: Control Functions


SapGuiGridDblClickCurrentCell Function

Action

Performs a double-click on the currently activated cell.

Include file

SapGui.bdh

Syntax

SapGuiGridClickCurrentCell( in sControlId : string allownull,
                            in sTimer     : string optional) : boolean;
Parameter | Description
sControlId | The cell's unique id.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

    transaction TMain
      var
        sConnID : string;
      begin
        // Connecting to SAP
        sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");

        SapGuiSetActiveConnection(sConnID);

        SapGuiSetActiveSession("ses[0]");

        //SAP
        SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

        SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

        // Logon to SAP System// Before running a test you have to customize the password parameter!
        SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
        ThinkTime(2.8);
        SapGuiLogon("ddic", "minisap", "000", "");

        // Copyright
        ThinkTime(2.1);
        SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

        SapGuiPressButton("tbar[0]/btn[0]");

        // SAP Easy Access
        ThinkTime(9.9);
        SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

        // NodeName: Office// NodePath: 2\1
        SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");

        // NodeName: Appointment Calendar// NodePath: 2\1\3
        SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Appointment Calendar", "0000000008",
        "Expand\\Appointment Calendar");

        // NodeName: Owner// NodePath: 2\1\3\1
        SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Owner", "0000000009", false, "SelNode\\Owner");

        // NodeName: Favorites// NodePath: 1
        SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");

        // NodeName: Owner// NodePath: 2\1\3\1
        SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Owner", "0000000009", "DblClNode\\Owner");

        // Grid Control Info: /app/con[0]/ses[0]/wnd[0]/usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell/8 columns
        // -------------------------------------
            // 1: 1:Time
        // 2: 2:Monday
        // 3: 3:Tuesday
        // 4: 4:Wednesday
        // 5: 5:Thursday
        // 6: 6:Friday
            // 7: 7:Saturday
        // 8: 8:Sunday

        // Termine anzeigen: DDIC
        ThinkTime(9.3);
        SapGuiSetActiveWindow("wnd[0]", "Termine anzeigen: DDIC", SAPGUI_MATCH_Exact);

        ThinkTime(2.0);
        SapGuiCalendarFirstVisibleDate("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20040802");

        SapGuiGridSelectCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell", 5, " 2");

        SapGuiGridDblClickCurrentCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell");
      end TMain;
親トピック: Control Functions


SapGuiTreeExpandNode Function

Action

Expands a specified node of a specified tree control.

Include file

SapGui.bdh

Syntax

SapGuiTreeExpandNode( in sControlId : string allownull,
                      in sNodeName  : string,
                      in sNode      : string,
                      in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node to be expanded. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
 var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.2);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.2);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(3.8);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");
  end TMain;
親トピック: Control Functions


SapGuiGetActiveWindowTitle Function

Action

Retrieves the title of the active window.

Include file

SapGui.bdh

Syntax

SapGetGetActiveWindowTitle( ) : string;

Return value

  • The title of the active window on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGetActiveWindowTitle();
  end TMain;
親トピック: Control Functions


SapGuiGetCalendarFocusDate Function

Action

Retrieves the focused date of a calendar control.

Include file

SapGui.bdh

Syntax

SapGuiGetCalendarFocusDate( in sControlId : string ) : string;

Parameter | Description
sControlId | The unique id of a calendar control.

Return value

  • Focused date on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(     " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGetCalendarFocusDate("/usr/tab/cal");
  end TMain;
親トピック: Control Functions


SapGuiGridClick Function

Action

Clicks a cell of the grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridClick( in sControlId : string allownull,
                 in nRow       : number,
                 in sCol       : string,
                 in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid's unique id.
nRow | The cell's row index.
sCol | The cell's column id.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck  : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck:= SapGuiGridClick("/usr/tab/grid", 0, "COL00203");
  end TMain;
親トピック: Control Functions


SapGuiGridClickCurrentCell Function

Action

Performs a simple click on the currently activated cell.

Include file

SapGui.bdh

Syntax

SapGuiGridClickCurrentCell( in sControlId : string allownull,
                            in sTimer     : string optional ) : boolean;

Parameter | Description
sControlId | The cell's unique id.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");
    // SAP

    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System

    // Before running a test you have to customize the password parameter!

    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);

    ThinkTime(2.8);

    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright

    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office

    // NodePath: 2\1    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");

    // NodeName: Appointment Calendar

    // NodePath: 2\1\3

    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Appointment Calendar", "0000000008",
    "Expand\\Appointment alendar");

    // NodeName: Owner

    // NodePath: 2\1\3\1

    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Owner", "0000000009", false, "SelNode\\Owner");

    // NodeName: Favorites

    // NodePath: 1

    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");

    // NodeName: Owner

    // NodePath: 2\1\3\1

    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Owner", "0000000009", "DblClNode\\Owner");
    // Grid Control Info: /app/con[0]/ses[0]/wnd[0]/usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell/8 columns

    // -------------------------------------
    // 1: 1:Time
    // 2: 2:Monday
    // 3: 3:Tuesday
    // 4: 4:Wednesday
    // 5: 5:Thursday
    // 6: 6:Friday
    // 7: 7:Saturday
    // 8: 8:Sunday

    // Termine anzeigen: DDIC
    ThinkTime(9.3);
    SapGuiSetActiveWindow("wnd[0]", "Termine anzeigen: DDIC", SAPGUI_MATCH_Exact);

    ThinkTime(2.0);
    SapGuiCalendarFirstVisibleDate("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20040802");
    SapGuiGridSelectCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell", 5, " 2");
    SapGuiGridClickCurrentCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell");

  end TMain;
親トピック: Control Functions


SapGuiGridContextMenu Function

Action

Opens a context menu for the currently selected cell.

Include file

SapGui.bdh

Syntax

SapGuiGridContextMenu( in sControlId : string allownull,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The cell's unique id.
sTimer | Timer name for measurements.

Return value

  • true if the function succeeds
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Office", "0000000003", "Expand\\Office");

    // NodeName: Appointment Calendar
    // NodePath: 2\1\3
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Appointment Calendar", "0000000008", "Expand\\Appointment Calendar");

    // NodeName: Owner
    // NodePath: 2\1\3\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Owner", "0000000009", false, "SelNode\\Owner");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Favorites", "Favo", "TopNode\\Favorites");

    // NodeName: Owner
    // NodePath: 2\1\3\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Owner", "0000000009", "DblClNode\\Owner");

    // Grid Control Info: /app/con[0]/ses[0]/wnd[0]/usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell/8 columns

    // -------------------------------------

    // 1: 1:Time

    // 2: 2:Monday

    // 3: 3:Tuesday

    // 4: 4:Wednesday

    // 5: 5:Thursday

    // 6: 6:Friday

    // 7: 7:Saturday

    // 8: 8:Sunday

    // Termine anzeigen: DDIC
    ThinkTime(9.3);
    SapGuiSetActiveWindow("wnd[0]", "Termine anzeigen: DDIC", SAPGUI_MATCH_Exact);
    ThinkTime(7.4);
    SapGuiCalendarFirstVisibleDate("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20040802");
    SapGuiGridScrollToRow("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell",12);
    SapGuiGridDblClickCurrentCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell");

    // Terminkalender: Create Appointment
    ThinkTime(10.1);
    SapGuiSetActiveWindow("wnd[1]", "Terminkalender: Create Appointment",SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[12]");

    // Termine anzeigen: DDIC
    ThinkTime(2.3);
    SapGuiSetActiveWindow("wnd[0]", "Termine anzeigen: DDIC", SAPGUI_MATCH_Exact);
    SapGuiGridSelectCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell", 13, " 2");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiGridContextMenu("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell");
    ThinkTime(2.1);
  end TMain;
親トピック: Control Functions


SapGuiGridCurrentCellPressButton Function

Action

Emulates a button click in the currently selected cell of a grid.

Include file

SapGui.bdh

Syntax

SapGuiGridCurrentCellPressButton( in sControlId : string allownull,
                                  in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiGridCurrentCellPressButton("/usr/tab/grid");
  end TMain;
親トピック: Control Functions


SapGuiGridCurrentCellPressTotalRow Function

Action

Presses the total row button for the currently selected cell.

Include file

SapGui.bdh

Syntax

SapGuiGridCurrentCellPressTotalRow( in sControlId : string allownull,
                                    in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText   : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridCurrentCellPressTotalRow("/usr/tab/grid" );
  end TMain;
親トピック: Control Functions


SapGuiGridDblClick Function

Action

Emulates a double-click in a cell of the grid.

Include file

SapGui.bdh

Syntax

SapGuiGridDblClick( in sControlId : string allownull,
                    in nRow       : number,
                    in sCol       : string,
                    in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The cell's unique id.
nRow | The cell's row.
sCol | The cell's column id.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck  : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridDblClick("/usr/tab/chgrid", 0, "COL002" );
  end TMain;
親トピック: Control Functions


SapGuiGridGetColumnTitles Function

Action

Returns a collection of strings that are used to display the title of a column. The grid control chooses the appropriate title according to the width of the column.

Include file

SapGui.bdh

Syntax

SapGuiGridGetColumnTitles( sControl  : in string allownull,
                           sColumn   : in string,
                           nIterator : out number) : boolean;
Parameter | Description
sControl | The unique ID of the grid control
sColumn | The column's identifier for which to retrieve the titles
nIterator | This parameter will be assigned a handle to the iterator

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    nIterator : number;
    sColumn   : string;
    nType     : number;
  begin
    // Connecting to SAP
    gsConnID := SapGuiOpenConnection("/SAP_CODEPAGE=1100  /FULLMENU  atlis-minisap 00 /3 /UPDOWNLOAD_CP=2",
    "SapGuiOpenConnection");

    SapGuiSetActiveConnection(gsConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE, "SapGuiWindowAction\\SAPGUI_WND_MAXIMIZE");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.8);
    SapGuiLogon("bcuser", "minisap", "001", "", "SapGuiLogon");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // Grid Control Info: /app/con[0]/ses[0]/wnd[0]/usr/cntlBCALVC_TOOLBAR_D100_C1/shellcont/shell/ 15 columns
    // -------------------------------------
    // 1: CARRID:ID
    // 2: CONNID:No.
    // 3: COUNTRYFR:Cty
    // 4: CITYFROM:Depart. city
    // 5: AIRPFROM:Airport
    // 6: COUNTRYTO:Cty
    // 7: CITYTO:Arrival city
    // 8: AIRPTO:Apt
    // 9: FLTIME:Flght time
    // 10: DEPTIME:Departure
    // 11: ARRTIME:Arrival
    // 12: DISTANCE:Distance
    // 13: DISTID:Dis.
    // 14: FLTYPE:Charter
    // 15: PERIOD:Day(s)

    SapGuiGridGetColumnTitles("usr/cntlBCALVC_TOOLBAR_D100_C1/shellcont/shell", "CONNID", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sColumn, nType);
      Print(sColumn);
    end;
    SapGuiIteratorRelease(nIterator);

  end TMain;
親トピック: Control Functions


SapGuiGridModifyCheckbox Function

Action

Checks a check box in a grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridModifyCheckbox( in sControlId : string allownull,
                          in nRow       : number,
                          in sCol       : string,
                          in bChecked   : boolean ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
nRow | The cell's row
sCol | The column id of the cell.
bChecked | If this parameter is "true", the checkbox will be checked.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiGridModifyCheckbox("/usr/tab/chk", 0, "COL03", true );
  end TMain;
親トピック: Control Functions


SapGuiGridPressButton Function

Action

Clicks a button in a grid.

Include file

SapGui.bdh

Syntax

SapGuiGridPressButton( in sControlId : string allownull,
                       in nRow       : number,
                       in sCol       : string,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid's unique id.
nRow | The cell's row.
sCol | The id of the column.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridPressButton("/usr/tab/cgrid", 0, "COL002");
  end TMain;
親トピック: Control Functions


SapGuiGridPressColumnHeader Function

Action

Emulates a click on a column header of a grid.

Include file

SapGui.bdh

Syntax

SapGuiGridPressColumnHeader( in sControlId : stringallownull,
                             in sCol       : string,
                             in sTimer     : string optional) : boolean;
Parameter | Description
sControlId | The control's unique id.
sCol | The column's id.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridPressColumnHeader("/usr/tab/ch", "OOFOCOLUMN");
  end TMain;
親トピック: Control Functions


SapGuiGridPressToolbarButton Function

Action

Emulates a click on a grid toolbar button.

Include file

SapGui.bdh

Syntax

SapGuiGridPressToolbarButton( in sControlId : string allownull,
                              in sButton    : string,
                              in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
sButton | The button's id.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridPressToolbarButton("/usr/tab/gr", "btn");
  end TMain;
親トピック: Control Functions


SapGuiGridPressToolbarContextButton Function

Action

Emulates a virtual user opening a list of options by clicking on a context button.

Include file

SapGui.bdh

Syntax

SapGuiGridPressToolbarContextButton( in sControlId : string allownull,
                                     in sButton    : string,
                                     in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
sButton | The id of the button.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridPressToolbarContextButton("/usr/tab/gr", "btid");
  end TMain;
親トピック: Control Functions


SapGuiGridPressTotalRow Function

Action

Presses the total row button in a grid. This function may either expand or collapse the row.

Include file

SapGui.bdh

Syntax

SapGuiGridScrollToRow( in sControlId : string allownull,
                       in nRow       : number,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
nRow | Specifies the row to be expanded or collapsed
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridPressTotalRow("/usr/tab/cgrid", 3);
  end TMain;
親トピック: Control Functions


SapGuiGridScrollToRow Function

Action

Scrolls to the specified row of the SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridScrollToRow( in sControlId : string allownull,
                       in nRow       : number,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
nRow | Specifies the row where the function should scroll to.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Office", "0000000003", "Expand\\Office");

    // NodeName: Telephone Integration
    // NodePath: 2\1\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Telephone Integration", "0000000005", "Expand\\Telephone Integration");

    // NodeName: Appointment Calendar
    // NodePath: 2\1\3
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Appointment Calendar", "0000000008", "Expand\\Appointment Calendar");

    // NodeName: Owner
    // NodePath: 2\1\3\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Owner", "0000000009", false,"SelNode\\Owner");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Favorites", "Favo", "TopNode\\Favorites");

    // NodeName: Owner
    // NodePath: 2\1\3\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Owner", "0000000009", "DblClNode\\Owner");
    // Grid Control Info: /app/con[0]/ses[0]/wnd[0]/usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell/8 columns
    // -------------------------------------
    // 1: 1:Time
    // 2: 2:Monday
    // 3: 3:Tuesday
    // 4: 4:Wednesday
    // 5: 5:Thursday
    // 6: 6:Friday
    // 7: 7:Saturday
    // 8: 8:Sunday

    // Termine anzeigen: DDIC
    ThinkTime(9.3);
    SapGuiSetActiveWindow("wnd[0]", "Termine anzeigen: DDIC",SAPGUI_MATCH_Exact);

    ThinkTime(3.9);
    SapGuiCalendarFirstVisibleDate("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell","20040802");

    SapGuiGridSelectCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell", 9, " 3");

    SapGuiGridContextMenu("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell");

    ThinkTime(20.6);
    SapGuiGridScrollToRow("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell", 0);

  end TMain;
親トピック: Control Functions


SapGuiGridSelectCell Function

Action

Selects the specified cell in a SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridSelectCell( in sControlId : string allownull,
                      in nRow       : number,
                      in sCol       : string,
                      in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
nRow | Specifies the row where the function should scroll to.
sCol | The id of the column.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    gsConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(6.3);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Office", "0000000003", "Expand\\Office");

    // NodeName: Telephone Integration
    // NodePath: 2\1\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Telephone Integration", "0000000005", "Expand\\Telephone Integration");

    // NodeName: Appointment Calendar
    // NodePath: 2\1\3
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Appointment Calendar", "0000000008", "Expand\\Appointment Calendar");

    // NodeName: Owner
    // NodePath: 2\1\3\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Owner", "0000000009", false, "SelNode\\Owner");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Favorites", "Favo", "TopNode\\Favorites") ;

    // NodeName: Owner
    // NodePath: 2\1\3\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Owner", "0000000009", "DblClNode\\Owner");
    // Grid Control Info: /app/con[0]/ses[0]/wnd[0]/usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell/8 columns
    // -------------------------------------
    // 1: 1:Time
    // 2: 2:Monday
    // 3: 3:Tuesday
    // 4: 4:Wednesday
    // 5: 5:Thursday
    // 6: 6:Friday
    // 7: 7:Saturday
    // 8: 8:Sunday

    // Display appointments: DDIC
    SapGuiSetActiveWindow("wnd[0]", " Display appointments: DDIC", SAPGUI_MATCH_Exact);

    ThinkTime(3.9);
    SapGuiCalendarFirstVisibleDate("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell","20040802");

    SapGuiGridSelectCell("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell", 9, " 3");

    SapGuiGridContextMenu("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell");

    ThinkTime(20.6);
    SapGuiGridScrollToRow("usr/cntlCALE_CONTROL/shellcont/shell/shellcont[1]/shell", 0);
  end TMain;
親トピック: Control Functions


SapGuiGridSelectContextMenu Function

Action

Selects an option from a context menu in a grid.

Include file

SapGui.bdh

Syntax

SapGuiGridSelectContextMenu( in sControlId : string allownull,
                             in sFunction  : string,
                             in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
sFunction | The id of the item to be selected.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridSelectContextMenu("/usr/tab/cbgrid", "CODE");
  end TMain;
親トピック: Control Functions


SapGuiGridSelectToolbarMenu Function

Action

Selects an option from a grid toolbar menu.

Include file

SapGui.bdh

Syntax

SapGuiGridSelectToolbarMenu( in sControl  : string allownull,
                             in sFunction : string,
                             in sTimer    : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
sFunction | Id for the selected menu.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridSelectToolbarMenu("/usr/tab/grid", "FUNCODE");
  end TMain;
親トピック: Control Functions


SapGuiGridSetCellData Function

Action

Writes data to the specified cell of a grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridSetCellData( in sControlId : string allownull,
                       in nRow       : number,
                       in sCol       : string,
                       in sVal       : string,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
nRow | Specifies the row where the function should scroll to.
sCol | The id of the column.
sVal | The value to be set for the specified cell.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridSetCellData("/usr/tab/grid", 0, "OOBBA", "Value" );
  end TMain;
親トピック: Control Functions


SapGuiGridSetColumnWidth Function

Action

Sets the column width in a SapGui grid control to a specified value.

Include file

SapGui.bdh

Syntax

SapGuiGridSetColumnWidth( in sControl : string allownull,
                          in sCol     : string,
                          in nWidth   : number,
                          in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The grid control's unique id.
sCol | The id of the column.
nWidth | The new width of the column.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiGridSetColumnWidth("/usr/tab/grid", "OOBOO", 234 );
  end TMain;
親トピック: Control Functions


SapGuiIgnoreError Function

Action

Ignores SapGui errors. It is scripted by the Silk Performer Recorder for ignoring errors that are indicated in the SapGui status bar during recording. Although this function is only scripted in this case it can also be applied to ignore any SapGui error.

Include file

SapGui.bdh

Syntax

SapGuiIgnoreError( in nError    : number,
                   in nSeverity : number optional := SEVERITY_SUCCESS );
Parameter | Description
nError | The error to be ignored in the next SapGui function call.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: (Default) Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_ERROR);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

  end TMain;
親トピック: Control Functions


SapGuiPressButton Function

Action

Performs a click on the specified SapGui button control.

Include file

SapGui.bdh

Syntax

SapGuiPressButton( in sControlId : string allownull,
                   in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a button control.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin
    // Connecting to SAP
    sId := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU lab77 00 /3");

    SapGuiSetActiveConnection(sId);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    // Continue (Enter)
    SapGuiPressButton("tbar[0]/btn[0]", "Continue (Enter)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Other menu
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");

    // Restrict Values
    SapGuiSetActiveWindow("wnd[1]", "Restrict Values", SAPGUI_MATCH_Exact);

    // Cancel (F12)
    SapGuiPressButton("tbar[0]/btn[12]", "Cancel (F12)");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Log off (Shift+F3)
    SapGuiPressButton("tbar[0]/btn[15]", "Log off (Shift+F3)");

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "Yes");
  end TMain;
親トピック: Control Functions


SapGuiPressToolbarButton Function

Action

Presses a toolbar button.

Include file

SapGui.bdh

Syntax

SapGuiPressToolbarButton( in sControlId : string allownull,
                          in sButtonId  : string,
                          in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The toolbar's unique id.
sButtonId | The button's id.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiPressToolbarButton("/usr/tab/tbar", "btn" );
  end TMain;
親トピック: Control Functions


SapGuiPressToolbarContextButton Function

Action

Presses the toolbar context button.

Include file

SapGui.bdh

Syntax

SapGuiGridPressToolbarContextButton( in sControlId : string allownull,
                                     in sButton    : string,
                                     in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The toolbar's unique id.
sButton | The button's id.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiPressToolbarContextButton("/usr/tab/tbab", "Btns2");
  end TMain;
親トピック: Control Functions


SapGuiSelectComboBoxEntry Function

Action

Selects an item in a SapGui combobox.

Include file

SapGui.bdh

Syntax

SapGuiSelectComboBoxEntry( in sControlId : string allownull,
                           in sEntry     : string,
                           in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a combobox.
Sentry | The value to be selected from the combobox.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(3.8);
    SapGuiSetActiveWindow("wnd[0]", "Display Document: No address for SAP user in SAPoffice !", SAPGUI_MATCH_Exact);
    SapGuiSelectTab("usr/tabsSO33_TAB1/tabpTAB2");
    ThinkTime(4.0);
    SapGuiSelectTab("usr/tabsSO33_TAB1/tabpTAB3");
    ThinkTime(4.5);
    SapGuiTreeSetHierarchyWidth( "usr/tabsSO33_TAB1/tabpTAB3/ssubSUB1:SAPLSO09:0150/cntlSPLITTER/shellcont/shell/shellcont[0]/shell", 250);
    SapGuiSelectTab("usr/tabsSO33_TAB1/tabpTAB2");
    ThinkTime(9.0);
    SapGuiSelectComboBoxEntry("usr/tabsSO33_TAB1/tabpTAB2/ssubSUB1:SAPLSO33:1200/cmbSOS33-OBJPRI", "510", "High");
    SapGuiSetFocus("usr/tabsSO33_TAB1/tabpTAB2/ssubSUB1:SAPLSO33:1200/cmbSOS33-OBJPRI");
    SapGuiPressButton("tbar[0]/btn[15]");

    // Grid Control Info:
    // /app/con[0]/ses[0]/wnd[0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/9 columns
    // -------------------------------------
    // 1: STATSO:Message attributes
    // 2: OBJTP:Type
    // 3: OBJDES:Title
    // 4: ATTACH:Attachments
    // 5: CRADR:Author
    // 6: INDAT:Date received
    // 7: SNDCP:Copy
    // 8: RESUB:Resubmission
    // 9: RECCNT:Recipient

    // Business Workplace von DDIC
    ThinkTime(8.8);
    SapGuiSetActiveWindow("wnd[0]", "Business Workplace von DDIC", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[15]");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    ThinkTime(2.3);
    SapGuiPressButton("tbar[0]/btn[15]");

    // Log Off
    ThinkTime(2.0);
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "Yes");
  end TMain;
親トピック: Control Functions


SapGuiSelectMenu Function

Action

Selects a menu from the SapGui menu bar.

Include file

SapGui.bdh

Syntax

SapGuiSelectMenu( in sControlId : string allownull,
                  in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a menu item.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnId : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.9);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(17.0);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiSelectMenu("mbar/menu[3]/menu[0]");

    // System administration information
    ThinkTime(6.5);
    SapGuiSetActiveWindow("wnd[1]", "System administration information", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[12]");
  end TMain;
親トピック: Control Functions


SapGuiSelectRadioButton Function

Action

Selects the specifed SapGui radio button.

Include file

SapGui.bdh

Syntax

SapGuiSelectRadioButton( in sControlId : string allownull,
                         in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a radio button control.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnId : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.9);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiPressButton("tbar[1]/btn[28]");

    // Mappenselektion
    ThinkTime(4.0);
    SapGuiSetActiveWindow("wnd[1]", "Mappenselektion", SAPGUI_MATCH_Exact);
    SapGuiSelectRadioButton("usr/radSOS06-S_FOLPRV", "Private");
    SapGuiSetFocus("usr/radSOS06-S_FOLPRV");
    SapGuiPressButton("tbar[0]/btn[12]");
  end TMain;
親トピック: Control Functions


SapGuiSelectTab Function

Action

Activates the specified tab sheet inside a SapGui tab control.

Include file

SapGui.bdh

Syntax

SapGuiSelectTab( in sControlId : string allownull,
                 in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of the tab sheet to be activated.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnId : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.9);
    SapGuiLogon("ddic", "*******", "000", "");

    // Other menu
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.4);
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");

    // Wertebereich einschränken
    ThinkTime(3.2);
    SapGuiSetActiveWindow("wnd[1]", "Wertebereich einschränken", SAPGUI_MATCH_Exact);
    SapGuiSelectTab("usr/tabsG_SELONETABSTRIP/tabpTAB001");
    SapGuiSelectTab("usr/tabsG_SELONETABSTRIP/tabpTAB002");
  end TMain;
親トピック: Control Functions


SapGuiSelectToolbarMenuItem Function

Action

Selects a toolbar menu item.

Include file

SapGui.bdh

Syntax

SapGuiSelectToolbarMenuItem( in sControlId : string allownull,
                             in sMenuId    : string,
                             in sTimer     : string optional ) :  boolean;
Parameter | Description
sControlId | The toolbar's unique id.
sMenuId | The id of the menu item.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiSelectToolbarMenuItem("/usr/tab/tbar", "OBI");
  end TMain;
親トピック: Control Functions


SapGuiSelectToolbarMenuItemByText Function

Action

Selects a toolbar menu item using the text of the item.

Include file

SapGui.bdh

Syntax

SapGuiSelectToolbarMenuItemByText( in sControlId : string allownull,
                                   in sMenuText  : string,
                                   in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The toolbar's unique id.
sMenuText | The label of the menu item.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiSelectToolbarMenuItemByText("/usr/tab/tbar", "Label");
  end TMain;
親トピック: Control Functions


SapGuiSelectTopNode Function

Action

Scrolls to a specified node in the SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiSelectTopNode( in sControlId : string allownull,
                     in sNodeName  : string,
                     in sTopNode   : string,
                     in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node to be expanded. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(3.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office",
    "0000000003", "Expand\\Office");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace",
    "0000000004", false, "SelNode\\Workplace");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites",
    "Favo", "TopNode\\Favorites");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace",
    "0000000004", "DblClNode\\Workplace");
    // Grid Control Info:
    // /app/con[0]/ses[0]/wnd[0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/0 columns
    // -------------------------------------

    // Business Workplace von DDIC
    ThinkTime(2.6);
    SapGuiSetActiveWindow("wnd[0]", "Business Workplace von DDIC", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[15]");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(2.2);
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office",
    "0000000003", false, "SelNode\\Office");

    // NodeName: Office
    // NodePath: 2\1
  end TMain;
親トピック: Control Functions


SapGuiSendVKey Function

Action

Sends a keyboard input event to the active window.

Include file

SapGui.bdh

Syntax

SapGuiSendVKey( in nKey : number) : boolean;
Parameter Description
nKey

The ordinal number of the key that should be sent to the active window. These are predefined constants for keys that can be sent to the active window:

  • SAPGUI_VKEY_ENTER
  • SAPGUI_VKEY_HELP
  • SAPGUI_VKEY_F2
  • SAPGUI_VKEY_BACK
  • SAPGUI_VKEY_F4
  • SAPGUI_VKEY_CANCEL
  • SAPGUI_VKEY_PAGEUP
  • SAPGUI_VKEY_PAGEDOWN

Otherwise pass the ordinal number of the keyboard event to be sent.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    ThinkTime(2.8);
    SapGuiSetText("usr/txtRSYST-BNAME", "ddic");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiSetText("usr/pwdRSYST-BCODE", "********");
    SapGuiSetFocus("usr/pwdRSYST-BCODE");

    // caretPosition
    SapGuiSetProperty("usr/pwdRSYST-BCODE", "caretPosition", "7");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSendVKey(SAPGUI_VKEY_ENTER);

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");
  end TMain;
親トピック: Control Functions


SapGuiSetCheckbox Function

Action

Checks or unchecks the specified SapGui check box.

Include file

SapGui.bdh

Syntax

SapGuiSetCheckbox( in sControlId : string allownull,
                   in bChecked   : boolean,
                   in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a check box control.
bChecked | Specifies, whether to check or uncheck the check box
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.2);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    ThinkTime(2.6);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.2);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // Other menu
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");
    // StatusBar(Msg/Id/Type/No): The search help for could not be initialized (CNTL error)/27051464/S/002

    // Wertebereich einschränken
    ThinkTime(8.5);
    SapGuiSetActiveWindow("wnd[1]", "Wertebereich einschränken", SAPGUI_MATCH_Exact);
    SapGuiSetFocus("usr/tabsG_SELONETABSTRIP/tabpTAB002/ssubSUBSCR_PRESEL:SAPLSDH4:0220/chkG_SELPOP_STATE-BUTTON");
    SapGuiSetCheckbox("usr/tabsG_SELONETABSTRIP/tabpTAB002/ssubSUBSCR_PRESEL:SAPLSDH4:0220/chkG_SELPOP_STATE-BUTTON",
    true, "No restriction");
    ThinkTime(2.1);
    SapGuiPressButton("tbar[0]/btn[12]");
  end TMain;
親トピック: Control Functions


SapGuiSetFileName Function

Action

Sets a file name that will be used to replace the next file selection using the Windows function GetOpenFileName.

Include file

SapGui.bdh

Syntax

SapGuiSetFileName( in  sFileName : string allownull ): boolean;
Parameter | Description
sFileName | The file name to be used.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sId : string;
  begin
    // Connecting to SAP
    sId := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU lab77 00 /3");

    SapGuiSetActiveConnection(sId);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowResize(117, 28, false);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(5.3);
    SapGuiLogon("bcuser", "*******", "000", "");

                …

    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.9);
    SapGuiSetFileName("C:\\Temp\\file.text");
    SapGuiPressButton("tbar[1]/btn[39]", "SapGuiPressButton\\btn[39]");
    // StatusBar(Msg/Id/Type/No): Attachment created/98314464/S/182

                …

    // Log Off
    SapGuiSetActiveWindow("wnd[1]", "Log Off", SAPGUI_MATCH_Exact);

    // Yes
    SapGuiPressButton("usr/btnSPOP-OPTION1", "Yes");
  end TMain;
親トピック: Control Functions


SapGuiSetFocus Function

Action

Sets the focus to the specified control.

Include file

SapGui.bdh

Syntax

SapGuiSetFocus( in sControlId : string allownull,
                in sTimer     : string optional ) :  boolean;
Parameter | Description
sControlId | The id of the control that should gain the focus.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.8);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(4.0);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office",
    "0000000003", "Expand\\Office");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace",
    "0000000004", false,"SelNode\\Workplace");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites",
    "Favo", "TopNode\\Favorites");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace",
    "0000000004", "DblClNode\\Workplace");
    // Grid Control Info:
    // /app/con[0]/ses[0]/wnd[0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/0 columns
    // -------------------------------------

    // Business Workplace von DDIC
    ThinkTime(3.2);
    SapGuiSetActiveWindow("wnd[0]", "Business Workplace von DDIC", SAPGUI_MATCH_Exact);

    // Find folder
    ThinkTime(3.6);
    SapGuiPressButton("tbar[1]/btn[17]", " Find folder");

    // Folder Selection
    ThinkTime(50.2);
    SapGuiSetActiveWindow("wnd[1]", "Folder Selection", SAPGUI_MATCH_Exact);
    SapGuiSetText("usr/ctxtSOS06-S_FOLNAM", "d");
    SapGuiSetFocus("usr/txtSOS06-S_FOLDES");

    // caretPosition
    SapGuiSetProperty("usr/txtSOS06-S_FOLDES", "caretPosition", "0");
    SapGuiPressButton("tbar[0]/btn[12]");
  end TMain;
親トピック: Control Functions


SapGuiSetOKCode Function

Action

Sets the text for a SapGui OK text field. These text fields are normally used to execute a SAP transaction.

Include file

SapGui.bdh

Syntax

SapGuiSetOKCode( in sControlId : string allownull,
                 in sOKCode    : string,
                 in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The id of the Ok textfield.
sOKCode | Text to be set for the ok textfield. Normally, this will be the name of a SAP transaction.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnId : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.0);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(7.1);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiSetOKCode("tbar[0]/okcd", "rz11");
    SapGuiSendVKey(SAPGUI_VKEY_ENTER);

    // Maintain Profile Parameters
    SapGuiSetActiveWindow("wnd[0]", "Maintain Profile Parameters", SAPGUI_MATCH_Exact);
  end TMain;
親トピック: Control Functions


SapGuiSetText Function

Action

Enters text into a SapGui text field.

Include file

SapGui.bdh

Syntax

SapGuiSetText( in sControlId : string allownull,
               in sText      : string,
               in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The uniquely identifying id of a text control.
sText | Text to be entered into the textfield.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    ThinkTime(2.8);
    SapGuiSetText("usr/txtRSYST-BNAME", "ddic");

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiSetText("usr/pwdRSYST-BCODE", "********");
    SapGuiSetFocus("usr/pwdRSYST-BCODE");

    // caretPosition
    SapGuiSetProperty("usr/pwdRSYST-BCODE", "caretPosition", "7");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSendVKey(SAPGUI_VKEY_ENTER);

    //Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");
  end TMain;
親トピック: Control Functions


SapGuiTableGetRadioValue Function

Action

Checks whether a table cell's radio button is selected.

Include file

SapGui.bdh

Syntax

SapGuiTableGetRadioValue( in sControlId : string;
                          in nRow       : number;
                          in nCol       : number ) : boolean;
Parameter | Description
sControlId | The unique id of the control.
nRow | The cell's row
nCol | The cell's column.

Return value

  • true if the radio button is selected.
  • false otherwise

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiTableGetRadioValue("/usr/tab/mytable", 0, 0 );
  end TMain;
親トピック: Control Functions


SapGuiTableGetRows Function

Action

This function returns a collection of table rows for the specified table. Each element of the collection is of type GuiTableRow.

Include file

SapGui.bdh

Syntax

SapGuiTableGetRows( in  sControlId : string,
                    out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned the collection iterator

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTableGetRows("table[0]", nIterator);
    while
      (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectGetType(nObject, sStr1, sStr2);
    if sStr1 = "GuiTableRow"then
      Print("GuiTableRow");
      end;
      SapGuiObjectFree(nObject);
    end;
    SapGuiIteratorRelease(nIterator);
end TMain;
親トピック: Control Functions


SapGuiTableGetRowSelected Function

Action

Returns the index of the current cell's row.

Include file

SapGui.bdh

Syntax

SapGuiTableGetRowSelected( in sControlId : string ) : number;
Parameter | Description
sControlId | The unique id of the control.

Return value

  • index of the selected row on success
  • -1 otherwise

Example

transaction TMain
  var
    nRowIx  : number;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    nRowIx := SapGuiTableGetRowSelected("/usr/tab/grid23");
  end TMain
親トピック: Control Functions


SapGuiTableGetRowCount Function

Action

Returns the number of rows for the specified table.

Include file

SapGui.bdh

Syntax

SapGuiTableGetRowCount( in sControlId : string;
                        in nRows      : number ) : boolean;
Parameter | Description
sControlId | The unique id of the control.
nRows | The parameter will be assigned the number of rows on success.

Return value

  • true if the radio button is selected.
  • false otherwise

Example

transaction TMain
  var
    nRows : number;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection("/app/con[0]");
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);
    SapGuiLogon("bcuser", "*******", "000", "");
    SapGuiTableGetRowCount("tables/SapTable", nRows);
  end TMain;
親トピック: Control Functions


SapGuiTableGetText Function

Action

This function returns the text of a specified table's cell.

Include file

SapGui.bdh

Syntax

SapGuiTableGetText( in sControlId : string;
                    in nRow       : number;
                    in nCol       : number ) : string;
Parameter | Description
sControlId | The unique id of the control.
nRow | The cell's row.
nCol | The cell's column.

Return value

  • Text on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiTableGetText("/usr/tab/table2", 0, 0 );
  end TMain;
親トピック: Control Functions


SapGuiTableGetColumns Function

Action

This function returns the collection of columns for the specified table. Each entry in the collection is of type GuiTableColumn.

Include file

SapGui.bdh

Syntax

SapGuiTableGetColumns( in  sControlId : string,
                       out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned the collection iterator.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
   nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTableGetColumns("table[0]", nIterator);
    while
      (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectGetType(nObject, sStr1, sStr2);
    if sStr1 = "GuiTableColumn"then
      Print("GuiTableColumn");
    end;
      SapGuiObjectFree(nObject);
    end;
      SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Control Functions


SapGuiTableGetColumnCount Function

Action

Returns the number of columns for the specified table.

Include file

SapGui.bdh

Syntax

SapGuiTableGetColumnCount( in sControlId : string;
                           in nCols      : number ) : boolean;
Parameter | Description
sControlId | The unique id of the control.
nCols | The parameter will be assigned the number of columns on success.

Return value

  • true if the radio button is selected.
  • false otherwise

Example

transaction TMain
  var
    nCols : number;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection("/app/con[0]");
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowResize(117, 28, false);
    SapGuiLogon("bcuser", "*******", "000", "");
    SapGuiTableGetColumnCount("tables/SapTable", nCols);
  end TMain;
親トピック: Control Functions


SapGuiTableIsCheckboxChecked Function

Action

This function returns whether a check box in a table cell is checked.

Include file

SapGui.bdh

Syntax

SapGuiTableIsCheckboxChecked( in sControlId : string;
                              in nRow       : number;
                              in nCol       : number ) : boolean;
Parameter | Description
sControlId | The unique id of the control.
nRow | The cell's row.
nCol | The cell's column.

Return value

  • true if the check box is checked
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTableIsCheckboxChecked("/usr/tab/table23", 0, 0 );
  end TMain;
親トピック: Control Functions


SapGuiTablePressButton Function

Action

Presses a cell's button.

Include file

SapGui.bdh

Syntax

SapGuiTablePressButton( in sControl : string allownull,
                        in nRow     : number,
                        in nCol     : number,
                        in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The table's unique id.
nRow | The row where to set the value
nCol | The column where to set the value
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTablePressButton("/usr/tab/tablecontrol", 0, 0 );
  end TMain;
親トピック: Control Functions


SapGuiTableSelectComboboxEntry Function

Action

Selects an entry from a cell's combobox.

Include file

SapGui.bdh

Syntax

SapGuiTableSelectComboBoxEntry( in sControl : string allownull,
                                in nRow     : number,
                                in nCol     : number,
                                in sValue   : string,
                                in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The context menu's unique id.
nRow | The cell's row.
nCol | The cell's column.
sValue | The value to be selected for the combobox.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTableSelectComboboxEntry("/usr/tab/table", 0, 0, "SelectedValue" );
  end TMain;
親トピック: Control Functions


SapGuiTableSelectRadioButton Function

Action

Select a cell's radio button.

Include file

SapGui.bdh

Syntax

SapGuiTableSelectRadioButton( in sControl : string allownull,
                              in nRow     : number,
                              in nCol     : number,
                              in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The context menu's unique id.
nRow | The cell's row.
nCol | The cell's column.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTableSelectRadioButton("/usr/tab/roundtable", 0, 0);
  end TMain;
親トピック: Control Functions


SapGuiTableSelectRow Function

Action

Selects one row of a table.

Include file

SapGui.bdh

Syntax

SapGuiTableSelectRow( in sControl : string allownull,
                      in nRow     : number,
                      in bSelect  : boolean,
                      in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The table's unique id.
nRow | The row where to set the value
bSelect | Set this parameter to "true" to select the row. Set this parameter to "false" to unselect the row.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTableSelectRow("/usr/tab/table", 0, true);
  end TMain;
親トピック: Control Functions


SapGuiTableSetCheckbox Function

Action

Checks a cell's check box.

Include file

SapGui.bdh

Syntax

SapGuiTableSetCheckBox( in sControl : string allownull,
                        in nRow     : number,
                        in nCol     : number,
                        in bCheck   : boolean,
                        in sTimer   : string optional ): boolean;
Parameter | Description
sControlId | The table's unique id.
nRow | The row where to set the value
nCol | The column where to set the value
bCheck | Set this parameter to "true" in order to check the checkbox.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example:

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(  " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTableSetCheckbox("/usr/tab/table", 0, 0, true );
  end TMain;
親トピック: Control Functions


SapGuiTableSetFocusCell Function

Action

Sets the focus to a cell in a SapGui table control.

Include file

SapGui.bdh

Syntax

SapGuiTableSetFocusCell( in sControl : string allownull,
                         in nRow     : number,
                         in nCol     : number,
                         in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The table's unique id.
nRow | The row where to set the value
nCol | The column where to set the value
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.4);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiPressButton("usr/btn%_AUTOTEXT005", " Simulate inbound call");

    // Daten des Anrufs eingeben
    ThinkTime(22.6);
    SapGuiSetActiveWindow("wnd[1]", "Daten des Anrufs eingeben", SAPGUI_MATCH_Exact);
    SapGuiTableSetText("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 3, "asdf");
    SapGuiTableSetFocusCell("usr/tblSAPLPHOAD102_ADDITIONAL", 1, 2, "D102_ADD_DATA-KEYNAME");

    // caretPosition
  end TMain;
親トピック: Control Functions


SapGuiTableSetText Function

Action

Sets text at the specified position in a SapGui table control.

Include file

SapGui.bdh

Syntax

SapGuiTableSetText( in sControl : string allownull,
                    in nRow     : number,
                    in nCol     : number,
                    in sValue   : string,
                    in sTimer   : string optional ) : boolean;
Parameter | Description
sControlId | The table's unique id.
nRow | The row where to set the value
nCol | The column where to set the value
sValue | The value to be set at the specified position.
sTimer | Timer name for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.4);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiPressButton("usr/btn%_AUTOTEXT005", " Simulate inbound call");

    // Daten des Anrufs eingeben
    ThinkTime(22.6);
    SapGuiSetActiveWindow("wnd[1]", "Daten des Anrufs eingeben", SAPGUI_MATCH_Exact);
    SapGuiTableSetText("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
  end TMain;
親トピック: Control Functions


SapGuiTreeChangeCheckbox Function

Action

Checks or unchecks a tree item's check box.

Include file

SapGui.bdh

Syntax

SapGuiTreeChangeCheckBox( in sControlId : string allownull,
                          in sNodeName  : string,
                          in sNode      : string,
                          in sItemName  : string,
                          in bChecked   : boolean,
                          in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node for which the check box will be changed. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sItemName | The item's name.
bChecked | Set this parameter to true in order to check the check box. False otherwise.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeChangeCheckbox("/usr/tab/tree", "NODENAME", "NODEID", "ITEM", false );
  end TMain;
親トピック: Control Functions


SapGuiTreeClickLink Function

Action

Clicks a tree's hyperlink.

Include file

SapGui.bdh

Syntax

SapGuiTreeClickLink( in sControlId : string allownull,
                     in sNodeName  : string,
                     in sNode      : string,
                     in sItemName  : string,
                     in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node for which the hyperlink should be clicked. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sItemName | The name of the tree item.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
 var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTreeClickLink("/usr/tab/tree", "NODENAME", "NODEID", "ITEM");
  end TMain;
親トピック: Control Functions


SapGuiTreeCollapseNode Function

Action

Collapses a specified node of a specified tree control.

Include file

SapGui.bdh

Syntax

SapGuiTreeCollapseNode( in sControlId : string allownull,
                        in sNodeName  : string,
                        in sNode      : string,
                        in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node to be collapsed. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(3.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Workplace", "0000000004", false, "SelNode\\Workplace");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Favorites", "Favo", "TopNode\\Favorites");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace", "0000000004", "DblClNode\\Workplace");
    // Grid Control Info:
    // /app/con[0]/ses[0]/wnd[0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/0 columns
    // -------------------------------------

    // Business Workplace von DDIC
    ThinkTime(2.6);
    SapGuiSetActiveWindow("wnd[0]", "Business Workplace von DDIC", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[15]");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(2.2);
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Office", "0000000003", false, "SelNode\\Office");

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeCollapseNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Office", "0000000003", "Collapse\\Office");

    // NodeName: Cross-Application Components
    // NodePath: 2\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Cross-Application Components", "0000000020", "Expand\\Cross-Application Components");

    // NodeName: ALE Distribution Units
    // NodePath: 2\2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "ALE Distribution Units", "0000000021", "Expand\\ALE Distribution Units");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");

    // NodeName: UPS Cockpit
    // NodePath: 2\2\1\1
    ThinkTime(3.1);
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "UPS Cockpit", "0000000075", false, "SelNode\\UPS Cockpit");

    // NodeName: UPS Cockpit
    // NodePath: 2\2\1\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "UPS Cockpit", "0000000075", "DblClNode\\UPS Cockpit");

    // ALE - Distribution - Cockpit
    ThinkTime(3.6);
    SapGuiSetActiveWindow("wnd[0]", "ALE - Distribution - Cockpit", SAPGUI_MATCH_Exact);
  end TMain;
親トピック: Control Functions


SapGuiTreeDblClickItem Function

Action

Performs a double click on the specified tree item.

Include file

SapGui.bdh

Syntax

SapGuiTreeDblClickItem( in sControlId : string allownull,
                        in sNodeName  : string,
                        in sNode      : string,
                        in sItemName  : string,
                        in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node for which the double click should be performed. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sItemName | The name of the tree item.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeDblClickItem("/usr/tab/gtree", "NODENAME", "NODEID", "ITEM");
  end TMain;
親トピック: Control Functions


SapGuiTreeDblClickNode Function

Action

Performs a double-click on the specified node inside a SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiTreeDblClickNode( in sControlId : string allownull,
                        in sNodeName  : string,
                        in sNode      : string,
                        in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node for which the double click should be performed. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
   var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(3.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Office", "0000000003", "Expand\\Office");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace", "0000000004",
    false, "SelNode\\Workplace");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell",
    "Favorites", "Favo", "TopNode\\Favorites");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace",
    "0000000004", "DblClNode\\Workplace");

    // Grid Control Info:
    // /app/con[0]/ses[0]/wnd[0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/0 columns
    // -------------------------------------

    // Business Workplace von DDIC
    ThinkTime(2.6);
    SapGuiSetActiveWindow("wnd[0]", "Business Workplace von DDIC", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[15]");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(2.2);
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003",
    false, "SelNode\\Office");

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeCollapseNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003",
    "Collapse\\Office");

    // NodeName: Cross-Application Components
    // NodePath: 2\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Cross-Application Components",
    "0000000020", "Expand\\Cross-Application Components");

    // NodeName: ALE Distribution Units
    // NodePath: 2\2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "ALE Distribution Units",
    "0000000021", "Expand\\ALE Distribution Units");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo",
    "TopNode\\Favorites");

    // NodeName: UPS Cockpit
    // NodePath: 2\2\1\1
    ThinkTime(3.1);
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "UPS Cockpit", "0000000075",
    false, "SelNode\\UPS Cockpit");

    // NodeName: UPS Cockpit
    // NodePath: 2\2\1\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "UPS Cockpit",
    "0000000075", "DblClNode\\UPS Cockpit");

    // ALE - Distribution - Cockpit
    ThinkTime(3.6);
    SapGuiSetActiveWindow("wnd[0]", "ALE - Distribution - Cockpit", SAPGUI_MATCH_Exact);
  end TMain;
親トピック: Control Functions


SapGuiTreeDefaultContextMenu Function

Action

Opens the default context menu for the tree.

Include file

SapGui.bdh

Syntax

SapGuiTreeDefaultContextMenu( in sControlId : string allownull,
                              in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeDefaultContextMenu("/usr/tab/chk1");
  end TMain;
親トピック: Control Functions


SapGuiTreeGetColumnCol Function

Action

Returns the keys of all the items in the given column.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetColumnCol( in  sControlId  : string,
                        in  sColumnName : string,
                        out nIterator   : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
sColumnName | The column to be queried for keys.
nIterator | This parameter will be assigned the collection iterator.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
 var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
 begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access",SAPGUI_MATCH_Exact);
    SapGuiTreeGetColumnCol("tree[0]", "col1", nIterator);
    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      Print(string(nType) + " " + sValue);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetColumnHeaders Function

Action

Returns a collection of column headers for the specified tree.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetColumnHeaders( in  sControlId : string,
                            out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned a collection iterator for the column headers.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetColumnHeaders("tree[0]", nIterator);
    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      Print(string(nType) + " " + sValue);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetColumnNames Function

Action

Returns a collection of column names for the specified tree.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetColumnNames( in  sControlId : string,
                          out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned a collection iterator for the column names.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetColumnNames("wnd[0]", nIterator);
    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      Print(string(nType) + " " + sValue);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetItemText Function

Action

Returns the text of a tree item.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetItemText( in sControlId : string;
                       in sNode      : string;
                       in sItem      : string ) : string;
Parameter | Description
sControlId | The unique id of the control.
sNode | Identifier for the node.
sItem | Identifier for the treeitem.

Return value

  • Tree item text on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiTreeGetItemText("/usr/tab/mytree", "OBJEII", "SITEM");
  end TMain;
親トピック: Control Functions


SapGuiTreeGetNodeChildrenCountByPath Function

Action

Returns the number of children of the node given by the path parameter.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetNodeChildrenCountByPath( in  sControlId : string,
                                      in  sPath      : string,
                                      out nCount     : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
sPath | The path to the node.
nCount | This parameter will be assigned the number of children.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetNodeChildrenCountByPath("tree[0]", "2/1/2", i);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetNodeKeyByPath Function

Action

Returns the key of the node specified by the given path description.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetNodeKeyByPath( in  sControlId : string,
                            in  sPath      : string,
                            out sNodeKey   : string ) : boolean;
Parameter | Description
sControlId | The control’s unique id
sPath | The path of the node.
sNodeKey | This parameter will be assigned the node key.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetNodeKeyByPath("tree[0]", "2\\1\\2", sValue);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetNodesCol Function

Action

Returns the node keys of all the nodes in the tree.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetNodesCol( in  sControlId : string,
                       out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned a collection iterator for the nodes in the tree.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetNodesCol("tree[0]", nIterator);
    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      Print(string(nType) + " " + sValue);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetNodeText Function

Action

Returns the text of a specified node of a SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetNodeText( in sControlId : string;
                       in sNode      : string ) : string;
Parameter | Description
sControlId | The unique id of the control.
sNode | Identifier of the node.

Return value

  • Node text on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sConnID : string;
    sText   : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiTreeGetNodeText("/usr/tab/mytree", "OOOBJOE")
  end TMain;
親トピック: Control Functions


SapGuiTreeGetNodeTextByPath Function

Action

Returns the text of a node defined by the given path.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetNodeTextByPath( in  sControlId : string,
                             in  sPath      : string,
                             out sNodeText  : string ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
sPath | The path to the node.
sNodeText | This parameter will be assigned the node text.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetNodeTextByPath("tree[0]", "2/1/2", sValue);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetParent Function

Action

Returns the key of the parent node of the specified node in a SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetParent( in  sControlId : string,
                     in  sNodeKey   : string, out sParentKey : string ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
sNodeKey | The node to be queried for its parent key.
sParentKey | This parameter will be assigned the key of the parent node.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetParent("tree[0]", "212542", sValue);
  end TMain;
親トピック: Control Functions


SapGuiTreeGetSubNodesCol Function

Action

Returns the keys of all subnodes of the node specified by the given key.

Include file

SapGui.bdh

Syntax

SapGuiTreeGetSubNodesCol( in  sControlId : string,
                          in  sNodeKey   : number,
                          out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
sNodeKey | The key of the node.
nIterator | This parameter will be assigned the a collection iterator for the node's subnodes.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiTreeGetSubNodesCol("tree[0]", "000564", nIterator);
    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      Print(string(nType) + " " + sValue);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Control Functions


SapGuiTreeHeaderContextMenu Function

Action

Opens a context menu for a tree header.

Include file

SapGui.bdh

Syntax

SapGuiTreeHeaderContextMenu( in sControlId  : string allownull,
                             in sHeaderName : string,
                             in sTimer      : string optional ) : boolean;
Parameter | Description
sControlId | The control's unique id.
sHeaderName | The name of the tree header.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeHeaderContextMenu("/usr/tab/tree", "header");
  end TMain;
親トピック: Control Functions


SapGuiTreeItemContextMenu Function

Action

Opens a context menu for a tree item.

Include file

SapGui.bdh

Syntax

SapGuiTreeItemContextMenu( in sControlId : string allownull,
                           in sNodeName  : string,
                           in sNode      : string,
                           in sItemName  : string,
                           in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node for which the context menu should be opened. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sItemName | The name of the tree item.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeItemContextMenu("/usr/tag/metre", "NODENAME", "NODEID", "ITEM");
  end TMain;
親トピック: Control Functions


SapGuiTreeNodeContextMenu Function

Action

Opens a context menu for the specified tree node.

Include file

SapGui.bdh

Syntax

SapGuiTreeNodeContextMenu( in sControlId : string allownull,
                           in sNodeName  : string,
                           in sNode      : string,
                           in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique ID.
sNodeName | The name of the node for which the context menu should be opened. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU /H/195.61.176.22/H/194.117.106.130/S/3297/H/cpce601 13 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP R/3
    SapGuiSetActiveWindow("wnd[0]", "SAP R/3", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.6);
    SapGuiLogon("sapuser", "****", "850", "");

    // System Messages
    ThinkTime(7.0);
    SapGuiSetActiveWindow("wnd[1]", "System Messages", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access - User menu for Partner #999999
    ThinkTime(102.6);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access - User menu for Partner #999999", SAPGUI_MATCH_Exact);

    // NodeName: User menu for Partner #999999
    // NodePath: 2
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "User menu for Partner #999999",
    "Root", false, "SelNode\\User menu for Partner #999999");

    // NodeName: User menu for Partner #999999
    // NodePath: 2
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "User menu for Partner #999999",
    "Root", "DblClNode\\User menu for Partner #999999");

    // NodeName: Favorites
    // NodePath: 1
    ThinkTime(11.1);
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", false,
    "SelNode\\Favorites");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "DblClNode\\Favorites");

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(11.5);
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000005", "Expand\\Office");

    // NodeName: Telephone Integration
    // NodePath: 2\1\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration",
    "0000000007", "Expand\\Telephone Integration");

    // NodeName: Own Telephone Number
    // NodePath: 2\1\2\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Own Telephone Number", "0000000008",
    false, "SelNode\\Own Telephone Number");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");

    // NodeName: Own Telephone Number
    // NodePath: 2\1\2\1
    SapGuiTreeNodeContextMenu("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Own Telephone Number", "0000000008" ,
    "NodeCtxt\\Own Telephone Number");

    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(5.6);
    SapGuiContextMenuSelectItem("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "XXECK1");

    // StatusBar(Msg/Id/Type/No): No documentation exists for program RSPHSPHD/26363088/S/035
  end TMain;
親トピック: Control Functions


SapGuiTreePressButton Function

Action

Clicks a button in a SapGui tree.

Include file

SapGui.bdh

Syntax

SapGuiTreePressButton( in sControlId : string allownull,
                       in sNodeName  : string,
                       in sNode      : string,
                       in sItemName  : string,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node for which its button should be clicked. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sItem | The name of the item.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreePressButton("/usr/tab/mtr", "NODENAME", "NODE", "ITEM");
  end TMain;
親トピック: Control Functions


SapGuiTreePressHeader Function

Action

Performs a click on the column header.

Include file

SapGui.bdh

Syntax

SapGuiTreePressHeader( in sControlId : string allownull,
                       in sHeader    : string,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sHeader | The name of the header.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreePressHeader("/usr/tab/ctree", "HEADER1");
  end TMain;
親トピック: Control Functions


SapGuiTreePressKey Function

Action

Presses a keyboard key.

Include file

SapGui.bdh

Syntax

SapGuiTreePressKey( in sControlId : string allownull,
                    in sKey       : string,
                    in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sKey | The key pressed.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreePressKey("/usr/tab/mtree", "A");
  end TMain;
親トピック: Control Functions


SapGuiTreeSelectColumn Function

Action

Selects a tree column.

Include file

SapGui.bdh

Syntax

SapGuiTreeSelectColumn( in sControlId : string allownull,
                        in sColumn    : string,
                        in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sColumn | The identifier of the column.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeSelectColumn("/usr/tab/mtree", "COLUNN2" );
  end TMain;
親トピック: Control Functions


SapGuiTreeSelectItem Function

Action

Selects an item from a SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiTreeSelectItem( in sControlId : string allownull,
                      in sNodeName  : string,
                      in sNode      : string,
                      in sItemName  : string,
                      in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sItemName | The item to be selected.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeSelectItem("/usr/tab/mtree", "THENODE", "TREEITEM");
  end TMain;
親トピック: Control Functions


SapGuiTreeSelectNode Function

Action

Selects the specified node inside a SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiTreeSelectNode( in sControlId   : string allownull,
                      in sNodeName    : string,
                      in sNode        : string,
                      in bMultiselect : boolean optional,
                      in sTimer       : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node to be expanded. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
bMultiselect | Specify, whether select more tree nodes. Set this parameter to "true", if more than one node should be selected.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // Copyright
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(3.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office",
    "0000000003", "Expand\\Office");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace",
    "0000000004", false, "SelNode\\Workplace");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites",
    "Favo", "TopNode\\Favorites");

    // NodeName: Workplace
    // NodePath: 2\1\1
    SapGuiTreeDblClickNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace",
    "0000000004", "DblClNode\\Workplace");
    // Grid Control Info:
    // /app/con[0]/ses[0]/wnd[0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/0 columns
    // -------------------------------------

    // Business Workplace von DDIC
    ThinkTime(2.6);
    SapGuiSetActiveWindow("wnd[0]", "Business Workplace von DDIC", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[15]");

    // SAP Easy Access
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(2.2);
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office",
    "0000000003", false, "SelNode\\Office");

    // NodeName: Office
    // NodePath: 2\1
  end TMain;
親トピック: Control Functions


SapGuiTreeSetColumnWidth Function

Action

Sets the tree column width.

Include file

SapGui.bdh

Syntax

SapGuiTreeSetColumnWidth( in sControlId : string allownull,
                          in sColumn    : string,
                          in nWidth     : number,
                          in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sColumn | The identifier for the column.
nWidth | The width to be set.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTreeSetColumnWidth("/usr/tab/mtree", "OBIDU", 233 );
  end TMain;
親トピック: Control Functions


SapGuiTreeSetHierarchyWidth Function

Action

Sets the tree hierarchy width.

Include file

SapGui.bdh

Syntax

SapGuiTreeSetHierarchyWidth( in sControlId : string allownull,
                             in nWidth     : number,
                             in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
nWidth | The width to be set.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTreeSetHierarchyWidth("/usr/tab/mtree", 232 );
  end TMain;
親トピック: Control Functions


SapGuiTreeUnselectAll Function

Action

Cancels all selections in the tree.

Include file

SapGui.bdh

Syntax

SapGuiTreeUnselectAll( in sControlId : string allownull,
                       in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiTreeUnselectAll("/usr/tab/mtree");
  end TMain;
親トピック: Control Functions


SapGuiTreeUnselectColumn Function

Action

Unselects a tree column.

Include file

SapGui.bdh

Syntax

SapGuiTreeUnselectColumn( in sControlId : string allownull,
                          in sColumn    : string,
                          in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sColumn | Identifier for the column to be unselected.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeUnselectColumn("/usr/tab/tree", "COL894");
  end TMain;
親トピック: Control Functions


SapGuiTreeUnselectNode Function

Action

Unselects a tree node.

Include file

SapGui.bdh

Syntax

SapGuiTreeUnselectNode( in sControlId : string allownull,
                        in sNodeName  : string,
                        in sNode      : string,
                        in sTimer     : string optional ) : boolean;
Parameter | Description
sControlId | The tree's unique id.
sNodeName | The name of the node to be unselected. Silk Performer will try to look up the node by matching the node name. If it cannot find the node by the name or if the name is not unique, specify the node id in the third parameter.
sNode | The node id identifying the node.
sTimer | Timer name used for measurements.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiTreeUnselectNode("/usr/tab/mtree", "OBJEJLKS" );
  end TMain;
親トピック: Control Functions


Logging Functions

  • SapGuiLogControlInformation Function
    Logs the current control tree to the TrueLog.
親トピック: SAP Functions


SapGuiLogControlInformation Function

Action

This function logs the current control tree to the TrueLog. During load tests with TrueLog-On-Error enabled, it is recommended that you use the profile setting “Log control information on error” rather than “Log control information in TrueLog.” TrueLogs-On-Error will then only contain the control values of windows in which errors have been raised. To have additional control information included in TrueLogs-On-Error, use the following method to log the control information of the active window.

Include file

SapGui.bdh

Syntax

SapGuiLogControlInformation( ): boolean;

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // ensures that – in case of an error – the control tree of the logon screen is included in the TrueLog
    SapGuiLogControlInformation();

    // Logon to SAP System

    // Before running a test you must customize the password parameter!
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
  end TMain;
親トピック: Logging Functions


Parsing Functions

  • SapGuiGetOkCode Function
    Retrieves text of the OK code text field.
  • SapGuiGetStatusBarText Function
    Retrieves the current text of the SapGui status bar.
  • SapGuiGetStatusBarType Function
    Retrieves the current type of the status bar control.
  • SapGuiGetText Function
    Retrieves the text of a label or edit control.
  • SapGuiIsCheckboxChecked Function
    Determines whether a SapGui check box control is checked.
  • SapGuiIsRadioButtonSelected Function
    Determines whether a specified radio button is selected.
  • SapGuiIsTabSelected Function
    Determines whether a specified tab is active.
  • SapGuiGridGetCellData Function
    Returns the value of a specified cell from a grid control.
  • SapGuiGridGetColumnCount Function
    Counts the number of columns of a SapGui grid control.
  • SapGuiGridGetColumnName Function
    Retrieves the name of a specified column of a SapGui grid control.
  • SapGuiGridGetColumnOrder Function
    Returns an iterator to a collection that contains all the column identifiers in the order in which they are currently displayed.
  • SapGuiGridGetCurrentCellColumn Function
    Returns the name of the current cell's column.
  • SapGuiGridGetCurrentCellRow Function
    Returns the name of the current cell's row.
  • SapGuiGridGetRowCount Function
    Returns the number of rows of a SapGui grid control.
  • SapGuiGridGetSelectedCells Function
    Collection of selected cells contains strings, each of which has the format “<index of the row>,<column identifier>”, such as “0,CARRID”.
  • SapGuiGridGetSelectedColumns Function
    Selected columns are available as a collection of strings.
  • SapGuiGridIsCheckboxChecked Function
    Determines whether grid cell's check box is checked.
  • SapGuiObjectFree Function
    Frees the memory that was allocated for a handle.
  • SapGuiObjectGetBoolean Function
    Reads the return value of a previous SapGuiObjectInvokeMethod call and provides it as type boolean.
  • SapGuiObjectGetCollection Function
    Reads the return value of a previous function call and returns it as a collection iterator.
  • SapGuiObjectGetControlId Function
    Provides the control id of a SAPGUI object.
  • SapGuiObjectGetLong Function
    Reads the return value of a previous call of the SapGuiObjectInvokeMethod function.
  • SapGuiObjectGetProperty Function
    Reads an object’s property.
  • SapGuiObjectGetPropertyBoolean Function
    Reads an object’s property.
  • SapGuiObjectGetPropertyLong Function
    Reads an object’s property.
  • SapGuiObjectGetObject Function
    Reads the return value of a pior call to SapGuiObjectInvokeMethod.
  • SapGuiObjectGetPropertyObject Function
    Reads an object’s property where the value to be read is an object.
  • SapGuiObjectGetString Function
    Reads the return value of a previous SapGuiObjectInvokeMethod call and provides it as a string.
  • SapGuiObjectGetType Function
    Returns the “type” and the “subtype” property of a SAPGUI object.
  • SapGuiObjectSetBoolean Function
    Pushes a parameter of type boolean onto the parameter stack for the next SapGuiObjectInvokeMethod call.
  • SapGuiObjectSetLong Function
    Pushes a parameter of type long onto the parameter stack for the next SapGuiObjectInvokeMethod function call.
  • SapGuiObjectSetObject Function
    Pushes an object onto the parameter stack for the next method invocation with SapGuiObjectInvokeMethod.
  • SapGuiObjectSetProperty Function
    Sets an object’s property.
  • SapGuiObjectSetPropertyObject Function
    Sets an object’s property which is of type object.
  • SapGuiObjectSetString Function
    Pushes a variable of type string onto the parameter stack for the next call of SapGuiObjectInvokeMethod call.
  • SapGuiIteratorFetchNext Function
    Moves the iterator to the next position.
  • SapGuiObjectInvokeMethod Function
    Invokes a method for the passed object.
  • SapGuiIteratorHasMore Function
    Determines whether there are more entries in a collection.
  • SapGuiIteratorRelease Function
    Frees the resources that were allocated for an iterator.
  • SapGuiIteratorGetCount Function
    Determines the number of elements in a collection.
  • SapGuiIteratorGetObject Function
    Provides the value of the iterator’s current position.
  • SapGuiIteratorGetObjectAt Function
    Reads and provides the value of a collection at a specified position.
  • SapGuiIteratorGetValue Function
    Provides the value of the iterator’s current position.
  • SapGuiIteratorGetValueAt Function
    Reads and provides the value of a collection at a specified position.
  • SapGuiGetCollection Function
    Reads the return value of a previous SapGuiInvokeMethod or SapGuiGetProperty call and provides it as a collection iterator.
  • SapGuiGetComboboxEntries Function
    Provides an iterator for the combobox entries.
  • SapGuiGetHandleFromControlId Function
    Returns a handle for the control specified.
  • SapGuiGetPropertyCollection Function
    Reads the return value of a previous call of SapGuiInvokeMethod and provides the value as a collection.
親トピック: SAP Functions


SapGuiGetOkCode Function

Action

This function retrieves text of the OK code text field.

Include file

SapGui.bdh

Syntax

SapGuiGetOkCode( ) : string;

Return value

  • Text of the OK code textfield on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin// Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGetOkCode();
  end TMain;
親トピック: Parsing Functions


SapGuiGetStatusBarText Function

Action

This function retrieves the current text of the SapGui status bar.

Include file

SapGui.bdh

Syntax

SapGuiGetStatusBarText() : string;

Return value

  • Text of the status bar.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGetStatusBarText();
  end TMain;
親トピック: Parsing Functions


SapGuiGetStatusBarType Function

Action

This function retrieves the current type of the status bar message.

Include file

SapGui.bdh

Syntax

SapGuiGetStatusBarType() : string;

Return value

  • Type of the status bar control (for example, "GuiStatusbar").
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGetStatusBarType();
  end TMain;
親トピック: Parsing Functions


SapGuiGetText Function

Action

This function retrieves the text of a label or edit control.

Include file

SapGui.bdh

Syntax

SapGuiGetText( in sControlId : string ) : string;
Parameter | Description
sControlId | Unique id of the label or edit field.

Return value

  • Text of the control.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGetText("/tbar[1]/btn[48]");
    Print(sText);
  end TMain;
親トピック: Parsing Functions


SapGuiIsCheckboxChecked Function

Action

This function determines whether a SapGui check box control is checked.

Include file

SapGui.bdh

Syntax

SapGuiIsCheckboxChecked( in sControlId : string ) : boolean;
Parameter | Description
sControlId | The unique id of the control.

Return value

  • true if the check box is checked
  • false otherwise

Example

transaction TMain
  var
    bCheck : boolean;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bCheck := SapGuiIsCheckboxChecked("/usr/tab/chk1");
  end TMain;
親トピック: Parsing Functions


SapGuiIsRadioButtonSelected Function

Action

This function determines whether a specified radio button is selected.

Include file

SapGui.bdh

Syntax

SapGuiIsRadioButtonSelected( in sControlId : string ) : boolean;
Parameter | Description
sControlId | The unique id of the control.

Return value

  • true if the radio button is selected
  • false otherwise

Example

transaction TMain
  var
    bSel : boolean;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bSel := SapGuiIsRadioButtonSelected("/usr/tab/radio1");
  end TMain;
親トピック: Parsing Functions


SapGuiIsTabSelected Function

Action

This function determines whether a specified tab is active.

Include file

SapGui.bdh

Syntax

SapGuiIsTabSelected( in sControlId : string ) : boolean;
Parameter | Description
sControlId | The unique id of the control.

Return value

  • true if the tab is selected
  • false otherwise

Example

transaction TMain
  var
    bSel : boolean;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    bSel := SapGuiIsTabSelected("/usr/tab/pag1");
  end TMain;
親トピック: Parsing Functions


SapGuiGridGetCellData Function

Action

This function returns the value of a specified cell from a grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridGetCellData( in sControlId : string;
                       in nRow       : number;
                       in sCol       : string ) : string;
Parameter | Description
sControlId | The unique id of the control.
nRow | The cell's row. The first row is 1.
sCol | The cell's column. All valid column names of the table which can be passed as sCol parameter are recorded as comments in the script.

Return value

  • Selected entry on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText  : string;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGridGetCellData("/usr/tab/grid23", 2, "OOBJW" );
  end TMain;

親トピック: Parsing Functions


SapGuiGridGetColumnCount Function

Action

This functions counts the number of columns of a SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridGetColumnCount( in     csControlId : string,
                          in out iCount      : number ) : boolean;
Parameter | Description
sControlId | The unique id of the grid
iCount | The value to be assigned the number of columns.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    iCount  : number;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    SapGuiSelectTopNode( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace: DDIC", " 1", "TopNode\\Workplace: DDIC");

    ThinkTime(16.8);
    SapGuiGridSelectCell( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES");
    SapGuiGridGetColumnCount( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell" , iCount);
  end TMain;
親トピック: Parsing Functions


SapGuiGridGetColumnName Function

Action

This function retrieves the name of a specified column of a SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridGetColumnName( in  csControlId : string,
                         in  iCol        : number,
                         out sVal        : string) : boolean;
Parameter | Description
sControlId | The unique id of the grid.
iCol | The based index of the column. The first column is 0. Note that the index does not necessarily reflect the displayed order of the column. Call SapGuiGridGetColumnOrder to get the diplayed order of columns.
sVal | The parameter will be assigned the name of the column.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    iCol     : number;
    sConnID  : string;
    sColName : string;

  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);
    SapGuiSelectTopNode( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace: DDIC", " 1", "TopNode\\Workplace: DDIC");

    ThinkTime(16.8);
    SapGuiGridSelectCell( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES");

    // Write the name of 3rd column into sColName
    SapGuiGridGetColumnName( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell" , 2, sColName);

  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiGridGetColumnOrder Function


SapGuiGridGetColumnOrder Function

Action

This function returns an iterator to a collection that contains all the column identifiers in the order in which they are currently displayed.

Include file

SapGui.bdh

Syntax

SapGuiGridGetColumnOrder( in  sControlId : string allownull,
                          out nItertor   : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned a handle to the collection iterator.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    sValue    : string;
    nIterator : number;
    nType     : number;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGridGetColumnOrder("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      Print(sValue);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiGridGetCurrentCellColumn Function

Action

This function returns the name of the current cell's column.

Include file

SapGui.bdh

Syntax

SapGuiGridGetCurrentCellColumn( in sControlId : string) : string;
Parameter | Description
sControlId | The unique id of the control.

Return value

  • Column name on success.

  • Empty string otherwise.

Example

transaction TMain
  var
    sText  : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGridGetCurrentCellColumn("/usr/tab/grid23" );
  end TMain;
親トピック: Parsing Functions


SapGuiGridGetCurrentCellRow Function

Action

This function returns the name of the current cell's row.

Include file

SapGui.bdh

Syntax

SapGuiGridGetCurrentCellRow( in sControlId : string ) : string;
Parameter | Description
sControlId | The unique id of the control.

Return value

  • Row index (0-based) as string on success.
  • Empty string otherwise.

Example

transaction TMain
  var
    sText  : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    sText := SapGuiGridGetCurrentCellRow("/usr/tab/grid23");
  end TMain;
親トピック: Parsing Functions


SapGuiGridGetRowCount Function

Action

This function returns the number of rows of a SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiGridGetRowCount( in    csControlId : string,
                       inout iCount      : number ) : boolean;
Parameter | Description
sControlId | The unique id of the grid
iCount | The value to be assigned the number of rows.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    iCount  : number;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    SapGuiSelectTopNode( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace: DDIC", " 1", "TopNode\\Workplace: DDIC");

    ThinkTime(16.8);
    SapGuiGridSelectCell( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES");

    // Store the number of rows in iCount
    SapGuiGridGetRowCount( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell" , iCount);
  end TMain;
親トピック: Parsing Functions


SapGuiGridGetSelectedCells Function

Action

The collection of selected cells contains strings, each of which has the format “<index of the row>,<column identifier>”, such as “0,CARRID”.

Include file

SapGui.bdh

Syntax

SapGuiGridGetSelectedCells( in  sControlId : string allownull,
                            out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The controls’s unique id.
nIterator | This parameter will be assigned the handle to the collection iterator.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    sConnID       : string;
    nIterator     : number;
    sSelectedCell : string;
    nType         : number;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");
    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    SapGuiGridGetSelectedCells("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sSelectedCell, nType);
      Print(sSelectedCell);
    end;

    SapGuiIteratorRelease(nIterator);

  end TMain;
親トピック: Parsing Functions


SapGuiGridGetSelectedColumns Function

Action

The selected columns are available as a collection of strings.

Include file

SapGui.bdh

Syntax

SapGuiGridGetSelectedColumns( in  sControlId : string allownull,
                              out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned a handle to the iterator.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    nIterator : number;
    sColumn   : string;
    nType     : number;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");
    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);

    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGridGetSelectedColumns("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
    SapGuiIteratorFetchNext(nIterator);
    SapGuiIteratorGetValue(nIterator, sColumn, nType);
    Print(sColumn);
  end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiGridIsCheckboxChecked Function

Action

This function determines whether grid cell's check box is checked.

Include file

SapGui.bdh

Syntax

SapGuiGridIsCheckboxChecked( in sControlId : string;
                             in nRow       : number;
                             in sCol       : string ) : boolean;
Parameter | Description
sControlId | The unique id of the control.
nRow | The row of the cell.
sCol | The column of the cell.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    bChecked : boolean;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    SapGuiLogon("ddic", "*******", "000", "");
    bChecked := SapGuiGridIsCheckboxChecked("/usr/tab/grid23", 0, 0 );
  end TMain;
親トピック: Parsing Functions


SapGuiObjectFree Function

Action

Frees the memory that was allocated for a handle.

Include file

SapGui.bdh

Syntax

SapGuiObjectFree( inout nObject : number );
Parameter | Description
nObject | The handle to be freed.

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectGetType(nObject, sStr1, sStr2);
      Print(sStr1 + ", " + sStr2);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetBoolean Function

Action

This function reads the return value of a previous SapGuiObjectInvokeMethod call and provides it as type boolean.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetBoolean( in  nObject : number,
                        out bParam  : boolean ) : boolean;
Parameter | Description
nObject | The handle to the object.
bParam | This parameter will be assigned the value.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);
    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      Print(string(bRet));
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetCollection Function

Action

This function reads the return value of a previous function call and returns it as a collection iterator.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetCollection( in  nObject   : number,
                           out nIterator : number ) : boolean;
Parameter | Description
nObject | The handle to the object.
nIterator | This parameter will be assigned the handle to a collection iterator.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID    : string;
    i          : number;
    nIterator, nIt2 : number;
    nType      : number;
    nObject    : number;
    bRet       : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

      // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetCollection(nObject, nIt2);

            // use nIt2 here
      SapGuiIteratorRelease(nIt2);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetControlId Function

Action

This function provides the control id of a SAPGUI object.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetControlId( in  nObject    : number,
                          out sControlId : string ) : boolean;
Parameter | Description
nObject | The handle to the object.
sControlId | This parameter will be assigned the control id.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectGetControlId(nObject, sStr1);
      SapGuiObjectFree(nObject);
      Print(sStr1);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetLong Function

Action

This function reads the return value of a previous call of the SapGuiObjectInvokeMethod function.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetLong( in  nObject : number,
                     out nVal    : number ) : boolean;
Parameter | Description
nObject | The handle to the object.
nVal | This parameter will be assigned the return value.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetLong(nObject, i);
      SapGuiObjectFree(nObject);
      Print(string(i));
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetProperty Function

Action

This function reads an object’s property.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetProperty( in  nObject   : number,
                         in  sProperty : string,
                         out sValue    : string ) : boolean;
Parameter | Description
nObject | The handle to the object.
sProperty | The property to be read.
sValue | The string value of the property.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectGetProperty(nObject, "sProp", sStr2);
      SapGuiObjectFree(nObject);
      Print(sStr2);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetPropertyBoolean Function

Action

This function reads an object’s property.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetPropertyBoolean( in  nObject   : number,
                                in  sProperty : string,
                                out bValue    : boolean ) : boolean;
Parameter | Description
nObject | The handle to the object.
sProperty | The property to be read.
bValue | This parameter will be assigned the value of the property.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");
    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectGetPropertyBoolean(nObject, "boolProp", bRet);
      SapGuiObjectFree(nObject);
      Print(string(bRet));
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetPropertyLong Function

Action

This function reads an object’s property.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetPropertyLong( in  nObject   : number,
                             in  sProperty : string,
                             out lVal      : number ) : boolean;
Parameter | Description
nObject | The handle to the object.
sProperty | The property to be read.
lVal | This parameter will be assigned the property value.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectGetPropertyLong(nObject, "method", i);
      SapGuiObjectFree(nObject);
      Print(string(i));
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetObject Function

Action

This function reads the return value of a pior call to SapGuiObjectInvokeMethod.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetObject( in  nObject    : number,
                       out nObjectOut : number ) : boolean;
Parameter | Description
nObject | The handle to the object
nObjectOut | The return value of the previous SapGuiObjectInvokeMethod call.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    nObject2  : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetObject(nObject, nObject2);

            // use nObject2 here
      SapGuiObjectFree(nObject2);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetPropertyObject Function

Action

This functions reads an object’s property where the value to be read is an object.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetPropertyObject( in  nObject   : number,
                               in  sProperty : string,
                               out nOutProp  : number ) : boolean;
Parameter | Description
nObject | The handle to the object
sProperty | The name of the property to be read.
nOutProp | This parameter will be assigned the handle to the object read.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    nObject2  : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectGetPropertyObject(nObject, "sProp", nObject2);

      // use nObject2 here
      SapGuiObjectFree(nObject2);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectGetString Function

Action

Reads the return value of a previous SapGuiObjectInvokeMethod call and provides it as a string.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetString( in  nObject : number,
                       out sRet    : string ) : boolean;
Parameter | Description
nObject | The handle to the object.
sRet | This parameter will be assigned the return value.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetString(nObject, sValue);
      SapGuiObjectFree(nObject);
      Print(sValue);
   end;

  SapGuiIteratorRelease(nIterator);
end TMain;
親トピック: Parsing Functions


SapGuiObjectGetType Function

Action

This function returns the “type” and the “subtype” property of a SAPGUI object.

Include file

SapGui.bdh

Syntax

SapGuiObjectGetType( in  nObject  : number,
                     out sType    : string,
                     out sSubType : string ) : boolean;
Parameter | Description
nObject | The handle to the object.
sType | The parameter will be assigned the type property.
sSubType | The parameter will be assigned the subtype property.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectGetType(nObject, sStr1, sStr2);
      SapGuiObjectFree(nObject);
      Print(sStr1 + " " + sStr2);
    end;

  SapGuiIteratorRelease(nIterator);
end TMain;
親トピック: Parsing Functions


SapGuiObjectSetBoolean Function

Action

This function pushes a parameter of type boolean onto the parameter stack for the next SapGuiObjectInvokeMethod call.

Include file

SapGui.bdh

Syntax

SapGuiObjectSetBoolean( in nObject : number,
                        in bParam  : boolean ) : boolean;
Parameter | Description
nObject | The handle to the object.
bParam | The value to be pushed onto the parameter stack.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");
    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectSetLong Function

Action

Pushes a parameter of type long onto the parameter stack for the next SapGuiObjectInvokeMethod function call.

Include file

SapGui.bdh

Syntax

SapGuiObjectSetLong( in nObject : number,
                     in nVal    : number ) : boolean;
Parameter | Description
nObject | The handle to the object.
nVal | The parameter to be added to the parameter stack for the next call of the function SapGuiObjectInvokeMethod.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetLong(nObject, 56);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectSetObject Function

Action

This function pushes an object onto the parameter stack for the next method invocation with SapGuiObjectInvokeMethod.

Include file

SapGui.bdh

Syntax

SapGuiObjectSetObject( in nObject   : number,
                       in nParamObj : number ) : boolean;
Parameter | Description
nObject | The handle to the object.
nParamObj | Handle to the object to be pushed onto the parameter stack.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    nObjectParam : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiGetHandleFromControlId("wnd[0]", nObjectParam);
      SapGuiObjectSetObject(nObject, nObjectParam);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectSetProperty Function

Action

This functions sets an object’s property.

Include file

SapGui.bdh

Syntax

SapGuiObjectSetProperty( in nObject   : number,
                         in sProperty : string,
                         in uValue    : union ) : boolean;
Parameter | Description
nObject | The objects handle.
sProperty | The name of the property to be set.
uValue | The value to be set. Only simple types are accepted. To set an object property use the function SapGuiObjectSetPropertyObject.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");
    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetHandleFromControlId("wnd[0]", nObject);
    SapGuiObjectSetProperty(nObject, "ButtonbarVisible", 0);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectSetPropertyObject Function

Action

This function sets an object’s property which is of type object.

Include file

SapGui.bdh

Syntax

SapGuiObjectSetPropertyObject( in nObject      : number,
                               in sProperty    : string,
                               in nParamObject : object ) : boolean;
Parameter | Description
nObject | The handle to the object.
sProperty | The name of the property to be set.
nParamObject | The handle of the object to be set.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    nObjectParam : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiGetHandleFromControlId("wnd[0]", nObjectParam);
      SapGuiObjectSetPropertyObject(nObject, "sProp", nObjectParam);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiObjectSetString Function

Action

This function pushes a variable of type string onto the parameter stack for the next call of SapGuiObjectInvokeMethod call.

Include file

SapGui.bdh

Syntax

SapGuiObjectSetString( in nObject : number,
                       in sParam  : string ) : boolean;
Parameter | Description
nObject | The handle to the object.
sParam | The parameter to be pushed onto the parameter stack.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
      sConnID   : string;
      i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetString(nObject, "sParam");
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions


SapGuiIteratorFetchNext Function

Action

This function moves the iterator to the next position.

Include file

SapGui.bdh

Syntax

SapGuiIteratorFetchNext( in nIterator : number ) : boolean;
Parameter | Description
nIterator | The handle to the iterator.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    sKey      : string;
    sValue    : string;
    nIterator : number;
    nObject   : number;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetComboboxEntries("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectGetProperty(nObject,"Key", sKey);
      SapGuiObjectGetProperty(nObject, "Value", sValue);
      SapGuiObjectFree(nObject);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function


SapGuiObjectInvokeMethod Function

Action

This functions invokes a method for the passed object. The parameter list has to be specified with prior calls of SapGuiObjectSet functions.

The return value of this function call can be fetched by calling one of the SapGuiObjectGet functions.

Include file

SapGui.bdh

Syntax

SapGuiObjectInvokeMethod( in nObject     : number,
                          in sMethodName : string ) : boolean;
Parameter | Description
nObject | The handle to the object.
sMethodName | The method to be called.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sVal      : string;
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);

    while (SapGuiIteratorHasMore(nIterator)) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectSetBoolean(nObject, true);
      SapGuiObjectInvokeMethod(nObject, "method");
      SapGuiObjectGetBoolean(nObject, bRet);
      SapGuiObjectFree(nObject);
      Print(string(bRet));
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiObjectGetBoolean Function
SapGuiObjectGetCollection Function
SapGuiObjectGetControlId Function
SapGuiObjectGetLong Function
SapGuiObjectGetObject Function
SapGuiObjectGetPropertyBoolean Function
SapGuiObjectGetProperty Function
SapGuiObjectGetPropertyLong Function
SapGuiObjectGetPropertyObject Function
SapGuiObjectGetString Function
SapGuiObjectGetType Function
SapGuiObjectSetBoolean Function
SapGuiObjectSetLong Function
SapGuiObjectSetObject Function
SapGuiObjectSetProperty Function
SapGuiObjectSetPropertyObject Function
SapGuiObjectSetString Function


SapGuiIteratorHasMore Function

Action

This function determines whether there are more entries in a collection. The handle has to be closed with SapGuiIteratorRelease, if it is no longer needed.

Include file

SapGui.bdh

Syntax

SapGuiIteratorHasMore( in nIterator : number ) : boolean;
Parameter | Description
nIterator | The handle to the iterator.

Return value

  • true if successful and more items are to be fetched.
  • false otherwise.

Example

transaction TMain
  var
    sConnID   : string;
    sKey      : string;
    sValue    : string;
    nIterator : number;
    nObject   : number;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    SapGuiGetComboboxEntries("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    whileSapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectGetProperty(nObject,"Key", sKey);
      SapGuiObjectGetProperty(nObject, "Value", sValue);
      SapGuiObjectFree(nObject);
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorRelease Function


SapGuiIteratorRelease Function

Action

This function frees the resources that were allocated for an iterator. This function has to be called for an iterator if the iterator is no longer needed.

Include file

SapGui.bdh

Syntax

SapGuiIteratorRelease( in nIterator : number );
Parameter | Description
nIterator | The handle to the iterator.

Example

transaction TMain
  var
    sConnID   : string;
    sKey      : string;
    sValue    : string;
    nIterator : number;
    nObject   : number;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetComboboxEntries("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetObject(nIterator, nObject);
      SapGuiObjectGetProperty(nObject,"Key", sKey);
      SapGuiObjectGetProperty(nObject, "Value", sValue);
      SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function


SapGuiIteratorGetCount Function

Action

This function determines the number of elements in a collection.

Include file

SapGui.bdh

Syntax

SapGuiIteratorGetCount( in nIterator : number ) : number;
Parameter | Description
nIterator | The handle to the collection iterator.

Return value

  • the number of elements

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);
    i := SapGuiIteratorGetCount(nIterator);

       Print(string(i));

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function


SapGuiIteratorGetObject Function

Action

This function provides the value of the iterator’s current position. This function will provide a handle to the object at the current position, unless the object at the current position is of a simple type such as long or boolean or string. Then the function SapGuiIteratorGetValue has to be used. The returned object handle has to be freed by calling SapGuiObjectFree when no longer needed.

Include file

SapGui.bdh

Syntax

SapGuiIteratorGetObject( in  nIterator : number,
                         out nObject   : number ) : boolean;
Parameter | Description
nIterator | The handle to the collection iterator.
nObject | This parameter will be assigned the handle to the object.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    sKey      : string;
    sValue    : string;
    nIterator : number;
    nObject   : number;
    nType     : number;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetComboboxEntries("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      if (nType = SAPGUI_VT_DISPATCH) then
        SapGuiIteratorGetObject(nIterator, nObject);
        SapGuiObjectGetProperty(nObject,"Key", sKey);
        SapGuiObjectGetProperty(nObject, "Value", sValue);
        SapGuiObjectFree(nObject);
      end;
    end;

   SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function
SapGuiObjectFree Function


SapGuiIteratorGetObjectAt Function

Action

This functions reads and provides the value of a collection at a specified position. This function has to be used if the expected value is not of a simple type but a complex one.

For simple types the function SapGuiIteratorGetValueAt has to be used. The returned object handle has to be freed by calling SapGuiObjectFree when no longer needed.

Include file

SapGui.bdh

Syntax

SapGuiIteratorGetObjectAt( in  nIterator : number,
                           in  nPos      : number,
                           out nObj      : number ) : boolean;
Parameter | Description
nIterator | The handle to the collection iterator
nPos | The position of the value to be read.
nObj | This parameter will be assigned the handle of the object to be read.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID       : string;
    i             : number;
    nIterator     : number;
    nType         : number;
    nObject, nObj : number;
    bRet          : boolean;
    sStr1, sStr2  : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);
    SapGuiIteratorGetObjectAt(nIterator, 0, nObj);
    SapGuiObjectFree(nObj);
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function
SapGuiObjectFree Function


SapGuiIteratorGetValue Function

Action

This function provides the value of the iterator’s current position. It will only return the value of simple data types such as long, boolean and strings. Use SapGuiIteratorGetObject for getting a handle to complex types.

Include file

SapGui.bdh

Syntax

SapGuiIteratorGetValue( in  nIterator : number,
                        out sValue    : string,
                        out nType     : number ) : boolean;
Parameter | Description
nIterator | The handle to the iterator
sValue | This parameter will be assigned the value at the iterator’s current position
nType
The type of the property. The value may be one of the following:
  • SAPGUI_VT_BSTR: The value is of type string.
  • SAPGUI_VT_DISPATCH: The value is of type object. To get a handle to the object use SapGuiIteratorGetObject.
  • SAPGUI_VT_NULL: The value is NULL.
  • SAPGUI_VT_I4: The value if of type long.
  • SAPGUI_VT_BOOL: The value is of type boolean.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    sKey      : string;
    sValue    : string;
    nIterator : number;
    nObject   : number;
    nType     : number;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetComboboxEntries("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
      SapGuiIteratorFetchNext(nIterator);
      SapGuiIteratorGetValue(nIterator, sValue, nType);
      if (nType = SAPGUI_VT_DISPATCH) then
        SapGuiIteratorGetObject(nIterator, nObject);
        SapGuiObjectGetProperty(nObject,"Key", sKey);
        SapGuiObjectGetProperty(nObject, "Value", sValue);
        SapGuiObjectFree(nObject);
      end;
    end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function


SapGuiIteratorGetValueAt Function

Action

This functions reads and provides the value of a collection at a specified position. It will only return the value of simple data types such as long, boolean and strings. Use SapGuiIteratorGetObjectAt for getting a handle to complex types.

Include file

SapGui.bdh

Syntax

SapGuiIteratorGetValueAt( in  nIterator : number,
                          in  nPos      : number,
                          out sValue    : string,
                          out nType     : number ) : boolean;
Parameter | Description
nIterator | The handle to the collection iterator.
nPos | The position of the value to be read
sValue | The string representation of the value
nType
The type of the property. The value may be one of the following:
  • SAPGUI_VT_BSTR: The value is of type string.
  • SAPGUI_VT_DISPATCH: The value is of type object. To get a handle to the object use SapGuiIteratorGetObject.
  • SAPGUI_VT_NULL: The value is NULL.
  • SAPGUI_VT_I4: The value if of type long.
  • SAPGUI_VT_BOOL: The value is of type boolean.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);
    SapGuiIteratorGetValueAt(nIterator, 0, sValue, nType);

    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function


SapGuiGetCollection Function

Action

This function reads the return value of a previous SapGuiInvokeMethod call and provides it as a collection iterator.

The returned collection iterator has to be released after usage by calling SapGuiIteratorRelease.

Include file

SapGui.bdh

Syntax

SapGuiGetCollection( inout nIterator : number ) : boolean;
Parameter | Description
nIterator | This parameter will be assigned the collection iterator.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");

    SapGuiSetActiveConnection(sConnID);

    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);

    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);

    SapGuiGetProperty("wnd[0]", "Children");
    SapGuiGetCollection(nIterator);

    // nIterator now contains the iterator which the SapGuiGetProperty() call returned

    // Code using the iterator
    i := SapGuiIteratorGetCount(nIterator);
  while (SapGuiIteratorHasMore(nIterator)) do
    SapGuiIteratorFetchNext(nIterator);
    SapGuiIteratorGetObject(nIterator, nObject);
    sStr1 := "";
    sStr2 := "";
    SapGuiObjectGetType(nObject, sStr1, sStr2);
    SapGuiObjectFree(nObject);
    Print(sStr1 + " " + sStr2);
  end;

    SapGuiIteratorRelease(nIterator); // necessary to avoid a resource leak
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function


SapGuiGetComboboxEntries Function

Action

This functions provides an iterator for the combobox entries. All members of the collection are of type GuiComboBoxEntry and have just two properties, key and value, both of type string.

Include file

SapGui.bdh

Syntax

SapGuiGetComboboxEntries( in  sControlId : string allownull,
                          out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nIterator | This parameter will be assigned a handle to the collection iterator.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    sKey      : string;
    sValue    : string;
    nIterator : number;
    nObject   : number;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetComboboxEntries("usr/tblRSDEMO02TC_COLS/txtDEMO_CPROP-GROUP4", nIterator);
    while SapGuiIteratorHasMore(nIterator) do
    SapGuiIteratorFetchNext(nIterator);
    SapGuiIteratorGetObject(nIterator, nObject);
    SapGuiObjectGetProperty(nObject,"Key", sKey);
    SapGuiObjectGetProperty(nObject, "Value", sValue);
    SapGuiObjectFree(nObject);
    end;

    SapGuiIteratorRelease(nIterator);

  end TMain;

親トピック: Parsing Functions
関連資料
SapGuiIteratorRelease Function


SapGuiGetHandleFromControlId Function

Action

This function returns a handle for the control specified. The returned handle has to be free by calling SapGuiObjectFree.

Include file

SapGui.bdh

Syntax

SapGuiGetHandleFromControlId( in  sControlId : string,
                              out nObject    : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
nObject | This parameter will be assigned the handle to the object.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObj      : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetHandleFromControlId("wnd[0]", nObj);

    // Here nObj can be used.
    // That means be passed as parameter to all SapGuiObject... functions
    SapGuiObjectFree(nObj); // Don't forget to free the object handle!
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiObjectFree Function
SapGuiObjectGetBoolean Function
SapGuiObjectGetCollection Function
SapGuiObjectGetControlId Function
SapGuiObjectGetLong Function
SapGuiObjectGetObject Function
SapGuiObjectGetPropertyBoolean Function
SapGuiObjectGetProperty Function
SapGuiObjectGetPropertyLong Function
SapGuiObjectGetPropertyObject Function
SapGuiObjectGetString Function
SapGuiObjectGetType Function
SapGuiObjectInvokeMethod Function
SapGuiObjectSetBoolean Function
SapGuiObjectSetLong Function
SapGuiObjectSetObject Function
SapGuiObjectSetProperty Function
SapGuiObjectSetPropertyObject Function
SapGuiObjectSetString Function


SapGuiGetPropertyCollection Function

Action

This function reads the return value of a previous call of SapGuiInvokeMethod and provides the value as a collection.

Include file

SapGui.bdh

Syntax

SapGuiGetPropertyCollection( in  sControlId : string,
                             in  sProperty  : string,
                             out nIterator  : number ) : boolean;
Parameter | Description
sControlId | The control’s unique id.
sProperty | The name of the property to be read.
nIterator | This parameter will be assigned the handle to the collection iterator.

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID   : string;
    i         : number;
    nIterator : number;
    nType     : number;
    nObject   : number;
    bRet      : boolean;
    sStr1, sStr2 : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection(" /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.198 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_Exact);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.8);
    SapGuiLogon("ddic", "minisap", "000", "");

    // Copyright
    ThinkTime(2.1);
    SapGuiSetActiveWindow("wnd[1]", "Copyright", SAPGUI_MATCH_Exact);
    SapGuiPressButton("tbar[0]/btn[0]");

    // SAP Easy Access
    ThinkTime(9.9);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_Exact);
    SapGuiGetPropertyCollection("wnd[0]", "Children", nIterator);
  while (SapGuiIteratorHasMore(nIterator)) do
    SapGuiIteratorFetchNext(nIterator);
    SapGuiIteratorGetObject(nIterator, nObject);
    SapGuiObjectSetBoolean(nObject, true);
    SapGuiObjectInvokeMethod(nObject, "method");
    SapGuiObjectGetBoolean(nObject, bRet);
    SapGuiObjectGetType(nObject, sStr1, sStr2);
    SapGuiObjectFree(nObject);
    Print(string(nType) + " " + sValue);
  end;
    SapGuiIteratorRelease(nIterator);
  end TMain;
親トピック: Parsing Functions
関連資料
SapGuiIteratorFetchNext Function
SapGuiIteratorGetCount Function
SapGuiIteratorGetObjectAt Function
SapGuiIteratorGetObject Function
SapGuiIteratorGetValueAt Function
SapGuiIteratorGetValue Function
SapGuiIteratorHasMore Function
SapGuiIteratorRelease Function


Verifying Functions

  • SapGuiVerifyCalendarFocusDate Function
    Verifies whether a specified date is focused in a calendar control.
  • SapGuiVerifyCheckbox Function
    Verifies a SapGui check box control.
  • SapGuiVerifyComboboxEntry Function
    Verifies whether an entry in a combobox is selected.
  • SapGuiVerifyGridCellData Function
    Verifies the content of a specified cell of a SapGui grid.
  • SapGuiVerifyGridCheckboxChecked Function
    Verifies the row of the current cell of a SapGui grid control.
  • SapGuiVerifyGridCurrentCellColumn Function
    Verifies the column of the current cell of a SapGui grid control.
  • SapGuiVerifyGridCurrentCellRow Function
    Verifies the row of the current cell of a SapGui grid control.
  • SapGuiVerifyObjectAvailability Function
    Verifies whether a SapGui control exists and can be accessed during a test run.
  • SapGuiVerifyPropertyBoolean Function
    Verifies a property of type Boolean for any SapGui control.
  • SapGuiVerifyPropertyByte Function
    Verifies a property of type byte for any SapGui control.
  • SapGuiVerifyPropertyDouble Function
    Verifies a property of type Double for any SapGui control.
  • SapGuiVerifyPropertyFloat Function
    Verifies a property of type Float for any SapGui control.
  • SapGuiVerifyPropertyLong Function
    Verifies a property of type Long for any SapGui control.
  • SapGuiVerifyPropertyShort Function
    Verifies a property of type Short for any SapGui control.
  • SapGuiVerifyPropertyString Function
    Verifies a property of type string for any SapGui control.
  • SapGuiVerifyRadioValue Function
    Verifies a SapGui radio button control.
  • SapGuiVerifyStatusBarText Function
    Verifies the current statusbar text of the SapGui application.
  • SapGuiVerifyTableCheckbox Function
    Verifies whether a check box in a table cell is checked.
  • SapGuiVerifyTableRadioValue Function
    Verifies whether a radio button in a table cell is selected.
  • SapGuiVerifyTableRowSelected Function
    Verifies whether a check box in a table cell is checked.
  • SapGuiVerifyTableText Function
    Verifies the text of a table cell.
  • SapGuiVerifyTabSelected Function
    Verifies whether a tab is currently the selected one inside a tab control.
  • SapGuiVerifyTextValue Function
    Verifies the value of a SapGui text control.
  • SapGuiVerifyTreeCheckbox Function
    Verifies a SapGui check box attached to an item in a SapGui tree.
  • SapGuiVerifyTreeItemText Function
    Verifies the text of an item in a SapGui tree control.
  • SapGuiVerifyTreeNodeText Function
    Verifies the text of a node in a SapGui tree control.
  • SapGuiVerifyWindowAvailability Function
    Verifies whether a SapGui window exists and can be accessed during a test run.
親トピック: SAP Functions


SapGuiVerifyCalendarFocusDate Function

Action

This function verifies whether a specified date is focused in a calendar control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyCalendarFocusDate( in sControlId : string,
                               in sDate      : string,
                               in nOptions   : number optional,
                               in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the calendar
sDate | The date to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);
    SapGuiSetActiveWindow("wnd[0]", "Termine anzeigen: DDIC", SAPGUI_MATCH_ExactNoCase);
    SapGuiCalendarFocusDate( "usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20041105");
    SapGuiVerifyCalendarFocusDate( "usr/cntlCALE_CONTROL/shellcont/shell/shellcont[0]/shell", "20041105", SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyCheckbox Function

Action

This function verifies a SapGui check box control. It can be used to ensure whether a checkbox is checked or not checked.

Include file

SapGui.bdh

Syntax

SapGuiVerifyCheckbox( in sControlId : string,
                      in bValue     : boolean,
                      in nOptions   : number optional,
                      in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of a checkbox control
bValue | This parameter is set to "true" if the check as specified in the third parameter results in success. Otherwise it is set to "false".
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // Other menu
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(5.9);
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");

    // Wertebereich einschränken
    ThinkTime(2.7);
    SapGuiSetActiveWindow("wnd[1]", "Wertebereich einschränken", SAPGUI_MATCH_ExactNoCase);
    SapGuiSetFocus("usr/tabsG_SELONETABSTRIP/tabpTAB002/chkG_SELPOP_STATE-BUTTON");
    SapGuiSetCheckbox("usr/tabsG_SELONETABSTRIP/220/chkG_SELPOP_STATE-BUTTON", true, "No restriction");
    SapGuiVerifyCheckbox( "/usr/tabsG_SELONETABSTRIP/DH4:0220/chkG_SELPOP_STATE-BUTTON", true, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyComboboxEntry Function

Action

This function verifies whether an entry in a combobox is selected.

Include file

SapGui.bdh

Syntax

SapGuiVerifyComboboxEntry( in sControlId : string,
                           in sValue     : string,
                           in nOptions   : number optional,
                           in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the tab.
sValue | The value to be verified for the combobox.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "minisap", "000", "");
    SapGuiVerifyComboboxEntry("/usr/tabsG_SELONETABSTRIP/combo2/", "Entry", SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyGridCellData Function

Action

This function verifies the content of a specified cell of a SapGui grid.

Include file

SapGui.bdh

Syntax

SapGuiVerifyGridCellData( in sControlId : string,
                          in nRow       : number,
                          in sCol       : string,
                          in sValue     : string,
                          in nOptions   : number optional,
                          in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
nRow | The row of the cell to be verified.
sCol | The column of the cell to be verified.
sValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Workplace: DDIC
    // NodePath: 1
    SapGuiSelectTopNode( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace: DDIC", " 1", "TopNode\\Workplace: DDIC");
    ThinkTime(16.8);
    SapGuiGridSelectCell( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES");
    SapGuiVerifyGridCellData( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES", "value");
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyGridCheckboxChecked Function

Action

This function verifies the row of the current cell of a SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyGridCheckboxChecked( in sControlId : string,
                                 in nRow       : number,
                                 in sCol       : string,
                                 in bChecked   : boolean,
                                 in nOptions   : number optional,
                                 in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
nRow | The row of the cell to be verified.
sCol | The column of the cell to be verified.
bChecked | Value to be compared according to the rules specified in the 'nOptions' parameter.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Workplace: DDIC
    // NodePath: 1
    SapGuiSelectTopNode( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace: DDIC", " 1", "TopNode\\Workplace: DDIC");
    ThinkTime(16.8);
    SapGuiGridSelectCell( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES");
    SapGuiVerifyGridCheckboxChecked ( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES", true, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyGridCurrentCellColumn Function

Action

This function verifies the column of the current cell of a SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyGridCurrentCellColumn( in sControlId : string,
                                   in sColumn    : string,
                                   in nOptions   : number optional,
                                   in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
sColumn | The column to be verified as the active one.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Workplace: DDIC
    // NodePath: 1
    SapGuiSelectTopNode( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace: DDIC", " 1", "TopNode\\Workplace: DDIC");
    ThinkTime(16.8);
    SapGuiGridSelectCell( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES");
    SapGuiVerifyGridCurrentCellColumn ("usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", "OBJDES", SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyGridCurrentCellRow Function

Action

This function verifies the row of the current cell of a SapGui grid control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyGridCurrentCellRow( in sControlId : string,
                                in nRow       : number,
                                in nOptions   : number optional,
                                in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
nRow | The row to be verified as the active one.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Workplace: DDIC
    // NodePath: 1
    SapGuiSelectTopNode( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[0]/shell", "Workplace: DDIC", " 1", "TopNode\\Workplace: DDIC");
    ThinkTime(16.8);
    SapGuiGridSelectCell( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, "OBJDES");
    SapGuiVerifyGridCurrentCellRow ( "usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell", 1, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyObjectAvailability Function

Action

Verifies whether a SapGui control exists and can be accessed during a test run.

Include file

SapGui.bdh

Syntax

SapGuiVerifyObjectAvailability( in sControlId    : string,
                                in bAbsolutePath : boolean optional,
                                in nSeverity     : number optional  := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the SapGui control.
bAbsolutePath | If set to true, the id of the control has to be specified using the absolute path. This includes the connection, session, window and control id. Otherwise the verification will be performed looking up the control in the active session.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "minisap", "000", "");
    SapGuiVerifyObjectAvailability("tab[0]/btn1", false, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyPropertyBoolean Function

Action

This function verifies a property of type Boolean for any SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyPropertyBoolean( in sControlId : string,
                             in sName      : string,
                             in bValue     : boolean,
                             in nOptions   : number optional,
                             in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique Id of the control.
sName | The name of the property
bValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise
親トピック: Verifying Functions
関連資料
SapGuiVerifyPropertyLong Function
SapGuiVerifyPropertyString Function
SapGuiVerifyPropertyShort Function
SapGuiVerifyPropertyByte Function
SapGuiVerifyPropertyFloat Function
SapGuiVerifyPropertyDouble Function


SapGuiVerifyPropertyByte Function

Action

This function verifies a property of type byte for any SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyPropertyByte(  in sControlId : string,
                           in sName      : string,
                           in nValue     : number,
                           in nOptions   : number optional,
                           in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique ID of the control.
sName | The name of the property.
nValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise
親トピック: Verifying Functions
関連資料
SapGuiVerifyPropertyBoolean Function
SapGuiVerifyPropertyLong Function
SapGuiVerifyPropertyString Function
SapGuiVerifyPropertyShort Function
SapGuiVerifyPropertyFloat Function
SapGuiVerifyPropertyDouble Function


SapGuiVerifyPropertyDouble Function

Action

This function verifies a property of type Double for any SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyPropertyDouble( in sControlId : string,
                            in sName      : string,
                            in fValue     : float,
                            in nOptions   : number optional,
                            in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique of the control.
sName | The name of the property
fValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise
親トピック: Verifying Functions
関連資料
SapGuiVerifyPropertyBoolean Function
SapGuiVerifyPropertyLong Function
SapGuiVerifyPropertyString Function
SapGuiVerifyPropertyShort Function
SapGuiVerifyPropertyByte Function
SapGuiVerifyPropertyFloat Function


SapGuiVerifyPropertyFloat Function

Action

This function verifies a property of type Float for any SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyPropertyFloat( in sControlId : string,
                           in sName      : string,
                           in fValue     : float,
                           in nOptions   : number optional,
                           in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique of the control.
sName | The name of the property
fValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise
親トピック: Verifying Functions
関連資料
SapGuiVerifyPropertyBoolean Function
SapGuiVerifyPropertyLong Function
SapGuiVerifyPropertyString Function
SapGuiVerifyPropertyShort Function
SapGuiVerifyPropertyByte Function
SapGuiVerifyPropertyDouble Function


SapGuiVerifyPropertyLong Function

Action

This function verifies a property of type Long for any SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyPropertyLong( in sControlId : string,
                          in sName      : string,
                          in nValue     : number,
                          in nOptions   : number optional,
                          in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique Id of the control.
sName | The name of the property
nValue | The value to be verified.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise
親トピック: Verifying Functions
関連資料
SapGuiVerifyPropertyBoolean Function
SapGuiVerifyPropertyString Function
SapGuiVerifyPropertyShort Function
SapGuiVerifyPropertyByte Function
SapGuiVerifyPropertyFloat Function
SapGuiVerifyPropertyDouble Function


SapGuiVerifyPropertyShort Function

Action

This function verifies a property of type Short for any SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyPropertyShort( in sControlId : string,
                           in sName      : string,
                           in nValue     : number,
                           in nOptions   : number optional,
                           in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique Id of the control.
sName | The name of the property
nValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise
親トピック: Verifying Functions
関連資料
SapGuiVerifyPropertyBoolean Function
SapGuiVerifyPropertyLong Function
SapGuiVerifyPropertyString Function
SapGuiVerifyPropertyByte Function
SapGuiVerifyPropertyFloat Function
SapGuiVerifyPropertyDouble Function


SapGuiVerifyPropertyString Function

Action

This function verifies a property of type string for any SapGui control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyPropertyString( in sControlId : string,
                            in sName      : string,
                            in sValue     : string,
                            in nOptions   : number optional,
                            in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique Id of the control.
sName | The name of the property
sValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise
親トピック: Verifying Functions
関連資料
SapGuiVerifyPropertyBoolean Function
SapGuiVerifyPropertyLong Function
SapGuiVerifyPropertyShort Function
SapGuiVerifyPropertyByte Function
SapGuiVerifyPropertyFloat Function
SapGuiVerifyPropertyDouble Function


SapGuiVerifyRadioValue Function

Action

This function verifies a SapGui radio button control. It can be used to ensure whether a radio button is checked or not checked.

Include file

SapGui.bdh

Syntax

SapGuiVerifyRadioValue( in sControlId : string,
                        in bValue     : boolean,
                        in nOptions   : number optional,
                        in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of a checkbox control
bValue | This parameter is set to "true" if the check as specified in the third parameter results in success. Otherwise it is set to "false".
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.3);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(5.9);
    SapGuiPressButton("tbar[1]/btn[17]", " Other menu");
    ThinkTime(2.7);
    SapGuiSetActiveWindow("wnd[1]", "Wertebereich einschränken", SAPGUI_MATCH_ExactNoCase);
    SapGuiSetFocus("usr/tabsG_SELONETABSTRIP/tabpTAB002/chkG_SELPOP_STATE-BUTTON");
    SapGuiSetCheckbox("usr/tabsG_SELONETABSTRIP/220/chkG_SELPOP_STATE-BUTTON", true, "No restriction");
    SapGuiVerifyRadioValue( "/usr/tabsG_SELONETABSTRIP/DH4:0220/chkG_SELPOP_RADIO-BUTTON", true, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyStatusBarText Function

Action

This function verifies the current statusbar text of the SapGui application.

Include file

SapGui.bdh

Syntax

SapGuiVerifyStatusBarText( in sValue    : string,
                           in nOptions  : number optional,
                           in nSeverity : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sValue | Value to be compared with the current statusbar text.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "minisap", "000", "");
    SapGuiVerifyStatusBarText("verification", SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTableCheckbox Function

Action

This function verifies whether a check box in a table cell is checked.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTableCheckbox( in sControlId : string,
                           in nRow       : number,
                           in nCol       : number,
                           in bValue     : boolean,
                           in nOptions   : number optional,
                           in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
nRow | The row of the cell to be verified.
nCol | The column of the cell to be verified.
bValue | The value to be verified.
nOptions

This parameter specifies the type of check to be performed. Available options are:

  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    ThinkTime(4.3);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.4);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell""Office", "0000000003", "Expand\\Office");

    // NodeName: Telephone Integration
    // NodePath: 2\1\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration", "0000000005", "Expand\\Telephone Integration");

    // NodeName: Extended Settings
    // NodePath: 2\1\2\2
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Extended Settings",  "0000000007", false, "SelNode\\Extended Settings");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");
    SapGuiTreeDblClickNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell","Extended Settings", "0000000007", "DblClNode\\Extended Settings");
    ThinkTime(2.3);
    SapGuiSetActiveWindow("wnd[0]", "SAPphone: Administration", SAPGUI_MATCH_ExactNoCase);

    // Simulate inbound call
    SapGuiPressButton("usr/btn%_AUTOTEXT005", " Simulate inbound call");

    // Daten des Anrufs eingeben
    ThinkTime(8.5);
    SapGuiSetActiveWindow("wnd[1]", "Daten des Anrufs eingeben", SAPGUI_MATCH_ExactNoCase);
    SapGuiTableSetText("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiTableSetFocusCell("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiVerifyTableCheckbox("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, true, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTableRadioValue Function

Action

This function verifies whether a radio button in a table cell is selected.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTableRadioValue( in sControlId : string,
                             in nRow       : number,
                             in nCol       : number,
                             in bValue     : boolean,
                             in nOptions   : number optional,
                             in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
nRow | The row of the cell to be verified.
nCol | The column of the cell to be verified.
bValue | The value to be verified.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    ThinkTime(4.3);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.4);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");

    // NodeName: Telephone Integration
    // NodePath: 2\1\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration", "0000000005", "Expand\\Telephone Integration");

    // NodeName: Extended Settings
    // NodePath: 2\1\2\2
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Extended Settings", "0000000007", false, "SelNode\\Extended Settings");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo", "TopNode\\Favorites");
    SapGuiTreeDblClickNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Extended Settings", "0000000007", "DblClNode\\Extended Settings");
    ThinkTime(2.3);
    SapGuiSetActiveWindow("wnd[0]", "SAPphone: Administration", SAPGUI_MATCH_ExactNoCase);

    // Simulate inbound call
    SapGuiPressButton("usr/btn%_AUTOTEXT005", " Simulate inbound call");

    // Daten des Anrufs eingeben
    ThinkTime(8.5);
    SapGuiSetActiveWindow("wnd[1]", "Daten des Anrufs eingeben", SAPGUI_MATCH_ExactNoCase);
    SapGuiTableSetText("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiTableSetFocusCell("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiVerifyTableRadioValue("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, true, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTableRowSelected Function

Action

This function verifies whether a check box in a table cell is checked.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTableRowSelected( in sControlId : string,
                              in nRow       : number,
                              in nOptions   : number optional,
                              in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
nRow | The row to be verified.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    ThinkTime(4.3);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.4);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office",
    "0000000003", "Expand\\Office");

    // NodeName: Telephone Integration
    // NodePath: 2\1\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration",
    "0000000005", "Expand\\Telephone Integration");

    // NodeName: Extended Settings
    // NodePath: 2\1\2\2
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Extended Settings",
    "0000000007", false, "SelNode\\Extended Settings");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo",
    "TopNode\\Favorites");
    SapGuiTreeDblClickNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Extended Settings",
    "0000000007", "DblClNode\\Extended Settings");
    ThinkTime(2.3);
    SapGuiSetActiveWindow("wnd[0]", "SAPphone: Administration", SAPGUI_MATCH_ExactNoCase);

    // Simulate inbound call
    SapGuiPressButton("usr/btn%_AUTOTEXT005", " Simulate inbound call");

    // Daten des Anrufs eingeben
    ThinkTime(8.5);
    SapGuiSetActiveWindow("wnd[1]", "Daten des Anrufs eingeben", SAPGUI_MATCH_ExactNoCase);
    SapGuiTableSetText("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiTableSetFocusCell("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiVerifyTableRowSelected("usr/tblSAPLPHOAD102_ADDITIONAL", 0, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTableText Function

Action

This function verifies the text of a table cell.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTableText( in sControlId : string,
                       in nRow       : number,
                       in nCol       : number,
                       in sValue     : string,
                       in nOptions   : number optional,
                       in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the table.
nRow | The row of the cell to be verified.
nCol | The column of the cell to be verified.
sValue | The value to be verified.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_CASE_SENSITIVE. Performs a case sensitive comparison. By default the comparison is done case insensitive.
  • SAPGUI_VERIFY_IGNORE_WHITESPACE. Ignores any whitespaces found in the values to be compared.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    ThinkTime(4.3);
    SapGuiLogon("ddic", "*******", "000", "");
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(2.4);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office",
    "0000000003", "Expand\\Office");

    // NodeName: Telephone Integration
    // NodePath: 2\1\2
    SapGuiTreeExpandNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration",
    "0000000005", "Expand\\Telephone Integration");

    // NodeName: Extended Settings
    // NodePath: 2\1\2\2
    SapGuiTreeSelectNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Extended Settings",
    "0000000007", false, "SelNode\\Extended Settings");

    // NodeName: Favorites
    // NodePath: 1
    SapGuiSelectTopNode("usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Favorites", "Favo",
    "TopNode\\Favorites");
    SapGuiTreeDblClickNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Extended Settings",
    "0000000007", "DblClNode\\Extended Settings");
    ThinkTime(2.3);
    SapGuiSetActiveWindow("wnd[0]", "SAPphone: Administration", SAPGUI_MATCH_ExactNoCase);

    // Simulate inbound call
    SapGuiPressButton("usr/btn%_AUTOTEXT005", " Simulate inbound call");

    // Daten des Anrufs eingeben
    ThinkTime(8.5);
    SapGuiSetActiveWindow("wnd[1]", "Daten des Anrufs eingeben", SAPGUI_MATCH_ExactNoCase);
    SapGuiTableSetText("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiTableSetFocusCell("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf");
    SapGuiVerifyTableText("usr/tblSAPLPHOAD102_ADDITIONAL", 0, 0, "asdf",
    SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTabSelected Function

Action

This function verifies whether a tab is currently the selected one inside a tab control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTabSelected( in sControlId : string,
                         in bSelected  : boolean,
                         in nSeverity  : numberoptional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the tab.
bSelected | If the parameter is set to "true", the verification will succeed when the tab is selected.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "minisap", "000", "");
    SapGuiVerifyTabSelected("/usr/tabsG_SELONETABSTRIP/tabpTAB002/", true, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTextValue Function

Action

This function verifies the value of a SapGui text control. This may either be a label or an edit field.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTextValue( in sControlId : string,
                       in sText      : string,
                       in nOptions   : number optional,
                       in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of a text element or edit field.
sText | Compares the current text of the control to the value specified in this parameter according to the comparison flags in the third parameter.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_CASE_SENSITIVE. Performs a case sensitive comparison. By default the comparison is done case insensitive.
  • SAPGUI_VERIFY_IGNORE_WHITESPACE. Ignores any whitespaces found in the values to be compared.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sText : string;
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);
    SapGuiLogon("ddic", "minisap", "000", "");
    SapGuiVerifyTextValue( "/usr/sub:SAPMSYST:0020/txtINFO_TAB-TDLINE[8,0]", "Only released for training purposes", SAPGUI_VERIFY_EQUAL | SAPGUI_VERIFY_CASE_SENSITIVE,OR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTreeCheckbox Function

Action

This function verifies a SapGui check box attached to an item in a SapGui tree. It can be used to ensure whether a check box is checked or not checked.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTreeCheckbox( in sControlId : string,
                          in sNode      : string,
                          in sItem      : string,
                          in bValue     : boolean,
                          in nOptions   : number optional,
                          in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of a tree control.
sNode | Specifies the node of the tree.
sItem | The item where the checkbox is located.
bValue | The value to be verified.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.7);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(7.3);
    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", 0000000003", "Expand\\Office");
    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration", 0000000005", "Expand\\Telephone Integration");
    SapGuiVerifyTreeCheckbox( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", true, SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTreeItemText Function

Action

This function verifies the text of an item in a SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTreeItemText( in sControlId : string,
                          in sNode      : string,
                          in sItem      : string,
                          in sValue     : string,
                          in nOptions   : number optional,
                          in nSeverity  : number optional := SEVERITY_ERROR ) : boolean ;
Parameter | Description
sControlId | The unique id of a tree control.
sNode | The name of the node.
sItem | The name of the item to be verified.
sValue | Compares the current text of the control to the value specified in this parameter according to the comparison flags in the third parameter.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_CASE_SENSITIVE. Performs a case sensitive comparison. By default the comparison is done case insensitive.
  • SAPGUI_VERIFY_IGNORE_WHITESPACE. Ignores any whitespaces found in the values to be compared.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.7);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(7.3);
    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");
    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration", "0000000005", "Expand\\Telephone Integration");
    SapGuiVerifyTreeItemText( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "ItemText", SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyTreeNodeText Function

Action

This function verifies the text of a node in a SapGui tree control.

Include file

SapGui.bdh

Syntax

SapGuiVerifyTreeNodeText( in sControlId : string,
                          in sNode      : string,
                          in sValue     : string,
                          in nOptions   : number optional,
                          in nSeverity  : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of a tree control.
sNode | The name of the node.
sValue | Compares the current text of the control to the value specified in this parameter according to the comparison flags in the third parameter.
nOptions This parameter specifies the type of check to be performed. Available options are:
  • SAPGUI_VERIFY_EQUAL. Verifies, whether the state of the checkbox's state is equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_NOT_EQUAL. Verifies, whether the checkbox's state is not equal to the value specified in the second parameter.
  • SAPGUI_VERIFY_CASE_SENSITIVE. Performs a case sensitive comparison. By default the comparison is done case insensitive.
  • SAPGUI_VERIFY_IGNORE_WHITESPACE. Ignores any whitespaces found in the values to be compared.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin

    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "*******", "000", "");

    // SAP Easy Access
    SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS);
    ThinkTime(3.7);
    SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAPGUI_MATCH_ExactNoCase);

    // NodeName: Office
    // NodePath: 2\1
    ThinkTime(7.3);
    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "0000000003", "Expand\\Office");
    SapGuiTreeExpandNode( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Telephone Integration", "0000000005", "Expand\\Telephone Integration");
    SapGuiVerifyTreeNodeText( "usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell", "Office", "NodeText", SAPGUI_VERIFY_EQUAL, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


SapGuiVerifyWindowAvailability Function

Action

Verifies whether a SapGui window exists and can be accessed during a test run.

Include file

SapGui.bdh

Syntax

SapGuiVerifyWindowAvailability( in sControlId    : string,
                                in sWindowTitle  : string optional,
                                in bAbsolutePath : boolean optional,
                                in nSeverity     : number optional := SEVERITY_ERROR ) : boolean;
Parameter | Description
sControlId | The unique id of the SapGui window.
sWindowTitle | Matches the title of the window if the window as specified in the first parameter could be found. Set this parameter to NULL to have the function not perform a title verification.
bAbsolutePath | If set to true, the id of the control has to be specified using the absolute path. This includes the connection, session, window and control id. Otherwise the verification will be performed looking up the control in the active session.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
  var
    sConnID : string;
  begin
    // Connecting to SAP
    sConnID := SapGuiOpenConnection( " /SAP_CODEPAGE=1100 /FULLMENU 10.5.2.132 0 /3");
    SapGuiSetActiveConnection(sConnID);
    SapGuiSetActiveSession("ses[0]");

    // SAP
    SapGuiSetActiveWindow("wnd[0]", "SAP", SAPGUI_MATCH_ExactNoCase);
    SapGuiWindowAction(SAPGUI_WND_MAXIMIZE);

    // Logon to SAP System
    // Before running a test you have to customize the password parameter!
    ThinkTime(2.0);
    SapGuiLogon("ddic", "minisap", "000", "");
    SapGuiVerifyWindowAvailability("wnd[0]", false, SEVERITY_ERROR);
  end TMain;
親トピック: Verifying Functions


Siebel Functions Overview

Tokenizing functions:

It is not reasonable to parse individual values from Siebel 7 Web server responses, because the values appear in a condensed format. This makes it impossible to identify meaningful left boundaries for parsing functions, because such boundaries would include other dynamic information, e.g. a length specificiation of the value to be parsed or fragments of a previous value.

Therefore, Siebel 7 Web scripts include parsing functions for entire value arrays, and use tokenizing functions to retrieve individual values (tokens) from such parsed value arrays.

Reformatting functions:

The formats of string representations of phone numbers, date values, time values and combined date/time values are different in server responses from client requests. This is because the Siebel Web client reformats values received from the server or entered by the user before they are sent back to the server in subsequent requests.

Without further provision, this makes it impossible to replace hard coded values in the script with parsed values, both for the Recorder and for manual script customization.

The reformatting functions mimic this client side reformatting, and thus allow to have these values in the script in the same format which is used in server responses. This makes it possible to replace these hared coded values with parsed values, both for the Recorder and for manuall script customization.

  • Siebel7WebInit Function
    Establishes several global parsing and verification functions for catching application level errors.
  • SiebelTokenHtml Function
    Extract single tokens from value arrays as used by Siebel 7 Web applications in HTML responses.
  • SiebelTokenHtmlSingleQuote Function
    Extract single tokens from value arrays as used by Siebel 7 Web applications in HTML responses.
  • SiebelTokenApplet Function
    Extract single tokens from value arrays as used by Siebel 7 Web applications in non-HTML responses.
  • SiebelPhone Function
    Reformats a phone number in the same way as the Siebel 7 Web client does.
  • SiebelTime Function
    Reformats a time string value in the same way as the Siebel 7 Web client does for the US-English locale.
  • SiebelDate Function
    Reformats a date string value in the same way as the Siebel 7 Web client does for the US-English locale.
  • SiebelDateTime Function
    Reformats a string containing a date/time combination value in the same way as the Siebel 7 Web client does for the US-English locale.
  • SiebelDecodeJsString Function
    Replaces escape sequences in a string, as used within JavaScript strings, with the corresponding control characters.
  • Siebel7Param Function
    Assembles a length prefixed string from a raw value.
親トピック: ERP/CRM Functions


Siebel7WebInit Function

Action

Establishes several global parsing and verification functions for catching application level errors. This function should be called in the init transaction of Siebel 7 scripts.

Include file

Siebel7Web.bdh

Syntax

Siebel7WebInit( );

Example

transaction TInit
  begin
    WebSetBrowser(WEB_BROWSER_MSIE6);
    Siebel7WebInit();
  end TInit;
親トピック: Siebel Functions Overview


SiebelTokenHtml Function

Action

Extract single tokens from value arrays as used by Siebel 7 Web applications in HTML responses.

Include file

Siebel7Web.bdh

Syntax

SiebelTokenHtml( inout sValueArray : string,
                 in    nTokenIndex : number) : string;

Return value

Returns the nTokenIndex-th token in the value array. Token indizes are 0-based.

Parameter | Description
hObject | Handle to a .NET Object
nReturn | Integer variable that will receive the return value of the last DotNetCallMethod call

sValueArray must be a sequences of strings (tokens) enclosed in double quotes ("). Any sequence of characters may appear before the first token, after the last token and between tokens. Such extra content is skipped by these functions.

Example

transaction TTokenHtml
  var
    sValArrayHtml   : string;
    sValArrayHtmlSQ : string;
    i               : number;
    sToken          : string;
  begin
    sValArrayHtml   := "var row = [\"Foo\",\"\",\"Bar\",\"USD\",\n"
                       "// this is a javascript comment\n"
                       " \"05/23/2003\",\"N\",\"1-T8T\"];";
    sValArrayHtmlSQ := "var row = ['Foo','','Bar','USD',\n"
                       "// this is a javascript comment\n"
                       "  '05/23/2003','N','1-T8T'];";
    Writeln("-- Output of SiebelTokenHtml --");
    for i := 0 to 6 do
      sToken := SiebelTokenHtml(sValArrayHtml, i);
      Writeln("Token #" + string(i) + " = <" + sToken + ">");
    end;
    Writeln("-- Output of SiebelTokenHtmlSingleQuote --");
    for i := 0 to 6 do
      sToken := SiebelTokenHtmlSingleQuote(sValArrayHtmlSQ, i);
      Writeln("Token #" + string(i) + " = <" + sToken + ">");
    end;
end TTokenHtml;

Output

-- Output of SiebelTokenHtml --
Token #0 = <Foo>
Token #1 = <>
Token #2 = <Bar>
Token #3 = <USD>
Token #4 = <05/23/2003>
Token #5 = <N>
Token #6 = <1-T8T>
-- Output of SiebelTokenHtmlSingleQuote --
Token #0 = <Foo>
Token #1 = <>
Token #2 = <Bar>
Token #3 = <USD>
Token #4 = <05/23/2003>
Token #5 = <N>
Token #6 = <1-T8T>
親トピック: Siebel Functions Overview
関連資料
SiebelTokenApplet Function
SiebelTokenHtmlSingleQuote Function


SiebelTokenHtmlSingleQuote Function

Action

Extract single tokens from value arrays as used by Siebel 7 Web applications in HTML responses.

Include file

Siebel7Web.bdh

Syntax

SiebelTokenHtmlSingleQuote( inout sValueArray : string,
                            in    nTokenIndex : number) : string;

Return value

Returns the nTokenIndex-th token in the value array. Token indizes are 0-based.

Parameter | Description
sValueArray | Value array, usually parsed from a server response.
nTokenIndex | The token index (0-based)

sValueArray must be a sequences of strings (tokens) enclosed in single quotes ('). Any sequence of characters may appear before the first token, after the last token and between tokens. Such extra content is skipped by these functions.

Example

transaction TTokenHtml
  var
    sValArrayHtml   : string;
    sValArrayHtmlSQ : string;
    i               : number;
    sToken          : string;
  begin
    sValArrayHtml   := "var row = [\"Foo\",\"\",\"Bar\",\"USD\",\n"
                       "// this is a javascript comment\n"
                       " \"05/23/2003\",\"N\",\"1-T8T\"];";
    sValArrayHtmlSQ := "var row = ['Foo','','Bar','USD',\n"
                       "// this is a javascript comment\n"
                       "  '05/23/2003','N','1-T8T'];";
    Writeln("-- Output of SiebelTokenHtml --");
    for i := 0 to 6 do
      sToken := SiebelTokenHtml(sValArrayHtml, i);
      Writeln("Token #" + string(i) + " = <" + sToken + ">");
    end;
    Writeln("-- Output of SiebelTokenHtmlSingleQuote --");
    for i := 0 to 6 do
      sToken := SiebelTokenHtmlSingleQuote(sValArrayHtmlSQ, i);
      Writeln("Token #" + string(i) + " = <" + sToken + ">");
    end;
end TTokenHtml;

Output

-- Output of SiebelTokenHtml --
Token #0 = <Foo>
Token #1 = <>
Token #2 = <Bar>
Token #3 = <USD>
Token #4 = <05/23/2003>
Token #5 = <N>
Token #6 = <1-T8T>
-- Output of SiebelTokenHtmlSingleQuote --
Token #0 = <Foo>
Token #1 = <>
Token #2 = <Bar>
Token #3 = <USD>
Token #4 = <05/23/2003>
Token #5 = <N>
Token #6 = <1-T8T>
親トピック: Siebel Functions Overview
関連資料
SiebelTokenHtml Function
SiebelTokenApplet Function


SiebelTokenApplet Function

Action

Extract single tokens from value arrays as used by Siebel 7 Web applications in non-HTML responses.

Include file

Siebel7Web.bdh

Syntax

SiebelTokenApplet( inout sValueArray : string,
                   in    nTokenIndex : number) : string;

Return value

Returns the nTokenIndex-th token in the value array. Token indizes are 0-based.

Parameter | Description
sValueArray | Value array, usually parsed from a server response.
nTokenIndex | The token index (0-based)

sValueArray is a sequence of length prefixed strings with no leading, trailing or intermittent characters allowed. Each length prefixed strings consists of:

  1. the length of the actual value, in decimal ASCII

  2. an asterisk (*)

  3. the actual value

Example

transaction TTokenApplet
  var
    sValArray : string;
    i         : number;
    sToken    : string;
  begin
    sValArray := "3*Foo0*3*Bar3*USD10*05/23/20031*N5*1-T8T";
    Writeln("-- Output of SiebelTokenApplet --");
    for i := 0 to 6 do
      sToken := SiebelTokenApplet(sValArray, i);
      Writeln("Token #" + string(i) + " = <" + sToken + ">");
    end;
  end TTokenApplet;

Output

-- Output of SiebelTokenApplet --
Token #0 = <Foo>
Token #1 = <>
Token #2 = <Bar>
Token #3 = <USD>
Token #4 = <05/23/2003>
Token #5 = <N>
Token #6 = <1-T8T>
親トピック: Siebel Functions Overview
関連資料
SiebelTokenHtml Function
SiebelTokenHtmlSingleQuote Function


SiebelPhone Function

Action

Reformats a phone number in the same way as the Siebel 7 Web client does.

Include file

Siebel7Web.bdh

Syntax

SiebelPhone( inout sPhone : string) : string;

Return value

Reformatted phone number.

Parameter | Description
sPhone | Undecorated phone number consisting only of digits

sPhone must be an undecorated phone number, the return value is a reformatted phone number as follows:

  • "(" is inserted at the start.

  • ") " is inserted after the 3rd digit.

  • "-" is inserted after the 6th digit.

  • " x" is inserte after the 10th digit if the original phone number is longer than 10 digits.

Example

transaction TPhone
  begin
    Writeln(SiebelPhone("1234567890"));
    Writeln(SiebelPhone("12345678901"));
    Writeln(SiebelPhone("12345678901234567890"));
  end TPhone;

Output

(123) 456-7890
(123) 456-7890 x1
(123) 456-7890 x1234567890See also
親トピック: Siebel Functions Overview
関連資料
Siebel7Param Function
SiebelTime Function
SiebelDate Function
SiebelDateTime Function
SiebelDecodeJsString Function


SiebelTime Function

Action

Reformats a time string value in the same way as the Siebel 7 Web client does for the US-English locale.

Include file

Siebel7Web.bdh

Syntax

SiebelTime( inout sTime : string) : string;

Return value

Time string reformatted the same way as the Siebel 7 Web client does.

Parameter | Description
sTime | Time string in the format as used in Siebel 7 server responses.

sTime must be a time string in the format H:M:S, where H (hour) must be in the range 0-23 and M (minutes) and S (seconds) must be in the range 0-59. All values may be 1-digit or -2-digit values. The reformatted return value is in the format HH:MM:SS AM|PM. HH, MM and SS each consist of exactly 2 digits, leading zeros are inserted if necessary. HH is in the range 1-12, the postfix "AM" or "PM" is added as appropriate.

Example

transaction TTime
  begin
    Writeln(SiebelTime("0:0:0"));
    Writeln(SiebelTime("1:0:0"));
    Writeln(SiebelTime("2:0:0"));
    Writeln(SiebelTime("11:1:2"));
    Writeln(SiebelTime("11:01:02"));
    Writeln(SiebelTime("12:1:02"));
    Writeln(SiebelTime("13:01:2"));
    Writeln(SiebelTime("22:59:59"));
    Writeln(SiebelTime("23:59:59"));
  end TTime;

Output

12:00:00 AM
01:00:00 AM
02:00:00 AM
11:01:02 AM
11:01:02 AM
12:01:02 PM
01:01:02 PM
10:59:59 PM
11:59:59 PM
親トピック: Siebel Functions Overview
関連資料
Siebel7Param Function
SiebelPhone Function
SiebelDate Function
SiebelDateTime Function
SiebelDecodeJsString Function


SiebelDate Function

Action

Reformats a date string value in the same way as the Siebel 7 Web client does for the US-English locale.

Include file

Siebel7Web.bdh

Syntax

SiebelDate( inout sDate : string) : string;

Return value

Date string reformatted the same way as the Siebel 7 Web client does.

Parameter | Description
sDate | Date string in the format as used in Siebel 7 server responses.

sDate must be a date string in the format M/D/Y, where M (month) must be in the range 1-12, D (day) must be in the range 1-31 and Y(year) can be any value. Leading zeros are allowed and usually present in date values returned from the server. The reformatted return value is in the same format, however leading zeros are removed.

Example

transaction TDate
begin
    Writeln(SiebelDate("01/01/2004"));
    Writeln(SiebelDate("1/1/2004"));
    Writeln(SiebelDate("09/09/2004"));
    Writeln(SiebelDate("10/01/2004"));
    Writeln(SiebelDate("01/10/2004"));
    Writeln(SiebelDate("12/31/2004"));
  end TDate;

Output

1/1/2004
1/1/2004
9/9/2004
10/1/2004
1/10/2004
12/31/2004
親トピック: Siebel Functions Overview
関連資料
Siebel7Param Function
SiebelPhone Function
SiebelTime Function
SiebelDateTime Function
SiebelDecodeJsString Function


SiebelDateTime Function

Action

Reformats a string containing a date/time combination value in the same way as the Siebel 7 Web client does for the US-English locale.

Include file

Siebel7Web.bdh

Syntax

SiebelDateTime( inout sDateTime : string) : string;

Return value

Time string reformatted the same way as the Siebel 7 Web client does.

Parameter | Description
sDateTime | Date/Time string in the format as used in Siebel 7 server responses.

sDateTime must contain a date value followed by a time value, separated by at least one whitespace. The date value must be formatted in the same way as required by the function SiebelDate, the time value must be formatted in the same way as required by the function SiebelTime. The return value is reformatted in the same way as done by the functions SiebelDate and SiebelTime. The date and the time value are separated by one blank.

Example

transaction TDateTime
  begin
    Writeln(SiebelDateTime("01/01/2004 0:0:0"));
    Writeln(SiebelDateTime("1/1/2004 11:1:2"));
    Writeln(SiebelDateTime("09/09/2004 11:01:02"));
    Writeln(SiebelDateTime("10/01/2004 12:1:02"));
    Writeln(SiebelDateTime("01/10/2004 13:01:2"));
    Writeln(SiebelDateTime("12/31/2004 23:59:59"));
  end TDateTime;

Output

1/1/2004 12: 0: 0 AM
1/1/2004 11: 1: 2 AM
9/9/2004 11: 1: 2 AM
10/1/2004 12: 1: 2 PM
1/10/2004  1: 1: 2 PM
12/31/2004 11:59:59 PM
親トピック: Siebel Functions Overview
関連資料
Siebel7Param Function
SiebelPhone Function
SiebelTime Function
SiebelDate Function
SiebelDecodeJsString Function


SiebelDecodeJsString Function

Action

Replaces escape sequences in a string, as used within JavaScript strings, with the corresponding control characters.

Include file

Siebel7Web.bdh

Syntax

SiebelDecodeJsString( inout sString : string ) : string;

Return value

Original string with escape sequences replaced by the corresponding control characters.

Parameter | Description
sString | Any string.

The following two-character sequences are replaced by the corresponding control character:

"\n" replaced by a newline character

"\r" replaced by a carriage return character

"\t" replaced by a tab character

"\f" replaced by a form feed character

Example

transaction TDecodeJs
  var
    sString : string;
  begin
    sString := "First Line\\r\\n\\tSecond line indented with tab\\r\\nThirdLine";
    Writeln("Original:\n-----\n" + sString + "\n-----");
    Writeln("Decoded:\n-----\n" + SiebelDecodeJsString(sString) + "\n-----");
  end TDecodeJs;

Output

Original:
-----
First Line\r\n\tSecond line indented with tab\r\nThirdLine
-----
Decoded:
-----
First Line
Second line indented with tab
ThirdLine
-----
親トピック: Siebel Functions Overview
関連資料
Siebel7Param Function
SiebelPhone Function
SiebelTime Function
SiebelDate Function
SiebelDateTime Function


Siebel7Param Function

Action

Assembles a length prefixed string from a raw value.

Include file

Siebel7Web.bdh

Syntax

Siebel7Param( inout sString : string) : string;

Return value

Original string prefixed with a length specification and an asterisk.

Parameter | Description
sString | Any string.

This function returns the original string prefixed with a length specification in decimal ASCII representation and an asterisk. This length prefixed format is commonly used in Siebel HTTP traffic. This function is recorded for the benefit of making customization and randomization of Siebel scripts easier.

Example

dclrand
  rChars : RndStr("abcd", 1 .. 30);

dcltrans
  transaction TParam
  begin
    Writeln(Siebel7Param(""));
    Writeln(Siebel7Param("Y"));
    Writeln(Siebel7Param("No"));
    Writeln(Siebel7Param("Foo"));
    Writeln(Siebel7Param("Bar"));
    Writeln(Siebel7Param("Lucent Technologies Incorporated"));
    Writeln(Siebel7Param(rChars));
    Writeln(Siebel7Param(rChars));
    Writeln(Siebel7Param(rChars));
  end TParam;

Output

0*
1*Y
2*No
3*Foo
3*Bar
32*Lucent Technologies Incorporated
29*cdbcdaaabcbddcbacaadbdcbadcdb
17*dbadccbbaaabcadad
24*cadaaabadbbbddcacacbaadc
親トピック: Siebel Functions Overview
関連資料
SiebelPhone Function
SiebelTime Function
SiebelDate Function
SiebelDateTime Function
SiebelDecodeJsString Function


PeopleSoft Overview

Silk Performer offers support for load testing of PeopleSoft 8.x applications. This support is based on Silk Performer's Web page-level support.

The PeopleSoft project type adds PeopleSoft-specific enhancements for:

  • Automatic handling of dynamic data (session handling)

  • Detection of application level errors with fine grained customization of error severities

  • Ease of customization of login data, thinktimes, page timer names and also access to table rows for easier randomization

Wrapper Functions

The BDH files contain wrapper functions for all page-level API functions. These wrapper functions call the original API functions and perform some additional tasks.

The following wrapper functions are defined:

Wrapper function | Wrapped original function
WebPageUrlPS | WebPageUrl
WebPageLinkPS | WebPageLink
WebPageSubmitPS | WebPageSubmit
WebPageSubmitBinPS | WebPageSubmitBin
WebPageFormPS | WebPageForm
WebPageFileUploadPS | WebPageFileUpload
親トピック: ERP/CRM Functions


Internet Functions

For proper use of the Silk Performer Internet functions, the file WebAPI.bdh must be included in your scripts. When you use the Silk Performer Recorder to record Internet traffic, this file is automatically included in your script.

Example

use "WebAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit        : begin;
    TWebFormPost : 50;

Internet Functions

  • Handling Uniform Resource Locators (URLs)
    A Uniform Resource Locator (URL) is a compact representation of the location and access method for a resource located on the Internet.
  • WebAddToHNC Function
    Enters a host to the host name cache of a user.
  • WebRemoveFromHNC Function
    Removes an already resolved host from the host name cache of a user.
  • Settings Functions Reference
    Silk Performer provides functions to allow you to specify in your test script any of the Web-related settings you can specify in the Silk Performer interface.
  • FTP Functions Reference
    The FTP (File Transfer Protocol) functions deal with FTP file and directory manipulation and navigation.
  • HLS Functions Reference
    Lists BDL functions for testing applications that use HTTP Live Streaming (HLS).
  • JSON Functions Reference
    Provides basic knowledge about JSON and lists all functions of the JSON API.
  • LDAP Functions Reference
    The following function set is an implementation of the Lightweight Directory Access Protocol.
  • MAPI Functions Reference
    Tests MAPI (Messaging Application Programming Interface) applications like MS Outlook.
  • MMS Functions Reference
    Lists BDL functions for testing Multimedia Messaging Service (MMS) applications.
  • POP3 Functions Reference
    Describes the complete implementation of the Post Office Protocol 3
  • Radius Functions Reference
    Lists the functions that enable user authentication and account login for RADIUS servers.
  • SMTP Functions Reference
    Lists the complete implementation of the Simple Mail Transfer Protocol.
  • SSL (Secure Socket Layer) Extensions
    Provides configuration options for replaying scripts in a secure environment.
  • TCP/IP Functions Reference
    Lists the functions for testing applications that use the TCP/IP protocol.
  • UDP Functions Reference
  • Web Functions Reference
    Silk Performer provides full support for testing Web applications.
  • XML Functions Reference
    Silk Performer Web API provides functions for parsing/verifying node and attribute values of a Web response.
親トピック: Benchmark Description Language (BDL) Reference
関連概念
Program Structure of Load Testing Scripts


Handling Uniform Resource Locators (URLs)

A Uniform Resource Locator (URL) is a compact representation of the location and access method for a resource located on the Internet. Each URL consists of a scheme (HTTP, HTTPS, FTP or Gopher) and a scheme-specific string. This string can also include a combination of a directory path, a search string and/or the name of a resource.

Canonicalized URLs

The format of all URLs must follow prescribed syntax and semantics in order to enable access to resources via the Web. Canonicalization is the process of formatting a URL to follow this prescribed syntax and semantics. Characters that must be encoded include any characters that have no corresponding graphic character in the US-ASCII coded character set (hexadecimal 80-FF, which are not used in the US-ASCII coded character set, and hexadecimal 00-1F and 7F, which are control characters), blank spaces, "%" (which is used to encode other characters), and unsafe characters (<, >, ", #, {, }, |, \, ^, ~, [, ], and ').

Printable ASCII characters being URL-encoded by Silk Performer % ? # [ ] { } | \ & = @ : ^ ~ ' ` " $ + ! * ' ( ) , < >

注: All characters after the query string delimiter '?' will not be encoded by Silk Performer's low-level web functions.

For encoding URLs, Silk Performer provides the WebBase64Encode function

親トピック: Internet Functions
関連概念
Syntax of Load Testing Scripts
Program Structure of Load Testing Scripts
関連資料
WebBase64Encode Function


WebAddToHNC Function

Action

This function is used to enter a host to the host name cache of a user. If a host is found in the host name cache during replay, the specified IP-address is used for connects (no DNS queries are made).

Include file

WebAPI.bdh

Syntax

WebAddToHNC(in sHostName : string,
in sIpAddress : string): boolean;

Return value

  • true if the host name cache has been updated successfully.

  • false otherwise.

Parameter | Description
sHostName | Name of the host that should be entered into the host name cache.
sIpAddress | IP-address of the host.

Example

dcltrans
transaction TMain
begin
  WebAddToHNC("lab3", "192.168.20.56");
  WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
end TMain;
親トピック: Internet Functions


WebRemoveFromHNC Function

Action

This function is used to remove an already resolved host from the host name cache of a user. If a hostname cannot be found in the host name cache during replay, it has to be resolved (again). If the Emulate DNS lookup checkbox is checked every user sends its own DNS query to the DNS server (otherwise it is possible that the system caches the response of a prior DNS query).

Include file

WebAPI.bdh

Syntax

WebRemoveFromHNC(in sHostName : string): boolean;

Return value

  • true if the host name cache has been updated successfully.

  • false otherwise.

Parameter | Description
sHostName | Name of the host that should be deleted from the host name cache.

Example

dcltrans
transaction TMain
begin
  WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
  WebRemoveFromHNC("lab3");
  WebPageUrl("http://lab3/", "home page");
end TMain;
親トピック: Internet Functions


Settings Functions Reference

Silk Performer provides a number of settings functions to allow you to specify in your test script any of the Web-related settings you can specify in the Silk Performer interface. This allows you to specify Web settings individually for each test script and change settings within a single script.

注: For nearly every WebSet function used to specify a setting, there is a parallel WebGet function to get the current specification.

Most of the WebSet functions wait until all threads have returned. Threads are started by low-level web function calls. The Web settings in the workbench can then be overridden by WebSet function calls.

Example

dcltrans
  transaction TInit
  begin
    WebSetUserAgent("Mozilla 2.0 compatible (Selfmade Browser)");
  end TInit;
  • WebDumpSettings Function
    Writes all current WebSettings into the output file.
  • General Settings
  • Simulation Settings
  • Logging Settings
親トピック: Internet Functions


WebDumpSettings Function

Action

Writes all current WebSettings into the output file. This function helps in documenting benchmark tests where different settings are used.

Include file

WebAPI.bdh

Syntax

WebDumpSettings();

Example

dcltrans
  transaction TWebInit
  begin
    WebDumpSettings();
  end TWebInit;

Sample scripts

WebMulti01.bdf

親トピック: Settings Functions Reference


General Settings

  • WebSetBuffer Function
    Determines the size of the buffers used to receive Internet traffic.
  • WebSetDomainSuppress Function
    Specifies a domain from which documents must not be loaded by future Web function calls.
  • WebSetOption Function
    Allows you to set a variety of web options.
  • WebGetOption Function
    Allows you to retrieve the values of the options that have been set with the function WebSetOption().
  • WebGetPageInfo Function
    Retrieves information about the actual page, such as the number of hyperlinks or forms.
  • WebSetStandardHost Function
    Sets the replacement name for the predefined host name "standardhost".
  • WebGetStandardHost Function
    Gets the replacement name for the predefined host name standardhost.
  • WebSetVerification Function
    Specifies whether or not to check if the Internet traffic that the virtual users receive differs from the traffic that the Recorder captured during the recording session.
  • WebSetVerificationEx Function
    Specifies which verification function should be executed during replay.
  • WebSetModem Function
    Sets the simulation bandwidth.
親トピック: Settings Functions Reference


WebSetBuffer Function

Action

Determines the size of the buffers used to receive Internet traffic. By default, the size of both buffers is set to 8 KB each.

注: Since Silk Performer allocates two buffers in addition to the WinSock buffers for handling Internet traffic, you need for each connection four times as much system memory as you specify through this function.

Include file

WebAPI.bdh

Syntax

WebSetBuffer( in nBuffer : number,
              in nSize   : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nBuffer

Specifies which buffer size to set. The following options are possible:

  • WEB_BUFFER_SOCKET. Sets the buffers used for receiving Internet traffic.

nSize | Buffer size in bytes.

Example

dcltrans
  transaction TMain
  begin
    // set size of buffers to 32 KB each
    WebSetBuffer(WEB_BUFFER_SOCKET, 32768);
    WebUrl("http://www.MyCompany.com");
  end TMain;
親トピック: General Settings


WebSetDomainSuppress Function

Action

Specifies a domain from which documents must not be loaded by future Web function calls. Connections to the suppressed domains will not be established so that the requests are not performed. Whenever a connection is suppressed, an informational line is scripted to the VU output pane. To reset the list of suppressed domains call WebSetDomainSuppress with an empty string as parameter value.

Include file

WebAPI.bdh

Syntax

WebSetDomainSuppress( in sDomains: string,
                      in bExclude: boolean optional );
Parameter | Description
sDomains | List of domains from which no file must be requested (for example, "addthis.com"). Allowed separators are blank spaces, commas, or semicolons. Specify an empty string to lift the restrictions.
bExclude | Set to true to suppress all domains except those specified by the sDomains parameter. Default is false.

Example

dcltrans
  transaction TMain
  begin
    WebSetDomainSuppress("addthis.com");
    WebPageUrl("http://mycompany.com/");
  end TMain;
親トピック: General Settings


WebSetOption Function

Action

Allows you to set a variety of web options.

Include file

WebAPI.bdh

Syntax

WebSetOption( in nOption : number,
              in uValue  : union ): boolean;

Return value

  • true if the option was set successfully

  • false otherwise

Parameter | Description
nOption

Can be one of the following values:

  • WEB_OPT_EMULATE_DNS - Enables Silk Performer to emulate a DNS lookup mechanism for each virtual user, which is helpful for DNS-based load balancing. If this option is set in combination with a user behavior option, it allows each virtual user to send its individual DNS query to the DNS server.

  • WEB_OPT_ENABLE_CONTENT_ENCODING - Enables Silk Performer to decode compressed data received from the server. If this option is set, Silk Performer sends an Accept-Encoding header to inform the server that encoded data (via gzip and deflated compression methods) can be submitted.

  • WEB_OPT_AUTO_LOAD_IMAGES - Enables the automatic downloading of embedded images. Set nValue to 1 to load the images, or to 0 to not load the images. This option affects the page-level web functions. This function overrides the Automatically load images option in the Emulation category of the Web profile settings.

  • WEB_OPT_LINK_CHECK - Once a document is loaded, all hyperlinks are checked and validated. Set nValue to 1 to check the links, or to 0 to not check the links. This option affects the page-level web functions. (This function overrides the Link checking option in the Verification category of the Web profile settings.)

  • WEB_OPT_HISTORY_SIZE - Sets the history size (maximum number of pages in the history). nValue must be greater than 0. This option affects the page-level web functions.

  • WEB_OPT_MAX_CONN_ATTEMPTS - Determines how often a virtual user will attempt to connect to the server before an error is reported. nValue must be greater than 0.

  • WEB_OPT_HIGH_RES - Used to determine the resolution of the page statistic timers. This parameter is deprecated - it no longer influences precision of timings. The internal resolution of timers is 1 nanosecond.

  • WEB_OPT_TUNNEL_INFO - If the nValue parameter is set to 1, each tunnel request to a proxy server is logged to the TrueLog. Additional authentication requests will be displayed as well. If the nValue parameter is set to 0 (default), no tunnel request information is logged.

  • WEB_OPT_GRACEFUL_SHUTDOWN - By default Silk Performer closes connections using a reset (RST). Set nValue to 1 to use a graceful connection close (FIN) instead.

  • WEB_OPT_STAT_TO_TSD - If this option is enabled (specify a value of STATFLAG_HtmlDoc, STATFLAG_OtherDoc, STATFLAG_RootDoc, or STATFLAG_All), each page-level web function with a timer name adds detailed timers to the time series data. The provided value specifies which portion of the page is to be measured. See WebPageStatToTsd for a detailed description.

  • WEB_OPT_DISABLE_OUTDATA_TRUELOG - Use this option to suppress the logging of Out Header and Out Body information in the TrueLog. This feature can be used to hide sensitive data from the TrueLog.

  • WEB_OPT_DETAILED_PAGE_STAT - Use this option to enable the extended page statistics feature. This allows for browsing of the page tree (as with TrueLog Explorer) and retrieving similar data to that displayed on TrueLog Explorer s Statistics tab. If a value other than 0 is provided, the extended page statistics functionality is enabled. The provided value is also used as the default flag value of the nFlags parameter throughout the WebPageStat functions. Possible values are:

    • PAGE_STAT_FLAG_UseHtml Includes all nodes of the document section of the page (commonly html documents).
    • PAGE_STAT_FLAG_UseEmbedded Includes all nodes of the embedded section of the page (commonly images or scripts).
    • PAGE_STAT_FLAG_NodeTypeLoad Includes all nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
    • PAGE_STAT_FLAG_NodeTypeCacheHit Includes all nodes that have been found in the cache (full cache hit), so that no request to the server is sent.
    • PAGE_STAT_FLAG_NodeTypeSuppress Includes all nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
    • PAGE_STAT_FLAG_RedirChainOnlyLast Excludes all nodes but the last of a potential redirection chain (a redirection chain occurs when a request is retried or reissued because of a redirection or a server authentication request).
    • PAGE_STAT_FLAG_AllLoadedDocs is a combination of the flags PAGE_STAT_FLAG_UseHtml, PAGE_STAT_FLAG_UseEmbedded, PAGE_STAT_FLAG_NodeTypeLoad, and PAGE_STAT_FLAG_RedirChainOnlyLast.
    • PAGE_STAT_FLAG_AllLoadedNodes is a combination of the flags PAGE_STAT_FLAG_UseHtml, PAGE_STAT_FLAG_UseEmbedded, and PAGE_STAT_FLAG_NodeTypeLoad.

  • WEB_OPT_SET_FORMS_CASE_SENSITIVE - Comparison between BDL form and HTML form names is normally case-insensitive. Use this option if your server requires case-sensitive form names. To enable case-sensitivity, set the uValue parameter to 1.

  • WEB_OPT_USE_URLHOST_AS_SPN - Use the URL host name as Service Principal Name for Kerberos authentication instead of the fully qualified domain name. To use the URL host name, set the uValue parameter to 1. To use the fully qualified domain name, omit this parameter or set the uValue parameter to 0. This setting must be used if Kerberos authentication does not work when server and client are configured to use CNAME values.

  • WEB_OPT_NAGLE - Use this option to enable Nagle's algorithm. To turn it on, set the parameter to 2. To turn it off, set it to 1. If the parameter is not set or set to 0, the system's default value is used, which usually enables Nagle's algorithm. Note that low-level TCP/IP projects (for example Terminal Emulation) are the exception. They rely on real-time responses while transmitting small packets of data. For these projects, Silk Performer automatically disables Nagle's algorithm unless specified otherwise by WebSetOption.

  • WEB_OPT_HTTP_VERSION - Use this option to set the preferred HTTP version.
    注: This option overwrites the preferred HTTP version specified in the profile settings as well as the highest supported HTTP version of the simulated browser.
    Possible values are:
    • HTTP_VERSION_PREFER_10: use HTTP/1.0
    • HTTP_VERSION_PREFER_11: use HTTP/1.1
    • HTTP_VERSION_PREFER_2: use HTTP/2
  • WEB_OPT_HTTP2_ALLOW_HTTP11 - If a server does not support HTTP/2, the attempt to connect to that server through HTTP/2 will fail. For such a case, you can either allow a fallback on HTTP/1.1 or you can prevent such a fallback. Set this option to True to fall back on HTTP/1.1 and to display an informational message. Set this option to False to display an error and to not fall back on an earlier HTTP version.
  • WEB_OPT_HTTP2_ENABLE_SERVER_PUSH - Use this option to enable or disable HTTP/2 server push.
  • WEB_OPT_SUPPORT_NEGOTIATE_AUTHENTICATION - Set to false to disable the Negotiate authentication mechanism (for example for Kerberos).

uValue | The new value for the selected option.

Example

dcltrans
  transaction TMain
  var
    nSize: number;
  begin
    // enable link checking
    WebSetOption(WEB_OPT_LINK_CHECK, 1);
    WebPageUrl("http://purple/");
    //check history size
    WebGetOption(WEB_OPT_HISTORY_SIZE, nSize);
    Print(string(nSize));
  end TMain;
親トピック: General Settings
関連資料
WebGetOption Function


WebGetOption Function

Action

Allows you to retrieve the values of the options that have been set with the function WebSetOption().

注: The topic WebSetOption Function provides a list of all options that can be set.

Include file

WebAPI.bdh

Syntax

WebGetOption( in  nOption : number,
              out uValue  : union ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nOption | Refer to WebSetOption Function for a list of all available options.
uValue | Variable that receives the value of the selected option.

Example

dcltrans
  transaction TMain
  var
    nSize: number;
  begin
    // enable link checking
    WebSetOption(WEB_OPT_LINK_CHECK, 1);
    WebPageUrl("http://purple/");
    //check history size
    WebGetOption(WEB_OPT_HISTORY_SIZE, nSize);
    Print(string(nSize));
  end TMain;
親トピック: General Settings
関連資料
WebSetOption Function


WebGetPageInfo Function

Action

Retrieves information about the actual page, such as the number of hyperlinks or forms.

Include file

WebAPI.bdh

Syntax

WebGetPageInfo( in  nOption : number,
                out nValue  : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nOption

Can be one of the following values:

  • WEB_PAGE_INFO_HREF. Specify this option to retrieve the number of hyperlinks in the actual page.

  • WEB_PAGE_INFO_FORMS. Specify this option to retrieve the number of HTML forms in the actual page.

  • WEB_PAGE_INFO_FRAMES. Specify this option to retrieve the number frames in the actual page.

nValue | Variable, that receives the specified value.

Example

dcltrans
  transaction TWeb
  var
    nValue : number;
  begin
    WebPageUrl("http://standardhost/");
    WebGetPageInfo(WEB_PAGE_INFO_HREF, nValue);
    Print(string(nValue));
    WebGetPageInfo(WEB_PAGE_INFO_FORMS, nValue);
    Print(string(nValue));
  end TWeb;

親トピック: General Settings


WebSetStandardHost Function

Action

Sets the replacement name for the predefined host name standardhost. If not specified, the default setting is taken from the active profile settings (Settings > Active Profile > Internet > Hosts > Standardhost).

Include file

WebAPI.bdh

Syntax

WebSetStandardHost(in sHost : string,
                   in nPort : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sHost | Replacement name for the predefined host name standardhost.
nPort | Port number appended to the replacement name (optional).

Example

dcltrans
  transaction TMain
  var
    hWeb: number;
  begin
    // Use a standard host name and default port number
    WebSetStandardHost("www.myserver.com");
    // Connect to www.myserver.com on port 80
    WebUrl("http://standardhost", 0.0);
    // Use standard host name and override default/custom port numbers
    WebSetStandardHost("www.myserver.com", 8000);
    // Connect to www.myserver.com on port 8000
    WebUrl("http://standardhost", 0.0);
    // Connect to www.myserver.com on port 8000
    WebTcpipConnect(hWeb, "standardhost", 0);
    // Connect to www.myserver.com on port 8000
    // Since "standardhost" is passed to the function,
    // the third parameter is overridden
    WebTcpipConnect(hWeb, "standardhost", 4000);
  end TMain;

Sample scripts

WebMultiClientIpAddresses01.bdf

親トピック: General Settings
関連資料
WebGetStandardHost Function


WebGetStandardHost Function

Action

Gets the replacement name for the predefined host name standardhost.

Include file

WebAPI.bdh

Syntax

WebGetStandardHost( out sHost   : string,
                    in  nMaxLen : number optional,
                    out nPort   : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sHost | String buffer receiving the current name of the standardhost.
nMaxLen | The maximum length of the receive buffer sHost (optional).
nPort | Variable receiving the current port number of the standardhost (optional).

Example

dcltrans
  transaction TInit
  var
    sHost : string;
    nPort : number;
  begin
    WebGetStandardHost(sHost,
STRING_COMPLETE, nPort);
    write("Standardhost: "); write(sHost);
    write(":"); write(nPort); writeln;
  end TInit;
親トピック: General Settings
関連資料
WebSetStandardHost Function


WebSetVerification Function

Action

Specifies whether to check if the Internet traffic Silk Performer receives differs from the traffic the Recorder captured during a former recording session.

注: This function is obsolete. It can still be used, although it's recommended to use the WebSetVerificationEx function instead.

Include file

WebAPI.bdh

Syntax

WebSetVerification( in bVerify     : boolean,
                    in nDifference : number,
                    in bTitle      : boolean,
                    in bHtml       : boolean optional,
                    in bTable      : boolean optional,
                    in bData       : boolean optional,
                    in bXml        : boolean optional );
Parameter | Description
bVerify | Specifies whether to enable response data verification. If this parameter is set to true, Silk Performer generates a digest used for verification.
nDifference | Maximum number of digest entries that may differ from the digest generated by the Recorder.
bTitle | Specifies if the WebVerifyHtmlTitle functions in the script should be executed.
bHtml | Specifies if the WebVerifyHtmlXXX functions in the script should be executed (optional). They are not executed if this parameter is omitted.
bTable | Specifies if the WebVerifyTable functions in the script should be executed (optional). They are not executed if this parameter is omitted.
bData | Specifies if the WebVerifyDataXXX functions in the script should be executed (optional). They are not executed if this parameter is omitted.
bXml | Specifies if the WebXmlVerifyXXX functions in the script should be executed (optional). They are not executed if this parameter is omitted.

Example

const
  sDigest := "\h35e2fa05...";

dcltrans
  transaction TMain
  begin
    WebSetVerification(true, 10, false);
    WebVerifyHtml("Silk Performer");
    WebVerifyResponseData(sDigest, sizeof(sDigest));
    WebUrl("http://www.MyCompany.com");
  end TMain;
親トピック: General Settings
関連資料
WebSetVerificationEx Function
WebVerifyData Function
WebVerifyDataBound Function
WebVerifyHtml Function
WebVerifyHtmlBound Function
WebVerifyHtmlTitle Function
WebVerifyTable Function
WebVerifyDataDigest Function
WebVerifyHtmlDigest Function
WebXmlVerifyNodeValue Function
WebXmlVerifyNodeAttribute Function


WebSetVerificationEx Function

Action

Specifies which verification function should be executed during replay.

Include file

WebAPI.bdh

Syntax

WebSetVerificationEx( in nFlagVerify : number,
                      in bOn         :boolean,
                      in nDifference :number optional );
Parameter | Description
nFlagVerify

Specifies any combination of following flags:

  • WEB_VERIFY_FLAG_Data Specifies if the WebVerifyData function and/or WebVerifyDataBound function in the script should be executed.

  • WEB_VERIFY_FLAG_Html Specifies if the WebVerifyHtml function and/or WebVerifyHtmlBound function in the script should be executed.

  • WEB_VERIFY_FLAG_Xml Specifies if the WebXmlVerifyNodeAttribute function and/or WebXmlVerifyNodeValue function in the script should be executed.

  • WEB_VERIFY_FLAG_Title Specifies if the WebVerifyHtmlTitle function in the script should be executed.

  • WEB_VERIFY_FLAG_Table Specifies if the WebVerifyTable function in the script should be executed.

  • WEB_VERIFY_FLAG_DataDigest Specifies if the WebVerifyDataDigest function in the script should be executed.

  • WEB_VERIFY_FLAG_HtmlDigest Specifies if the WebVerifyHtmlDigest function in the script should be executed.
bOn | If this parameter is set to TRUE, all specified verifications (by the nFlagVerify parameter) are enabled. If this parameter is set to FALSE, all specified verifications are disabled.
nDifference | If the WEB_VERIFY_FLAG_DataDigest or WEB_VERIFY_FLAG_HtmlDigest flags are specified, this parameter defines the maximum number of digest entries that may differ to still match the verification (optional).

Example

const
  sDigest := "\h35e2fa05";
dcltrans
  transaction TMain
  begin
    WebSetVerificationEx (WEB_VERIFY_FLAG_Html | WEB_VERIFY_FLAG_Xml, true);
    WebSetVerificationEx(WEB_VERIFY_FLAG_Title, false);
    WebSetVerificationEx(WEB_VERIFY_FLAG_DataDigest, true, 10);
    WebVerifyHtml("Silk Performer");
    WebVerifyTitle("Silk Performer - Home"); //not executed
    WebVerifyResponseData(sDigest, sizeof(sDigest));
    WebUrl("http://www.MyCompany.com");
  end TMain;
親トピック: General Settings


WebSetModem Function

Action

Sets the simulation bandwidth.

Include file

ModemAPI.bdh

Syntax

WebSetModem( in nModem : number,
             in fComp  : float optional );

Return value

  • none

Parameter Description
nModem

Can be one of the following values:

  • MOD_WIRELESS_96

  • MOD_WIRELESS_144

  • MOD_GPRS_28

  • MOD_GPRS_56

  • MOD_GPRS_112

  • MOD_MODEM_96

  • MOD_MODEM_144

  • MOD_MODEM_288

  • MOD_MODEM_336

  • MOD_MODEM_56

  • MOD_ISDN_64

  • MOD_ISDN_128

  • MOD_T1_154

  • MOD_GLITE_15

  • MOD_ADSL_768

  • MOD_ADSL_15

  • MOD_ADSL_6

  • MOD_ADSL_8

  • MOD_ADSL_9

  • MOD_VDSL_13

  • MOD_VDSL_52

  • MOD_HDSL_1544

  • MOD_HDSL_2

  • MOD_SDSL_768

  • MOD_SDSL_1544

  • MOD_SDSL_2048

  • MOD_BLUETOOTH

fComp

For the modem types where the hardware compression rate can be set (see the profile settings), this is the hardware compression rate to use.

By default, the commpresion rate is set to 1.0.

Example

dcltrans
  transaction TWebInit
  begin
    WebSetModem(MOD_ISDN_128);
    WebDumpSettings();
  end TWebInit;
親トピック: General Settings


Simulation Settings

  • WebSetLocalAddress Function
    Assigns a specific IP address to the virtual user.
  • WebGetLocalAddress Function
    Returns the local IP address that is used by the calling virtual user.
  • WebSetSecurity Function
    Sets the security mode to use when exchanging data with a remote server.
  • WebGetSecurity Function
    Returns the currently active security mode for web traffic simulation.
  • WebSetSpeed Function
    Sets the simulation speed.
  • WebGetSpeed Function
    Gets the current value of the simulation speed as a number.
  • WebSetTimeout Function
    Specifies timeouts for Silk Performer's replay engine.
  • WebGetTimeout Function
    Gets the currently specified timeouts for Silk Performer's replay engine.
  • WebSetUserAuth Function
    Sets the password for user authentication.
  • WebSetUserAuthBasic Function
    Sets the password for basic user authentication.
  • WebSetUserAuthDigest Function
    Sets the password for digest user authentication.
  • WebSetUserAuthNtlm Function
  • WebSetUserBehavior Function
    Specifies whether the user resets his browser emulation after each transaction.
親トピック: Settings Functions Reference


WebSetLocalAddress Function

Action

Assigns a specific IP address to the virtual user.

To assign individual IP addresses to virtual users, you first have to set up multiple IP addresses for the network device. This is done with the Silk Performer System Configuration Manager. Afterwards, you can assign each of the IP addresses to a different virtual user.

Include file

WebAPI.bdh

Syntax

WebSetLocalAddress( in sAddress : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sAddress | IP address

Example

dcltrans
  transaction TMain
  begin
    WebSetLocalAddress("192.168.20.20");
    WebUrl("http://standardhost");
  end TMain;
親トピック: Simulation Settings
関連資料
WebGetLocalAddress Function


WebGetLocalAddress Function

Action

Returns the local IP address that is used by the calling virtual user. If the Client IP address multiplexing option in the Internet category of the profile settings is checked, this function can be used to retrieve the randomly assigned IP address.

Include file

WebAPI.bdh

Syntax

WebGetLocalAddress( out sIPAddress  : string,
                    in  nAddressLen : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
sIPAddress | String variable that receives the IP address.
nAddressLen | Maximum length of the IP address to return (optional).

Example

dcltrans
  transaction TMain
  var
    sAddress: string;
  begin
    WebGetLocalAddress(sAddress);
    write("IP address = "); writeln(sAddress);
  end TMain;
親トピック: Simulation Settings
関連資料
WebSetLocalAddress Function


WebSetSecurity Function

Action

Sets the security mode to use when exchanging data with a remote server. This function is very practical to switch programmatically between secure an insecure mode without the need to modify any other function calls.

注: This function overrides the corresponding setting in the Security tab of the Profile Settings - Internet dialog.

Include file

WebAPI.bdh

Syntax

WebSetSecurity(in nSecurity: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nSecurity

Value can assume one of the following:

  • WEB_SECURITY_NONE. Disables the use of security

  • WEB_SECURITY_SSL. Enables the use of SSL for all protocols except FTP

Example

dcltrans
  transaction TWebSecure
  begin
    WebUrl("http://standardhost/gmo/products.htm", 5.45);
    WebSetSecurity(WEB_SECURITY_SSL);
    WebUrl("http://standardhost/gmo/images/backpack.gif", 0.01);
    WebUrl("http://standardhost/gmo/images/boots.gif", 5.28);
    WebUrl("http://standardhost/gmo/products.htm", 9.06);
    WebSetSecurity(WEB_SECURITY_NONE);
    WebUrl("http://standardhost/gmo/images/socks.gif", 0.11);
    WebUrl("http://standardhost/gmo/images/shorts.gif", 0.19);
    // This URL always is requested through SSL due to HTTPS scheme
    WebUrl("https://standardhost/gmo/index.html", 0.45);
  end TWebSecure;

Sample scripts

WebSecure01.bdf, WebSecure02.bdf

親トピック: Simulation Settings
関連資料
WebGetSecurity Function
SSL (Secure Socket Layer) Extensions


WebGetSecurity Function

Action

Returns the currently active security mode for web traffic simulation on protocol level..

Include file

WebAPI.bdh

Syntax

WebGetSecurity(): number;

Return value

One of the following values defined in WebAPI.bdh:

  • WEB_SECURITY_NONE

  • WEB_SECURITY_SSL

Example

dcltrans
  transaction TWebInit
  begin
    write("Security: ");
    if WebGetSecurity() = WEB_SECURITY_SSL then write("SSL");
    writeln;
  else
    write("none");
    writeln;
    end;
  end TWebInit;
親トピック: Simulation Settings
関連資料
WebSetSecurity Function
SSL (Secure Socket Layer) Extensions


WebSetSpeed Function

Action

Sets the simulation speed. The simulation uses short wait periods between transfers of small data packets. Packeting emulates the behavior of a modem or ISDN terminal.

Include file

WebAPI.bdh

Syntax

WebSetSpeed(in nSpeed       : number,
            in nFlag        : number optional,
            in bDuplex      : boolean optional,
            in fCompression : float optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nSpeed

Can be a [bit/sec] number or one of the following values:

  • WEB_SPEED_14. 14.4 kBit/sec

  • WEB_SPEED_28. 28.8 kBit/sec

  • WEB_SPEED_33. 33.6 kBit/sec

  • WEB_SPEED_56. 56 kBit/sec

  • WEB_SPEED_64. 64 kBit/sec

  • WEB_SPEED_128. 128 kBit/sec

  • WEB_SPEED_DSL. 384 kBit/sec

  • WEB_SPEED_T1. 1540 kBit/sec

  • WEB_SPEED_MAX. maximum possible speed
nFlag

Specifies whether the given speed should be simulated for sending or for receiving data, or for both (optional). This parameter can be any combination of the following values:

  • WEB_SPEED_SEND. Sets the simulation speed for sending data.

  • WEB_SPEED_RECV. Sets the simulation speed for receiving data.

By default, the simulation speed is set for both sending and receiving data.
bDuplex | Specifies whether send and receive operations can perform simultaneously or not (optional). By default, this value is set to false.
fCompression | Specifies the hardware compression rate of the simulated network device (optional). By default, this value is set to 1.0.

Example

dcltrans
  transaction TWebInit
  begin
    WebSetSpeed(WEB_SPEED_28);
    WebDumpSettings();
  end TWebInit;

Sample scripts

WebMulti01.bdf, WebMultiClientIpAddresses01.bdf

親トピック: Simulation Settings
関連資料
WebGetSpeed Function


WebGetSpeed Function

Action

Gets the current value of the simulation speed as a number. A value of 0 represents maximum speed.

Include file

WebAPI.bdh

Syntax

WebGetSpeed(in nFlag : number optional,
out bDuplex : boolean optional
out fCompression : float optional): number;

Return value

current value of the simulation speed

Parameter | Description
nFlag

Specifies whether to retrieve the simulation speed for sending or for receiving data (optional). This parameter can be one of the following values:

  • WEB_SPEED_SEND. Gets the simulation speed for sending data.

  • WEB_SPEED_RECV. Gets the simulation speed for receiving data (default).
bDuplex | Variable that receives a boolean value which indicates whether the simulation speeds for sending and receiving data differ (optional).
fCompression | Variable that receives the hardware compression rate of the simulated network device (optional).

Example

dcltrans
  transaction TWebInit
  begin
    write("SimulationSpeed: ");
    write(WebGetSpeed());
    writeln;
  end TWebInit;
親トピック: Simulation Settings
関連資料
WebSetSpeed Function


WebSetTimeout Function

Action

Specifies timeouts for Silk Performer's replay engine. Timeouts can occur either if data cannot be sent to the server in a specified time interval, or if data cannot be received from the server. For both cases, the default setting is to report no timeout.

Include file

WebAPI.bdh

Syntax

WebSetTimeout( in nFlag : number,
               in nTime : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nFlag

Specifies which timeout value to set. Possible options are:

  • WEB_TIMEOUT_SEND. Specify a value for timeout reported when data cannot be sent to the server. Set nTime to 0 to wait forever (or until the connection is closed).

  • WEB_TIMEOUT_RECV. Specify a value for timeout reported when no data can be received from the server. Set nTime to 0 to wait forever (or until the connection is closed).

  • WEB_TIMEOUT_CONNECT. Specify a value for timeout reported when a connection to a server cannot be established. Set nTime to 0 to use the system's default time out.
nTime | Timeout value in milliseconds

Example

dcltrans
  transaction TWebSetTimeout
  var
    hWeb: number;
  begin
    // report timeout when data cannot be received within 30 seconds
    WebSetTimeout(WEB_TIMEOUT_RECV, 30000);
    WebTcpipConnect(hWeb, "192.231.34.1", WEB_PORT_HTTP);
    WebTcpipSend(hWeb, "GET / HTTP/1.0\r\n"
                "User-Agent: CustomClient/1.0\r\n"
                "Accept: */*\r\n\r\n");

    // timeout if less than 100 bytes are received
    WebTcpipRecvExact(hWeb, NULL, 100);
    WebTcpipShutdown(hWeb);
  end TWebSetTimeout;

Sample scripts

AsyncOdb.bdf, Factory.bdf, AsyncFact.bdf

親トピック: Simulation Settings


WebGetTimeout Function

Action

Gets the currently specified timeouts for Silk Performer's replay engine.

Include file

WebAPI.bdh

Syntax

WebGetTimeout( in nFlag : number ) : number;

Return value

Current timeout value in milliseconds.

Parameter Description
nFlag

Specifies whether to retrieve the timeout value for sending, receiving or connecting. Possible options are:

  • WEB_TIMEOUT_SEND. Gets the value for timeout reported when data cannot be sent to the server.

  • WEB_TIMEOUT_RECV. Gets the value for timeout reported when no data can be received from the server.

  • WEB_TIMEOUT_CONNECT. Gets the value for timeout reported when a connection to a server cannot be established.

Example

transaction TTimeout
  begin
    WebSetTimeout(WEB_TIMEOUT_SEND, 1000);
    WebSetTimeout(WEB_TIMEOUT_RECV, 2000);
    WebSetTimeout(WEB_TIMEOUT_CONNECT, 3000);

    print(string(WebGetTimeout(WEB_TIMEOUT_SEND)));
    print(string(WebGetTimeout(WEB_TIMEOUT_RECV)));
    print(string(WebGetTimeout(WEB_TIMEOUT_CONNECT)));

  end TTimeout;
親トピック: Simulation Settings


WebSetUserAuth Function

Action

Sets the password for user authentication. This setting is ignored if a user name and/or password is specified in the URL of a low-level call.

注: This function overrides the corresponding setting on the Authentication tab of the Profile Settings – Web dialog. It also sets the credentials for Basic, Digest and NTLM/Kerberos authentication, if they are not set explicitly.

Include file

WebAPI.bdh

Syntax

WebSetUserAuth( in sUsername     : string allownull,
                in sPassword     : string optional,
                in sUrl          : string optional,
                in sRealm        : string optional,
                in bReactiveOnly : boolean optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUsername | User name. This parameter may be NULL.
sPassword | Password. This parameter may be NULL (optional).
sUrl | URL representing protection space for basic authentication (optional)
sRealm | Realm for which to set authentication (optional). This realm then provides a special context for the username/password to a Web site. For example, www.MyCompany.com uses realm "www.MyCompany.com", whereas www.MyCompany.com/support uses realm "MyCompany support".
bReactiveOnly | If this parameter is set to true (default is false), the user and password pair can only be used in a reaction to a 401 response from the server.

Calling this function inserts the username/password pair into the authentication database used when a server requests basic authentication (code 401). On subsequent requests, the authentication header line will be added to the request headers automatically.

  • To set the default username password, call WebSetUserAuth("user1", "pass1");

  • To delete the default username/password, call WebSetUserAuth("", ""); This does not remove the entry from the authentication database.

  • To remove all cached authentication entries from the cookie database, call WebSetUserAuth(NULL, NULL);

  • In addition, you can add authentication entries directly to the authentication database by providing a protection space and the realm. For example, WebSetUserAuth("BasicAuthUser", "BasicAuthPass", "http://lab1/testsite/", "lab1");

Example

dcltrans
  transaction TMyTransaction
  begin
    // Enable user authentication
    // User sends e-mail address as password
    WebSetUserAuth("steve", "steve@mydomain.com");

     // Now send the request including username and password
    WebUrl("http://www.mydomain.com/", 0.0);

     // Disable user authentication
    WebSetUserAuth(NULL, NULL);
  end TMyTransaction;

Sample scripts

WebAuth01.bdf

SilkEssential sample

Ftp.sep

親トピック: Simulation Settings
関連資料
WebSetUserAuthNtlm Function
WebSetUserAuthBasic Function
WebSetUserAuthDigest Function
WebSetProxyAuth Function
WebSetProxyAuthBasic Function
WebSetProxyAuthNtlm Function


WebSetUserAuthBasic Function

Action

Sets the password for basic user authentication. This setting is ignored if a user name and/or password is specified in the URL of a low-level call.

注: This function overrides the corresponding setting on the Authentication tab of the Profile Settings – Web dialog. In contrast to the WebSetUserAuth function, this function does not change the credentials for Digest or NTLM/Kerberos authentication.

Include file

WebAPI.bdh

Syntax

WebSetUserAuthBasic( in sUsername     : string allownull,
                     in sPassword     : string optional,
                     in sUrl          : string optional,
                     in sRealm        : string optional,
                     in bReactiveOnly : boolean optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUsername | User name. This parameter may be NULL.
sPassword | Password (optional).
sUrl | URL representing protection space for basic authentication (optional).
sRealm | Realm for which to set authentication (optional). This realm then provides a special context for the username/password to a Web site. For example, www.MyCompany.com uses realm "www.MyCompany.com", whereas www.MyCompany.com/support uses realm "MyCompany support".
bReactiveOnly | If this parameter is set to true (optional; default is false), the user and password pair can only be used in a reaction to a 401 response from the server.

Calling this function inserts the username/password pair into the authentication database used when a server requests basic authentication (code 401). On subsequent requests, the authentication header line will be added to the request headers automatically.

  • To set the default username password, call WebSetUserAuthBasic("user1", "pass1");

  • To delete the default username/password, call WebSetUserAuthBasic("", ""); This does not remove the entry from the authentication database.

  • To remove all cached authentication entries from the cookie database, call WebSetUserAuthBasic(NULL);

  • In addition, you can add authentication entries directly to the authentication database by providing a protection space and the realm. For example, WebSetUserAuthBasic("BasicAuthUser", "BasicAuthPass", "http://lab1/testsite/", "lab1");

Example

dcltrans
  transaction TMyTransaction
  begin
    // Enable user authentication
    // User sends e-mail address as password
    WebSetUserAuthBasic("steve", "steve@mydomain.com");

    // Now send the request including username and password
    WebUrl("http://www.mydomain.com/", 0.0);

    // Disable user authentication
    WebSetUserAuthBasic(NULL);
  end TMyTransaction;
親トピック: Simulation Settings
関連資料
WebSetUserAuthNtlm Function
WebSetUserAuth Function
WebSetUserAuthDigest Function
WebSetProxyAuth Function
WebSetProxyAuthBasic Function
WebSetProxyAuthNtlm Function


WebSetUserAuthDigest Function

Action

Sets the password for digest user authentication.

注: This function overrides the corresponding setting on the Authentication tab of the Profile Settings – Web dialog. In contrast to the WebSetUserAuth function, this function does not change the credentials for Basic or NTLM/Kerberos authentication.

Include file

WebAPI.bdh

Syntax

WebSetUserAuthDigest( in sUsername : string allownull,
                      in sPassword : string allownull,
                      in sUrl      : string allownull,
                      in sRealm    : string allownull ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUsername | User name; this parameter may be NULL.
sPassword | Password (optional)
sUrl | URL representing protection space for digest authentication (optional)
sRealm | Realm for which to set authentication (optional). This realm provides a special context for the username/password to a Web site. For example, www.MyCompany.com uses realm "www.MyCompany.com", whereas www.MyCompany.com/support uses realm "MyCompany support".

Calling this function inserts the username/password pair into the authentication database used when a server requests digest authentication (code 401). On subsequent requests, the authentication header line is added to the request headers automatically.

  • To set the default username/password, call WebSetUserAuthDigest("user1", "pass1");

  • To delete the default username/password, call WebSetUserAuthDigest("", ""); This does not remove the entry from the authentication database.

  • To remove all cached authentication entries from the cookie database, call WebSetUserAuthDigest(NULL);

  • In addition, you can add authentication entries directly to the authentication database by providing a protection space and the realm. For example, WebSetUserAuthDigest("DigestcAuthUser", "DigestAuthPass", "http://lab1/testsite/", "lab1");

Example

dcltrans
  transaction TWeb
  begin
    WebSetUserAuthDigest("domain\\user", "password");
    WebPageUrl("http://www.mydomain.com/");
  end TWeb;
親トピック: Simulation Settings
関連資料
WebSetUserAuthNtlm Function
WebSetUserAuth Function
WebSetUserAuthBasic Function
WebSetProxyAuth Function
WebSetProxyAuthBasic Function
WebSetProxyAuthNtlm Function


WebSetUserAuthNtlm Function

Action

Sets the password for NTLM/Kerberos authentication. In contrary to the WebSetUserAuth function it does not change the credentials for a basic user authentication.

注: This function overrides the corresponding setting on the Authentication tab of the Profile Settings – Web dialog. In contrast to the WebSetUserAuth function, this function does not change the credentials for Basic or Digest authentication.

Include file

WebAPI.bdh

Syntax

WebSetUserAuthNtlm( in sUsername : string,
                    in sPassword : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUsername | User name. If you have to specify a domain use the notation: "domain\\user".
sPassword | Password.

Example

dcltrans
  transaction TMyTransaction
  begin
    WebSetUserAuthNtlm("testlab\\steve", "secret");
    WebUrl("http://lab1/");

    WebSetUserAuthNtlm("", "");
  end TMyTransaction;
親トピック: Simulation Settings
関連資料
WebSetUserAuth Function
WebSetUserAuthBasic Function
WebSetUserAuthDigest Function
WebSetProxyAuth Function
WebSetProxyAuthBasic Function
WebSetProxyAuthNtlm Function


WebSetUserBehavior Function

Action

Specifies whether the user resets his browser emulation after each transaction. This function enables you to generate a simulation of a user who visits a Web site for the first time — if you specify to clear the document cache, the document history, the cookie database, the authentication databases, and the SSL context cache — or a user who revisits a Web site.

注: This function overrides the corresponding setting in the Simulation tab of the Profile Settings - Web dialog.

Include file

WebAPI.bdh

Syntax

WebSetUserBehavior(in nUserBehavior: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nUserBehavior

Specifies the user behavior. This parameter must be one of following values:

  • WEB_USERBEHAVIOR_DISABLE. The user does not reset his browser emulation during a test.

  • WEB_USERBEHAVIOR_FIRST_TIME. After each transaction, the user closes the persistent connections, resets his browser emulation, and clears the document cache, the document history, the cookie database, and the SSL context cache.

  • WEB_USERBEHAVIOR_REVISITING. After each transaction, the user closes the persistent connections and clears the document history, the non-persistent cookie database, and the SSL context cache.

Example

dcltrans
  transaction TInit
  begin
    WebSetDocumentCache(true, WEB_CACHE_CHECK_ALWAYS);
    // simulate a returning user, with all the documents
    // in the cache and cookies in the cookie database.
    WebSetUserBehavior(WEB_USERBEHAVIOR_REVISITING);
  end TInit;
親トピック: Simulation Settings


Logging Settings

  • WebSetLogDetail Function
    Specifies the detail of logging information.
  • WebSetLogMaxLines Function
    Specifies the maximum number of header or data lines to write to the log per session.
親トピック: Settings Functions Reference


WebSetLogDetail Function

Action

Specifies the detail of logging information.

Include file

WebAPI.bdh

Syntax

WebSetLogDetail(in nLogFlags: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nLogFlags

Can be a combination of the following constants:

  • WEB_LOG_API

  • WEB_LOG_API_DETAIL

  • WEB_LOG_REQUEST_HEADER

  • WEB_LOG_RESPONSE_HEADER

  • WEB_LOG_REQUEST_DATA

  • WEB_LOG_RESPONSE_DATA

  • WEB_LOG_REQUEST_BINARY

  • WEB_LOG_RESPONSE_BINARY

  • WEB_LOG_INFO

  • WEB_LOG_NONPRINTING_CHR

  • WEB_LOG_IMAGES_APPLETS

  • WEB_LOG_ALL

Example

dcltrans
  transaction TInit
  begin
    WebSetLogDetail(WEB_LOG_REQUEST_HEADER | WEB_LOG_RESPONSE_HEADER);
  end TInit;
親トピック: Logging Settings


WebSetLogMaxLines Function

Action

Specifies the maximum number of header or data lines to write to the log per session.

Include file

WebAPI.bdh

Syntax

WebSetLogMaxLines(in nLogFlags : number,
                  in nMaxLines : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nLogFlags

Can be a combination of the following constants:

  • WEB_LOG_REQUEST_DATA

  • WEB_LOG_RESPONSE_DATA
nMaxLines | Maximum number of lines per session to write to the log

Example

dcltrans
  transaction TInit
  begin
    WebSetLogMaxLines(WEB_LOG_REQUEST_DATA | WEB_LOG_RESPONSE_DATA, 10);
  end TInit;
親トピック: Logging Settings


FTP Functions Reference

The FTP (File Transfer Protocol) functions deal with FTP file and directory manipulation and navigation. Using a CERN proxy exclusively requires using the WebUrl function because CERN proxies require an HTML request containing an FTP URL.

  • WebSetPassiveFTP Function
    Sets the passive transfer semantics mode for FTP.
  • WebGetPassiveFTP Function
    Checks whether the Passive FTP flag is set.
  • WebFtpCloseFile Function
    Closes a file handle previously opened with WebFtpOpenFile.
  • WebFtpConnect Function
    Connects to the FTP server specified by sUrl.
  • WebFtpCreateDirectory Function
    Creates a new directory on the FTP server.
  • WebFtpDeleteFile Function
    Deletes a file stored on the FTP server.
  • WebFtpFindFirstFile Function
    Searches the specified directory of the given FTP session.
  • WebFtpFindNextFile Function
    Continues a file search started as a result of a preceding call to WebFtpFindFirstFile
  • WebFtpGetCurrentDirectory Function
    Retrieves the current directory for the specified FTP session.
  • WebFtpGetFile Function
    Retrieves a file from the FTP server.
  • WebFtpGetFileSize Function
    Retrieves the file size of a remote file, enumerated using WebFtpFindFirstFile/WebFtpFindNextFile functions.
  • WebFtpGetFileTime Function
    Retrieves the file date and time properties of a remote file, enumerated using WebFtpFindFirstFile/WebFtpFindNextFile functions.
  • WebFtpListDirectory Function
    Searches the specified directory of the given FTP session and retrieves a directory listing of the path specified in sSearchPath.
  • WebFtpOpenFile Function
    Opens a file on a remote server.
  • WebFtpPut Function
    Puts random data bytes in a file on the FTP server.
  • WebFtpPutFile Function
    Stores a file on the FTP server.
  • WebFtpReadFile Function
    Reads data from a previously opened file on a remote server.
  • WebFtpRemoveDirectory Function
    Removes the specified directory on the FTP server.
  • WebFtpRenameFile Function
    Renames a file or directory stored on the FTP server.
  • WebFtpSetCurrentDirectory Function
    Changes to a different working directory on the FTP server.
  • WebFtpShutdown Function
    Closes an open connection from a previous call to WebFtpConnect to a FTP server.
  • WebFtpWriteFile Function
    Writes data to a previously opened file on a remote server.
親トピック: Internet Functions


WebSetPassiveFTP Function

Action

Sets the passive transfer semantics mode for FTP.

Include file

WebAPI.bdh

Syntax

WebSetPassiveFTP(in bPassive: boolean): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
bPassive | Passive transfer semantics mode

Example

dcltrans
  transaction TWebInit
  begin
    WebSetPassiveFTP(true);
end TWebInit;
親トピック: FTP Functions Reference
関連資料
WebGetPassiveFTP Function


WebGetPassiveFTP Function

Action

Checks whether the Passive FTP flag is set.

Include file

WebAPI.bdh

Syntax

WebGetPassiveFTP(): boolean;

Return value

  • true if flag is set

  • false otherwise

Example

dcltrans
  transaction TWebInit
  begin
    write("FtpPassiveMode: ");
    if WebGetPassiveFtp() then
    write("true"); writeln;
    else
    write("false"); writeln;
end;
end TWebInit;
親トピック: FTP Functions Reference
関連資料
WebSetPassiveFTP Function


WebFtpCloseFile Function

Action

Closes a file handle previously opened with WebFtpOpenFile.

Include file

WebAPI.bdh

Syntax

WebFtpCloseFile(in hFtp: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect. Beside that, the file must have been opened using WebFtpOpenFile.

Example

dcltrans
  transaction TWriteFile
  var
    hFtp : number;
    sData : string(50);
    nData : number; // number of bytes written

  begin
    sData := "Hello world!";
    WebFtpConnect(hFtp, "localhost", WEB_PORT_FTP, "user", "pass");
    WebFtpOpenFile(hFtp, "testfile.txt", false, true);
    WebFtpWriteFile(hFtp, sData, Strlen(sData), nData);
    write(nData);
    writeln(" bytes written");
    WebFtpCloseFile(hFtp);
    WebFtpShutdown(hFtp);
  end TWriteFile;
親トピック: FTP Functions Reference
関連資料
WebFtpOpenFile Function
WebFtpReadFile Function
WebFtpWriteFile Function


WebFtpConnect Function

Action

Connects to the FTP server specified by sUrl. You cannot connect to an FTP server via CERN proxies. Use WebUrl in that case. The handle returned in hFtp has to be used with all subsequent WebFtp function calls.

Include file

WebAPI.bdh

Syntax

WebFtpConnect( out hFtp  : number,
               in  sHost : string,
               in  nPort : number,
               in  sUser : string,
               in  sPass : string ): boolean;

Return value

  • true if the connection could be established

  • false otherwise

Parameter | Description
hFtp | Variable receiving the handle to the FTP session. If this parameter contains a handle to an FTP session prior to the WebFtpConnect function call, the memory allocated with the handle is released. Whenever you want to create a new FTP session, make sure this variable is initialized with 0 (this is automatically done within transactions when they are executed for the first time, but not within functions).
sHost | Host name of the remote FTP server to connect to.
nPort | Remote port to connect to. Use WEB_PORT_FTP to connect to the standard port.
sUser | User name
sPass | Password

Example

dcltrans
  transaction TMyTransaction
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP, "", "");
    WebFtpShutdown(hFtp);
  end TMyTransaction;

Sample scripts

WebMulti01.bdf

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpShutdown Function


WebFtpCreateDirectory Function

Action

Creates a new directory on the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpCreateDirectory( in hFtp       : number,
                       in sDirectory : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sDirectory | String that contains the name of the directory to create on the remote system. This can be either a fully qualified path or a name relative to the current directory.
注: Use WebFtpGetCurrentDirectory to determine the remote site's current working directory, instead of assuming that the remote system uses a hierarchical naming scheme for directories. The sDirectory parameter can be either partially or fully qualified file names relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpCreateDirectory translates the directory name separators to the appropriate character before they are used.

Example

// Create a directory on the FTP server.
dcltrans
  transaction TWebFtpDir
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                 "anonymous", "mymail@address.com");
    WebFtpCreateDirectory(hFtp, "/test_directory");
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

Sample scripts

WebMulti01.bdf

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpSetCurrentDirectory Function
WebFtpGetCurrentDirectory Function
WebFtpRemoveDirectory Function


WebFtpDeleteFile Function

Action

Deletes a file stored on the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpDeleteFile( in hFtp      : number,
                  in sFileName : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sFileName | Null-terminated string that contains the name of the file to delete on the remote system
注: The sFile parameter can be either partially or fully qualified file names relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpDeleteFile translates the directory name separators to the appropriate character before they are used.

Example

// Deletes a file on the FTP server.
dcltrans
  transaction TWebFtpDeleteFile
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                  "anonymous", "mymail@address.com");
    WebFtpDeleteFile(hFtp, "renamed_test_file.txt");
    WebFtpShutdown(hFtp);
  end TWebFtpDeleteFile;

Sample scripts

WebMulti01.bdf

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpGetFile Function
WebFtpPutFile Function
WebFtpPut Function
WebFtpRenameFile Function


WebFtpFindFirstFile Function

Action

Searches the specified directory of the given FTP session. File and directory entries are returned in the sFile string. This function lists both files and directories.

Include file

WebAPI.bdh

Syntax

WebFtpFindFirstFile( in  hFtp        : number,
                     in  sSearchFile : string allownull,
                     out sFile       : string,
                     in  nMaxFile    : number optional,
                     out nAttribute  : number optional): boolean;

Return value

  • true for the request if the directory enumeration was started successfully

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sSearchFile | String that specifies a valid directory path or file name for the FTP server's file system. If the value of sSearchFile is NULL or if it is an empty string, it will find the first file in the current directory on the server.
sFile | Parameter that receives the name of the file or directory
nMaxFile | Optional: Specifies the maximum length of the string to put into sFile
nAttribute

Optional: Parameter that receives one or more of the following attribute flags:

  • WEB_FTP_FA_READONLY

  • WEB_FTP_FA_HIDDEN

  • WEB_FTP_FA_SYSTEM

  • WEB_FTP_FA_DIRECTORY

  • WEB_FTP_FA_ARCHIVE

  • WEB_FTP_FA_NORMAL

  • WEB_FTP_FA_TEMPORARY

  • WEB_FTP_FA_COMPRESSED

  • WEB_FTP_FA_NO_MORE_FILES. Signals end of directory listing

注: If the function finds no matching files, it returns false and sets the variable nAttribute to WEB_FTP_FA_NO_MORE_FILES.
注: Only one WebFtpFindFirstFile can occur at a time within a given FTP session. The enumerations, therefore, are correlated with the FTP session handle. This is because FTP protocol allows only a single directory enumeration per session. After beginning a directory enumeration with WebFtpFindFirstFile, the WebFtpFindNextFile function can be used to continue the enumeration.

Example

// Connect to the ftp server and list the root directory
// 1) using WebFtpFindFirstFile, WebFtpFindNextFile in loops
// 2) using only the command WebFtpListDirectory
dcltrans
  transaction TWebFtpListDir
  var
    hFtp       : number;
    sFileName  : string(MAX_PATH);
    nAttribute : number;
    nFiles     : number;
    bOk        : boolean;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP, "", "");
    nFiles := 0;

    // Custom directory list
    bOk := WebFtpFindFirstFile(hFtp, "", sFileName,
                               MAX_PATH, nAttribute);
    while bOk do
      Printwrite(sFileName + ); write(" " + ); write(nAttribute);
      writeln;
      nFiles++; := nFiles + 1;
      bOk := WebFtpFindNextFile(hFtp, sFileName,
                                MAX_PATH, nAttribute);
    end;

    if nAttribute = WEB_FTP_FA_NO_MORE_FILES then
      Printwrite((string(nFiles) + ); write(" files found"); writeLn;
    else
      writePrint("Error retrieving directory information!"); writeln;
    end;

    // The following command does the same
    WebFtpListDirectory(hFtp, "");
    WebFtpShutdown(hFtp);
  end TWebFtpListDir;

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpListDirectory Function
WebFtpFindNextFile Function
WebFtpConnect Function


WebFtpFindNextFile Function

Action

Continues a file search started as a result of a preceding call to WebFtpFindFirstFile.

Include file

WebAPI.bdh

Syntax

WebFtpFindNextFile( in  hFtp       : number,
                    out sFile      : string,
                    in  nMaxFile   : number optional,
                    out nAttribute : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect. A successful call to WebFtpFindFirstFile has to be completed before WebFtpFindNextFile can be used.
sFile | Parameter that receives the name of the file or directory
nMaxFile | Optional: Parameter that specifies the maximum length of the string to put into sFile
nAttribute

Optional: Parameter that receives one or more of the following attribute flags:

  • WEB_FTP_FA_READONLY

  • WEB_FTP_FA_HIDDEN

  • WEB_FTP_FA_SYSTEM

  • WEB_FTP_FA_DIRECTORY

  • WEB_FTP_FA_ARCHIVE

  • WEB_FTP_FA_NORMAL

  • WEB_FTP_FA_TEMPORARY

  • WEB_FTP_FA_COMPRESSED

  • WEB_FTP_FA_NO_MORE_FILES. Signals end of directory listing

注: If there are no more files to enumerate, WebFtpFindNextFile returns false and sets the variable to WEB_FTP_FA_NO_MORE_FILES.

Example

dcltrans
  transaction TWebFtpListDir
  var
    hFtp       : number;
    sFileName  : string(MAX_PATH);
    nAttribute : number;
    nFiles     : number;
    bOk        : boolean;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP, "", "");
    nFiles := 0;

    // Custom directory list
    bOk := WebFtpFindFirstFile(hFtp, "", sFileName,
                               MAX_PATH, nAttribute);
    while bOk do
      Print(sFileName + " " + nAttribute);
      nFiles++;
      bOk := WebFtpFindNextFile(hFtp, sFileName,
                                MAX_PATH, nAttribute);
    end;

    if nAttribute = WEB_FTP_FA_NO_MORE_FILES then
      Print(string(nFiles) + " files found");
    else
      Print("Error retrieving directory information!");
    end;

    // The following command does the same
    WebFtpListDirectory(hFtp, "");
    WebFtpShutdown(hFtp);
  end TWebFtpListDir;

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpListDirectory Function
WebFtpFindFirstFile Function
WebFtpConnect Function


WebFtpGetCurrentDirectory Function

Action

Retrieves the current directory for the specified FTP session.

Include file

WebAPI.bdh

Syntax

WebFtpGetCurrentDirectory( in  hFtp              : number,
                           out sCurrentDirectory : string,
                           in  nMaxDir           : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sCurrentDirectory | A string that receives the current directory name, which specifies the absolute path to the current directory.
nMaxDir | Maximum length of the string to put into sCurrentDirectory (optional).

Make sure the length of the string is greater than or equal to nMaxDir. If the sCurrentDirectory buffer is not large enough, nMaxDir receives the number of bytes required to retrieve the full, current directory name.

Example

// Connects to the FTP server and retrieves the current directory.
dcltrans
  transaction TWebFtpDir
  var
    hFtp : number;
    sDirName : string(MAX_PATH);
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                    "anonymous", "mymail@address.com");
    WebFtpGetCurrentDirectory(hFtp, sDirName);
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpCreateDirectory Function
WebFtpSetCurrentDirectory Function
WebFtpRemoveDirectory Function


WebFtpGetFile Function

Action

Retrieves a file from the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpGetFile( in hFtp            : number,
               in sRemoteFile     : string,
               in bBinaryTransfer : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sRemoteFile | String that contains the name of the file to retrieve from the remote system. Can be either partially or fully qualified file name relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpGetFile translates the directory name separators to the appropriate characters before they are used.
bBinaryTransfer

If this parameter is set to true, WebGetFile transfers the file using FTP's Image (Type I) transfer method. The file is transferred exactly as it exists with no changes. This is the default transfer method.

If this parameter is set to false, FTP's ASCII (Type A) transfer method is used. Control and formatting information is converted to local equivalents.
注: The file is only read from the remote host, but not stored on the local computer. Use the functions WebFtpOpenFile, WebFtpReadFile, WebFtpWriteFile and WebFtpCloseFile to exchange files between the local and the remote host.

Example

// Gets a file from the FTP server.
dcltrans
  transaction TWebFtpDir
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                 "anonymous", "mymail@address.com");
    WebFtpGetFile(hFtp, "test_file.txt", FALSE);
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpDeleteFile Function
WebFtpPutFile Function
WebFtpPut Function
WebFtpRenameFile Function


WebFtpGetFileSize Function

Action

Retrieves the file size of a remote file, enumerated using WebFtpFindFirstFile/WebFtpFindNextFile functions.

Include file

WebAPI.bdh

Syntax

WebFtpGetFileSize( in  hFtp      : number,
                   out fFileSize : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
fFileSize | Variable that receives the file size in bytes. This parameter is an 8 byte float which allows to cope with files greater than 4 GB.

Example

dcltrans
  transaction TGetFileSize
  var
    hFtp  : number;
    fFileSize : float;
    nDate     : number;
    nTime     : number;
    sFileName : string;
    sDateTime : string;

  begin
    WebFtpConnect(hFtp, "localhost", WEB_PORT_FTP, "user", "pass");
    WebFtpFindFirstFile(hFtp, "testfile.txt", sFileName);
    WebFtpGetFileSize(hFtp, fFileSize);
    Print("The file " + sFileName + " has " + fFileSize + " bytes.");
    WebFtpGetFileTime(hFtp, nDate, nTime, WEB_FTP_FILETIME_MODIFIED);
    FormatDateTime(nDate, nTime, "%Y-%m-%d %H:%M:%S", sDateTime);
    Print(sFilename + " modified time is " + sDateTime);
    WebFtpShutdown(hFtp);
  end TGetFileSize;
親トピック: FTP Functions Reference


WebFtpGetFileTime Function

Action

Retrieves the file date and time properties of a remote file, enumerated using WebFtpFindFirstFile/WebFtpFindNextFile functions.

Include file

WebAPI.bdh

Syntax

WebFtpGetFileTime( in  hFtp  : number,
                   out uDate : number,
                   out uTime : number,
                   in  eTime : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
uDate | Variable that receives the file date property with format YYYYMMDD.
uTime | Variable that receives the file time property of the current day in seconds.
eTime Specifies which file time property should be retrieved. The following options are supported:
  • WEB_FTP_FILETIME_CREATED
  • WEB_FTP_FILETIME_MODIFIED
  • WEB_FTP_FILETIME_ACCESSED

Example

注: The uDate and uTime variables are ready to be passed to the FormatDateTime function to convert the timestamp into a readable format.
dcltrans
  transaction TGetFileSize
  var
    hFtp      : number;
    fFileSize : float;
    nDate     : number;
    nTime     : number;
    sFileName : string;
    sDateTime : string;
  begin
    WebFtpConnect(hFtp, "localhost", WEB_PORT_FTP, "user", "pass");
    WebFtpFindFirstFile(hFtp, "testfile.txt", sFileName);
    WebFtpGetFileSize(hFtp, fFileSize);
    Print("The file " + sFileName + " has " + fFileSize + " bytes.");

    WebFtpGetFileTime(hFtp, nDate, nTime, WEB_FTP_FILETIME_MODIFIED);
    FormatDateTime(nDate, nTime, "%Y-%m-%d %H:%M:%S", sDateTime);
    Print(sFilename + " modified time is " + sDateTime);

    WebFtpShutdown(hFtp);
  end TGetFileSize;
親トピック: FTP Functions Reference


WebFtpListDirectory Function

Action

Searches the specified directory of the given FTP session and retrieves a directory listing of the path specified in sSearchPath. If you want to access the data of the directory listing, use WebFtpFindFirstFile and WebFtpFindNextFile instead, as illustrated in the example below.

Include file

WebAPI.bdh

Syntax

WebFtpListDirectory( in hFtp        : number,
                     in sSearchPath : string optional ): boolean;

Return value

  • true if the directory list was started successfully

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sSearchPath | String that specifies a valid directory path or file name for the FTP server's file system. If the value of sSearchPath is NULL or if it is an empty string, this function will find the first file in the current directory on the server (optional).
注: If the function finds no matching files, it returns false.

Example

// Connect to the ftp server and list the root directory
// 1) using WebFtpFindFirstFile, WebFtpFindNextFile in loops
// 2) using only the command WebFtpListDirectory
dcltrans
  transaction TWebFtpListDir
  var
    hFtp       : number;
    sFileName  : string(MAX_PATH);
    nAttribute : number;
    nFiles     : number;
    bOk        : boolean;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP, "", "");
    nFiles := 0;

    // Custom directory list enumeration
    bOk := WebFtpFindFirstFile(hFtp, "", sFileName,
                               MAX_PATH, nAttribute);

    while bOk do
      write(sFileName); write(" "); write(nAttribute); writeln;
      nFiles := nFiles + 1;
      bOk := WebFtpFindNextFile(hFtp, sFileName,
                                MAX_PATH, nAttribute);
    end;

    if nAttribute = WEB_FTP_FA_NO_MORE_FILES then
      write(nFiles); write(" files found"); writeLn;
    else
      write("Error retrieving directory information!");
      writeln;
    end;

    // This command sends the FTP commands to get a directory list
    WebFtpListDirectory(hFtp, "");
    WebFtpShutdown(hFtp);
  end TWebFtpListDir;

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpFindFirstFile Function
WebFtpFindNextFile Function
WebFtpConnect Function


WebFtpOpenFile Function

Action

Opens a file on a remote server.

Include file

WebAPI.bdh

Syntax

WebFtpOpenFile(in hFtp : number,
                           in sFile : string,
                           in bBinaryTransfer : boolean,
                           in bWriteMode : boolean): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sFile | Target filename
bBinaryTransfer

If set to true, the file is opened for using FTP's Image (Type I) transfer method. The file is written and read exactly as it exists with no changes. This is the default transfer method.

If set to false, FTP's ASCII (Type A) transfer method is used for reading and writing. Control and formatting information is converted to local equivalents.
bWriteMode

Specifies whether a file is opened for writing or reading purpose.

If this parameter is set to true, the file is opened in write mode. In this case, the previous file content is overwritten. Otherwise, the file is opened for reading purpose.

Example

dcltrans
transaction TWriteFile
var
    hFtp : number;
    sData : string(50);
    nData : number; // number of bytes written

begin  sData := "Hello world!";
    WebFtpConnect(hFtp, "localhost", WEB_PORT_FTP, "user", "pass");
    WebFtpOpenFile(hFtp, "testfile.txt", false, true);
    WebFtpWriteFile(hFtp, sData, Strlen(sData), nData);
  write(nData); write(" bytes written");
  writeln;
    WebFtpCloseFile(hFtp);
    WebFtpShutdown(hFtp);
end TWriteFile;
親トピック: FTP Functions Reference
関連資料
WebFtpCloseFile Function
WebFtpReadFile Function
WebFtpWriteFile Function


WebFtpPut Function

Action

Puts random data bytes in a file on the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpPut( in hFtp            : number,
           in nBytes          : number,
           in sRemoteFile     : string,
           in bBinaryTransfer : boolean): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session
nBytes | Number of bytes to be generated randomly
sRemoteFile | String that contains the name of the file to create on the remote system. Can be either partially or fully qualified file name relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpPut translates the directory name separators to the appropriate character before they are used.
bBinaryTransfer

If this parameter is set to true, WebGetFile transfers the file using FTP's Image (Type I) transfer method. The file is transferred exactly as it exists with no changes. This is the default transfer method.

If this parameter is set to false, FTP's ASCII (Type A) transfer method is used. Control and formatting information is converted to local equivalents.

Example

// Put random data bytes in a file on the FTP server.
dcltrans
  transaction TWebFtpDir
  var
    hFtp   : number;
    nBytes : number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                   "anonymous", "mymail@address.com");
    nBytes := RndUniN(1000..5000);
    WebFtpPut(hFtp, nBytes, "RndGenTestFile", true);
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

Sample scripts

WebMulti01.bdf

親トピック: FTP Functions Reference
関連資料
WebFtpDeleteFile Function
WebFtpGetFile Function
WebFtpPutFile Function
WebFtpRenameFile Function


WebFtpPutFile Function

Action

Stores a file on the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpPutFile( in hFtp            : number,
               in sLocalFile      : string,
               in sRemoteFile     : string,
               in bBinaryTransfer : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session
sLocalFile | String that contains the name of the file to send from the local system
sRemoteFile | String that contains the name of the file to create on the remote system. Can be either partially or fully qualified file name relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpPutFile translates the directory name separators to the appropriate character before they are used.
bBinaryTransfer

If this parameter is set to true, WebGetFile transfers the file using FTP's Image (Type I) transfer method. The file is transferred exactly as it exists with no changes. This is the default transfer method.

If this parameter is set to false, FTP's ASCII (Type A) transfer method is used. Control and formatting information is converted to local equivalents.

Example

// Store a file on the FTP server.
dcltrans
  transaction TWebFtpDir
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                     "anonymous", "mymail@address.com");
    WebFtpPutFile(hFtp, "perfrep1.qrp", "test_file.txt", false);
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpDeleteFile Function
WebFtpGetFile Function
WebFtpPut Function
WebFtpRenameFile Function


WebFtpReadFile Function

Action

Reads data from a previously opened file on a remote server.

Include file

WebAPI.bdh

Syntax

WebFtpReadFile( in  hFtp     : number,
                out sData    : string,
                in  nMaxData : number,
                out nRead    : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect. Beside that, the file must have been opened using WebFtpOpenFile.
sData | Buffer to store the received data. Make sure to set nMaxData <= size of sData
nMaxData | Maximum amount of data to read from server. Make sure to set nMaxData <= size of sData
nRead | Variables that receives the number of bytes read

Example

dcltrans
  transaction TReadFile
  var
    hFtp  : number;
    sData : string(5000);
    nData : number; // number of bytes read
  begin
    WebFtpConnect(hFtp, "localhost", WEB_PORT_FTP, "user", "pass");
    WebFtpOpenFile(hFtp, "testfile.txt", false, false);
    WebFtpReadFile(hFtp, sData, STRING_COMPLETE, nData);
    write(sData); writeln;
    WebFtpCloseFile(hFtp);
    WebFtpShutdown(hFtp);
  end TReadFile;
親トピック: FTP Functions Reference
関連資料
WebFtpCloseFile Function
WebFtpOpenFile Function
WebFtpWriteFile Function


WebFtpRemoveDirectory Function

Action

Removes the specified directory on the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpRemoveDirectory( in hFtp       : number,
                       in sDirectory : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sDirectory | String that contains the name of the directory to remove on the remote system. This can be either a fully qualified path or a name relative to the current directory.
注: Use WebFtpGetCurrentDirectory to determine the remote site's current working directory, instead of assuming that the remote system uses a hierarchical naming scheme for directories. The lpszDirectory parameter can be either partially or fully qualified file names relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpRemoveDirectory translates the directory name separators to the appropriate character before they are used.

Example

// Create and remove a directory on the FTP server.
dcltrans
  transaction TWebFtpDir
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                 "anonymous", "mymail@address.com");
    WebFtpCreateDirectory(hFtp, "/test_directory");
    WebFtpRemoveDirectory(hFtp, "/test_directory");
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

Sample scripts

WebMulti01.bdf

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpCreateDirectory Function
WebFtpSetCurrentDirectory Function
WebFtpGetCurrentDirectory Function


WebFtpRenameFile Function

Action

Renames a file or directory stored on the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpRenameFile( in hFtp         : number,
                  in sOldFilename : string,
                  in sNewFilename : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session
sOldFilename | String that contains the name of the file that will have its name changed on the remote FTP server
sNewFilename | Null-terminated string that contains the new name for the remote file
注: The sOldFilename and sNewFilename parameters can be either partially or fully qualified file names relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpRenameFile translates the directory name separators to the appropriate character before they are used.

Example

// Rename a file on the FTP server.
dcltrans
  transaction TWebFtpDir
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                 "anonymous", "mymail@address.com");
    WebFtpRenameFile(hFtp, "test_file.txt","renamed_test_file.txt");
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpDeleteFile Function
WebFtpGetFile Function
WebFtpPutFile Function
WebFtpPut Function


WebFtpSetCurrentDirectory Function

Action

Changes to a different working directory on the FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpSetCurrentDirectory( in hFtp      : number,
                           in sDirectory : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
sDirectory | String that contains the name of the directory to change to on the remote system. This can be either a fully qualified path or a name relative to the current directory.
Use WebFtpGetCurrentDirectory to determine the remote site's current working directory, instead of assuming that the remote system uses a hierarchical naming scheme for directories. The sDirectory parameter can be either partially or fully qualified file names relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. WebFtpSetCurrentDirectory translates the directory name separators to the appropriate character before they are used.

Example

// Set the current directory on the FTP server.
dcltrans
  transaction TWebFtpDir
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP,
                 "anonymous", "mymail@address.com");
    WebFtpSetCurrentDirectory(hFtp, "/");
    WebFtpShutdown(hFtp);
  end TWebFtpDir;

Sample scripts

WebMulti01.bdf

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpCreateDirectory Function
WebFtpGetCurrentDirectory Function
WebFtpRemoveDirectory Function


WebFtpShutdown Function

Action

Closes an open connection from a previous call to WebFtpConnect to a FTP server.

Include file

WebAPI.bdh

Syntax

WebFtpShutdown( inout hFtp      : number,
                in    bGraceful : boolean optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect.
bGraceful | If this parameter is set to true a QUIT command is sent before the connection is closed (optional). If this parameter is omitted no QUIT command is sent.

Example

// Connect to the ftp server
dcltrans
  transaction TMyTransaction
  var
    hFtp: number;
  begin
    WebFtpConnect(hFtp, "standardhost", WEB_PORT_FTP, "", "");
    WebFtpShutdown(hFtp);
  end TMyTransaction;

Sample scripts

WebMulti01.bdf

SilkEssential sample

Ftp.sep

親トピック: FTP Functions Reference
関連資料
WebFtpConnect Function


WebFtpWriteFile Function

Action

Writes data to a previously opened file on a remote server.

Include file

WebAPI.bdh

Syntax

WebFtpWriteFile(in hFtp : number,
                        in sData : string,
                        in nData : number,
                        out nWritten : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hFtp | Valid handle to an FTP session. This handle must have been returned from a previous call to WebFtpConnect. Beside that, the file must have been opened using WebFtpOpenFile.
sData | Buffer that contains the data to write
nData | Number of bytes to write to the file
nWritten | Variable that receives the number of bytes written

Example

dcltrans
  transaction TWriteFile
  var
    hFtp : number;
    sData : string(50);
    nData : number; // number of bytes written
  begin
    sData := "Hello world!";
    WebFtpConnect(hFtp, "localhost", WEB_PORT_FTP, "user", "pass");
    WebFtpOpenFile(hFtp, "testfile.txt", false, true);
    WebFtpWriteFile(hFtp, sData, Strlen(sData), nData);
    write(nData); write(" bytes written"); writeln;
    WebFtpCloseFile(hFtp);
    WebFtpShutdown(hFtp);
end TWriteFile;
親トピック: FTP Functions Reference
関連資料
WebFtpCloseFile Function
WebFtpOpenFile Function
WebFtpReadFile Function


HLS Functions Reference

Lists BDL functions for testing applications that use HTTP Live Streaming (HLS).

  • HlsInit Function
    Initializes an HLS stream.
  • HlsPlay Function
    Starts an HLS stream. A WebUrl function with the playlist (.m3u8) must be called before HlsPlay.
親トピック: Internet Functions


HlsInit Function

Action

Initializes an HLS stream handle. Similar to web parsing functions, HlsInit has to be called prior to a web function, which requests a playlist resource either directly or indirectly through a web page with an embedded playlist. Once the returned handle is associated with the playlist, it can be passed to a subsequent HlsPlay function call to start simulating playback of the stream.

Include file

hls.bdh

Syntax

HlsInit(): number;

Return value

hStream: Handle to the HLS stream.

Example

dcltrans
    transaction TNoParams
  var
    hStream : number;
  begin
    hStream := HlsInit();
    WebUrl("http://lnz-streaming/basic/basicshort.m3u8");
    HlsPlay(hStream, "Identifier", 0.00, 60.0, "MyLiveStream");
  end TNoParams;
親トピック: HLS Functions Reference


HlsPlay Function

Action

Starts downloading stream segments and simulates playback of the HLS stream associated with the stream handle. A web function to request a playlist (.m3u8) resource must be called prior to HlsPlay to associate the stream handle with the stream. The function blocks until either the stream playback completed or the playback was interrupted due to a buffer underrun.

The HlsPlay function leads to shorter scripts as it prevents that every single media segment is listed in the script. It also ensures that the resulting TrueLog remains clear, because all media segments are listed under the respective node in the tree. Furthermore, it enables recording dynamically generated live playlists in the first place, as this would not be possible with conventional recording.

Include file

hls.bdh

Syntax

HlsPlay( in hStream     : number,
         in sIdentifier : string optional,
         in fStartTime  : double optional,
         in fDuration   : double optional,
         in sTimer      : string optional): boolean;
Parameter | Description
hStream | Handle to HLS stream that was created by HlsInit function.
sIdentifier | Specifies the value of the EXT-X-MEDIA tag's NAME or BANDWIDTH attribute or its 1-based index within the master playlist. By default, the first stream in the master playlist is chosen. (optional). For example: If the first stream in your master playlist had the attributes BANDWIDTH=246440, NAME="smallResolution", you could choose it by specifying the identifiers smallResolution (for the name), 246440 (for the bandwidth), 1 (the index of the first element), or by leaving it empty (default).
fStartTime | Specifies the start time in seconds (optional). The default value is 0.0. Requires a float, so make sure to include a comma with your value.
fDuration | Specifies the duration in seconds (optional). Specify FULL_STREAM (default) for a complete playback. Requires a float, so make sure to include a comma with your value.
sTimer | Optional timer name to associate measures with the stream. If a timer name is provided, Silk Performer reports stream statistics.

Return value

  • true if the play attempt is completed successfully
  • false otherwise

Example

dcltrans
    transaction TNoParams
  var
    hStream : number;
  begin
    hStream := HlsInit();
    WebUrl("http://lnz-streaming/basic/basicshort.m3u8");
    HlsPlay(hStream, "Identifier", 0.0, 60.0, "MyLiveStream");
  end TNoParams;
親トピック: HLS Functions Reference


JSON Functions Reference

  • JSON General Information
    Describes the basic JSON knowledge.
  • JSON Functions
    Lists all functions of the JSON API.
親トピック: Internet Functions


JSON General Information

  • JSON Basics
    Provides the basic knowledge you need to know, to work with the JSON API.
  • JSON First Steps
    Describes how to get started with JSON.
  • JSON Encoding
    Describes how to convert ANSI strings to UTF-8 strings and vice versa.
親トピック: JSON Functions Reference


JSON Basics

This section provides the basic knowledge you need to know, to work with the JSON API.

  • JSON Object Structure
    Describes what a JSON object is, how it is structured, and what value data types are available.
  • JSON Array Structure
    Describes what a JSON array is, how it is structured, and what data types are allowed in a JSON array.
親トピック: JSON General Information


JSON Object Structure

A JSON object contains zero, one, or more key-value pairs, also called properties. The object is surrounded by curly braces {}. Every key-value pair is separated by a comma. The order of the key-value pair is irrelevant.

A key-value pair consists of a key and a value, separated by a colon (:). The key is a string, which identifies the key-value pair. The value can be any of the following data types:

string | surrounded by quotation marks (" ")
number |
float |
array | JSON array
object | JSON object (can be nested)
boolean | true or false
empty | null

Examples

{ } //Empty JSON object

{
     “StringProperty”: “StringValue”,
     “NumberProperty”: 10,
     “FloatProperty”: 20.13,
     “BooleanProperty”: true,
     “EmptyProperty”: null
}

{
    “NestedObjectProperty”: {
        “Name”: “Neste  Object”
    },
    “NestedArrayProperty”: [10,20,true,40]
}
親トピック: JSON Basics


JSON Array Structure

A JSON array contains zero, one, or more ordered elements, separated by a comma. The JSON array is surrounded by square brackets [ ].

A JSON array is zero terminated, the first index of the array is zero (0). Therefore, the last index of the array is length - 1.

In contrast to regular arrays from the BDL, the elements of a JSON array can be of different data types. The following data types are allowed for JSON arrays:

string | surrounded by quotation marks (" ")
number |
float |
array | JSON array (can be nested)
object | JSON object
boolean | true or false
empty | null

Examples

[ ] //Empty JSON array

[ 0, 1, 2, 3, 4, 5]

[ “StringValue”, 10, 20.13, true, null ]

[
 {
   “Name” : “Nested Object”
 },
 [ 10, 20, true, 40, “Nested Array” ]
]
親トピック: JSON Basics


JSON First Steps

This section describes how to get started with JSON.

  • Getting Access to the JSON API
    Describes how to get access to the JSON API.
  • Creating JSON Arrays and JSON Objects
    Describes how to create JSON arrays and JSON objects.
  • Receiving Nested JSON Objects and JSON Arrays
    Describes how to retrieve the value of a specified property or of a specified element from a JSON object or a JSON array.
  • Getting the String Representation
    Describes the JsonToText function, which returns a JSON array or a JSON object as string.
  • Working with Properties and Elements
    Describes how to get property values from a JSON object or element values from a JSON array and how to set these values.
  • Removing Properties and Elements
    Describes how to remove properties and elements from JSON objects and JSON arrays.
  • Getting and Setting the Size of a JSON Array
    Describes how to get and set the number of elements of a JSON array.
  • Deleting JSON Objects and JSON Arrays
    Describes how to delete JSON objects and arrays.
親トピック: JSON General Information


Getting Access to the JSON API

To get access to the JSON API, use the statement Json.bdh.

親トピック: JSON First Steps


Creating JSON Arrays and JSON Objects

The BDL JSON API provides many functions to create and receive JSON arrays and JSON objects.

JsonParse

This function creates a JSON array or a JSON object from a string value. It returns the handle to the JSON array or the JSON object.

When the JSON array or the JSON object is not needed any longer, it is important to manually delete it from the memory with the function JsonFree.

dcltrans
    transaction TMain
    var
        jsonArray  : number;
        jsonObject : number;
    begin
        jsonArray := JsonParse(“[ \“StringValue\”, 10, 20.13, true, null ]”);
        jsonObject := JsonParse(“{ \”Id\”: 1, \”Name\” : \“New Object\” }”);

        ...

        JsonFree(jsonArray);
        JsonFree(jsonObject);
    end TMain;

JsonObjectCreate, JsonArrayCreate

This function creates an empty JSON object or an empty JSON array. It returns the handle to the JSON object or the JSON array.

When the JSON object or the JSON array is not needed any longer, it is important to manually delete it from the memory with the function JsonFree.

dcltrans
    transaction TMain
    var
        jsonObject : number;
        jsonArray : number;
    begin
        jsonObject := JsonObjectCreate;
        jsonArray:= JsonArrayCreate;

        ...

        JsonFree(jsonObject);
        JsonFree(jsonArray);
    end TMain;
親トピック: JSON First Steps


Receiving Nested JSON Objects and JSON Arrays

JsonGetObjectProperty, JsonGetArrayProperty

These functions retrieve the value of a specified property from a JSON object. If the property does not exist in the JSON object or the property does not contain a JSON object value or a JSON array value, nothing happens.

JSON objects and JSON arrays that are received by these functions can be removed from memory with JsonFree. However, objects and arrays are automatically deleted when you call JsonFree on the parent JSON object.

dcltrans
  transaction TMain
  var
    jsonParentString : string;
    jsonParent       : number;
    jsonArray        : number;
    jsonObject       : number;
  begin
    jsonParentString :=
"{"
  "\"NestedObjectProperty\": {"
    "\"Name\": \"Nested Object\""
    "},"
  "\NestedArrayProperty\": [10,20,true,40]"
"}";
    jsonParent := JsonParse(jsonParentString);

    JsonGetArrayProperty(jsonParent, "NestedArrayProperty", jsonArray);
    JsonGetObjectProperty(jsonParent, "NestedObjectProperty", jsonObject);

    ...

    JsonFree(jsonParent);
  end TMain;

JsonArrayGetObjectElement, JsonArrayGetArrayElement

These functions retrieve the value of a specified element from a JSON array. Their behavior is similar to the behavior of the functions JsonGetObjectProperty and JsonGetArrayProperty. The only difference is that they return specified elements from a JSON array instead of properties from a JSON object.

dcltrans
  transaction TMain
  var
    jsonParentString : string;
    jsonParent       : number;
    jsonArray        : number;
    jsonObject       : number;
  begin
    jsonParentString :=
"["
  "{"
    "\"Name\": \"Nested Object\""
  "},"
  "[10,20,true,40]"
"]";
    jsonParent := JsonParse(jsonParentString);

    JsonArrayGetArrayElement(jsonParent, "NestedArrayProperty", jsonArray);
    JsonArrayGetObjectElement(jsonParent, "NestedObjectProperty", jsonObject);

    ...

    JsonFree(jsonParent);
  end TMain;
親トピック: JSON First Steps


Getting the String Representation

JsonToText

This function returns the whole JSON array or the whole JSON object as string. The resulting string has the following characteristics:
  • The properties of an object are sorted ascending by their name.
  • The elements of an array are sorted ascending by their index.
  • This string representation contains no whitespaces for formatting.
親トピック: JSON First Steps


Working with Properties and Elements

There are several functions to get property values from a JSON object or element values from a JSON array and to set these values. The functions differ in the data type of the property or element they want to get or set.

Get, set, and create properties

Note: The name of a property is case sensitive.

JsonGet … Property(handle : in number,
                   property : in string,
                   value : out … ): boolean;
JsonSet … Property(handle : in number,
                   property : in string,
                   value : in … ): boolean;

In case the requested property does not exist in the JSON object, nothing happens and the function JsonGet ... Property returns false. When calling the function JsonSet ... Property with a not existing property name, the property will be created.

Get, set, and create elements

Note: The index of the array is zero terminated.

JsonArrayGet … Element (handle : in number,
                           index : in number,
                           value : out … ): boolean;
JsonArraySet … Element (handle : in number,
                           index : in number,
                           value : in … ): boolean;

In case the requested element does not exist in the JSON object, nothing happens and the function JsonArrayGet ... Element returns false. When calling the function JsonArraySet ... Element with a not existing index, the value will be appended to the array. Therefore there is no guarantee that the index of the new element is equal to the specified index.

親トピック: JSON First Steps


Removing Properties and Elements

The JSON API provides several functions to remove properties from JSON objects and elements from JSON arrays.

JsonRemoveProperty

Existing properties can be removed from a JSON object.

dcltrans
    transaction TMain
    var
        jsonObject : number;
        jsonText   : string;
    begin
        jsonObject := JsonParse(“{ \”Id\”: 1, \”Name\” : \“New Object\” }”);

        JsonToText(jsonArray, jsonText);
        Print(“Before: “ + jsonText);

        JsonRemoveProperty(jsonObject, “Name”);

        JsonToText(jsonArray, jsonText);
        Print(“After: “ + jsonText);

        JsonFree(jsonObject);
    end TMain;

Output
Before: {”Id”:1,”Name”:“New Object”}
After:  {”Id”:1}

JsonArrayRemoveElement

Existing elements can be removed from a JSON array. The index of all following elements decreases by one. Also the size of the JSON array decreases by one.

dcltrans
    transaction TMain
    var
        jsonArray : number;
        jsonText  : string;
    begin
        jsonArray := JsonParse(“[ \“StringValue\”, 10, 20.13, true, null ]”);

        JsonToText(jsonArray, jsonText);
        Print(“Before: “ + jsonText);

        JsonArrayRemoveElement(jsonArray, 0);

        JsonToText(jsonArray, jsonText);
        Print(“After:  “ + jsonText);

        JsonFree(jsonArray);
    end TMain;

Output
Before: [“StringValue”,10,20.13,true,null]
After:  [10,20.13,true,null]

JsonArrayResize

This function changes the size of a JSON array. If he specified size is lower than the actual size, the last elements of the JSON array are removed. If the specified size is higher than the actual size, empty elements are added to the end of the JSON array.

transaction TMain
var
  jsonText  : string;
  jsonArray : number;
begin
  jsonArray := JsonParse("[0,1,2,3,4]");

  JsonArrayResize(jsonArray, 2);

  JsonToText(jsonArray, jsonText);
  Print("resized array: " + jsonText);

  JsonFree(jsonArray);
end TMain;

Output
resized array: [0,1]
親トピック: JSON First Steps


Getting and Setting the Size of a JSON Array

The size of a JSON array is the number of elements. As JSON arrays are zero terminated, the size of a JSON array is always the last index + 1.

JsonGetArrayLength

The function JsonGetArrayLength returns the number of elements in a JSON array.

transaction TMain
var
  jsonArray   : number;
  arrayLength : number;
begin
  jsonArray := JsonParse("[0,1,2,3,4]");

  arrayLength := JsonGetArrayLength(jsonArray);

  Print("Length: " + string(arrayLength));
  JsonFree(jsonArray);
end TMain;

Output
Length: 5

JsonArrayResize

This function changes the size of a JSON array. If the specified size is lower than the actual size, the last elements of the JSON array are removed. If the specified size is higher than the actual size, empty elements are added to the end of the JSON array.

transaction TMain
var
  jsonText  : string;
  jsonArray : number;
begin
  jsonArray := JsonParse("[0,1,2,3,4]");

  JsonArrayResize(jsonArray, 2);

  JsonToText(jsonArray, jsonText);
  Print("resized array: " + jsonText);

  JsonFree(jsonArray);
end TMain;

Output
resized array: [0,1]
親トピック: JSON First Steps


Deleting JSON Objects and JSON Arrays

JsonFree

JSON objects and JSON arrays consume memory until they are deleted manually. Therefore it is important to delete them when they are not needed any longer.

In case the handle of a deleted JSON object or a deleted JSON array is passed to a function, nothing happens. The function returns false.

親トピック: JSON First Steps


JSON Encoding

All functions of the JSON API expect and return UTF-8 strings. Therefore, the functions JsonParse, JsonSetStringProperty, and JsonArraySetStringElement expect the values in UTF-8 representation. Accordingly, the functions JsonToText, JsonGetStringProperty, and JsonArrayGetStringElement deliver the values in UTF-8 encoding.

To convert ANSI strings to UTF-8 strings and vice versa, you can use the functions ToUTF8 and FromUTF8.

If there are no special characters (for example ©, ¥, £, ä, ö, ü) in the text, all JSON API functions convert the ANSI string to an UTF-8 string implicitly. Otherwise an explicit conversion is required.

It is recommended to convert ANSI strings to UTF-8 strings in any case.

Encoding rules for all JSON API functions:

Input | Output | FromUTF8 (Output)
ToUTF8("CYL") | CYL | CYL
ToUTF8("©¥£") | Â©Â¥Â£ | ©¥£
ToUTF8("&copy;&yen;&pound;") | &copy;&yen;&pound; | &copy;&yen;&pound;
CYL | CYL | CYL
©¥£ | ©¥£ | Error: string conversion failed
&copy;&yen;&pound; | &copy;&yen;&pound; | &copy;&yen;&pound;
注: TrueLog Explorer only displays JSON data in ANSI encoding correctly. Therefore, a call to the function FromUTF8 is necessary.

JsonParse decodes UTF-8 characters automatically.

Additional encoding rules for JsonParse:

Input | Output | FromUTF8 (Output)
ToUTF8( " \u00A9\u00A5\u00A3") | Â©Â¥Â£ | ©¥£
\u00A9\u00A5\u00A3 | Â©Â¥Â£ | ©¥£

You do not need to convert texts without special characters.

transaction TMain
var
  jsonText, jsonResult : string;
  jsonArray            : number;
begin
  jsonText := "[
                 \"CYL\",
                 \"&copy;&yen;&pound;\"
              ]";

  jsonArray := JsonParse(jsonText);
  JsonToText(jsonArray, jsonResult);

  Print(“UTF8: “ + jsonResult);
  Print(“ANSI: “ + FromUTF8(jsonResult));
  JsonFree(jsonArray);
End Tmain;

Output:

UTF8: [“CYL”,“&copy;&yen;&pound;”]
ANSI: [“CYL”,“&copy;&yen;&pound;”]

If a text contains a special character and you try to convert it to ANSI, an error occurs.

transaction TMain
var
  jsonText, jsonResult : string;
  jsonArray            : number;
begin
  jsonText := "[
                 \"CYL\",
                 \"&copy;&yen;&pound;\"
                 \"©¥£\"
              ]";

  jsonArray := JsonParse(jsonText);
  JsonToText(jsonArray, jsonResult);

  Print(“UTF8: “ + jsonResult);
  Print(“ANSI: “ + FromUTF8(jsonResult));

  JsonFree(jsonArray);
End Tmain;

Output:

UTF8: [“CYL”,“&copy;&yen;&pound;”,“©¥£”]
Error: String conversion failed

When the input text is converted to UTF-8, everything works as expected:

transaction TMain
var
  jsonText, jsonResult : string;
  jsonArray            : number;
begin
  jsonText := "[
                 \"CYL\",
                 \"&copy;&yen;&pound;\",
                 \"©¥£\"
              ]";

  jsonArray := JsonParse(jsonText);
  JsonToText(jsonArray, jsonResult);

  Print(“UTF8: “ + jsonResult);
  Print(“ANSI: “ + FromUTF8(jsonResult));

  JsonFree(jsonArray);
End Tmain;

Output:

UTF8: [“CYL”,“&copy;&yen;&pound;”,“ Â©Â¥Â£”]
ANSI: [“CYL”,“&copy;&yen;&pound;”,“ ©¥£”]
親トピック: JSON General Information


JSON Functions

This section lists all functions of the JSON API.

  • JsonArrayCreate Function
    Creates an empty JSON array.
  • JsonArrayGetArrayElement Function
    Gets the value of a specified JSON array element from a JSON array.
  • JsonArrayGetBooleanElement Function
    Gets the value of a specified boolean element from a JSON array.
  • JsonArrayGetFloatElement Function
    Gets the value of a specified float element from a JSON array.
  • JsonArrayGetNumberElement Function
    Gets the value of a specified number element from a JSON array.
  • JsonArrayGetObjectElement Function
    Gets the value of a specified JSON object element from a JSON array.
  • JsonArrayGetStringElement Function
    Gets the value of a specified string element from a JSON array.
  • JsonArrayRemoveElement Function
    Removes an element from a JSON array.
  • JsonArrayResize Function
    Changes the size of a JSON array.
  • JsonArraySetArrayElement Function
    Sets the value of a specified JSON array element from a JSON array.
  • JsonArraySetBooleanElement Function
    Sets the value of a specified boolean element from a JSON array.
  • JsonArraySetFloatElement Function
    Sets the value of a specified float element from a JSON array.
  • JsonArraySetNumberElement Function
    Sets the value of a specified number element from a JSON array.
  • JsonArraySetObjectElement Function
    Sets the value of a specified JSON object element from a JSON array.
  • JsonArraySetStringElement Function
    Sets the value of a specified string element from a JSON array.
  • JsonFree Function
    Deletes a JSON object or a JSON array from the memory.
  • JsonGetArrayLength Function
    Retrieves the number of elements in a JSON array.
  • JsonGetArrayProperty Function
    Retrieves the value of a specified JSON array property from a JSON object.
  • JsonGetBooleanProperty Function
    Retrieves the value of a specified boolean property from a JSON object.
  • JsonGetFloatProperty Function
    Retrieves the value of a specified float property from a JSON object.
  • JsonGetNumberProperty Function
    Retrieves the value of a specified number property from a JSON object.
  • JsonGetObjectProperty Function
    Retrieves the value of a specified JSON object property from a JSON object.
  • JsonGetStringProperty Function
    Retrieves the value of a specified string property from a JSON object.
  • JsonObjectCreate Function
    Creates an empty JSON object.
  • JsonParse Function
    Creates a new JSON object or a new JSON array from the given string.
  • JsonRemoveProperty Function
    Removes a property from a JSON object.
  • JsonSetArrayProperty Function
    Sets the value of a specified JSON array property from a JSON object.
  • JsonSetBooleanProperty Function
    Sets the value of a specified boolean property from a JSON object.
  • JsonSetFloatProperty Function
    Sets the value of a specified float property from a JSON object.
  • JsonSetNumberProperty Function
    Sets the value of a specified number property from a JSON object.
  • JsonSetObjectProperty Function
    Sets the value of a specified JSON object property from a JSON object.
  • JsonSetStringProperty Function
    Sets the value of a specified string property from a JSON object.
  • JsonToText Function
    Gets the string representation of a JSON object or a JSON array.
親トピック: JSON Functions Reference


JsonArrayCreate Function

Action

Creates an empty JSON array.

It is highly recommended to delete any JSON array that is no longer needed from the memory. For every call of JsonArrayCreate should be a call of JsonFree.

Include file

Json.bdh

Syntax

JsonArrayCreate(): number;

Return value

Valid handle to a JSON array.

Example

transaction TMain
var
  jsonArray : number;
begin
  jsonArray := JsonArrayCreate();
  JsonArraySetStringElement(jsonArray, 0, "New String Value");

  ...

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayGetArrayElement Function

Action

Retrieves the value of a specified element from a JSON array. If the array element does not exist in the JSON array or the array element does not contain a JSON array value nothing happens.

Include file

Json.bdh

Syntax

JsonArrayGetArrayElement( in  handle : number,
                          in  index  : number,
                          out value  : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | Parameter that contains the value of the specified element. The value is a handle to a JSON array.

Return value

  • true if element successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText, elementValue       : string;
  jsonArray, nestedArray, i, j : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    //get nested array
    JsonArrayGetArrayElement(jsonArray, i, nestedArray);
    Print("Array at index " + string(i));
    //iterate over nested array
    for j := 0 to (JsonGetArrayLength(nestedArray) - 1) do
      JsonArrayGetStringElement(nestedArray, j, elementValue);
      Print("index: " + string(j) + ", value: " + elementValue);
    end;
  end;

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayGetBooleanElement Function

Action

Retrieves the value of a specified element from a JSON array. If the array element does not exist in the JSON array or the array element does not contain a boolean value nothing happens.

Include file

Json.bdh

Syntax

JsonArrayGetBooleanElement( in handle : number,
                            in index  : number,
                            out value : boolean ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | Parameter that contains the value of the specified element

Return value

  • true if element successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText     : string;
  jsonArray, i : number;
  elementValue : boolean;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetBooleanElement(jsonArray, i, elementValue);
    Print("index: " + string(i) + ", value: " + string(elementValue));
  end;

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayGetFloatElement Function

Action

Retrieves the value of a specified element from a JSON array. If the array element does not exist in the JSON array or the arrayelement does not contain a float value nothing happens.

Include file

Json.bdh

Syntax

JsonArrayGetFloatElement( in handle : number,
                          in index  : number,
                          out value : float ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | Parameter that contains the value of the specified element

Return value

  • true if element successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText     : string;
  jsonArray, i : number;
  elementValue : float;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetFloatElement(jsonArray, i, elementValue);
    Print("index: " + string(i) + ", value: " + string(elementValue));
  end;

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayGetNumberElement Function

Action

Retrieves the value of a specified element from a JSON array. If the array element does not exist in the JSON array or the array element does not contain a number value nothing happens.

Include file

Json.bdh

Syntax

JsonArrayGetNumberElement( in handle : number,
                           in index  : number,
                           out value : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | Parameter that contains the value of the specified element

Return value

  • true if element successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText                   : string;
  jsonArray, i, elementValue : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetNumberElement(jsonArray, i, elementValue);
    Print("index: " + string(i) + ", value: " + string(elementValue));
  end;

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayGetObjectElement Function

Action

Retrieves the value of a specified element from a JSON array. If the array element does not exist in the JSON array or the array element does not contain a JSON object value nothing happens.

Include file

Json.bdh

Syntax

JsonArrayGetObjectElement( in handle : number,
                           in index  : number,
                           out value : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | Parameter that contains the value of the specified element. The value is a handle to a JSON object

Return value

  • true if element successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText                             : string;
  jsonArray, i, elementValue, objectId : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetObjectElement(jsonArray, i, elementValue);
    JsonGetNumberProperty(elementValue, "Id", objectId);
    Print("Object at index " + string(i) + " has the id " + string(objectId));
  end;

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayGetStringElement Function

Action

Retrieves the value of a specified element from a JSON array. If the array element does not exist in the JSON array or the array element does not contain a string value nothing happens.

Include file

Json.bdh

Syntax

JsonArrayGetStringElement( in handle : number,
                           in index  : number,
                           out value : string ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | Parameter that contains the value of the specified element

Return value

  • true if element successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText, elementValue : string;
  jsonArray, i           : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetStringElement(jsonArray, i, elementValue);
    Print("index: " + string(i) + ", value: " + elementValue);
  end;

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayRemoveElement Function

Action

Removes an element with the specified index from a JSON array. The index of all following elements decreases by one. Also the size of the array decreases by one.

Include file

Json.bdh

Syntax

JsonArrayRemoveElement( in handle : number,
                        in index  : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).

Return value

  • true if element successfully removed
  • false otherwise

Example

transaction TMain
var
  jsonArray, i, current : number;
begin
  jsonArray := JsonParse("[0,1,2,3,4,5,6,7]");

  //remove all even numbers of array
  i := 0;
  while i < JsonGetArrayLength(jsonArray) do
    JsonArrayGetNumberElement(jsonArray, i, current);
    if ((curr mod 2) = 0) then
      JsonArrayRemoveElement(jsonArray, i);
    else
      i := i + 1;
    end;
  end;

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArrayResize Function

Action

Resizes a JSON array. If the specified size is lower than the actual size, the last elements of the JSON array are removed. If the specified size is higher than the actual size, empty elements are added to the end of the JSON array.

Include file

Json.bdh

Syntax

JsonArrayResize( in handle : number,
                 in size   : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
size | The new size of the JSON array

Return value

  • true if the size of the JSON array changed
  • false otherwise

Example

transaction TMain
var
  jsonText  : string;
  jsonArray : number;
begin
  jsonArray := JsonParse("[0,1,2,3,4]");

  JsonArrayResize(jsonArray, 2);
  JsonToText(jsonArray, jsonText);
  Print("resized array: " + jsonText);

  JsonArrayResize(jsonArray, 4);
  JsonToText(jsonArray, jsonText);
  Print("resized array: " + jsonText);

  JsonFree(jsonArray);
end TMain;

Output

resized array: [0,1]
resized array: [0,1,null,null]
親トピック: JSON Functions


JsonArraySetArrayElement Function

Action

Replaces the value of a specified element from a JSON array. If the array element does not exist in the JSON array, a new element with the specified value will be appended to the array. If the array element does not contain a JSON array value, nothing happens.

Include file

Json.bdh

Syntax

JsonArraySetArrayElement( in handle : number,
                          in index  : number,
                          in value  : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | A handle to the JSON array, which should be the new value of the element

Return value

  • true if value successfully written to element
  • false otherwise

Example

transaction TMain
var
  jsonText            : string;
  jsonArray, newValue : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  newValue := JsonParse("[0,1,2,3,4]");
  JsonArraySetArrayElement(jsonArray, 1, newValue);

  /* add new value
   * index of the new value := size
   * size := size + 1 */
  JsonArraySetArrayElement(jsonArray, 999999, newValue);

  JsonFree(newValue);
  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArraySetBooleanElement Function

Action

Replaces the value of a specified element from a JSON array. If the array element does not exist in the JSON array, a new element with the specified value will be appended to the array. If the array element does not contain a boolean value, nothing happens.

Include file

Json.bdh

Syntax

JsonArraySetBooleanElement( in handle : number,
                            in index  : number,
                            in value  : boolean ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | The new value of the element

Return value

  • true if value successfully written to element
  • false otherwise

Example

transaction TMain
var
  jsonText               : string;
  jsonArray, i           : number;
  newValue, currentValue : boolean;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  //set every JSON array element to true
  newValue := true;
  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetBooleanElement(jsonArray, i, currentValue);
    if not currentValue then
      JsonArraySetBooleanElement(jsonArray, i, newValue);
    end;
  end;

  /* add new value
   * index of the new value := size
   * size := size + 1 */
  JsonArraySetBooleanElement(jsonArray, 999999, newValue);

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArraySetFloatElement Function

Action

Replaces the value of a specified element from a JSON array. If the array element does not exist in the JSON array, a new element with the specified value will be appended to the array. If the array element does not contain a float value, nothing happens.

Include file

Json.bdh

Syntax

JsonArraySetFloatElement( in handle : number,
                          in index  : number,
                          in value  : float ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | The new value of the element

Return value

  • true if value successfully written to element
  • false otherwise

Example

transaction TMain
var
  jsonText               : string;
  jsonArray, i           : number;
  newValue, currentValue : float;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  //every JSON array element is greater than or equal 11.22
  newValue := 11.22;
  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetFloatElement(jsonArray, i, currentValue);
    if currentValue < newValue then
      JsonArraySetFloatElement(jsonArray, i, newValue);
    end;
  end;

  /* add new value
   * index of the new value := size
   * size := size + 1 */
  JsonArraySetFloatElement(jsonArray, 999999, newValue);

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArraySetNumberElement Function

Action

Replaces the value of a specified element from a JSON array. If the array element does not exist in the JSON array, a new element with the specified value will be appended to the array. If the array element does not contain a number value, nothing happens.

Include file

Json.bdh

Syntax

JsonArraySetNumberElement( in handle : number,
                           in index  : number,
                           in value  : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | The new value of the element

Return value

  • true if value successfully written to element
  • false otherwise
transaction TMain
var
  jsonText                             : string;
  jsonArray, i, newValue, currentValue : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  //every JSON array element is greater than or equal 10
  newValue := 10;
  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetNumberElement(jsonArray, i, currentValue);
    if currentValue < newValue then
      JsonArraySetNumberElement(jsonArray, i, newValue);
    end;
  end;

  /* add new value
   * index of the new value := size
   * size := size + 1 */
  JsonArraySetNumberElement(jsonArray, 999999, newValue);

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArraySetObjectElement Function

Action

Replaces the value of a specified element from a JSON array. If the array element does not exist in the JSON array, a new element with the specified value will be appended to the array. If the array element does not contain a JSON object value, nothing happens.

Include file

Json.bdh

Syntax

JsonArraySetObjectElement( in handle : number,
                           in index  : number,
                           in value  : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | A handle to the JSON object, which should be the new value of the element

Return value

  • true if value successfully written to element
  • false otherwise

Example

transaction TMain
var
  jsonText  : string;
  jsonArray : number;
  newValue  : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  newValue := JsonParse("{\"Name\": \"new Object\"}");
  JsonArraySetObjectElement(jsonArray, 1, newValue);

  /* add new value
   * index of the new value := size
   * size := size + 1 */
  JsonArraySetObjectElement(jsonArray, 999999, newValue);

  JsonFree(newValue);
  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonArraySetStringElement Function

Action

Replaces the value of a specified element from a JSON array. If the array element does not exist in the JSON array, a new element with the specified value will be appended to the array. If the array element does not contain a string value, nothing happens.

Include file

Json.bdh

Syntax

JsonArraySetStringElement( in handle : number,
                           in index  : number,
                           in value  : string ): boolean;
Parameter | Description
handle | Valid handle to a JSON array
index | The index position in the JSON array. Lower bound is zero (0).
value | The new value of the element

Return value

  • true if value successfully written to element
  • false otherwise

Example

transaction TMain
var
  jsonText               : string;
  jsonArray, i           : number;
  newValue, currentValue : string;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonArray := JsonParse(jsonText);

  //every JSON array element which contains the string "old string value" is set to "new string value"
  newValue := "new string value";
  for i := 0 to (JsonGetArrayLength(jsonArray) - 1) do
    JsonArrayGetStringElement(jsonArray, i, currentValue);
    if currentValue = "old string value" then
      JsonArraySetStringElement(jsonArray, i, newValue);
    end;
  end;

  /* add new value
   * index of the new value := size
   * size := size + 1 */
  JsonArraySetStringElement(jsonArray, 999999, newValue);

  JsonFree(jsonArray);
end TMain;
親トピック: JSON Functions


JsonFree Function

Action

Deletes a JSON object or a JSON array from the memory. The JSON object or the JSON array does not consume memory any more. After calling the function JsonFree the properties and elements cannot be accessed any more.

This function also deletes all nested JSON objects and JSON arrays.

It is highly recommended to delete every JSON object and JSON array from the memory when it is not needed any more. For every call of JsonParse, JsonObjectCreate and JsonArrayCreate should be a call of JsonFree.

Include file

Json.bdh

Syntax

JsonFree( in handle : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON object or a JSON array

Return value

  • true if successfully deleted
  • false otherwise

Example

transaction TMain
var
  jsonText                 : string;
  jsonObject, nestedObject : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);
  JsonGetObjectProperty(jsonObject, "nested object property", nestedObject);

  //jsonObject and nestedObject are still in memory and consume space
  JsonFree(jsonObject);
  //jsonObject is not in the memory any more
  //nestedObject is also deleted

  //nothing happens and the four functions return false
  JsonSetStringProperty(jsonObject, "StringProperty", "new string value");
  JsonSetStringProperty(nestedObject, "StringProperty", "new string value");
  JsonFree(jsonObject);
  JsonFree(nestedObject);
end TMain;
親トピック: JSON Functions


JsonGetArrayLength Function

Action

Retrieves the number of elements in a JSON array. Number of elements := last index + 1

Include file

Json.bdh

Syntax

JsonGetArrayLength( in handle : number ): number;
Parameter | Description
handle | Valid handle to a JSON array

Return value

The number of elements in the JSON array.

Example

transaction TMain
var
  jsonArray   : number;
  arrayLength : number;
begin
  jsonArray := JsonParse("[0,1,2,3,4]");
  arrayLength := JsonGetArrayLength(jsonArray);
  Print("Length: " + string(arrayLength));
  JsonFree(jsonArray);
end TMain;

Output

Length: 5
親トピック: JSON Functions


JsonGetArrayProperty Function

Action

Retrieves the value of a specified property from a JSON object. If the property does not exist in the JSON object or the property does not contain a JSON array value, nothing happens.

Include file

Json.bdh

Syntax

JsonGetArrayProperty( in handle   : number,
                      in property : string,
                      out value   : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | Parameter that contains the value of the specified property. The value is a handle to a JSON array.

Return value

  • true if property successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText      : string;
  jsonObject    : number;
  propertyValue : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  JsonGetArrayProperty(jsonObject, "JsonArrayPropertyName", propertyValue);

  Print("JSON array property: " + propertyValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonGetBooleanProperty Function

Action

Retrieves the value of a specified property from a JSON object. If the property does not exist in the JSON object or the property does not contain a boolean value, nothing happens.

Include file

Json.bdh

Syntax

JsonGetBooleanProperty( in handle   : number,
                        in property : string,
                        out value   : boolean ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | Parameter that contains the value of the specified property

Return value

  • true if property successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText      : string;
  jsonObject    : number;
  propertyValue : boolean;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  JsonGetBooleanProperty(jsonObject, "BooleanPropertyName", propertyValue);

  Print("boolean property: " + propertyValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonGetFloatProperty Function

Action

Retrieves the value of a specified property from a JSON object. If the property does not exist in the JSON object or the property does not contain a float value, nothing happens.

Include file

Json.bdh

Syntax

JsonGetFloatProperty( in handle   : number,
                      in property : string,
                      out value   : float ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | Parameter that contains the value of the specified property

Return value

  • true if property successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText      : string;
  jsonObject    : number;
  propertyValue : float;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  JsonGetFloatProperty(jsonObject, "FloatPropertyName", propertyValue);

  Print("float property: " + propertyValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonGetNumberProperty Function

Action

Retrieves the value of a specified property from a JSON object. If the property does not exist in the JSON object or the property does not contain a number value, nothing happens.

Include file

Json.bdh

Syntax

JsonGetNumberProperty( in handle   : number,
                       in property : string,
                       out value   : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | Parameter that contains the value of the specified property

Return value

  • true if property successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText      : string;
  jsonObject    : number;
  propertyValue : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  JsonGetNumberProperty(jsonObject, "NumberPropertyName", propertyValue);

  Print("number property: " + propertyValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonGetObjectProperty Function

Action

Retrieves the value of a specified property from a JSON object. If the property does not exist in the JSON object or the property does not contain a JSON object value, nothing happens.

Include file

Json.bdh

Syntax

JsonGetObjectProperty( in handle   : number,
                       in property : string,
                       out value   : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | Parameter that contains the value of the specified property. The value is a handle to a JSON object.

Return value

  • true if property successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText      : string;
  jsonObject    : number;
  propertyValue : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  JsonGetObjectProperty(jsonObject, "JsonObjectPropertyName", propertyValue);

  Print("JSON object property: " + propertyValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonGetStringProperty Function

Action

Retrieves the value of a specified property from a JSON object. If the property does not exist in the JSON object or the property does not contain a string value, nothing happens.

Include file

Json.bdh

Syntax

JsonGetStringProperty( in handle   : number,
                       in property : string,
                       out value   : string ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | Parameter that contains the value of the specified property

Return value

  • true if property successfully found
  • false otherwise

Example

transaction TMain
var
  jsonText      : string;
  jsonObject    : number;
  propertyValue : string;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  JsonGetStringProperty(jsonObject, "StringPropertyName", propertyValue);

  Print("string property: " + propertyValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonObjectCreate Function

Action

Creates an empty JSON object.

It is highly recommended to delete every JSON object from the memory when it is not needed any longer. For every call of JsonObjectCreate should be a call of JsonFree.

Include file

Json.bdh

Syntax

JsonObjectCreate(): number;

Return value

Valid handle to a JSON object.

Example

transaction TMain
var
  jsonObject : number;
begin
  jsonObject := JsonObjectCreate();
  JsonSetStringProperty(jsonObject, "NewProperty", "New String Value");

  ...

  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonParse Function

Action

Creates a new JSON object or a new JSON array from the given string.

It is highly recommended to delete every parsed JSON object and every parsed JSON array from the memory when it is not needed any longer. For every call of JsonParse should be a call of JsonFree.

Include file

Json.bdh

Syntax

JsonParse( in jsonText : string ): number;
Parameter | Description
jsonText | The string representation of the new JSON object or the new JSON array

Return value

  • handle to a JSON object or a JSON array if successful
  • 0 otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  ...

  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonRemoveProperty Function

Action

Removes a property from a JSON object.

Include file

Json.bdh

Syntax

JsonRemoveProperty( in handle   : number,
                    in property : string ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)

Return value

  • true if property successfully removed
  • false otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  JsonRemoveProperty(jsonObject, "PropertyName");

  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonSetArrayProperty Function

Action

Replaces the value of a specified property from a JSON object. If the property does not exist in the JSON object, a new property with the specified name and value will be created. If the the property does not contain a JSON array value, nothing happens.

Include file

Json.bdh

Syntax

JsonSetArrayProperty( in handle   : number,
                      in property : string,
                      in value    : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | A handle to the JSON array, which should be the new value of the property

Return value

  • true if value successfully written to property
  • false otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
  newValue   : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  newValue := JsonParse("[0,1,2,3,4]");
  JsonSetArrayProperty(jsonObject, "JsonArrayPropertyName", newValue);

    JsonFree(newValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonSetBooleanProperty Function

Action

Replaces the value of a specified property from a JSON object. If the property does not exist in the JSON object, a new property with the specified name and value will be created. If the the property does not contain a boolean value, nothing happens.

Include file

Json.bdh

Syntax

JsonSetBooleanProperty( in handle   : number,
                        in property : string,
                        in value    : boolean ): boolean;
Parameter | Description
handle | Valid handle to a JSON object.
property | Name of the property in the JSON object (case sensitive)
value | The new value of the property

Return value

  • true if value successfully written to property
  • false otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
  newValue   : boolean;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  newValue := true;
  JsonSetBooleanProperty(jsonObject, "BooleanPropertyName", newValue);

  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonSetFloatProperty Function

Action

Replaces the value of a specified property from a JSON object. If the property does not exist in the JSON object, a new property with the specified name and value will be created. If the property does not contain a float value, nothing happens.

Include file

Json.bdh

Syntax

JsonSetFloatProperty( in handle   : number,
                      in property : string,
                      in value    : float ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | The new value of the property

Return value

  • true if value successfully written to property
  • false otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
  newValue   : float;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  newValue := 11.22;
  JsonSetFloatProperty(jsonObject, "FloatPropertyName", newValue);

  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonSetNumberProperty Function

Action

Replaces the value of a specified property from a JSON object. If the property does not exist in the JSON object, a new property with the specified name and value will be created. If the property does not contain a number value, nothing happens.

Include file

Json.bdh

Syntax

JsonSetNumberProperty( in handle   : number,
                       in property : string,
                       in value    : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | The new value of the property

Return value

  • true if value successfully written to property
  • false otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
  newValue   : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  newValue := 10;
  JsonSetNumberProperty(jsonObject, "NumberPropertyName", newValue);

  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonSetObjectProperty Function

Action

Replaces the value of a specified property from a JSON object. If the property does not exist in the JSON object, a new property with the specified name and value will be created. If the property does not contain a JSON object value, nothing happens.

Include file

Json.bdh

Syntax

JsonSetObjectProperty( in handle   : number,
                       in property : string,
                       in value    : number ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | A handle to the JSON object, which should be the new value of the property

Return value

  • true if value successfully written to property
  • false otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
  newValue   : number;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  newValue := JsonParse("{\"Name\": \"new Object\"}");
  JsonSetObjectProperty(jsonObject, "JsonObjectPropertyName", newValue);

    JsonFree(newValue);
  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonSetStringProperty Function

Action

Replaces the value of a specified property from a JSON object. If the property does not exist in the JSON object, a new property with the specified name and value will be created. If the property does not contain a string value, nothing happens.

Include file

Json.bdh

Syntax

JsonSetStringProperty( in handle   : number,
                       in property : string,
                       in value    : string ): boolean;
Parameter | Description
handle | Valid handle to a JSON object
property | Name of the property in the JSON object (case sensitive)
value | The new value of the property

Return value

  • true if value successfully written to property
  • false otherwise

Example

transaction TMain
var
  jsonText   : string;
  jsonObject : number;
  newValue   : string;
begin
  WebParseDataBound(jsonText);
  WebPageUrl("http://mycompany.com/api/jsondata");
  jsonObject := JsonParse(jsonText);

  newValue := "new string value";
  JsonSetStringProperty(jsonObject, "StringPropertyName", newValue);

  JsonFree(jsonObject);
end TMain;
親トピック: JSON Functions


JsonToText Function

Action

Gets the string representation of a JSON object or a JSON array.

The properties of an object are sorted ascending by their name. The elements of an array are sorted ascending by their index. This string representation contains no whitespaces for formatting.

Include file

Json.bdh

Syntax

JsonToText( in handle : number,
            out text  : string ): boolean;
Parameter | Description
handle | Valid handle to a JSON object or a JSON array
text | The string representation of the given JSON object or the given JSON array

Return value

  • true if successful
  • false otherwise

Example

transaction TMain
var
  jsonText              : string;
  jsonArray, jsonObject : number;
begin
  jsonArray := JsonParse("[0,1,2,3,4]");
  JsonToText(jsonArray, jsonText);
  Print("JSON array: " + jsonText);
  JsonFree(jsonArray);

  jsonObject := JsonParse("{\"name\":\"new object\",\"id\":1}");
  JsonToText(jsonObject, jsonText);
  Print("JSON object: " + jsonText);
  JsonFree(jsonObject);
end TMain;

Output

JSON array: [0,1,2,3,4]
JSON object: {"id":1,"name":"new object"}
親トピック: JSON Functions


LDAP Functions Reference

The following function set is an implementation of the Lightweight Directory Access Protocol.

  • WebLdapAdd Function
    Creates a new LDAP directory entry.
  • WebLdapAttributeAdd Function
    Adds a new attribute to an LDAP directory entry.
  • WebLdapBind Function
    Exchanges authentication information between the client and the server.
  • WebLdapCompare Function
    Compares an attribute type and value with a given LDAP directory entry.
  • WebLdapConnect Function
    Establishes a connection for LDAP transactions with a specified host.
  • WebLdapControlAdd Function
    Adds a control to the next WebLdapAdd, WebLdapCompare, WebLdapDelete, WebLdapModify, WebLdapRename, WebLdapSearch or WebLdapExtendedOperation function call.
  • WebLdapControlGet Function
    Retrieves the control returned from the server after a WebLdapAdd, WebLdapCompare, WebLdapDelete, WebLdapModify, WebLdapRename, WebLdapSearch or WebLdapExtendedOperation function call.
  • WebLdapDelete Function
    Removes an entry from an LDAP directory.
  • WebLdapDisconnect Function
    Closes the connection for LDAP transactions that was established with WebLdapConnect.
  • WebLdapExtendedOperation Function
    Sends a request to the server to perform an extended operation synchronously.
  • WebLdapGetNativeHandle Function
    Returns the native LDAP handle that can be passed to external functions.
  • WebLdapModify Function
    Modifies a specified LDAP directory entry.
  • WebLdapNextAttribute Function
    Steps through all attributes of the entry returned by a previous call to WebLdapNextEntry.
  • WebLdapNextEntry Function
    Steps through all results received from WebLdapSearch.
  • WebLdapNextValue Function
    Steps through all attributes of an entry returned by a previous call to WebLdapNextEntry.
  • WebLdapRename Function
    Renames an existing LDAP directory entry.
  • WebLdapSearch Function
    Requests that a search is performed on its behalf by a server.
  • WebLdapValueAdd Function
    Adds, replaces or deletes an attribute value of an LDAP directory entry.
親トピック: Internet Functions


WebLdapAdd Function

Action

Creates a new LDAP directory entry. Both the WebLdapAttributeAdd and the WebLdapValueAdd function are required to specify the new directory attributes and values.

Include file

WebAPI.bdh

Syntax

WebLdapAdd( in hLdap  : number,
            in sEntry : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created by WebLdapConnect
sEntry | Name of the new directory entry

Example

dcltrans
  transaction TMain
  var
    hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, "cn=adminname", "password");

    WebLdapAttributeAdd(hLdap, WEB_LDAP_MOD_ADD, "cn");
    WebLdapValueAdd(hLdap, "firstname lastname");
    WebLdapAttributeAdd(hLdap, WEB_LDAP_MOD_ADD, "sn");
    WebLdapValueAdd(hLdap, "lastname");
    WebLdapAdd(hLdap, "cn=myCN,o=Name");

    WebLdapDisconnect(hLdap);
  end TMain;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function
WebLdapModify Function
WebLdapDelete Function


WebLdapAttributeAdd Function

Action

Adds a new attribute to an LDAP directory entry.

Include file

WebAPI.bdh

Syntax

WebLdapAttributeAdd( in hLdap      : number,
                     in nModType   : number,
                     in sAttribute : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created by WebLdapConnect
nModType

Specifies the type of modification. It can be one of the following:

  • WEB_LDAP_MOD_ADD. Add a directory entry

  • WEB_LDAP_MOD_DELETE. Delete a directory entry

  • WEB_LDAP_MOD_REPLACE. Replace a directory entry
sAttribute | Specifies the attribute type in the given entry to which the modification applies. It is simply a string indicating the attribute type name, for example, "mail", "cn", ...

Example

dcltrans
  transaction TMain
  var
    hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, "cn=adminname", "password");
    WebLdapAttributeAdd(hLdap, WEB_LDAP_MOD_REPLACE, "attribute");
    WebLdapValueAdd(hLdap, "value");
    WebLdapModify(hLdap, "cn=TestCN,o=Name");
    WebLdapDisconnect(hLdap);
  end TMain;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapBind Function

Action

Exchanges authentication information between the client and the server.

Include file

WebAPI.bdh

Syntax

WebLdapBind( in hLDAP : number,
             in sDN   : string optional,
             in sCred : string optional ): boolean;

Return value

  • true if the bind attempt was completed successfully

  • false otherwise

Parameter | Description
hLDAP | Handle to a Web connection that was created by WebLdapConnect.
sDN | An unambiguous name of the directory object that the client wishes to bind as (optional). This field may take a NULL value for the purposes of anonymous binds.
sCred | Authentication information used to authenticate the name, if any, provided in the bind request (optional). This value may be NULL.

Example

const
  LDAP_SIZELIMIT := 100;
  LDAP_TIMELIMIT := 10000;

dclrand
  rsName: RndFile("Gfname.rnd", 20);

dclfunc
  function FWebLdapPrintSearchResults(hLdap: number)
  var
    sName    : string(500);
    nEntries : number;
  begin
    nEntries := 0;

    while WebLdapNextEntry(hLdap, sName, STRING_COMPLETE, false) do
      nEntries := nEntries + 1;
      write("entry: "); write(sName); writeln;

      while WebLdapNextAttribute(hLdap, sName) do
        write(" attrib: "); write(sName); writeln;

        while WebLdapNextValue(hLdap, sName) do
          write(" value: "); write(sName); writeln;
        end;
      end;
    end;

    if (nEntries = 0) then
      write("No entries found");
      writeln;
    end;

    writeln;
  end FWebLdapPrintSearchResults;

dcltrans
  transaction TWebLdap
  var
    sQuery : string(1000);
    hLdap  : number;
    rsName : string;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, NULL, NULL);

    rsName := "adminname";
    sQuery := "cn=" + rsName;
    if (not WebLdapSearch(hLdap, "", NULL, sQuery, LDAP_SIZELIMIT, LDAP_TIMELIMIT)) then
      write("LDAP Search failed"); writeln;
    else
      FWebLdapPrintSearchResults(hLdap);
    end;

    WebLdapDisconnect(hLdap);
  end TWebLdap;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapCompare Function

Action

Compares an attribute type and value with a given LDAP directory entry.

Include file

WebAPI.bdh

Syntax

WebLdapCompare( in hLdap      : number,
                in sEntry     : string,
                in sAttribute : string,
                in sValue     : string,
                in nLength    : number optional ): boolean;

Return value

  • true if the attribute type and value are equal to the specified LDAP directory entry

  • false otherwise

Parameter | Description
hLdap | Handle to a connection that was created by WebLdapConnect.
sEntry | Name of the directory entry that will be compared with the attribute type and value
sAttribute | Attribute type that will be compared with the specified LDAP directory entry
sValue | Value type that will be compared with the specified LDAP directory entry
nLength | Length of the value type that will be compared with the specified LDAP directory entry (optional). This parameter has to be passed to the function only if the value contains binary data

Example

dcltrans
  transaction TWebLdapCompare
  var
    hLdap : number;
    equal : boolean;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    equal := WebLdapCompare(hLdap, "uid=user,o=company",
                           "attribute", "value1");
    equal := WebLdapCompare(hLdap, "uid=user,o=company",
                           "attribute", "value2");
    equal := WebLdapCompare(hLdap, "uid=user,o=company",
                           "attribute", "value3");
    WebLdapDisconnect(hLdap);
  end TWebLdapCompare;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapConnect Function

Action

Establishes a connection for LDAP transactions with a specified host.

Include file

WebAPI.bdh

Syntax

WebLdapConnect( inout hLDAP : number,
                in    sHost : string,
                in    nPort : number,
                in    nFlag : number optional ): boolean;

Return value

  • true if the connection attempt was completed successfully

  • false otherwise

Parameter | Description
hLDAP

Variable receiving a handle to the Web connection

If this parameter contains a handle to a Web connection prior to the WebLdapConnect function call, the memory allocated with the handle is released. Whenever you want to create a new Web connection, make sure this variable is initialized with 0 (this is automatically done within transactions when they are executed for the first time, but not within functions)
sHost | Domain name or IP address of the LDAP server, for example, hostname.com or 192.231.34.1
nPort | Port to connect to, usually WEB_PORT_LDAP (389)
nFlag

Flag specifiying the LDAP version (optional):

  • WEB_LDAP_FLAG_VERSION1

  • WEB_LDAP_FLAG_VERSION2

  • WEB_LDAP_FLAG_VERSION3

Besides, this flag specifies additional configuration of secure queries. Possible values are:

  • WEB_LDAP_FLAG_SSL

This value has to be set to 0 for insecure transactions (default).

Example

dcltrans
  transaction TWebLdap
  var
     hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
     WebLdapDisconnect(hLdap);
  end TWebLdap;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapDisconnect Function


WebLdapControlAdd Function

Action

Adds a control to the next WebLdapAdd, WebLdapCompare, WebLdapDelete, WebLdapModify, WebLdapRename, WebLdapSearch or WebLdapExtendedOperation function call. To assign multiple controls, this function must be called repeatedly.

Include file

WebAPI.bdh

Syntax

WebLdapControlAdd( in hLdap       : number,
                   in sOid        : string,
                   in sData       : string allownull,
                   in nLength     : number,
                   in bIsCritical : boolean,
                   in nFlag       : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created with WebLdapConnect.
sOid | The object identifier of the control.
sData

The data associated with the control

  • If you want to specify a zero-length value, set nLength to 0 and sData to a zero-length string.

  • To indicate that no data is associated with the control, set sData to NULL.
nLength | The length of sData.
bIsCritical | Specifies whether the control is critical to the operation.
nFlag

Specifies the kind of control. This parameter is one of the following:

  • WEB_LDAP_SERVER_CONTROL

  • WEB_LDAP_CLIENT_CONTROL

Example

const
  LDAP_SIZELIMIT := 100;
  LDAP_TIMELIMIT := 10000;
transaction TWebLdap
  var
  hLdap, nDataLen, nLenOid : number;
  sOid, sData              : string;
  bIsCritic                : boolean;
 const
    // this is a representation of a server-side sorting control
    // which specifies that results shall be sorted by cn in
    // ascending order
    cControlData:="\h300630040402636E";
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP,
                 WEB_LDAP_FLAG_VERSION3);
    WebLdapBind(hLdap, "cn=adminname", "password");
    WebLdapControlAdd(hLdap,"1.2.840.113556.1.4.473", cControlData,
                      sizeof(cControlData), true, WEB_LDAP_SERVER_CONTROL);
    if (not WebLdapSearch(hLdap, "o=MyCompany", NULL, "cn=*",
      LDAP_SIZELIMIT, LDAP_TIMELIMIT, 0)) then
      write("LDAP Search failed"); writeln;
    else
      TWebLdapPrintSearchResults(hLdap);
      write("Search ok"); writeln;
    end;

    nDataLen := 100; //returned sData size is max 100
    nLenOid := sizeof(sOid);

    WebLdapControlGet(hLdap, sOid, nLenOid, sData, nDataLen, bIsCritic);

    write("result control - ");
    write("oid:"); write(sOid);
    write(", data:"); write(sData);
    writeln;   WebLdapDisconnect(hLdap);
  end TWebLdap;
親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapControlGet Function

Action

Retrieves the control returned from the server after a WebLdapAdd, WebLdapCompare, WebLdapDelete, WebLdapModify, WebLdapRename, WebLdapSearch or WebLdapExtendedOperation function call. If the server has returned multiple controls, this function must be called repeatedly.

Include file

WebAPI.bdh

Syntax

WebLdapControlGet( in    hLdap       : number,
                   out   sOid        : string,
                   in    nOidLen     : number,
                   out   sData       : string,
                   inout nLength     : number,
                   out   bIsCritical : boolean): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created with WebLdapConnect.
sOid | The object identifier of the control.
nOidLen | Specifies the maximal length of sOid.
sData | The data associated with the control.
nLength | Specifies the maximal length of sData. After the function call, this parameter contains the actual length.
bIsCritical | Specifies whether the control is critical to the operation.

Example

const
  LDAP_SIZELIMIT := 100;
  LDAP_TIMELIMIT := 10000;

transaction TWebLdap
  var
    hLdap, nDataLen : number;
    sOid, sData     : string;
    bIsCritic       : boolean;
  const
    // this is a representation of a server-side sorting control
    // which specifies that results shall be sorted by cn in
    // ascending order
    cControlData:="\h300630040402636E";
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP,
                   WEB_LDAP_FLAG_VERSION3);
    WebLdapBind(hLdap, "cn=adminname", "password");
    WebLdapControlAdd(hLdap,"1.2.840.113556.1.4.473", cControlData,
                      sizeof(cControlData), true,
                      WEB_LDAP_SERVER_CONTROL);

     if (not WebLdapSearch(hLdap, "o=MyCompany", NULL, "cn=*",
      LDAP_SIZELIMIT, LDAP_TIMELIMIT, 0)) then
      write("LDAP Search failed"); writeln;
    else
      TWebLdapPrintSearchResults(hLdap);
        write("Search ok"); writeln;
    end;

    nDataLen := 100; //returned sData size is max 100
    nLenOid := sizeof(sOid);

    WebLdapControlGet(hLdap, sOid, nLenOid, sData, nDataLen, bIsCritic);
    write("result control - ");
    write("oid:"); write(sOid);
    write(", data:"); write(sData);
    writeln;

     WebLdapDisconnect(hLdap);
  end TWebLdap;
親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapDelete Function

Action

Removes an entry from an LDAP directory.

Include file

WebAPI.bdh

Syntax

WebLdapDelete( in hLdap  : number,
               in sEntry : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created by WebLdapConnect
sEntry | Name of the directory entry

Example

dcltrans
  transaction TMain
  var
    hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, "cn=adminname", "password");
    WebLdapDelete(hLdap, "cn=newCN,o=Name");
    WebLdapDisconnect(hLdap);
  end TMain;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function
WebLdapAdd Function
WebLdapModify Function


WebLdapDisconnect Function

Action

Closes the connection for LDAP transactions that was established with WebLdapConnect.

Include file

WebAPI.bdh

Syntax

WebLdapDisconnect( inout hLDAP: number );

Return value

  • true if disconnection was completed successfully

  • false otherwise

Parameter | Description
hLDAP | Handle to a Web connection that was created by WebLdapConnect

Example

dcltrans
  transaction TWebLdap
  var
    hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapDisconnect(hLdap);
  end TWebLdap;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function


WebLdapExtendedOperation Function

Action

Sends a request to the server to perform an extended operation synchronously.

Include file

WebAPI.bdh

Syntax

WebLdapExtendedOperation( in  hLdap         : number,
                          in  sRequestOid   : string,
                          in  sRequestData  : string,
                          in  nReqDataLen   : number,
                          out sReturnedOid  : string,
                          out nRetOidLen    : number,
                          out sReturnedData : string,
                          out nRetDataLen   : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created with WebLdapConnect.
sRequestOid | The object identifier of the extended operation.
sRequestData | The data associated with the extended operation.
nReqDataLen | The length of sRequestData.
sReturnedOid | Variable receiving the OID the server returns after having performed the extended operation.
nRetOidLen | Variable receiving the length of sReturnedOid.
sReturnedData | Variable receiving the data the server returned after having performed the extended operation.
nRetDataLen | Variable receiving the length of sReturnedData.
親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapGetNativeHandle Function

Action

Returns the native LDAP handle that can be passed to external functions.

Include file

WebAPI.bdh

Syntax

WebLdapGetNativeHandle(in hLdap: number): number;

Return value

the native handle

Parameter | Description
hLdap | Handle to a Web connection that was created with WebLdapConnect.

Example

transaction TWebLdap
  var
    hLdap, nHandle: number;
  begin
    WebLdapConnect(hLdap, "standardhost",WEB_PORT_LDAP, WEB_LDAP_FLAG_VERSION3);
    WebLdapBind(hLdap, "cn=adminname", "password");
    nHandle := WebLdapGetNativeHandle(hLdap);
    write("Native handle:"); writeln(nHandle); WebLdapDisconnect(hLdap);
  end TWebLdap;
親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapModify Function

Action

Modifies a specified LDAP directory entry. To create a new LDAP directory entry, call the WebLdapAdd function. Both the WebLdapAttributeAdd and the WebLdapValueAdd function are required to specify the directory entry modifications.

Include file

WebAPI.bdh

Syntax

WebLdapModify( in hLdap  : number,
               in sEntry : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created by WebLdapConnect
sEntry | Specifies the name of the directory entry

Example

dcltrans
  transaction TMain
  var
    hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, "cn=adminname", "password");
    WebLdapAttributeAdd(hLdap, WEB_LDAP_MOD_REPLACE, "attribute");
    WebLdapValueAdd(hLdap, "value");
    WebLdapModify(hLdap, "cn=TestCN,o=Name");
     WebLdapDisconnect(hLdap);
  end TMain;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function
WebLdapAdd Function
WebLdapDelete Function


WebLdapNextAttribute Function

Action

Steps through all attributes of the entry returned by a previous call to WebLdapNextEntry.

Include file

WebAPI.bdh

Syntax

WebLdapNextAttribute( in  hLDAP   : number,
                      out sName   : string,
                      in  nMaxLen : number optional): boolean

Return value

  • true if there was at least one attribute left to receive from the entry

  • false otherwise

Parameter | Description
hLDAP | Handle to a Web connection that was created by WebLdapConnect.
sName | This variable will receive the name of the next attribute.
nMaxLen | Specifies the maximum length of the attribute name (optional).

Example

dclfunc
  function TWebLdapPrintSearchResults(hLdap: number)
  var
    sName : string(500);
    nEntries : number;
  begin
    nEntries := 0;
    while WebLdapNextEntry(hLdap, sName, STRING_COMPLETE, false) do
    nEntries := nEntries + 1;
      write("entry: "); write(sName); writeln;
      while WebLdapNextAttribute(hLdap, sName) do
        write(" attrib: "); write(sName); writeln;
        while WebLdapNextValue(hLdap, sName) do
          write(" value: "); write(sName); writeln;
        end;
      end;
    end;

    if (nEntries = 0) then
      write("No entries found");
      writeln;
    end;
    writeln;
  end TWebLdapPrintSearchResults;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapNextEntry Function

Action

Steps through all results received from WebLdapSearch.

Include file

WebAPI.bdh

Syntax

WebLdapNextEntry( in  hLDAP     : number,
                  out sName     : string,
                  in  nMaxLen   : number,
                  in  bFriendly : boolean ): boolean;

Return value

  • true if there was at least one entry left to receive

  • false otherwise

Parameter | Description
hLDAP | Handle to a Web connection that was created by WebLdapConnect
sName | This variable will receive the name of the next entry
nMaxLen | Specifies the maximum length of the entry name
bFriendly | If this variable is set to true, the results are printed in a human-readable form

Example

dclfunc
  function TWebLdapPrintSearchResults(hLdap: number)
  var
    sName    : string(500);
    nEntries : number;
  begin    nEntries := 0;
    while WebLdapNextEntry(hLdap, sName, STRING_COMPLETE, false) do
      nEntries := nEntries + 1;
      write("entry: "); write(sName); writeln;
      while WebLdapNextAttribute(hLdap, sName) do
        write(" attrib: "); write(sName); writeln;
        while WebLdapNextValue(hLdap, sName) do
          write(" value: "); write(sName); writeln;
        end;
      end;
    end;

    if (nEntries = 0) then
      write("No entries found");
      writeln;
    end;
    writeln;
  end TWebLdapPrintSearchResults;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapNextValue Function

Action

Steps through all attributes of an entry returned by a previous call to WebLdapNextEntry.

Include file

WebAPI.bdh

Syntax

WebLdapNextValue( in  hLDAP   : number,
                  out sName   : string,
                  in  nMaxLen : number optional,
                  out nLen    : number optional,
                  out bBinary : boolean optional): boolean

Return value

  • true if there was at least one value left to receive from the attribute

  • false otherwise

Parameter | Description
hLDAP | Handle to a Web connection that was created by WebLdapConnect.
sName | This variable will receive the content of the next value.
nMaxLen | Specifies the maximum length of the value content (optional).
nLen | Variable receiving the actual size of the value content (optional).
bBinary | Variable receiving an indicator whether the sName variable contains binary data (optional).

Example

dclfunc
  function TWebLdapPrintSearchResults(hLdap: number)
  var
    sName : string(500);
    nEntries : number;
  begin
    nEntries := 0;

    while WebLdapNextEntry(hLdap, sName, STRING_COMPLETE, false) do
      nEntries := nEntries + 1;
      write("entry: "); write(sName); writeln;

      while WebLdapNextAttribute(hLdap, sName) do
        write(" attrib: "); write(sName); writeln;

        while WebLdapNextValue(hLdap, sName) do
          write(" value: "); write(sName); writeln;
        end;
      end;
    end;

    if(nEntries = 0) then
      write("No entries found");
      writeln;
    end;

    writeln;
  end TWebLdapPrintSearchResults;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapRename Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapRename Function

Action

Renames an existing LDAP directory entry. This function allows only renaming leaf entries, not interior nodes of an LDAP directory.

Include file

WebAPI.bdh

Syntax

WebLdapRename( in hLdap      : number,
               in sOldName   : string,
               in sNewName   : string,
               in sNewParent : string allownull,
               in bDelete    : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created by WebLdapConnect
sOldName | Name of the directory entry to be renamed. This entry must be a leaf in the LDAP directory tree
sNewName | New relative distinguished name (RDN) to assign to the entry
sNewParent | Specifies the distinguished name of the new parent entry. Pass NULL to the function if you do not want to move the entry to a different location in the directory tree
bDelete | Specifies whether the attribute values in the old relative distinguished name should be removed from the entry or retained as non-distinguished values

Example

dcltrans
  transaction TMain
  var
    hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, "cn=adminname", "password");
    WebLdapRename(hLdap, "cn=oldCN,o=Name", "cn=newCN ", NULL, false);
    WebLdapDisconnect(hLdap);
  end TMain;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapSearch Function
WebLdapValueAdd Function


WebLdapSearch Function

Action

Requests that a search is performed on its behalf by a server. This can be used to read attributes from a single entry, from entries immediately below a particular entry, or a whole sub tree of entries.

Include file

WebAPI.bdh

Syntax

WebLdapSearch( in  hLDAP      : number,
               in  sBase      : string,
               in  sAttrib    : string allownull,
               in  sFilters   : string,
               in  nSizeLimit : number optional,
               in  nTimeLimit : number optional,
               in  nFlags     : number optional,
               out nEntries   : number optional): boolean;

Return value

  • true if the search request was completed successfully

  • false if an error occurred or no matching entries can be found

Parameter | Description
hLDAP | Handle to a Web connection that was created by WebLdapConnect
sBase | An unambiguous name that is the base object entry relative to which the search is to be performed
sAttrib | A list of the attributes to be returned from each entry that matches the search filter. There are two special values that may be used: an empty list with no attributes, and the attribute description string "*". Both of these signify that all user attributes are to be returned. (The "*" allows the client to request all user attributes in addition to specific operational attributes).
sFilters | A filter that defines the conditions that must be fulfilled in order for the search to match a given entry
nSizeLimit | A size limit that restricts the maximum number of entries to be returned as a result of the search (optional). A value of 0 in this field indicates that no client-requested size limit restrictions apply for the search.
nTimeLimit | A time limit that restricts the maximum time (in seconds) allowed for a search (optional). A value of 0 in this field indicates that no client-requested time limit restrictions apply for the search.
nFlags

You can combine various flags for the search query (optional).

An indicator as to whether search results will contain both attribute types and values or just attribute types. Setting this flag causes only attribute types (not values) to be returned; otherwise both attribute types and values are returned. (Not set by default.)

  • WEB_LDAP_FLAG_ATTRS_ONLY

An indicator as to how alias objects (as defined in X.501) are to be handled in searching. The possible values of this flag have the following semantics:

  • WEB_LDAP_FLAG_DEREF_NEVER. Do not dereference aliases in searching or in locating the base object of the search

  • WEB_LDAP_FLAG_DEREF_SEARCHING. Dereference aliases in subordinates of the base object in searching, but not in locating the base object of the search

  • WEB_LDAP_FLAG_DEREF_FINDING. Dereference aliases in locating the base object of the search, but not when searching subordinates of the base object

  • WEB_LDAP_FLAG_DEREF_ALWAYS. Dereference aliases both in searching and in locating the base object of the search. This is the default setting

An indicator of the scope to be used for performing the search. These are:

  • WEB_LDAP_FLAG_SCOPE_BASE

  • WEB_LDAP_FLAG_SCOPE_ONELEVEL

  • WEB_LDAP_FLAG_SCOPE_SUBTREE (default)
nEntries | Receives the number of entries returned by the search query (optional)

Example

const
  LDAP_SIZELIMIT := 100;
  LDAP_TIMELIMIT := 10000;
dclrand
  rsName: RndFile("Gfname.rnd", 20);

dclfunc
  function FWebLdapPrintSearchResults(hLdap: number)
  var
    sName    : string(500);
    nEntries : number;
  begin
    nEntries := 0;

    while WebLdapNextEntry(hLdap, sName, STRING_COMPLETE, false) do
      nEntries := nEntries + 1;
      write("entry: "); write(sName); writeln;

      while WebLdapNextAttribute(hLdap, sName)do
        write(" attrib: "); write(sName); writeln;

        while WebLdapNextValue(hLdap, sName) do
          write(" value: "); write(sName); writeln;
        end;
      end;
    end;

    if (nEntries = 0) then
      write("No entries found");
      writeln;
    end;

    writeln;
  end FWebLdapPrintSearchResults;

dcltrans
  transaction TWebLdap
  var
    sQuery : string(1000);
    hLdap  : number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, NULL, NULL);
    sQuery := "cn=" + rsName;

    if (not WebLdapSearch(hLdap, "", NULL, sQuery, LDAP_SIZELIMIT, LDAP_TIMELIMIT)) then
      write("LDAP Search failed"); writeln;
    else
     FWebLdapPrintSearchResults(hLdap);
    end;

     WebLdapDisconnect(hLdap);
  end TWebLdap;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapValueAdd Function


WebLdapValueAdd Function

Action

Adds, replaces or deletes an attribute value of an LDAP directory entry.

Include file

WebAPI.bdh

Syntax

WebLdapValueAdd( in hLdap   : number,
                 in sValue  : string,
                 in nLength : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hLdap | Handle to a Web connection that was created by WebLdapConnect
sValue | Specifies one of the attribute values to add, delete or replace. To assign multiple values to an attribute, this function must be called multiple times.
nLength | Length of the attribute value (optional). Passing this parameter to the function is necessary if the attribute value contains binary data.

Example

dcltrans
  transaction TMain
  var
    hLdap: number;
  begin
    WebLdapConnect(hLdap, "standardhost", WEB_PORT_LDAP);
    WebLdapBind(hLdap, "cn=adminname", "password");
    WebLdapAttributeAdd(hLdap, WEB_LDAP_MOD_REPLACE, "attribute");
    WebLdapValueAdd(hLdap, "value");
    WebLdapModify(hLdap, "cn=TestCN,o=Name");
    WebLdapDisconnect(hLdap);
  end TMain;

SilkEssential sample

LDAP.sep

親トピック: LDAP Functions Reference
関連資料
WebLdapConnect Function
WebLdapAttributeAdd Function
WebLdapNextAttribute Function
WebLdapNextEntry Function
WebLdapNextValue Function
WebLdapRename Function
WebLdapSearch Function
WebLdapModify Function
WebLdapAdd Function


MAPI Functions Reference

MAPI (Messaging Application Programming Interface) is a message architecture and a client interface component. It enables applications to access multiple message systems with only one interface.

Mail Clients like MS Outlook implement this interface. Therefore it is possible to use MAPI for accessing Microsoft Exchange Mailboxes via MS Outlook’s MAPI interface.

Silk Performer introduces a new API for accessing MAPI mailboxes and for creating/deleting and modifying messages within those mailboxes.

Problems with MAPI

Security

Most Mail Clients in their latest versions introduce new security options. Microsoft Outlook or Eudora for example – prohibit MAPI Access to their application by default.

In order to use Silk Performer MAPI Support – those security settings need to be changed. This is normally done in the options menu of the respective client application.

Incomplete Implementation

Not all mail clients implement the full range of the MAPI interface. If a MAPI client that does not support a certain interface method is used, you will likely see replay error like “Function not supported”. This is therefore no problem of Silk Performer – it is just a limitation of the used client.

MAPI Support in Silk Performer

Silk Performer MAPI Support is only for replaying. There is no recording of MAPI activities so far.

The new API functions are:

Logon/Logoff:

  • MapiLogoff: Closes a MAPI Session that has been opened with MapiLogon.

  • MapiLogon: Creates a new MAPI Session. You need to specify the MAPI profile name and a password to logon to a new MAPI session.

Sending:

  • MapiSendMessage: Creates a new message in the active session and sends it right away.

  • MapiSendMessageEx: Sends a message that has been created with MapiCreateMessage.

Creating/Deleting/Saving:

  • MapiCreateMessage: Creates a new message and returns a handle for that new message.

  • MapiDeleteMessage: Deletes a message.

  • MapiSaveMessage: Saves changes to a message.

Accessing Message Properties:

  • MapiGetLastError: Calling this method returns the error number of the last MAPI call.

  • MapiGetMessageAttachment: Retrieves information about a message attachment.

  • MapiGetMessageProperty: Retrieves message property values from a valid MAPI Message.

  • MapiGetMessageRecipient: Retrieves information about a message recipient.

  • MapiGetMessage: Retrieves a message identified by the Message ID from an active MAPI Session.

  • MapiGetNextMsgId: Returns the next Message ID in the Inbox of the MAPI Session.

  • MapiSetMessageAttachment: Sets information about a message attachment.

  • MapiSetMessageProperty: Sets a message property value of a valid MAPI Message.

  • MapiSetMessageRecipient: Sets information about a message recipient.

Misc functions:

  • MapiInit: Initializes MAPI Support for the current virtual user.

  • MapiExit: Unloads MAPI support for the current virtual user.

  • MapiFreeMessage: Frees the memory occupied by the message handle of the virtual user.

  • MAPI Messages
  • MAPI Sample
    Illustrates a sample that uses the new MAPI API
  • Logon/Logoff Functions
  • Sending Functions
  • Creating/Deleting/Saving Functions
  • Accessing Message Properties
  • Misc Functions
親トピック: Internet Functions


MAPI Messages

MAPI Messages can be accessed by their unique ID’s. MapiGetNextMsgId is the function that allows to you query for all message ID’s in your Inbox.

A full sample bdf file can be found in the samples directory of your installation.

Getting Message ID’s

To get the first message – simply call:

MapiGetNextMsgId(ghSession, “”, sNextMsgId)

To get the next message pass a message id as second parameter, e.g.:

MapiGetNextMsgId(ghSession, sLastMsgId, sNextMsgId).

The following loop will allow you to iterate through all messages:

sLastMsgId := “”;
while(MapiGetNextMsgId(ghSession, sLastMsgId, sNextMsgId)) do
  SLastMsgId := sNextMsgId;
end;

Access a message

To access message properties (text, sender, recipient, …) you have to call MapiGetMessage. MapiGetMessage returns a message handle on which you can call several different functions to get/set message properties. It is very important to FREE a message handle with MapiFreeMessage after the handle is no longer needed!

A message has the following properties:

  • MAPI_PROP_MSG_SUBJECT

  • MAPI_PROP_MSG_NOTETEXT

  • MAPI_PROP_MSG_MSGTYPE

  • MAPI_PROP_MSG_DATERECEIVED

  • MAPI_PROP_MSG_CONVERSATIONID

  • MAPI_PROP_MSG_SENDER_NAME

  • MAPI_PROP_MSG_SENDER_ADDRESS

  • MAPI_PROP_MSG_RECIPIENT_COUNT

  • MAPI_PROP_MSG_ATTACH_COUNT

Properties can be accessed with MapiGetMessageProperty and MapiSetMessageProperty. If you change a message property you have to save the message with MapiSaveMessage in order to commit the changes.

Access recipients

A message can have multiple recipients. The number of recipients can be accessed with the property MAPI_PROP_MSG_RECIPIENT_COUNT. The recipient itself can be access with MapiGetMessageRecipient and the respective recipient ID. The recipient ID is the index of the recipient where the first index is 0. So – a message with a recipient count value of 2 has recipients with index 0 and 1!

When you set recipients you first have to set the number of recipients in the MAPI_PROP_MSG_RECIPIENT_COUNT and then set each recipient individually with MapiSetMessageRecipient.

Access attachments

Attachments are similar to recipients. First you have to get the number of attachments by getting property MAPI_PROP_MSG_ATTACH_COUNT. Then you can use MapiGetMessageAttachment and the respective attachment ID.

In order to get attachments you have to ensure that you call MapiGetMessage with false for the parameter bSuppressAttachments.

When you set attachments you first have to set the number of attachments in the MAPI_PROP_MSG_ATTACH_COUNT and then set each attachment individually with MapiSetAttachment.

親トピック: MAPI Functions Reference


MAPI Sample

The following sample uses the new MAPI API to:

  • Logon to a MAPI Session

  • Read all messages in the Inbox

  • Delete the first message in the Inbox

  • Change the subject of the first message in the Inbox

  • Sends a new Message

benchmark BenchmarkName

use "kernel.bdh"
use "mapi.bdh"

var
  ghSession : number init 0;
// Workload Section
dcluser
  user
    VirtUser
  transactions
    TInit           : begin;
    TGetMsgs        : 1;
    TSendMsg        : 1;
    TSendMsgEx      : 1;
    TDeleteMsg      : 1;
    TChangeMsg      : 1;
    TEnd            : end;

// Transactions Section
dcltrans
  transaction TInit
  begin
    MapiInit();
    ghSession := MapiLogon("Outlook", null);
    if(ghSession = 0) then halt; end;
  end TInit;

  transaction TGetMsgs
  var
    hMsg, nRecipCount, nAttachCount, i : number;
    sLastMsgId, sNextMsgId             : string;
    sValue                             : string;
  begin
    sLastMsgId := "";
    // Iterate through all Mails and retrieve mail properties
    while(MapiGetNextMsgId(ghSession, sLastMsgId, sNextMsgId)) do
      hMsg := MapiGetMessage(ghSession, true, false, false, false, sNextMsgId);

      MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_MSGTYPE, sValue);
      writeln("MsgType: " + sValue);
      MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_SUBJECT, sValue);
      writeln("Subject: " + sValue);
      MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_DATERECEIVED, sValue);
      writeln("Date: " + sValue);
      MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_SENDER_NAME, sValue);
      writeln("Send-Name: " + sValue);
      MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_SENDER_ADDRESS, sValue);
      writeln("Sender-Address: " + sValue);

      // Iterate through all Recipients
      if(MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_RECIPIENT_COUNT, sValue)) then
        nRecipCount := number(sValue);
        writeln("RecipientCount: " + sValue);

        for i:=0 to nRecipCount-1 do
          MapiGetMessageRecipient(hMsg, i, true, sValue);
          writeln("Recipient-Name: " + sValue);
          MapiGetMessageRecipient(hMsg, i, false, sValue);
          writeln("Recipient-Address: " + sValue);
        end;
      end;

       // Iterate through all Attachments
      if(MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_ATTACH_COUNT, sValue)) then
        nAttachCount := number(sValue);
        writeln("AttachCount: " + sValue);

        for i:=0 to nAttachCount-1 do
          MapiGetMessageAttachment(hMsg, i, true, sValue);
          writeln("Attach-File: " + sValue);
          MapiGetMessageAttachment(hMsg, i, false, sValue);
          writeln("Attach-Path: " + sValue);
        end;
      end;

      writeln("---------------------------------------------------");

      // Free the message
      MapiFreeMessage(hMsg);
      sLastMsgId := sNextMsgId;
    end;
  end TGetMsgs;

  transaction TSendMsg
  begin
    // Send a new message
    MapiSendMessage(
      ghSession,
      "TestSubject",
      "Test Message Text" ,
      "",
      "SenderName",
      "sender@sendersdomain",
      "RecipientName",
      "recipient@recipientdomain");
  end TSendMsg;

  transaction TSendMsgEx
  var
    hMsg : number;
  begin
    // Create a new message
    hMsg := MapiCreateMessage(
      "TestSubject",
      "Test Message Text",
      "",
      "SenderName",
      "sender@sendersdomain",
      "RecipientName",
      "recipient@recipientdomain");
    if(hMsg = 0) then halt; end;

    // Add a 2nd Recipient
    MapiSetMessageProperty(hMsg, MAPI_PROP_MSG_RECIPIENT_COUNT, "2");
    MapiSetMessageRecipient(hMsg, 1, "2nd Recipient", "test@test.com",
MAPI_MSG_RECIPTYPE_CC);

    // Add an attachment
    MapiSetMessageProperty(hMsg, MAPI_PROP_MSG_ATTACH_COUNT, "1");
    MapiSetMessageAttachment(hMsg, 0, "test.txt", "c:\\temp\\test.txt");

    // Send the message
    MapiSendMessageEx(ghSession, hMsg);

    // Free the message
    MapiFreeMessage(hMsg);
  end TSendMsgEx;

  transaction TDeleteMsg
  var
    sMsgId : string;
    hMsg   : number;
  begin
    // delete the first message
    if MapiGetNextMsgId(ghSession, "", sMsgId) then
      MapiDeleteMessage(ghSession, sMsgId);
    end;
  end TDeleteMsg;

  transaction TChangeMsg
  var
    sMsgId, sSubject : string;
    hMsg   : number;
  begin
    // retrieve the first message and change the message subject
    if MapiGetNextMsgId(ghSession, "", sMsgId) then
      hMsg := MapiGetMessage(ghSession, true, false, true, true, sMsgId);
      if(hMsg <> 0) then
        // get the subject - add the value 'Modified' and set the new value
        MapiGetMessageProperty(hMsg, MAPI_PROP_MSG_SUBJECT, sSubject);
        sSubject := sSubject + " Modified";
        MapiSetMessageProperty(hMsg, MAPI_PROP_MSG_SUBJECT, sSubject);

        // Save the changes
        MapiSaveMessage(ghSession, hMsg, sMsgId);

        // Free Message
        MapiFreeMessage(hMsg);
      end;
    end;
  end TChangeMsg;

  transaction TEnd
  begin
    // Logoff
    MapiLogoff(ghSession);
    MapiExit();
  end TEnd;
親トピック: MAPI Functions Reference


Logon/Logoff Functions

  • MapiLogoff Function
    Closes a MAPI Session that has been opened with MapiLogon.
  • MapiLogon Function
    Creates a new MAPI Session.
親トピック: MAPI Functions Reference


MapiLogoff Function

Action

Closes a MAPI Session that has been opened with MapiLogon.

Include file

Mapi.bdh

Syntax

MapiLogoff( in hSession : number ) : boolean;
Parameter | Description
hSession | Valid MAPI Session Handle

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Logon/Logoff Functions
関連資料
MAPI Sample


MapiLogon Function

Action

Creates a new MAPI Session. You need to specify the MAPI profile name and a password to logon to a new MAPI session. The method returns a valid session handle that will be passed to other MAPI functions for sending/reading/deleting messages.

Inclue file

Mapi.bdh

Syntax

MapiLogon( in sProfileName : string,
           in sPassword    : string allownull ): number;
Parameter | Description
sProfileName | Name of your local MAPI profile, e.g.: Outlook, Exchange Server, …
sPassword | If you need a password to logon to your MAPI profile - provide the password. Otherwise pass NULL.

Return value

  • Session Handle if successful
  • 0 otherwise

Example

See MAPI Sample

親トピック: Logon/Logoff Functions
関連資料
MAPI Sample


Sending Functions

  • MapiSendMessage Function
    Creates a new message in the active session and sends it right away.
  • MapiSendMessageEx Function
    Sends a message that has been created with MapiCreateMessage.
親トピック: MAPI Functions Reference


MapiSendMessage Function

Action

Creates a new message in the active session and sends it right away.

Include file

Mapi.bdh

Syntax

MapiSendMessage( in hSession      : number,
                 in sSubject      : string,
                 in sMessageText  : string,
                 in sMessageType  : string,
                 in sSenderName   : string,
                 in sSenderAddress: string,
                 in sToName       : string,
                 in sToAddress    : string ) : boolean;
Parameter | Description
hSession | Valid MAPI Session Handle
sSubject | Subject for the Mail Message
sMessageText | Body Text for the Mail Message
sMessageType | For normal messages - this parameter should be NULL. Depending on the Mail Client - different Message Types might be supported, e.g.: Notes, Calendar, …
sSenderName | Display name of the Mail Sender
sSenderAddress | Mail address of the Mail Sender
sToName | Display name of the Mail Recipient
sToAddress | Mail address of the Mail Recipient

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Sending Functions
関連資料
MAPI Sample


MapiSendMessageEx Function

Action

Sends a message that has been created with MapiCreateMessage. Before you send a message you can use the MapiSetMessage functions to set additional recipients or add attachments.

Include file

Mapi.bdh

Syntax

MapiSendMessageEx(   in   hSession    : number;
                     in   hMessage    : number); boolean
Parameter | Description
hSession | Valid MAPI Session Handle
hMessage | Valid MAPI Message Handle

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Sending Functions
関連資料
MAPI Sample


Creating/Deleting/Saving Functions

  • MapiCreateMessage Function
    Creates a new message and returns a handle for that new message.
  • MapiDeleteMessage Function
    Deletes a message.
  • MapiSaveMessage Function
    Saves changes to a message.
親トピック: MAPI Functions Reference


MapiCreateMessage Function

Action

Creates a new message and returns a handle for that new message.

The message can be changed afterwards and send on an active session. The message can then be sent with MapiSendMessageEx and can be altered with the MapiSetMessage functions.

Include file

Mapi.bdh

Syntax

MapiCreateMessage( in sSubject      : string,
                   in sMessageText  : string,
                   in sMessageType  : string,
                   in sSenderName   : string,
                   in sSenderAddress: string,
                   in sToName       : string,
                   in sToAddress    : string ) : number;
Parameter | Description
sSubject | Subject for the Mail Message
sMessageText | Body Text for the Mail Message
sMessageType | For normal messages - this parameter should be NULL. Depending on the Mail Client - different Message Types might be supported, e.g.: Notes, Calendar, …
sSenderName | Display name of the Mail Sender
sSenderAddress | Mail address of the Mail Sender
sToName | Display name of the Mail Recipient
sToAddress | Mail address of the Mail Recipient

Return value

  • Message handle if successful
  • 0 if failed

Example

See MAPI Sample

親トピック: Creating/Deleting/Saving Functions
関連資料
MAPI Sample


MapiDeleteMessage Function

Action

Deletes a message.

Include file

Mapi.bdh

Syntax

MapiDeleteMessage( in hSession: number,
                   in sMsgId  :string ) : boolean;
Parameter | Description
hSession | Valid MAPI Session Handle.
sMsgId | Message ID that should be deleted.

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Creating/Deleting/Saving Functions
関連資料
MAPI Sample


MapiSaveMessage Function

Action

Saves changes to a message. A message can be changed with MapiSetMessage functions and afterwards - those changes can be saved with this function.

Include file

Mapi.bdh

Syntax

MapiSaveMessage( in hSession: number,
                 in hMessage: number,
                 in sMsgId  : string ) : boolean;
Parameter | Description
hSession | Valid MAPI Session Handle
hMessage | Valid MAPI Message Handle
sMsgId | Valid MAPI Message ID.

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Creating/Deleting/Saving Functions
関連資料
MAPI Sample


Accessing Message Properties

  • MapiGetLastError Function
    Returns the error number of the last MAPI call.
  • MapiGetMessage Function
    Retrieves a message identified by the Message ID from an active MAPI Session.
  • MapiGetMessageAttachment Function
    Retrieves information about a message attachment.
  • MapiGetMessageProperty Function
    Retrieves message property values from a valid MAPI Message.
  • MapiGetMessageRecipient Function
    Retrieves information about a message recipient.
  • MapiGetNextMsgId Function
    Returns the next message ID in the inbox of the MAPI session.
  • MapiSetMessageAttachment Function
    Sets information about a message attachment.
  • MapiSetMessageProperty Function
    Sets a message property value of a valid MAPI Message.
  • MapiSetMessageRecipient Function
    Sets information about a message recipient.
親トピック: MAPI Functions Reference


MapiGetLastError Function

Action

Returns the error number of the last MAPI call. If the last MAPI call was successful - 0 will be returned.

注: GetLastError returns the internal mapi error code if the last error was a MAPI Runtime error (6).

Include file

Mapi.bdh

Syntax

MapiGetLastError() : number;

Return value

  • Native MAPI Error Code
  • 0 if no error occurred

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiGetMessage Function

Action

Retrieves a message identified by the Message ID from an active MAPI Session. The returned handle can be used to access the Message properties.

When retrieving a message - attachments will be stored to temporary files, which might have some impact on the overall performance. Check the additional parameters to suppress attachements.

Inlcude file

Mapi.bdh

Syntax

MapiGetMessage( in hSession           : number,
                in bPeekMessage       : boolean,
                in bBodyAsAttachment  : boolean,
                in bEnvelopeOnly      : boolean,
                in bSupressAttachments: boolean,
                in sMsgId             : string ) : number;
Parameter | Description
hSession | Valid MAPI Session Handle
bPeekMessage | If true - the message is not marked as read. Some Mail Clients display read/unread messages with a different style
bBodyAsAttachment | If true - the message body will be the first attachment and can be retrieved with MapiGetMessageAttachment
bEnvelopeOnly | If true - only message header information is accessible. Neither attachments nor the message text is accessible. This option greatly enhances the performance.
bSuppressAttachment | If true - no attachments will be retrieved. This option greatly enhances the performance as no temporary files need to be written.
sMsgId | Message ID of the message that should be read. You can obtain a Message ID with MapiGetNextMsgId.

Return value

  • Message Handle if successful
  • 0 otherwise

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiGetMessageAttachment Function

Action

Retrieves information about a message attachment. Getting the property value of MAPI_PROP_MSG_ATTACH_COUNT will retrieve the number of recipients. The attachment ID's are 0 based.

Include file

Mapi.bdh

Syntax

MapiGetMessageAttachment( in hMessage     : number,
                          in nAttachmentID: number,
                          in bFileOrPath  : boolean,
                          in sAttachment  : string ) : boolean;
Parameter | Description
nMessageID | Valid MAPI Message Handle
nAttachmentID | ID of the attachment that should be retrieved. This needs to be a value between 0 and MAPI_PROP_MSG_ATTACH_COUNT-1. The ID is 0 based! So - the first attachment has ID 0 - the second one 1, …
bFileOrPath | True to retrieve the filename of the attachment. False to retrieve the full path of the attachment.
sAttachment | Filename or Full Path of the Attachment.

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiGetMessageProperty Function

Action

Retrieves message property values from a valid MAPI Message.

Include file

Mapi.bdh

Syntax

MapiGetMessageProperty( in hMessage      : number,
                        in nPropertyID   : number,
                        in sPropertyValue: string ) : boolean;
Parameter | Description
hMessage | Valid MAPI Message Handle
nPropertyID

Property ID that should be retrieved:

  • MAPI_PROP_MSG_SUBJECT
  • MAPI_PROP_MSG_NOTETEXT
  • MAPI_PROP_MSG_MSGTYPE
  • MAPI_PROP_MSG_DATERECEIVED
  • MAPI_PROP_MSG_CONVERSATIONID
  • MAPI_PROP_MSG_SENDER_NAME
  • MAPI_PROP_MSG_SENDER_ADDRESS
  • MAPI_PROP_MSG_RECIPIENT_COUNT
  • MAPI_PROP_MSG_ATTACH_COUNT
sPropertyValue | Retrieves the property value

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiGetMessageRecipient Function

Action

Retrieves information about a message recipient. Getting the property value of MAPI_PROP_MSG_RECIPIENT_COUNT will retrieve the number of recipients. The recipient ID's are 0 based.

Include

Mapi.bdh

Syntax

MapiGetMessageRecipient( in hMessage             : number,
                         in nRecipientID         : number,
                         in bNameOrAddress       : boolean,
                         in sRecipient: string ) : boolean;
Parameter | Description
hMessage | Valid MAPI Message Handle
nRecipientID | ID of the recipient that should be retrieved. This needs to be a value between 0 and MAPI_PROP_MSG_RECIPIENT_COUNT-1. The ID is 0 based! So - the first recipient has ID 0 - the second one 1, …
bNameOrAddress | True to retrieve the name of the recipient. False to retrieve the address of the recipient
sRecipient | Recipient's name or address

Return value

  • true if successful
  • false otherwise

Exmple

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiGetNextMsgId Function

Action

Returns the next message ID in the inbox of the MAPI session. To retrieve the first message, pass an empty message ID as LastMsgId. Please note that MapiGetNextMsgId retrieves messages in chronologically ascending order, i.e., from oldest to most current. Thus, to retrieve the most current message, it is necessary to iterate through all messages in the inbox.

Include file

Mapi.bdh

Syntax

MapiGetNextMsgId( in hSession  : number,
                  in sLastMsgId: string,
                  in sNextMsgId: string ) : boolean;
Parameter | Description
hSession | Valid MAPI Session Handle
sLastMsgId | Last Message ID or empty value to get the first message
sNextMsgId | Will retrieve the next message in the current MAPI Session.

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiSetMessageAttachment Function

Action

Sets information about a message attachment. Getting the property value of MAPI_PROP_MSG_ATTACH_COUNT will retrieve the number of recipients. The attachment ID's are 0 based.

Include file

Mapi.bdh

Syntax

MapiSetMessageAttachment( in hMessage     : number,
                          in nAttachmentID: number,
                          in sFileName    : string,
                          in sFullPath    : string ) : boolean;
Parameter | Description
hMessage | Valid MAPI Message Handle.
nAttachmentID | ID of the attachment that should be set. This needs to be a value between 0 and MAPI_PROP_MSG_ATTACH_COUNT-1. The ID is 0 based! So - the first attachment has ID 0 - the second one 1, …
sFileName | Filename of the attachment.
sFullPath | Fullpath of the attachment.

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiSetMessageProperty Function

Action

Sets a message property value of a valid MAPI Message.

Include file

Mapi.bdh

Syntax

MapiSetMessageProperty( in hMessage      : number,
                        in nPropertyID   : number,
                        in sPropertyValue: string ) : boolean;
Parameter | Description
hMessage | Valid MAPI Message Handle
nPropertyID

Property ID that should be retrieved:

  • MAPI_PROP_MSG_SUBJECT
  • MAPI_PROP_MSG_NOTETEXT
  • MAPI_PROP_MSG_MSGTYPE
  • MAPI_PROP_MSG_DATERECEIVED
  • MAPI_PROP_MSG_CONVERSATIONID
  • MAPI_PROP_MSG_SENDER_NAME
  • MAPI_PROP_MSG_SENDER_ADDRESS
  • MAPI_PROP_MSG_RECIPIENT_COUNT
  • MAPI_PROP_MSG_ATTACH_COUNT
sPropertyValue | New property value

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


MapiSetMessageRecipient Function

Action

Sets information about a message recipient. Getting the property value of MAPI_PROP_MSG_RECIPIENT_COUNT will retrieve the number of recipients. The recipient ID's are 0 based.

Include file

Mapi.bdh

Syntax

MapiSetMessageRecipient( in hMessage      : number,
                         in nRecipientID  : number,
                         in sName         : string,
                         in sAddress      : string,
                         in nRecipientType: number ) : boolean;
Parameter | Description
hMessageID | Valid MAPI Message Handle
nRecipientID | ID of the recipient that should be set. This needs to be a value between 0 and MAPI_PROP_MSG_RECIPIENT_COUNT-1. The ID is 0 based. So - the first recipient has ID 0 - the second one 1, …
sName | Name of the Recipient
sAddress | Address of the Recipient
nRecipientType
Type of recipient:
  • MAPI_MSG_RECIPTYPE_ORIG
  • MAPI_MSG_RECIPTYPE_TO
  • MAPI_MSG_RECIPTYPE_CC
  • MAPI_MSG_RECIPTYPE_BCC

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Accessing Message Properties
関連資料
MAPI Sample


Misc Functions

  • MapiExit Function
    Unloads MAPI support for the current virtual user. Should be called as last method in a test run.
  • MapiFreeMessage Function
    Frees the memory occupied by the message handle of the virtual user.
  • MapiInit Function
    Initializes MAPI Support for the current virtual user.
親トピック: MAPI Functions Reference


MapiExit Function

Action

Unloads MAPI support for the current virtual user. Should be called as last method in a test run.

Include file

Mapi.bdh

Syntax

MapiExit();

Example

See MAPI Sample

親トピック: Misc Functions
関連資料
MAPI Sample


MapiFreeMessage Function

Action

Frees the memory occupied by the message handle of the virtual user. This method should always be called if a message handle is no longer needed.

Include file

Mapi.bdh

Syntax

MapiFreeMessage ( in hMessage : number );
Parameter | Description
hMessage | Valid MAPI Message Handle

Return value

None

Example

See MAPI Sample

親トピック: Misc Functions
関連資料
MAPI Sample


MapiInit Function

Action

Initializes MAPI Support for the current virtual user. Needs to be called before other MAPI methods are called

Include file

Mapi.bdh

Syntax

MapiInit() :  boolean;

Return value

  • true if successful
  • false otherwise

Example

See MAPI Sample

親トピック: Misc Functions
関連資料
MAPI Sample


MMS Functions Reference

Silk Performer offers the ability to compose and parse MMS messages, which can be sent and received using HTTP.

MMS manipulation functions:

  • MmsAddContent Function
    Adds content data to the MMS body.
  • MmsAddContentEx Function
    Adds content data to the MMS body.
  • MmsAddFile Function
    Adds a file to the MMS body.
  • MmsAddFileEx Function
    Adds a file to the MMS body.
  • MmsCopyMms Function
    Copies the binary representation of the specified MMS to the provided buffer.
  • MmsCreateMms Function
    Creates a new MMS.
  • MmsDeleteMms Function
    Deletes a MMS.
  • MmsGetCustomHeader Function
    Retrieves the specified custom MMS header.
  • MmsGetHeader Function
    Retrieves the specified header of a MMS.
  • MmsGetHeaderString Function
    Retrieves the specified header of a MMS.
  • MmsParseMms Function
    Parses a MMS from its binary representation.
  • MmsSetCustomHeader Function
    Sets a custom MMS header.
  • MmsSetHeader Function
    Sets a MMS header.
  • MmsSetHeaderString Function
    Sets a MMS header.
親トピック: Internet Functions


MmsAddContent Function

Action

Adds content data to the MMS body.

Include file

MmsLib.bdh

Syntax

MmsAddContent( in hMms             : number,
               in sData            : string,
               in nDataLen         : number,
               in nContentType     : number,
               in sContentId       : string,
               in sContentLocation : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
sData | Data to add to the MMS body.
nDataLen | Length of the data.
nContentType | Specifies the content type. See mmslib.bdh for available values.
sContentId | Specifies the content ID.
sContentLocation | Specifies the content location.

Example

dcltrans
  transaction TInit
  var    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddContent(hMms, "only text", 9, WAP_CONTENT_TextPlain, "text", "text");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsAddContentEx Function
MmsAddFileEx Function
MmsAddFile Function


MmsAddContentEx Function

Action

Adds content data to the MMS body. The content type is specified as text. Use this function to append content with no well-known (numeric) content type.

Include file

MmsLib.bdh

Syntax

MmsAddContentEx( in hMms             : number,
                 in sData            : string,
                 in nDataLen         : number,
                 in sContentType     : string,
                 in sContentId       : string,
                 in nContentLocation : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
sData | Data to add to the MMS body.
nDataLen | Length of the data.
sContentType | Specifies the content type. See mmslib.bdh for available values.
sContentId | Specifies the content ID.
sContentLocation | Specifies the content location.

Example

dcltrans
  transaction TInit
    var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddContentEx(hMms, "only text", 9, "text/plain", "text", "text");
    WebPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsAddContent Function
MmsAddFileEx Function
MmsAddFile Function


MmsAddFile Function

Action

Adds a file to the MMS body.

Include file

MmsLib.bdh

Syntax

MmsAddFile( in hMms             : number,
            in sFile            : string,
            in nContentType     : number,
            in sContentId       : string,
            in sContentLocation : string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
sFile | File to add to the MMS.
nContentType | Specifies the content type. See mmslib.bdh for available values.
sContentId | Specifies the content ID.
sContentLocation | Specifies the content location.

Example

dcltrans
  transaction TInit
    var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFile(hMms, "smile.gif", WAP_CONTENT_ImageGif, "smile.gif", "smile.gif");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsParseMms Function
MmsAddContentEx Function
MmsAddContent Function
MmsAddFileEx Function


MmsAddFileEx Function

Action

Adds a file to the MMS body. The content type is specified as text. Use this function to append content with no well-known (numeric) content type.

Include file

MmsLib.bdh

Syntax

MmsAddFileEx( in hMms             : number,
              in sFile            : string,
              in sContentType     : string,
              in sContentId       : string,
              in nContentLocation : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
sFile | File to add to the MMS.
sContentType | Specifies the content type. See mmslib.bdh for available values.
sContentId | Specifies the content ID.
sContentLocation | Specifies the content location.

Example

dcltrans
  transaction TInit
  var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFileEx(hMms, "audio.amr", "audio/amr", "sound", "sound");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsAddContentEx Function
MmsAddContent Function
MmsAddFile Function


MmsCopyMms Function

Action

Copies the binary representation of the specified MMS to the provided buffer.

Include file

MmsLib.bdh

Syntax

MmsCopyMms( in  hMms    : number,
            out sMms    : string,
            in  nMaxMms : number optional,
            out nCopied : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
sMms | Variable that retrieves the binary representation of the MMS.
nMaxMms | Optional: Maximum length of the string that can be returned. This value must be less than or equal to the size of the string variable sMms.
nCopied | Optional: Variable receiving the number of actually copied bytes.

Example

dcltrans
  transaction TInit
  var
    hMms   : number;
    sMms   : string(0x10000);
    nBytes : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFile(hMms, "smile.gif", WAP_CONTENT_ImageGif, "smile.gif", "smile.gif");
    MmsCopyMms(hMms, sMms, STRING_COMPLETE, nBytes);
    Writedata(sMms, nBytes);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsParseMms Function


MmsCreateMms Function

Action

Creates a new MMS.

Include file

MmsLib.bdh

Syntax

MmsCreateMms( out hMms : number );
Parameter | Description
hMms | Variable receiving a handle for the MMS.

Example

dcltrans
  transaction TInit
    var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFile(hMms, "smile.gif", WAP_CONTENT_ImageGif, "smile.gif", "smile.gif");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsDeleteMms Function


MmsDeleteMms Function

Action

Deletes a MMS. Each MMS that iss created with the MmsCreateMms function must be deleted using this function.

Include file

MmsLib.bdh

Syntax

MmsDeleteMms( in hMms : number );
Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.

Example

dcltrans
  transaction TInit
var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFile(hMms, "smile.gif", WAP_CONTENT_ImageGif, "smile.gif", "smile.gif");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsCreateMms Function


MmsGetCustomHeader Function

Action

Retrieves the specified custom MMS header. To retrieve the values of known MMS headers, use the MmsGetHeader and MmsGetHeaderString functions instead.

Include file

MmsLib.bdh

Syntax

MmsGetCustomHeader( in  hMms      : number,
                    in  sHeader   : string,
                    out sValue    : string,
                    in  nMaxValue : number optional,
                    out nCopied   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
sHeader | Specifies the custom MMS header.
sValue | Specifies the value of the custom MMS header.
nMaxValue | Optional: Maximum length of the string that can be returned. This value must be less than or equal to the size of the string variable sValue.
nCopied | Optional: Variable receiving the number of actually copied bytes.

Example

dcltrans
  transaction TWap
  var
    sData   : string(0x10000);
    nData   : number;
    hMms    : number;
    nStatus : number;
    sGroup  : string;
  begin
    nData := WapGetContent(sData);
    MmsCreateMms(hMms);
    MmsParseMms(hMms, sData, nData, true);
    MmsGetCustomHeader(hMms, "GROUP", sGroup);
    MmsDeleteMms(hMms);
    print(sGroup);
  end TWap;
親トピック: MMS Functions Reference
関連資料
MmsSetCustomHeader Function
MmsGetHeader Function
MmsSetHeader Function
MmsSetHeaderString Function


MmsGetHeader Function

Action

Retrieves the specified header of a MMS. If the header is not a number type header, use MmsGetHeaderString instead.

Include file

MmsLib.bdh

Syntax

MmsGetHeader( in  hMms    : number,
              in  nHeader : number,
              out nValue  : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
nHeader
One of the following constants:
  • MMS_HEADER_ContentType
  • MMS_HEADER_Date
  • MMS_HEADER_DeliveryReport
  • MMS_HEADER_MsgClass
  • MMS_HEADER_MsgType
  • MMS_HEADER_MmsVersion
  • MMS_HEADER_Priority
  • MMS_HEADER_ReadReply
  • MMS_HEADER_ReportAllowed
  • MMS_HEADER_ResponseStatus
  • MMS_HEADER_Status
nValue Variable that retrieves the value of the specified header. Based on the specified header type, one of the following values is used:
Header
Value
nHeader = MMS_HEADER_ContentType
  • WAP_CONTENT_ApplicationVndWapMultipartMixed
  • WAP_CONTENT_ApplicationVndWapMultipartRelated
nHeader = MMS_HEADER_Date
Value equals the number of seconds from 1970-01-01, 00:00:00 GMT. 0 specifies the current date.
nHeader = MMS_HEADER_DeliveryReport

  • MMS_Yes

  • MMS_No

nHeader = MMS_HEADER_MsgClass
  • MMS_MSGCLASS_Personal
  • MMS_MSGCLASS_Advertisement
  • MMS_MSGCLASS_Informational
  • MMS_MSGCLASS_Auto
nHeader = MMS_HEADER_MsgType
  • MMS_M_SEND_REQ
  • MMS_M_SEND_CONF
  • MMS_M_NOTIFICATION_IND
  • MMS_M_NOTIFYRESP_IND
  • MMS_M_RETRIEVE_CONF
  • MMS_M_ACKNOWLEDGE_IND
  • MMS_M_DELIVERY_IND
nHeader = MMS_HEADER_MmsVersion
MMS_MSGVERSION_10
nHeader = MMS_HEADER_Priority
  • MMS_PRIORITY_Low
  • MMS_PRIORITY_Normal
  • MMS_PRIORITY_High
nHeader = MMS_HEADER_ReadReply

  • MMS_Yes

  • MMS_No

nHeader = MMS_HEADER_ReportAllowed

  • MMS_Yes

  • MMS_No

nHeader = MMS_HEADER_ResponseStatus
  • MMS_RESPONSESTATUS_Ok
  • MMS_RESPONSESTATUS_ErrorUnspecified
  • MMS_RESPONSESTATUS_ErrorServiceDenied
  • MMS_RESPONSESTATUS_ErrorMessageFormatCorrupt
  • MMS_RESPONSESTATUS_ErrorSendingAddressUnresolved
  • MMS_RESPONSESTATUS_ErrorMessageNotFound
  • MMS_RESPONSESTATUS_ErrorNetworkProblem
  • MMS_RESPONSESTATUS_ErrorContentNotAccepted
  • MMS_RESPONSESTATUS_ErrorUnsupportedMessage
nHeader = MMS_HEADER_Status
  • MMS_STATUS_Expired
  • MMS_STATUS_Retrieved
  • MMS_STATUS_Rejected
  • MMS_STATUS_Deferred
  • MMS_STATUS_Unrecognised

Example

dcltrans
  transaction TWap
  var
    sData   : string(0x10000);
    nData   : number;
    hMms    : number;
    nStatus : number;
  begin
    nData := WapGetContent(sData);
    MmsCreateMms(hMms);
    MmsParseMms(hMms, sData, nData, true);
    MmsGetHeader(hMms, MMS_HEADER_ResponseStatus, nStatus);
    MmsDeleteMms(hMms);
    print(string(nStatus));
  end TWap;
親トピック: MMS Functions Reference
関連資料
MmsSetHeader Function
MmsGetHeaderString Function


MmsGetHeaderString Function

Action

Retrieves the specified header of a MMS. If the header is not a string type header, use MmsGetHeader instead.

Include file

MmsLib.bdh

Syntax

MmsGetHeaderString( in  hMms      : number,
                    in  nHeader   : number,
                    out sValue    : string,
                    in  nMaxValue : number optional,
                    out nCopied   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
nHeader One of the following constants:
  • MMS_HEADER_Bcc
  • MMS_HEADER_Cc
  • MMS_HEADER_ContentLocation
  • MMS_HEADER_From
  • MMS_HEADER_MsgId
  • MMS_HEADER_Subject
  • MMS_HEADER_To
  • MMS_HEADER_TransactionId
sValue Variable that retrieves the value of the specified header. Based on the specified header type, the returned string specifies one of the following:
  • MMS_HEADER_Bcc: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_Cc: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_ContentLocation: Content location of the MMS.
  • MMS_HEADER_From: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_MsgId: The message ID.
  • MMS_HEADER_Subject: The message subject.
  • MMS_HEADER_To: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_TransactionId: The transaction ID.
nMaxValue | Optional: Maximum length of the string that can be returned. This value must be less than or equal to the size of the string variable sValue.
nCopied | Optional: Variable receiving the number of actually copied bytes.

Example

dcltrans
  transaction TWap
  var
    sData   : string(0x10000);
    nData   : number;
    hMms    : number;
    sFrom   : string;
  begin
    nData := WapGetContent(sData);
    MmsCreateMms(hMms);
    MmsParseMms(hMms, sData, nData, true);
    MmsGetHeaderString(hMms, MMS_HEADER_From, sFrom);
    MmsDeleteMms(hMms);
    print(sFrom);
  end TWap;
親トピック: MMS Functions Reference
関連資料
MmsGetHeader Function
MmsSetHeaderString Function
MmsSetHeader Function


MmsParseMms Function

Action

Parses a MMS from its binary representation. This function can be used to prepare a received MMS for header checking, for example checking response status.

Include file

MmsLib.bdh

Syntax

MmsParseMms( in hMms         : number,
             in sData        : string,
             in nDataLen     : number optional,
             in bHeadersOnly : boolean optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS returned by a call to MmsCreateMms.
sData | Binary representation of the MMS to be parsed.
nDataLen | Optional: Length of the binary data.
bHeadersOnly | Optional: Specifies whether the parsing process should be stopped after the MMS headers (sufficient for header checking). A value of false specifies that the entire MMS should be parsed.

Example

dcltrans
  transaction TWap
  var
    sData   : string(0x10000);
    nData   : number;
    hMms    : number;
    sFrom   : string;
  begin
    nData := WapGetContent(sData);
    MmsCreateMms(hMms);
    MmsParseMms(hMms, sData, nData, true);
    MmsGetHeaderString(hMms, MMS_HEADER_From, sFrom);
    MmsDeleteMms(hMms);
    print(sFrom);
  end TWap;
親トピック: MMS Functions Reference
関連資料
MmsCopyMms Function


MmsSetCustomHeader Function

Action

Sets a custom MMS header. The header and its value must be specified. To set known MMS headers, use the MmsSetHeader or MmsSetHeaderString functions instead.

Include file

MmsLib.bdh

Syntax

MmsSetCustomHeader( in hMms    : number,
                    in sHeader : string,
                    in sValue  : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
sHeader | Specifies the custom MMS header.
sValue | Specifies the value of the custom MMS header.

Example

dcltrans
transaction TInit
var
  hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsSetCustomHeader(hMms, "GROUP", "77");
    MmsAddFile(hMms, "info.gif", WAP_CONTENT_ImageGif, "", "info.gif");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsGetCustomHeader Function
MmsSetHeader Function
MmsSetHeaderString Function


MmsSetHeader Function

Action

Sets a MMS header. The MMS_HEADER_MsgType is a mandatory header that specifies the MMS type. Based on the MMS type, all other headers are either mandatory or optional. See the MMS Encapsulation Protocol specification for details.

Include file

MmsLib.bdh

Syntax

MmsSetHeader( in hMms    : number,
              in nHeader : number,
              in nValue  : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
nHeader One of the following constants:
  • MMS_HEADER_ContentType
  • MMS_HEADER_Date
  • MMS_HEADER_DeliveryReport
  • MMS_HEADER_MsgClass
  • MMS_HEADER_MsgType (mandatory)
  • MMS_HEADER_MmsVersion
nValue Based on the specified MMS header type, one of the following values:
Header
Value
nHeader = MMS_HEADER_ContentType
  • WAP_CONTENT_ApplicationVndWapMultipartMixed
  • WAP_CONTENT_ApplicationVndWapMultipartRelated
nHeader = MMS_HEADER_Date
Value equals the number of seconds from 1970-01-01, 00:00:00 GMT. 0 specifies the current date.
nHeader = MMS_HEADER_DeliveryReport

  • MMS_Yes

  • MMS_No

nHeader = MMS_HEADER_MsgClass
  • MMS_MSGCLASS_Personal
  • MMS_MSGCLASS_Advertisement
  • MMS_MSGCLASS_Informational
  • MMS_MSGCLASS_Auto
nHeader = MMS_HEADER_MsgType
  • MMS_M_SEND_REQ
  • MMS_M_SEND_CONF
  • MMS_M_NOTIFICATION_IND
  • MMS_M_NOTIFYRESP_IND
  • MMS_M_RETRIEVE_CONF
  • MMS_M_ACKNOWLEDGE_IND
  • MMS_M_DELIVERY_IND
nHeader = MMS_HEADER_MmsVersion
MMS_MSGVERSION_10
nHeader = MMS_HEADER_Priority
  • MMS_PRIORITY_Low
  • MMS_PRIORITY_Normal
  • MMS_PRIORITY_High
nHeader = MMS_HEADER_ReadReply

  • MMS_Yes

  • MMS_No

nHeader = MMS_HEADER_ReportAllowed

  • MMS_Yes

  • MMS_No

Example

dcltrans
transaction TInit
    var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFile(hMms, "info.gif", WAP_CONTENT_ImageGif, "", "info.gif");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsSetHeaderString Function
MmsGetHeader Function


MmsSetHeaderString Function

Action

Sets a MMS header. Based on the specified MMS type (MmsSetHeader) the listed headers are either mandatory or optional. See the MMS Encapsulation Protocol specification for details.

Include file

MmsLib.bdh

Syntax

MmsSetHeaderString( in hMms    : number,
                    in nHeader : number,
                    in sValue  : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMms | Handle for the MMS, returned by a call to MmsCreateMms.
nHeader One of the following constants:
  • MMS_HEADER_Bcc
  • MMS_HEADER_Cc
  • MMS_HEADER_ContentLocation
  • MMS_HEADER_From
  • MMS_HEADER_MsgId
  • MMS_HEADER_Subject
  • MMS_HEADER_To
  • MMS_HEADER_TransactionId
sValue Based on the specified header type, the sValue parameter specifies one of the following:
  • MMS_HEADER_Bcc: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_Cc: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_ContentLocation: Content location of the MMS.
  • MMS_HEADER_From: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_MsgId: The message ID.
  • MMS_HEADER_Subject: The message subject.
  • MMS_HEADER_To: An MMS address (phone number, e-mail address, IP address).
  • MMS_HEADER_TransactionId: The transaction ID.

Example

dcltrans
transaction TInit
var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType, WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFile(hMms, "info.gif", WAP_CONTENT_ImageGif, "", "info.gif");
    WapPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions Reference
関連資料
MmsSetHeader Function
MmsGetHeaderString Function


POP3 Functions Reference

The following function set is a complete implementation of the Post Office Protocol 3. The MD5 message digest encryption standard and other optional POP3 commands are also implemented. The POP3 functions can also be used mixed with the Application Level functions. This means it is possible to use the same handle hWeb with WebPopConnect and WebTcpipRecv, for instance. Most of the POP3 functions send a command to the POP3 server and interpret the response immediately. For example, WebPopUser sends the USER command to the server and returns “true” if the server responds with "+OK".

POP3 functions

  • WebPopApop Function
    Sends a timestamp that is stored internally for use with WebPopApop.
  • WebPopCommand Function
    Sends a command string to a POP3 server.
  • WebPopConnect Function
    Connects to a POP3 server.
  • WebPopDele Function
    Marks the mail with number nMsg as deleted.
  • WebPopList Function
    Sends the LIST command to the server, which responds with a maildrop.
  • WebPopNoop Function
    Sends the No Operation command to the server.
  • WebPopPass Function
    Sends the password as plain ASCII text to the server.
  • WebPopQuit Function
    Sends the Quit command to the server.
  • WebPopResponse Function
    Retrieves a standard single-line response from the POP3 server.
  • WebPopResponseML Function
    Retrieves a multi-line response from the POP3 server.
  • WebPopRetr Function
    Retrieves a message with number nMsg from the server.
  • WebPopRset Function
    Invokes a rollback on the POP3 server. The server then performs an undo on message deletion.
  • WebPopShutdown Function
    Shuts down the connection to the POP3 server. First use WebPopQuit to commit the changes on the server.
  • WebPopStat Function
    Retrieves the mailbox status after a successful login.
  • WebPopTop Function
    Retrieves from the server the first nLines lines of the mail with number nMsg.
  • WebPopUidl Function
    Retrieves from the server a unique message ID string for message nMsg.
  • WebPopUser Function
    Sends the mailbox user name to the server.
親トピック: Internet Functions


WebPopApop Function

Action

POP3 server login using MD5 message digest authentication. In response, in the banner greeting (during WebPopConnect) the server sends a timestamp that is stored internally for use with WebPopApop. The concatenated string of timestamp and password is then encrypted and sent to the server.

Include file

WebAPI.bdh

Syntax

WebPopApop( in hPop  : number,
            in sName : string,
            in sPass : string ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
sName | User name
sPass | Password

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);

    // try to log in using secure MD5 encryption
    if not WebPopApop(hPop, USERNAME, PASSWORD) then

    // if APOP fails, try normal user/pass sequence
      if not WebPopUser(hPop, USERNAME) or
          not WebPopPass(hPop, PASSWORD) then
        WebPopShutdown(hPop);
        return 1;
      end;
    end;

    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopPass Function
WebPopStat Function


WebPopCommand Function

Action

Sends a command string to a POP3 server.

Include file

WebAPI.bdh

Syntax

WebPopCommand( in hPop     : number,
               in sCommand : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
sCommand | Command string. Make sure to append a carriage return and a line feed command ("\r\n") to the command string.

Example

dcltrans
  transaction TWebPopCommand
  const
    USERNAME := "username";
    PASSWORD := "password";
    COMMAND  := "...\r\n";
  // specify command string
  var
    hPop: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopCommand(hPop, COMMAND);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPopCommand;
親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopResponse Function
WebPopResponseML Function


WebPopConnect Function

Action

Connects to a POP3 server.

Include file

WebAPI.bdh

Syntax

WebPopConnect( out hPop    : number,
               in sHost    : string,
               in nPort    : number,
               in nSecure  : number optional ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop

Variable receiving a handle to the Web connection

If this parameter contains a handle to a Web connection prior to the WebPopConnect function call, the memory allocated with the handle is released. Whenever you want to create a new Web connection, make sure this variable is initialized with 0 (this is automatically done within transactions when they are executed for the first time, but not within functions)
sHost | Domain name or IP address of the POP3 server, for example, hostname.com or 192.231.34.1
nPort | Port to connect to, usually WEB_PORT_POP3
nSecurity

Specifies whether to establish a secure connection to the remote server (optional). Possible options are:

  • WEB_CONNECT_NONE. Establishes an insecure connection to the server (default)

  • WEB_CONNECT_SSL. Establishes a secure connection using SSL

Example

dcltrans
  transaction TWebPop3
  var
    hPop: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf, WebSecure01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopShutdown Function


WebPopDele Function

Action

Marks the mail with number nMsg as deleted.

Include file

WebAPI.bdh

Syntax

WebPopDele( in hPop : number,
            in nMsg : number ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
nMsg | Number of the message to delete

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);

     // try to log in using secure MD5 encryption
    if not WebPopApop(hPop, USERNAME, PASSWORD) then

       // if APOP fails, try normal user/pass sequence
      if not WebPopUser(hPop, USERNAME) or
        not WebPopPass(hPop, PASSWORD) then
        WebPopShutdown(hPop);
        return 1;
      end;
    end;

    // retrieve mail status information
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);

    // retrieve and delete all messages
    while nMessages > 0 do
      WebPopRetr(hPop, nMessages);
      WebPopDele(hPop, nMessages);
      nMessages := nMessages - 1;
    end;

    // try to delete msg 123456789 - an error msg will occur
    WebPopDele(hPop, 123456789);

    // roll back the delete command (no msgs will be deleted)
    WebPopRset(hPop);

    // commit pop transaction
    // (usually marked messages will be deleted)
    // There is nothing to delete due to the pop transaction
    // reset - WebPopRset
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopRset Function
WebPopQuit Function


WebPopList Function

Action

Sends the LIST command to the server, which responds with a maildrop.

Include file

WebAPI.bdh

Syntax

WebPopList( in hPop: number,
            in nMsg: number ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
nMsg | Number of the message to list. Pass the IGNORE flag to the function to disable use of this parameter

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);
    WebPopRset(hPop);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function


WebPopNoop Function

Action

Sends the No Operation command to the server. This command can be used to check the availability of the POP3 server.

Include file

WebAPI.bdh

Syntax

WebPopNoop( in hPop: number ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);
    WebPopNoop(hPop);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;
親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function


WebPopPass Function

Action

Sends the password as plain ASCII text to the server. Use WebPopUser first.

Include file

WebAPI.bdh

Syntax

WebPopPass( in hPop  : number,
            in sPass : string ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
sPass | Password

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);
    WebPopRset(hPop);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopApop Function
WebPopStat Function


WebPopQuit Function

Action

Sends the Quit command to the server. The server then commits the transaction by physically deleting all marked messages. Use WebPopShutdown after WebPopQuit to close the Internet connection.

Include file

WebAPI.bdh

Syntax

WebPopQuit( in hPop: number ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);
    WebPopRset(hPop);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopRset Function
WebPopDele Function


WebPopResponse Function

Action

Retrieves a standard single-line response from the POP3 server.

Include file

WebAPI.bdh

Syntax

WebPopResponse( in  hPop      : number,
                out sResponse : string,
                in  nMaxLen   : number): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
sResponse | String buffer to hold the response. Can be set to NULL to use the internal buffer. The complete response is read from the server even if sResponse is too short to hold it.
nMaxLen | Maximum size of the returned response. Specify STRING_COMPLETE to get all received data.

Example

WebPopResponse(hPop, sResponse, STRING_COMPLETE);
WebPopResponse(hPop, NULL, 0);
親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopResponseML Function


WebPopResponseML Function

Action

Retrieves a multi-line response from the POP3 server.

Include file

WebAPI.bdh

Syntax

WebPopResponseML(in hPop: number): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
注: Multiline responses are terminated by CRLF DOT CRLF.
注: This function is used only after a WebTcpipSend command, which sends the custom POP3 command to the server. The response data is discarded after retrieval.
親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopResponse Function
WebTcpipSend Function


WebPopRetr Function

Action

Retrieves a message with number nMsg from the server.

Include file

WebAPI.bdh

Syntax

WebPopRetr( in  hPop     : number,
            in  nMsg     : number,
            out sMailMsg : string optional,
            in  nMaxSize : number optional): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect.
nMsg | Number of the message to retrieve.
sMailMsg | String buffer receiving the mail message (optional).
nMaxSize | Size of the string buffer receiving the mail message (optional). Specify STRING_COMPLETE to get all received data.

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize : number;
    sMsg                   : string;
  begin    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    // try to log in using secure MD5 encryption
    if not WebPopApop(hPop, USERNAME, PASSWORD) then
      // if APOP fails, try normal user/pass sequence
      if not WebPopUser(hPop, USERNAME) or
      not WebPopPass(hPop, PASSWORD) then
      WebPopShutdown(hPop); return 1;
      end;
    end;

    // retrievemail status information
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);

    // retrieve and delete all messages
    while nMessages > 0 do
      WebPopRetr(hPop, nMessages, sMsg);
      WebPopDele(hPop, nMessages);
      nMessages := nMessages - 1;
    end;

    // roll back the delete command (no msgs will be deleted)
    WebPopRset(hPop);

    // commit pop transaction
    WebPopQuit(hPop);

    WebPopShutdown(hPop);
  end TWebPop3;

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function


WebPopRset Function

Action

Invokes a rollback on the POP3 server. The server then performs an undo on message deletion.

Include file

WebAPI.bdh

Syntax

WebPopRset( in hPop: number ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);
    WebPopRset(hPop);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopDele Function
WebPopQuit Function


WebPopShutdown Function

Action

Shuts down the connection to the POP3 server. First use WebPopQuit to commit the changes on the server.

Include file

WebAPI.bdh

Syntax

WebPopShutdown( inout hPop  : number,
                in    nMode : number optional ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
nMode

Determines the shutdown mode (optional). Any of the following options is possible:

  • WEB_SHUTDOWN_GRACEFUL. Initiates a graceful shutdown: first closes and then resets the connection

  • WEB_SHUTDOWN_IMMEDIATE. Initiates a standard connection close (default)

  • WEB_SHUTDOWN_RESET. Resets the connection

Example

dcltrans
  transaction TWebPop3
  var
   hPop: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf, WebSecure01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function


WebPopStat Function

Action

Retrieves the mailbox status after a successful login.

Include file

WebAPI.bdh

Syntax

WebPopStat( in  hPop       : number,
            out nMsgNumber : number,
            out nMsgSize   : number ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
nMsgNumber | Parameter that receives the total number of messages available in the mailbox
nMsgSize | Parameter that receives the total size in bytes of available messages in the mailbox

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);
    WebPopRset(hPop);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopUser Function
WebPopApop Function
WebPopPass Function


WebPopTop Function

Action

Retrieves from the server the first nLines lines of the mail with number nMsg.

Include file

WebAPI.bdh

Syntax

WebPopTop(in hPop   : number,
          in nMsg   : number,
          in nLines : number): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
nMsg | Number of the message whose header is to be retrieved
nLines | Maximum size of the header sent by the server
親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopUidl Function
WebPopUser Function
WebPopList Function


WebPopUidl Function

Action

Retrieves from the server a unique message ID string for message nMsg.

Include file

WebAPI.bdh

Syntax

WebPopUidl( in hPop : number,
            in nMsg : number ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
nMsg | Number of the message whose ID is to be retrieved
親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUser Function
WebPopList Function


WebPopUser Function

Action

Sends the mailbox user name to the server.

Include file

WebAPI.bdh

Syntax

WebPopUser( in hPop  : number,
                  in sUser : string ): boolean;

Return value

  • true if the response was successfully received and the server confirmed with "+OK"

  • false otherwise

Parameter | Description
hPop | Handle to a Web connection that was created by WebPopConnect
sUser | User name

Example

dcltrans
  transaction TWebPop3
  const
    USERNAME := "username";
    PASSWORD := "password";
  var
    hPop, nMessages, nSize: number;
  begin
    WebPopConnect(hPop, "standardhost", WEB_PORT_POP3);
    WebPopUser(hPop, USERNAME);
    WebPopPass(hPop, PASSWORD);
    WebPopStat(hPop, nMessages, nSize);
    WebPopList(hPop, IGNORE);
    WebPopRset(hPop);
    WebPopQuit(hPop);
    WebPopShutdown(hPop);
  end TWebPop3;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: POP3 Functions Reference
関連資料
WebPopConnect Function
WebPopTop Function
WebPopUidl Function
WebPopApop Function
WebPopPass Function
WebPopStat Function


Radius Functions Reference

Silk Performer offers a RADIUS client API that enables simulation of user authentication, authorization, and accounting in various scenarios. Typically the RADIUS protocol is used by ISPs and enterprises to manage access to the Internet or internal networks, wireless networks, and integrated e-mail services. In particular, a Remote Access Server, a Virtual Private Network server, a Network switch with port-based authentication, and a Network Access Server (NAS), are all gateways that control access to the network and all have a RADIUS client component that communicates with the RADIUS server.

Silk Performer's RADIUS API uses the Java Framework, and therefore requires that a Java Runtime Environment (JRE) be installed. To access Radius functions you must include the header file Radius.bdh in your scripts.

RADIUS functions include:

  • RadInit Function
    Initializes Java Framework and the Radius classes.
  • RadExit Function
    Frees all memory and uninitializes the Java Framework.
  • RadAuthenticate Function
    Attempts to authenticate the RADIUS server by transmitting a list of attributes (previously set using RadSetAttribute...() functions) to the server and retrieving a list of attributes from the server.
  • RadAccounting Function
    Sends accounting information to the RADIUS accounting server.
  • RadSetAttributeBinary Function
    Sets a binary attribute in the list of attributes that is sent to the RADIUS server during authentication.
  • RadSetAttributeNumber Function
    Sets a numeric attribute in the list of attributes that is sent to the RADIUS server during authentication.
  • RadGetAttributeNumber Function
    Retrieves a numeric attribute value from the list of attributes that is returned from the RADIUS server during authentication.
  • RadSetAttributeString Function
    Sets a string attribute in the list of attributes that is sent to the RADIUS server during authentication.
  • RadGetAttributeString Function
    Retrieves a string attribute value from the list of attributes that's returned by the RADIUS server during authentication.
  • RadClearAttributeList Function
    Clears the list of attributes that's sent to the RADIUS server during authentication.
親トピック: Internet Functions
関連概念
Radius


RadInit Function

Action

Initializes Java Framework and the Radius classes.

Include file

radius.bdh

Syntax

RadInit( in sServer   : string,
         in nAuthPort : number,
         in nAcctPort : number,
         in sSecret   : string,
         in nTimeout  : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sServerl | Name or IP address of the RADIUS server
nAuthPort | UDP port where RADIUS authentication service is listening
nAcctPort | UDP port where RADIUS accounting service is listening
sSecret | Secret is used to access RADIUS service
nTimeout | Optional timeout value in milliseconds after communication is canceled

Example

dcltrans
  transaction TInit
  begin
    RadInit("radserver", 1812, 1813, "secret");
  end TInit;
親トピック: Radius Functions Reference


RadExit Function

Action

Frees all memory and uninitializes the Java Framework.

Include file

radius.bdh

Syntax

RadExit( ): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TEnd
  begin
    RadExit();
  end TEnd;
親トピック: Radius Functions Reference


RadAuthenticate Function

Action

Attempts to authenticate the RADIUS server by transmitting a list of attributes (previously set using RadSetAttribute...() functions) to the server and retrieving a list of attributes from the server. Returned attributes are accessed using RadGetAttribute...() functions.

Include file

radius.bdh

Syntax

RadAuthenticate( in sType  : string,
                 in sLogin : string,
                 in sPass  : string ): number;

Return value

  • RAD_AccessAccept if authentication is successful

  • RAD_AccessReject if authentication fails

Parameter | Description
sType

Authentication type. Valid options include:

  • RAD_AUTH_PAP

  • RAD_AUTH_CHAP

  • RAD_AUTH_MSCHAP

  • RAD_AUTH_MSCHAP2

  • RAD_AUTH_EAPMD5
sLogin | Login name.
sPass | Pass phrase valid for the login name.

Example

dcltrans
  transaction TRun
  var
    nCode : number;
  begin
    RadSetAttributeNumber(RAD_NasPort, 1234);
    RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
    nCode := RadAuthenticate(RAD_AUTH_MSCHAP2, "user", "pass");
    if nCode = RAD_AccessAccept then
      Print("Authentication successful");
      Print("Service Type = " + string(RadGetAttributeNumber(RAD_ServiceType)));
      Print("Framed_Protocol = " +string(RadGetAttributeNumber(RAD_FramedProtocol)));
      Print("Login_IP_Host = " + RadGetAttributeString(RAD_LoginIpHost));
      Print("Login_TCP_Port = " +string(RadGetAttributeNumber(RAD_LoginTcpPort)));
      Print("Reply_Message = " + RadGetAttributeString(RAD_ReplyMessage));
    else
      Print("Authentication failed");
    end;
  end TRun;
親トピック: Radius Functions Reference


RadAccounting Function

Action

Sends accounting information to the RADIUS accounting server. Accounting information is comprised of a list of attributes (previously set using RadSetAttribute...() functions) that are sent to the server. A list of attributes is also retrieved from the server. Returned attributes are accessed using RadGetAttribute...() functions.

Include file

radius.bdh

Syntax

RadAccounting( ): number;

Return value

  • RAD_AccountingResponse

Example

dcltrans
  transaction TRun
  var
    nCode : number;
  begin
    RadSetAttributeString(RAD_NasIpAddress, "123.123.123.123");
    RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
    RadSetAttributeNumber(RAD_AcctStatusType, ACCT_STATUS_START);
    nCode := RadAccounting();
  end TRun;
親トピック: Radius Functions Reference


RadSetAttributeBinary Function

Action

Sets a binary attribute in the list of attributes that is sent to the RADIUS server during authentication.

Include file

radius.bdh

Syntax

RadSetAttributeBinary( in nAttributeId    : number
                       in sAttributeValue : string,
                       in nLen            : number optional );
Parameter | Description
nAttributeId | Attribute identification. Any attribute value can be set as a binary data, although it is more comfortable to set them using the related typed function.
sAttributeValue | Binary value of the attribute to be set.
nLen | Number of character to be set (optional).

Example

dcltrans
  transaction TRun
  var
    nCode : number;
  begin
    RadSetAttributeNumber(RAD_NasPort, 1234);
    RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
    RadSetAttributeBinary(RAD_VendorSpecific, "\h000001370b0a153ea6378f1b7012");
    nCode := RadAuthenticate(RAD_AUTH_MSCHAP2, "user", "pass");
    if nCode = RAD_AccessAccept then
      Print("Authentication successful");
      Print("Service Type = " + string(RadGetAttributeNumber(RAD_ServiceType)));
      Print("Framed_Protocol = " + string(RadGetAttributeNumber(RAD_FramedProtocol)));
      Print("Login_IP_Host = " + RadGetAttributeString(RAD_LoginIpHost));
      Print("Login_TCP_Port = " + string(RadGetAttributeNumber(RAD_LoginTcpPort)));
      Print("Reply_Message = " + RadGetAttributeString(RAD_ReplyMessage));
    else
      Print("Authentication failed");
    end;
  end TRun;
親トピック: Radius Functions Reference


RadSetAttributeNumber Function

Action

Sets a numeric attribute in the list of attributes that is sent to the RADIUS server during authentication.

Include file

radius.bdh

Syntax

RadSetAttributeNumber( in nAttributeId    : number,
                       in nAttributeValue : number );
Parameter | Description
nAttributeId

Attribute identification. Valid values are:

  • RAD_NasPort

  • RAD_ServiceType

  • RAD_FramedProtocol

  • RAD_FramedCompression

  • RAD_NasPortType

  • RAD_PortLimit

  • RAD_AcctStatusType

  • RAD_AcctDelayTime

  • RAD_AcctInputOctets

  • RAD_AcctOutputOctets

  • RAD_AcctAuthentic

  • RAD_AcctSessionTime

  • RAD_AcctInputPackets

  • RAD_AcctOutputPackets

  • RAD_AcctTerminateCause

  • RAD_AcctLinkCount
nAttributeValue | Numeric value of the attribute to set.

Example

dcltrans
  transaction TRun
  var
    nCode : number;
  begin
    RadSetAttributeNumber(RAD_NasPort, 1234);
    RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
    nCode := RadAuthenticate(RAD_AUTH_MSCHAP2, "user", "pass");
    if nCode = RAD_AccessAccept then
      Print("Authentication successful");
      Print("Service Type = " + string(RadGetAttributeNumber(RAD_ServiceType)));
      Print("Framed_Protocol = " + string(RadGetAttributeNumber(RAD_FramedProtocol)));
      Print("Login_IP_Host = " + RadGetAttributeString(RAD_LoginIpHost));
      Print("Login_TCP_Port = " + string(RadGetAttributeNumber(RAD_LoginTcpPort)));
      Print("Reply_Message = " + RadGetAttributeString(RAD_ReplyMessage));
    else
      Print("Authentication failed");
    end;
  end TRun;
親トピック: Radius Functions Reference
関連資料
RadGetAttributeNumber Function


RadGetAttributeNumber Function

Action

Retrieves a numeric attribute value from the list of attributes that is returned from the RADIUS server during authentication.

Include file

radius.bdh

Syntax

RadGetAttributeNumber( in nAttributeId  : number ) : number;

Return value

  • Numeric value of the attribute.

Parameter Description
nAttributeId

Attribute identification. Valid values are:

  • RAD_ServiceType

  • RAD_FramedProtocol

  • RAD_LoginTcpPort

  • RAD_FramedRouting

  • RAD_FramedMtu

  • RAD_FramedCompression

  • RAD_LoginService

  • RAD_FramedIpxNetwork

  • RAD_SessionTimeout

  • RAD_IdleTimeout

  • RAD_TerminationAction

  • RAD_FramedAppleTalkLink

  • RAD_FramedAppleTalkNetwork

  • RAD_PortLimit

Example

dcltrans
  transaction TRun
  var
    nCode : number;
  begin
    RadSetAttributeNumber(RAD_NasPort, 1234);
    RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
    nCode := RadAuthenticate(RAD_AUTH_MSCHAP2, "user", "pass");
    if nCode = RAD_AccessAccept then
      Print("Authentication successful");
      Print("Service Type = " + string(RadGetAttributeNumber(RAD_ServiceType)));
      Print("Framed_Protocol = " + string(RadGetAttributeNumber(RAD_FramedProtocol)));
      Print("Login_IP_Host = " + RadGetAttributeString(RAD_LoginIpHost));
      Print("Login_TCP_Port = " + string(RadGetAttributeNumber(RAD_LoginTcpPort)));
      Print("Reply_Message = " + RadGetAttributeString(RAD_ReplyMessage));
    else
      Print("Authentication failed");
    end;
  end TRun;
親トピック: Radius Functions Reference
関連資料
RadSetAttributeNumber Function


RadSetAttributeString Function

Action

Sets a string attribute in the list of attributes that is sent to the RADIUS server during authentication.

Include file

radius.bdh

Syntax

RadSetAttributeString( in nAttributeId    : number,
                       in sAttributeValue : string );
Parameter | Description
nAttributeId

Attribute identification. Valid values are:

  • RAD_UserName

  • RAD_UserPassword

  • RAD_ChapPassword

  • RAD_CallbackNumber

  • RAD_State

  • RAD_Class

  • RAD_CalledStationId

  • RAD_CallingStationId

  • RAD_NasIdentifier

  • RAD_ProxyState

  • RAD_LoginLatService

  • RAD_LoginLatNode

  • RAD_LoginLatGroup

  • RAD_ChapChallenge

  • RAD_LoginLatPort

  • RAD_AcctSessionId

  • RAD_AcctMultiSessionId

  • RAD_NasIPAddress

  • RAD_FramedIpAddress

  • RAD_FramedIpNetmask

  • RAD_LoginIpHost
sAttributeValue | String value of the attribute to be set.

Example

dcltrans
  transaction TRun
  var
    nCode : number;
  begin
    RadSetAttributeNumber(RAD_NasPort, 1234);
    RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
    nCode := RadAuthenticate(RAD_AUTH_MSCHAP2, "user", "pass");
    if nCode = RAD_AccessAccept then
      Print("Authentication successful");
      Print("Service Type = " + string(RadGetAttributeNumber(RAD_ServiceType)));
      Print("Framed_Protocol = " + string(RadGetAttributeNumber(RAD_FramedProtocol)));
      Print("Login_IP_Host = " + RadGetAttributeString(RAD_LoginIpHost));
      Print("Login_TCP_Port = " + string(RadGetAttributeNumber(RAD_LoginTcpPort)));
      Print("Reply_Message = " + RadGetAttributeString(RAD_ReplyMessage));
    else
      Print("Authentication failed");
    end;
  end TRun;
親トピック: Radius Functions Reference
関連資料
RadGetAttributeString Function


RadGetAttributeString Function

Action

Retrieves a string attribute value from the list of attributes that's returned by the RADIUS server during authentication.

Include file

radius.bdh

Syntax

RadGetAttributeString( in nAttributeId  : number ): string;

Return value

  • String value of the attribute

Parameter Description
nAttributeId

Attribute identification. Valid values are:

  • RAD_LoginIpHost

  • RAD_FilterId

  • RAD_ReplyMessage

  • RAD_CallbackNumber

  • RAD_CallbackId

  • RAD_FramedRoute

  • RAD_State

  • RAD_Class

  • RAD_ProxyState

  • RAD_LoginLatService

  • RAD_LoginLatNode

  • RAD_LoginLatGroup

  • RAD_FramedAppleTalkZone

  • RAD_LoginLatPort

Example

dcltrans
  transaction TRun
  var
    nCode : number;
  begin
    RadSetAttributeNumber(RAD_NasPort, 1234);
    RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
    nCode := RadAuthenticate(RAD_AUTH_MSCHAP2, "user", "pass");
    if nCode = RAD_AccessAccept then
      Print("Authentication successful");
      Print("Service Type = " + string(RadGetAttributeNumber(RAD_ServiceType)));
      Print("Framed_Protocol = " + string(RadGetAttributeNumber(RAD_FramedProtocol)));
      Print("Login_IP_Host = " + RadGetAttributeString(RAD_LoginIpHost));
      Print("Login_TCP_Port = " + string(RadGetAttributeNumber(RAD_LoginTcpPort)));
      Print("Reply_Message = " + RadGetAttributeString(RAD_ReplyMessage));
    else
      Print("Authentication failed");
    end;
  end TRun;
親トピック: Radius Functions Reference
関連資料
RadSetAttributeString Function


RadClearAttributeList Function

Action

Clears the list of attributes that's sent to the RADIUS server during authentication.

Include file

radius.bdh

Syntax

RadClearAttributeList( );

Example

dcltrans
  transaction TRun
    begin
      RadSetAttributeNumber(RAD_NasPort, 1234);
      RadSetAttributeString(RAD_CallingStationId, "+1 1234 123 1234");
      RadAuthenticate(RAD_AUTH_MSCHAP2, "user", "pass");
      RadClearAttributeList();
    end TRun;
親トピック: Radius Functions Reference


SMTP Functions Reference

The WebSMTP functions are a complete implementation of the Simple Mail Transfer Protocol.

注: All host and e-mail addresses used for electronic processing have to be enclosed in angular brackets (< and >), for example, "John Jones <john.jones@company.com>".
  • WebSmtpCommand Function
    Sends a command string to an SMTP server.
  • WebSmtpConnect Function
    Connects to an SMTP server.
  • WebSmtpData Function
    Sends the mail message using a user-defined mail header.
  • WebSmtpDataEx Function
    Sends the mail message using a standard mail header with the most important arguments: sender, recipient, subject.
  • WebSmtpExpand Function
    Asks the mail server to confirm that the argument identifies a mailing list.
  • WebSmtpHello Function
    Sends a HELO command to the server.
  • WebSmtpHelloEx Function
    Sends an EHLO command to the server.
  • WebSmtpHelp Function
    Asks the server to respond with a help message.
  • WebSmtpMail Function
    Initiates a mail transaction.
  • WebSmtpNoop Function
    Used to determine whether the server is available.
  • WebSmtpQuit Function
    Commits the mail transaction.
  • WebSmtpRecipient Function
    Sets the recipient’s address.
  • WebSmtpReset Function
    Resets the mail servers state.
  • WebSmtpResponse Function
    Retrieves an SMTP response message after sending a command using WebTcpipSend.
  • WebSmtpSend Function
    Initiates a mail transaction.
  • WebSmtpSendAndMail Function
    Initiates a mail transaction.
  • WebSmtpSendOrMail Function
    Initiates a mail transaction.
  • WebSmtpSendData Function
    Sends a data string to an SMTP server.
  • WebSmtpShutdown Function
    Closes the connection to the mail server.
  • WebSmtpTurn Function
    Lets the recipient reply with an OK message.
  • WebSmtpVerify Function
    Asks the mail server to confirm that the argument identifies a user.
親トピック: Internet Functions


WebSmtpCommand Function

Action

Sends a command string to an SMTP server.

Include file

WebAPI.bdh

Syntax

WebSmtpCommand( in hSmtp    : number,
                in sCommand : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sCommand | Command string

Example

dcltrans
  transaction TWebSmtpCommand
  const
    COMMAND := "...\r\n"; // specify command string
  var
   hSmtp: number;
  begin
   WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
   WebSmtpHello(hSmtp, "<MyDomain>");
   WebSmtpReset(hSmtp);   WebSmtpCommand(hSmtp, COMMAND);
   WebSmtpQuit(hSmtp);
   WebSmtpShutdown(hSmtp);
 end TWebSmtpCommand;
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function


WebSmtpConnect Function

Action

Connects to an SMTP server.

Include file

WebAPI.bdh

Syntax

WebSmtpConnect( out hSmtp     : number,
                in  sHost     : string,
                in  nPort     : number,
                in  nSecurity : number optional ): boolean;

Return value

  • true if the connection could be established and the server sent a response message

  • false otherwise

Parameter | Description
hSmtp

Variable receiving a handle to the Web connection

If this parameter contains a handle to a Web connection prior to the WebSmtpConnect function call, the memory allocated with the handle is released. Whenever you want to create a new Web connection, make sure this variable is initialized with 0 (this is automatically done within transactions when they are executed for the first time, but not within functions)
sHost | Address of the SMTP server
nPort | Port to connect at the SMTP server. The standard port is WEB_PORT_SMTP (25)
nSecurity

Specifies whether to establish a secure connection to the remote server (optional). Possible options are:

  • WEB_CONNECT_NONE. Establishes an insecure connection to the server (default)

  • WEB_CONNECT_SSL. Establishes a secure connection using SSL

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連資料
WebSmtpShutdown Function


WebSmtpData Function

Action

Sends the mail message using a user-defined mail header. The mail body is generated randomly using ASCII 128 characters.

Include file

WebAPI.bdh

Syntax

WebSmtpData(in hSmtp         : number,
            in sMailHeader   : string,
            in nMailBodySize : number): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sMailHeader | A CRLF-terminated string defining sender, recipient, subject and more. Sample: "To: <jim@mailprovider.com>\r\nFrom: tom<tom@mailprovider.com>"
nMailBodySize | Specifies the number of characters randomly generated
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function


WebSmtpDataEx Function

Action

Sends the mail message using a standard mail header with the most important arguments: sender, recipient, subject.

Include file

WebAPI.bdh

Syntax

WebSmtpDataEx( in hSmtp    : number,
               in sTo      : string,
               in sFrom    : string,
               in sSubject : string,
               in sBody    : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sTo | Recipient’s e-mail address. Sample: "Jim Jason<jim@mailprovider.com>"
sFrom | Sender’s e-mail address
sSubject | Subject of the e-mail
sBody | The custom mail body
注: Only 7-bit text data or MIME-encoded binaries in ASCII 128 format can be used as message body.

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpMail(hSmtp, "<john@mail.com>");
    WebSmtpRecipient(hSmtp, "<admin@mail.com>");
    WebSmtpDataEx(hSmtp,"admin<admin@mail.com>",
                       "SenderName", "ThisIsTheSubject",
                       "This is a testmessage");
    WebSmtpQuit(hSmtp);    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpSendData Function


WebSmtpExpand Function

Action

Asks the mail server to confirm that the argument identifies a mailing list.

Include file

WebAPI.bdh

Syntax

WebSmtpExpand( in hSmtp : number,
               in sUser : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sUser | Mailing list to be confirmed. Sample: "support_list"
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpVerify Function
WebSmtpConnect Function


WebSmtpHello Function

Action

Sends a HELO command to the server.

Include file

WebAPI.bdh

Syntax

WebSmtpHello( in hSmtp   : number,
              in sDomain : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sDomain | Host name of the SMTP sender

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpHelloEx Function


WebSmtpHelloEx Function

Action

Sends an EHLO command to the server.

注: WebSmtpHelloEx can be used to determine the server’s capabilities. If the function fails, use WebSmtpHello
.

Include file

WebAPI.bdh

Syntax

WebSmtpHelloEx( in hSmtp   : number,
                in sDomain : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sDomain | Host name of the SMTP sender, for example, <myhostname.mailprovider.com>

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
     if not WebSmtpHelloEx(hSmtp, "MyDomain") then
      WebSmtpHello(hSmtp, "MyDomain");
    end;
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpHello Function


WebSmtpHelp Function

Action

Asks the server to respond with a help message.

Include file

WebAPI.bdh

Syntax

WebSmtpHelp( in hSmtp : number,
             in sHelp : string optional ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sHelp | Optional command to ask for help. Sample: "HELLO"

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpHelp(hSmtp, "");
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference


WebSmtpMail Function

Action

Initiates a mail transaction.

Include file

WebAPI.bdh

Syntax

WebSmtpMail( in hSmtp        : number,
             in sReversePath : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sReversePath | E-mail address the reply should be sent to. Sample: "<returnaddress@mailprovider.com>"

Example

dcltrans
transaction TWebSmtp
var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpMail(hSmtp, "<john@mail.com>");
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpTurn Function
WebSmtpResponse Function
WebSmtpSendAndMail Function
WebSmtpSend Function
WebSmtpSendOrMail Function
WebSmtpRecipient Function


WebSmtpNoop Function

Action

This command is used to determine whether the server is available. No operation is performed at the mail server.

Include file

WebAPI.bdh

Syntax

WebSmtpNoop(in hSmtp: number): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function


WebSmtpQuit Function

Action

Commits the mail transaction. All previous commands actually affect only the server’s mail database.

Include file

WebAPI.bdh

Syntax

WebSmtpQuit( in hSmtp: number ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpReset Function


WebSmtpRecipient Function

Action

Sets the recipient’s address. Multiple recipients can be specified by repeated use of this command.

Include file

WebAPI.bdh

Syntax

WebSmtpRecipient( in hSmtp      : number,
                  in sRecipient : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sRecipient | One or more recipients’ e-mail addresses. Sample: "john<john@mailprovider.com>"

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpRecipient(hSmtp, "<administrator@mail.com>");
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpTurn Function
WebSmtpResponse Function
WebSmtpSendAndMail Function
WebSmtpSend Function
WebSmtpSendOrMail Function
WebSmtpMail Function


WebSmtpReset Function

Action

Resets the mail servers state. The server rolls back (undoes) all previous actions performed during the SMTP session.

Include file

WebAPI.bdh

Syntax

WebSmtpReset( in hSmtp: number ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect

Example

dcltrans
  transaction TWebSmtp
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpReset(hSmtp);
    WebSmtpQuit(hSmtp);    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpQuit Function


WebSmtpResponse Function

Action

Retrieves an SMTP response message after sending a command using WebTcpipSend.

Include file

WebAPI.bdh

Syntax

WebSmtpResponse( in  hSmtp        : number,
                 out sResponse    : string,
                 in  nMaxResponse : number,
                 out nReplyCode   : number): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sResponse | Buffer that receives the mail server’s response message
nMaxResponse | Size of the response buffer. Specify STRING_COMPLETE to get all received data.
nReplyCode | Parameter that receives the mail server’s reply code
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpTurn Function
WebSmtpSendAndMail Function
WebSmtpSend Function
WebSmtpSendOrMail Function
WebSmtpMail Function
WebSmtpRecipient Function


WebSmtpSend Function

Action

Initiates a mail transaction.

Include file

WebAPI.bdh

Syntax

WebSmtpSend( in hSmtp        : number,
             in sReversePath : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sReversePath | E-mail address the reply should be sent to. Sample: "<returnaddress@mailprovider.com>"
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpTurn Function
WebSmtpResponse Function
WebSmtpSendAndMail Function
WebSmtpSendOrMail Function
WebSmtpMail Function
WebSmtpRecipient Function


WebSmtpSendAndMail Function

Action

Initiates a mail transaction.

Include file

WebAPI.bdh

Syntax

WebSmtpSendAndMail(in hSmtp        : number,
                   in sReversePath : string): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sReversePath | E-mail address the reply should be sent to. Sample: "<returnaddress@mailprovider.com>"
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpTurn Function
WebSmtpResponse Function
WebSmtpSend Function
WebSmtpSendOrMail Function
WebSmtpMail Function
WebSmtpRecipient Function


WebSmtpSendOrMail Function

Action

Initiates a mail transaction.

Include file

WebAPI.bdh

Syntax

WebSmtpSendOrMail(in hSmtp        : number,
                  in sReversePath : string): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sReversePath | E-mail address the reply should be sent to. Sample: "<returnaddress@mailprovider.com>"
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpTurn Function
WebSmtpResponse Function
WebSmtpSendAndMail Function
WebSmtpSend Function
WebSmtpMail Function
WebSmtpRecipient Function


WebSmtpSendData Function

Action

Sends a data string to an SMTP server.

Include file

WebAPI.bdh

Syntax

WebSmtpSendData( in hSmtp : number,
                 in sData : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sData | Data string

Example

dcltrans
transaction TWebSmtpSendData
  const
    DATA := "...\r\n"; // specify data string
  var
    hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpReset(hSmtp);    WebSmtpSendData(hSmtp, DATA);
    WebSmtpQuit(hSmtp);    WebSmtpShutdown(hSmtp);
  end TWebSmtpSendData;

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpDataEx Function


WebSmtpShutdown Function

Action

Closes the connection to the mail server.

Include file

WebAPI.bdh

Syntax

WebSmtpShutdown( inout hSmtp : number,
                 in    nMode : number optional): boolean;

Return value

  • true if the connection could be closed successfully

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
nMode

Determines the shutdown mode (optional). Any of the following options is possible:

  • WEB_SHUTDOWN_GRACEFUL. Initiates a graceful shutdown: first closes and then resets the connection

  • WEB_SHUTDOWN_IMMEDIATE. Initiates a standard connection close (default)

  • WEB_SHUTDOWN_RESET. Resets the connection

Example

dcltrans
  transaction TWebSmtp
  var
   hSmtp: number;
  begin
    WebSmtpConnect(hSmtp, "standardhost", WEB_PORT_SMTP);
    WebSmtpHello(hSmtp, "<MyDomain>");
    WebSmtpQuit(hSmtp);
    WebSmtpShutdown(hSmtp);
  end TWebSmtp;

Sample scripts

WebMulti01.bdf

SilkEssential sample

eMail.sep

親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function


WebSmtpTurn Function

Action

Lets the recipient reply with an OK message.

Include file

WebAPI.bdh

Syntax

WebSmtpTurn(in hSmtp: number): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpConnect Function
WebSmtpResponse Function
WebSmtpSendAndMail Function
WebSmtpSend Function
WebSmtpSendOrMail Function
WebSmtpMail Function
WebSmtpRecipient Function


WebSmtpVerify Function

Action

Asks the mail server to confirm that the argument identifies a user.

Include file

WebAPI.bdh

Syntax

WebSmtpVerify( in hSmtp : number,
               in sUser : string ): boolean;

Return value

  • true if the server responded with a positive return code

  • false otherwise

Parameter | Description
hSmtp | Handle to a Web connection that was created by WebSmtpConnect
sUser | Address to be confirmed. Sample: "<invalid@mailprovider.com>"
親トピック: SMTP Functions Reference
関連概念
Web Functions Reference
関連資料
WebSmtpExpand Function
WebSmtpConnect Function


SSL (Secure Socket Layer) Extensions

There are several Silk Performer configuration options for replaying scripts in a secure environment. These include the following:

  • Replaying scripts using SSL

  • Replaying scripts using client certificates

Example

use "WebAPI.bdh"

const
  USERS := 5;

 dcluser
  user
    WebUser(USERS)
  transactions
    TWeb : 1;

dcltrans
  transaction TWeb
  var
    sClientCert: string(1000);
  begin
    WebParseResponseData(sClientCert, 1000, "<BR>SUBJECTCN:", "<BR>");
    WebUrl("https://bowie/clientcert.asp", 0.0);
    WebThreadWait();

    if strlen(sClientCert) > 0 then
      write("The server got a client certificate from: ");
      write(sClientCert); writeln;
    else
      write("Error using client certificate number :");
      write(GetRuntimeID()); writeln;
    end;

     Print(sClientCert, 1, TEXT_MAGENTA);
  end TWeb;
  • SslSetClientCert Function
    Sets the client certificate that Silk Performer presents the secure server in behalf on the real client's certificate.
  • SslSetClientCertPassword Function
    Sets the password for the client certificate.
  • SslSetEncryption Function
    Sets the Secure Socket Layer protocol version and the ciphers used when Silk Performer establishes a secure connection to the server.
  • SslFlushSessionCache Function
    Clears all sessions from the SSL session cache so that all new connections will be authenticated and incur the public key operation overhead.
親トピック: Internet Functions
関連概念
Low-Level Web Functions Overview
Web Functions Reference
関連資料
WebGetSecurity Function
WebSetSecurity Function


SslSetClientCert Function

Action

Sets the client certificate that Silk Performer presents the secure server in behalf on the real client's certificate. To use a client certificate, it must be exported from the Web browser and imported into the Silk Performer certificate store first.

Include file

WebAPI.bdh

Syntax

SslSetClientCert( in sCertFile : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sCertFile | Certificate file (.pem) located in the Silk Performer user data directory. To copy a client certificate into the user data directory, it has to be exported from the Web browser.

Example

dcltrans
  transaction TSecureHTTP
  begin
    SslSetEncryption(SSL_VERSION_SSL3, SSL_CIPHERS_SSLv3);
    SslSetClientCert("Sunny.pem");
    WebUrl("https://www.company.com");
  end TSecureHTTP;

Sample scripts

WebSecure01.bdf, WebSecure02.bdf

親トピック: SSL (Secure Socket Layer) Extensions
関連概念
Web Functions Reference
関連タスク
スクリプトでの再生のためのクライアント証明書の使用
関連資料
SslFlushSessionCache Function
SslSetEncryption Function


SslSetClientCertPassword Function

Action

Sets the password for the client certificate.

Include file

WebAPI.bdh

Syntax

SslSetClientCertPassword(in sCertPasword: string): boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sCertPasword | The password for the client certificate.

Example

dcltrans
  transaction TSecureHTTP
  begin
    SslSetEncryption(SSL_VERSION_SSL3, SSL_CIPHERS_SSLv3);
    SslSetClientCert("Sunny.pem");
    SslSetClientCertPassword("Performer")
    WebUrl("https://www.company.com");
  end TSecureHTTP;
親トピック: SSL (Secure Socket Layer) Extensions


SslSetEncryption Function

Action

Sets the Secure Socket Layer protocol version and the ciphers used when Silk Performer establishes a secure connection to the server.

Include file

WebAPI.bdh

Syntax

SslSetEncryption( in nVersion : number,
                  in sCiphers : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nVersion Specifies the Secure Socket Layer protocol version used when Silk Performer establishes a secure connection to the server. Valid options are:
  • SSL_VERSION_AUTO
  • SSL_VERSION_SSL3
  • SSL_VERSION_TLS1
  • SSL_VERSION_TLS11
  • SSL_VERSION_TLS12
  • SSL_VERSION_TLS13
sCiphers Optional: Specifies the ciphers used when Silk Performer establishes a secure connection to the server. Valid options are:
  • SSL_CIPHERS_MEDIUM. Perform 128-bit encryption
  • SSL_CIPHERS_HIGH. Use triple DES

You can also specify any cipher as described on OpenSSL cipher. If this parameter is omitted, Silk Performer uses its default ciphers.

The sCiphers parameter can also be a string value with one or more cipher names, separated with a colon (:), or a combination of sets ("SSLv3", "MEDIUM" or "HIGH") and cipher names, or even with logical operators, for example "EXP:RC4-SHA:!HIGH". You can also mix TLSv1.3 ciphers with non-TLSv1.3 ciphers. Invalid cipher strings are ignored.

For a list of available cipher names, visit OpenSSL cipher.

Example

dcltrans
  transaction TSecureHTTP
  begin
    SslSetEncryption(SSL_VERSION_SSL3, SSL_CIPHERS_SSLv3);
    WebUrl("https://www.company.com");
  end TSecureHTTP;

  transaction TSecureHTTP1
  begin
    SslSetEncryption(SSL_VERSION_SSL3, "EXP-RC4-MD5:EXP-DES-CBC-SHA");
    WebUrl("https://www.company.com");
  end TSecureHTTP1;

    // no cipher specified, request vs. TLSv1.3 server, expected ciphersuite: TLS_AES_256_GCM_SHA384
    SslSetEncryption(SSL_VERSION_TLS13);

    // ciphers set in specified order, request vs. TLSv1.3 server, expected ciphersuite is: TLS_AES_128_GCM_SHA256
    SslSetEncryption(SSL_VERSION_AUTO, "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384");

    // set TLSv1.2 and TLSv1.3 ciphers, requests to TLSv1.2 and TLSv1.3 server
    SslSetEncryption(SSL_VERSION_AUTO, "ECDHE-RSA-AES128-GCM-SHA256:TLS_CHACHA20_POLY1305_SHA256");

    // same as above, but added some non-existing ciphers
    SslSetEncryption(SSL_VERSION_AUTO, "thisisnotacipher:ECDHE-RSA-AES128-GCM-SHA256:thisisnotaciphertoo:TLS_CHACHA20_POLY1305_SHA256:thisisalsonotacipher");

Sample scripts

WebSecure01.bdf, WebSecure02.bdf

親トピック: SSL (Secure Socket Layer) Extensions
関連概念
Web Functions Reference
関連資料
SslFlushSessionCache Function
SslSetClientCert Function


SslFlushSessionCache Function

Action

Clears all sessions from the SSL session cache so that all new connections will be authenticated and incur the public key operation overhead.

注: That existing connections are not terminated and therefore further use their negotiated session key.

Include file

WebAPI.bdh

Syntax

SslFlushSessionCache(): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TMain
  begin
    SslSetEncryption(SSL_VERSION_SSL3, SSL_CIPHERS_SSLv3);
    WebUrl("https://www.company.com");
    WebUrl("https://www.company1.com");
    WebUrl("https://www.company2.com");
    WebUrl("https://www.company3.com");
    // flush all negotiated sessions
    SslFlushSessionCache();
  end TMain;
親トピック: SSL (Secure Socket Layer) Extensions
関連概念
Web Functions Reference
関連資料
SslSetClientCert Function
SslSetEncryption Function


TCP/IP Functions Reference

Application-level functions are used to handle protocols other than POP3, SMTP, FTP and HTTP as well as nonstandard Internet commands. They can also be used to build a prototype of a customer-defined client, such as a News client.

  • Web TCP/IP Functions
    Lists the functions for testing applications that use the Web TCP/IP protocol.
  • Web Telnet Functions
    Lists the functions for testing applications that use the Web telnet protocol.
親トピック: Internet Functions


Web TCP/IP Functions

Silk Performer provides functions for testing applications that use the Web TCP/IP protocol.

  • WebTcpipAccept Function
    Listens for a connection to be established to a listener socket and accepts the connection.
  • WebTcpipConnect Function
    Connects to any host on the Internet or intranet. sHost can be the domain name or the IP address.
  • WebTcpipGetOptions Function
    Retrieves a TCP/IP connection’s specific options.
  • WebTcpipGetPacketBoundary Function
    Returns a packet boundary for an existing connection.
  • WebTcpipListen Function
    Creates a listener socket on a specified port and returns a handle to that socket.
  • WebTcpipRecv Function
    Retrieves data from the remote host.
  • WebTcpipRecvExact Function
    Receives an exact number of data bytes from a remote host unless an error occurs or the connection is closed by the server.
  • WebTcpipRecvClose Function
    Retrieves data from the remote host until the connection is closed by the server.
  • WebTcpipRecvPackets Function
    Receives individual or multiple in-coming packets from an open connection.
  • WebTcpipRecvPacketsUntilData Function
    Receives data from Telnet server until a packet with specified data arrives.
  • WebTcpipRecvProto Function
    Retrieves a calculated amount of data from the remote host.
  • WebTcpipRecvUntil Function
    Retrieves a response from the remote host until the pattern sPattern is found.
  • WebTcpipRecvProtoEx Function
    Like the WebTcpipRecvProto function, but with the additional possibility to verify a fixed portion of the tcp packet (by specifying its starting position and length), and two additional parameters to define the performed packet-length calculation (multiplication and addition).
  • WebTcpipRecvUntilIdle Function
    Receives data from a connection until the connection remains idle for a specified period of time.
  • WebTcpipScreenRecvPacketsUntilCursor Function
    Receives packets from a Telnet server until cursor is detected at a specified position.
  • WebTcpipScreenRecvPacketsUntilField Function
    Receives data from a given connection until the rendered screen contains a specified field.
  • WebTcpipScreenRecvPacketsUntilStatus Function
    Receives data from a given connection until rendered screen signals a specified status.
  • WebTcpipScreenRecvPacketsUntilText Function
    Receives data from a given connection until rendered screen contains specified text.
  • WebTcpipSelect Function
    Checks if a subsequent WebTcpipRecv operation on the provided connection handle will block, or succeed immediately.
  • WebTcpipSend Function
    Sends a string to the remote host. Before WebTcpipSend can be used, a valid connection has to be established with WebTcpipConnect.
  • WebTcpipSendFile Function
    Sends the data of a file in binary mode to the remote host.
  • WebTcpipSendBin Function
    Sends a string/buffer containing binary data to the remote host.
  • WebTcpipSendPacket Function
    Sends a single out-going packet to an open connection.
  • WebTcpipSetOptions Function
    Sets a TCP/IP connection’s specific options.
  • WebTcpipSetPacketBoundary Function
    Sets a packet boundary for an existing connection and is used to split in-coming and out-going data when using WebTcpipRecvPackets and WebTcpipSendPacket functions.
  • WebTcpipSetTelnetMode Function
    Switches pure TCP/IP connection mode to Telnet connection mode.
  • WebTcpipShutdown Function
    Shuts down the connection established by WebTcpipConnect.
  • WebTcpipSSLHandshake Function
    Performs a secure handshake on an open connection.
親トピック: TCP/IP Functions Reference


WebTcpipAccept Function

Action

Listens for a connection to be established to a listener socket and accepts the connection. Before you can use this function, you have to create a valid connection handle with the WebTcpipListen function. The WebTcpipAccept function blocks the called until a connection is established.

Include file

WebAPI.bdh

Syntax

WebTcpipAccept( in  hTcpipListen : number
                out hTcpip       : number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTcpipListen | Valid handle to a connection created with the WebTcpipListen function.
hTcpip | Variable receiving the handle to the accepted connection.

Example

dcltrans
  transaction TServer
  var
    hTcpip, hListen, nRecv : number;
    sData                  : string;
  begin
    // start listening on port 88
    WebTcpipListen(hListen, 88);
    // accept client request
    WebTcpipAccept(hListen, hTcpip);
    // receive data from the client
    WebTcpipRecvUntil(hTcpip, sData, STRING_COMPLETE, nRecv, "\r\n\r\n", 4);
    // process the client’s request
    // close the connections
    WebTcpipShutdown(hTcpip);
    WebTcpipShutdown(hListen);
  end TServer;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


WebTcpipConnect Function

Action

Connects to any host on the Internet or intranet. sHost can be the domain name or the IP address. You can also use the predefined host name standardhost, which can be set in the Workbench. A URL cannot be used with WebTcpipConnect. This function must be used before any other call to WebTcpip functions.

Include file

WebAPI.bdh

Syntax

WebTcpipConnect( out hWeb          : number,
                 in  sHost         : string,
                 in  nPort         : number,
                 in  nSecurity     : number optional,
                 in  sLocalAddress : string optional ): boolean;

Return value

  • true if the function succeeds, and the function stores a valid handle in hWeb

  • false otherwise

Parameter | Description
hWeb

Variable receiving a handle to the Web connection.

If this parameter contains a handle to a Web connection prior to the WebTcpipConnect function call, the memory allocated with the handle is released. Whenever you want to create a new Web connection, make sure this variable is initialized with 0 (this is automatically done within transactions when they are executed for the first time, but not within functions)
sHost | Domain name or IP address, for example, "hostname.com" or "192.231.34.1"
nPort

Port to connect to. The following constants can be used as the standard port:

  • WEB_PORT_FTP

  • WEB_PORT_TELNET

  • WEB_PORT_SMTP

  • WEB_PORT_GOPHER

  • WEB_PORT_HTTP

  • WEB_PORT_HTTPS

  • WEB_PORT_POP3

  • WEB_PORT_NNTP

  • WEB_PORT_IRC

  • WEB_PORT_LDAP

  • WEB_PORT_LDAP_SSL

  • WEB_PORT_SOCKS
nSecurity

Specifies whether to establish a secure connection to the remote server (optional). Possible options are:

  • WEB_CONNECT_NONE. Establishes an insecure connection to the server (default)

  • WEB_CONNECT_SSL. Establishes a secure connection using SSL
sLocalAddress | Specifies the local address and the port to which the socket should be bound (optional), for example, "192.168.70.101:4000".

Example

dcltrans
  transaction TWebApplevel
  var
    hWeb: number;
  begin
    WebTcpipConnect(hWeb, "standardhost", WEB_PORT_HTTP);
    WebTcpipShutdown(hWeb);
  end TWebApplevel;

Sample scripts

WebFileUpload01.bdf, WebMulti01.bdf, WebSecure01.bdf, WebTcpipHttp01.bdf, WebTcpipWebStone01.bdf

親トピック: Web TCP/IP Functions


WebTcpipGetOptions Function

Action

Retrieves a TCP/IP connection’s specific options.

Include file

WebAPI.bdh

Syntax

WebTcpipGetOptions(     in hWeb      : number,
                        out nOptions : number ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect. This function currently reflects flags set by WebTcpipSetTelnetMode and will be extended by other configurations in future.
nOptions

Numeric variable where current bitflag option settings are to be placed. Currently the options may return any bitwise combination of:

  • TELNET_MODEOPT_FILTER_NOPS := 0x0001

  • TELNET_MODEOPT_AUTOANSWER_TM := 0x0002

  • TELNET_MODEOPT_FILTER_TM := 0x0004

  • TELNET_MODEOPT_RFC_1576 := 0x0007

  • TELNET_MODEOPT_AUTO_RECV := 0x0018

  • TEELNET_MODEOPT_SYNC := 0x0020;

See WebTcpipSetTelnetMode for details.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true, TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetOptions Function


WebTcpipGetPacketBoundary Function

Action

Returns a packet boundary for an existing connection. The packet boundary is used to split in-coming and out-going data when using WebTcpipRecvPackets and WebTcpipSendPackets functions. By default a “packet” consists of a TCP/IP packet. So in effect, the packet boundary is set to NULL.

Include file

WebAPI.bdh

Syntax

WebTcpipGetPacketBoundary(    in  hWeb      : number,
                              out sBoundary : string ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect.
sBoundary | String variable in which the current packet boundary is placed. By default a NULL string (a raw TCP/IP packet) is returned.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true, TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetPacketBoundary Function


WebTcpipListen Function

Action

Creates a listener socket on a specified port and returns a handle to that socket.

Include file

WebAPI.bdh

Syntax

WebTcpipListen( inout hTcpipListen : number
                in nPort           : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hTcpipListen | Variable receiving a handle to the listener socket.
nPort | Specifies the port number to listen at.

Example

dcltrans
  transaction TServer
  var
    hTcpip, hListen, nRecv : number;
    sData : string;
  begin
    // start listening on port 88
    WebTcpipListen(hListen, 88);
    // accept client request
    WebTcpipAccept(hListen, hTcpip);
    // receive data from the client
    WebTcpipRecvUntil(hTcpip, sData, STRING_COMPLETE, nRecv, "\r\n\r\n", 4);
    // process the client’s request
    // close connections
    WebTcpipShutdown(hTcpip);
    WebTcpipShutdown(hListen);
  end TServer;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


WebTcpipRecv Function

Action

Retrieves data from the remote host.

Include file

WebAPI.bdh

Syntax

WebTcpipRecv( in  hWeb      : number,
              out sData     : string allownull,
              in  nMaxData  : number optional,
              out nReceived : number optional): boolean;

Return value

  • true if up to nMaxData bytes could be read successfully

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect
sData | Buffer to store the received data. This field may be set to NULL to use only internal buffers, for example, if result is not to be parsed
nMaxData | Maximum amount of data to read from server. This value has no effect when sData is set to NULL.
nReceived | Parameter that receives the actual amount of data received from the server. Often more calls to WebTcpipRecv are needed to get all the data from the server.

Example

// Sample to retrieve an HTML page from a Web server
dcltrans
  transaction TWebRecv
  var
    hWeb0 : number;
    nRecv : number;
    sData : string;
  begin
    WebTcpipConnect(hWeb0, "purple", 80);
    WebTcpipSend(hWeb0, "GET / HTTP/1.0\r\n"
    "User-Agent: CustomClient/1.0\r\n"
    "Accept: */*\r\n\r\n");
    // Wait until WebRecv returns with 0 bytes read
    loop
    if not WebTcpipRecv(hWeb0, sData, 1000, nRecv) then
    write("error"); writeln;
  end;

    if nRecv = 0 then exit; end;
      write(nRecv); writeln;
      write(sData); writeln;
    end;

    writeln;
    WebTcpipShutdown(hWeb0);
  end TWebRecv;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvExact Function

Action

Receives an exact number of data bytes from a remote host unless an error occurs or the connection is closed by the server.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvExact( in  hWeb      : number,
                   out sData     : string optional,
                   in  nData     : number optional,
                   out nReceived : number optional ): boolean;

Return value

  • true if the exact number of bytes was received

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect
sData | Buffer to store the received data (optional). If this parameter is set to NULL, internal buffers are used for retrieval. In this case, the received data cannot be parsed
nData | Amount of data bytes to receive (optional). Make sure to set nData <= size of sData
nReceived | Parameter that receives the actual amount of data received from the server (optional)

Example

dcltrans
  transaction TWeb
  var
    hWeb      : number;
    sHdr      : string;
    sSize     : string(20);
    nReceived : number;
  begin
    WebTcpipConnect(hWeb, "lab3", 80);
    sHdr := "GET /file5k.html HTTP/1.1\r\n"
            "Host: lab3\r\n\r\n";
    // send HTTP  request header
    WebTcpipSend(hWeb, sHdr);
    // receive HTTP response header
    WebTcpipRecvUntil(hWeb, sHdr, STRING_COMPLETE, nReceived, "\r\n\r\n");
    // receive document
    StrSearchDelimited(sSize, STRING_COMPLETE, sHdr,
                        "Content-Length: ", 1, "\r\n",
                        1, STR_SEARCH_FIRST);
    WebTcpipRecvExact(hWeb, NULL, number(sSize));
    // reset the persistent connection
    WebTcpipShutdown(hWeb, WEB_SHUTDOWN_RESET);
  end TWeb;

Sample scripts

WebTcpipHttp01.bdf, WebTcpipImap401.bdf

親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvClose Function

Action

Retrieves data from the remote host until the connection is closed by the server. Only the first nMaxData bytes are stored into the buffer sData. If sData is set to NULL only the internal buffers are used for retrieval.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvClose( in  hWeb      : number,
                   out sData     : string optional,
                   in  nMaxData  : number optional,
                   out nReceived : number optional): boolean;

Return value

  • true if the server sent data and closed the connection gently

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect.
sData | Buffer to store the received data (optional). This field also can be set to NULL to use only internal buffers, for example, if data is not to be parsed.
nMaxData | Maximum amount of bytes to store into sData (optional). Specify STRING_COMPLETE to get all received data. This value has no affect if sData = NULL.
nReceived | Parameter that receives the actual amount of data received from the server (optional). Use NULL if value is not needed.

Example

dcltrans
  transaction TWebApplevel
  var
    hWeb : number;
    nRecv : number;
  begin
    // Get the root HTML page of the Web server defined
    // by standardhost with a custom client header
    WebTcpipConnect(hWeb, "standardhost", WEB_PORT_HTTP);
    WebTcpipSend(hWeb, "GET / HTTP/1.0\r\n"
       "User-Agent: CustomClient/1.0\r\n"
       "Accept: */*\r\n\r\n");
    WebTcpipRecvClose(hWeb, 0, 0, nRecv);
    WebTcpipShutdown(hWeb);
  end TWebApplevel;

Sample scripts

WebFileUpload01.bdf, WebMulti01.bdf, WebSecure01.bdf, WebTcpipHttp01.bdf, WebTcpipWebStone01.bdf

親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvPackets Function

Action

Receives individual or multiple in-coming packets from an open connection. A packet is defined as a TCP/IP packet or a part of an in-bound data stream that is separated by a specific packet boundary.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvPackets(    in  hWeb             : number,
                        out sRecv            : string optional,
                        in  iPackets         : number optional,
                        out uPacketsReceived : number optional,
                        out iBytesReceived   : number optional ): boolean;

Return value

  • true if the operation was successful (connection did not break down or time out).

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect.
sRecv | Output buffer for data that has been received (optional).
iPackets | Number of packets to be received (optional). When this parameter is omitted only one packet is received (default).
uPacketsReceived | The number of received packets is placed in this parameter (optional). Except in instances where the connection was closed or broken, this should equate to iPackets.
iBytesReceived | Sum of all received data is put into this numeric variable if passed as a parameter (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true, TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetPacketBoundary Function
WebTcpipSendPacket Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvPacketsUntilData Function

Action

Receives data from Telnet server until a packet with specified data arrives.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvPacketsUntilData(
    in hWeb           : number,
    in sData          : string,
    in nOptions       : number optional,
    out sDataReceived : string optional ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect. Web connection must be in Telnet mode (by a previous WebTcpipSetTelnetMode function call) and have a screen renderer associated with it.
sData | Data to be looked for in received packets.
nOptions

Comparison options; this is a case-insensitive "contains" by default, or may be one of the following:

  • TELNET_FLAG_EQUAL: Lengths of both values must match.

  • TELNET_FLAG_CASE_SENSITIVE: Comparison is performed case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: sText must occur within rendered screen text. (default)

  • TELNET_FLAG_FROM_LEFT: comparison is performed from the left side.

  • TELNET_FLAG_TRIM_LEFT: Leading blank spaces are trimmed from received data before comparison is performed.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from received data before comparison is performed.

  • TELNET_FLAG_TRIM_BOTH: Status value is trimmed from both sides of content before comparison is performed.

  • TELNET_FLAG_FROM_RIGHT: Comparison is performed beginning from the right side.
sDataReceived | Optional output data buffer where all received packets, including the matching packet, are to be placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true, TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvProto Function

Action

Retrieves a calculated amount of data from the remote host. The protocol specification parameters define the performed calculation. If for example every tcp packet contains its length specification at a fixed position (e.g. first two bytes) these packets can be easily received with the WebTcpipRecvProto function.

Only the first nMaxData bytes are stored into the buffer sData. If sData is set to NULL, internal buffers are used for retrieval.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvProto( in  hWeb         : number,
                   in  nProtoStart  : number,
                   in  nProtoLength : number,
                   in  nOption      : number optional,
                   out sData        : string optional,
                   in  nMaxData     : number optional,
                   out nReceived    : number optional): boolean;

Return value

  • true if the receive operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect.
nProtoStart | Starting byte of the packet-length specification.
nProtoLength | Length of the packet-length specification.
nOption

Specify any combination of following flags (optional):

  • TCP_FLAG_LITTLE_ENDIAN. Specifies the byte order of the packet-length section. Little-endian means, that the most significant byte is at the end. Big-endian (default) means, that the most significant byte is at the front of the packet-length section.

  • TCP_FLAG_INCLUDE_PROTO. Specify this flag to signal, that the bytes of the protocol header (ending with the specified packet-length section) are included in the calculated packet-length. If this flag is not set, the receive operation of the calculated packet-length starts after the protocol header.

  • TCP_FLAG_TextProto. Specify this option if the length specification is provided as a string (readable value). By default this value will be interpreted as a decimal number. Use TCP_FLAG_TextProtoHex for a hexadecimal number or TCP_FLAG_TextProtoOct for an octal representation.

  • TCP_FLAG_TextProtoNumberOnly. Specify this flag in combination with TCP_FLAG_TextProto if the length specification consists of an unknown number of digits and if the header is not included in the specified length (TCP_FLAG_INCLUDE_PROTO must not be specified). If specified the body starts after the last digit of the length specification.

  • TCP_FLAG_TextProtoHex. Use this flag in combination with the TCP_FLAG_TextProto option to interpret the length specification as a hexadecimal number.

  • TCP_FLAG_TextProtoOct. Use this flag in combination with the TCP_FLAG_TextProto option to interpret the length specification as an octal number.
sData | Buffer to store the received data(optional). This field also can be set to NULL (default) to use only internal buffers, for example, if data is not to be parsed.
nMaxData

Maximum amount of bytes to store into sData (optional). Specify STRING_COMPLETE to get all received data.

This value has no effect when sData is set to NULL. If this parameter is omitted only internal buffers are used.
nReceived | Parameter that receives the actual amount of data received from the server (optional).

Example

dcltrans
  transaction TWeb
  var
    hWeb      : number;
    sHdr      : string(2000);
    sSize     : string(20);
    nReceived : number;
  begin
    WebTcpipConnect(hWeb, "lab3", 80);

    WebTcpipSend(hWeb, "Start\r\n");

    WebTcpipRecvProto(hWeb, 0, 2, TCP_FLAG_INCLUDE_PROTO | TCP_FLAG_LITTLE_ENDIAN, sHdr, STRING_COMPLETE, nReceived);

    StrSearchDelimited(sSize, STRING_COMPLETE, sHdr,
                       "Age: ", 1, "\r\n",
                       1, STR_SEARCH_FIRST);

    WebTcpipShutdown(hWeb, WEB_SHUTDOWN_RESET);
  end TWeb;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvUntil Function

Action

Retrieves a response from the remote host until the pattern sPattern is found. Only the first nMaxData bytes are stored into the buffer sData. If sData is set to NULL, internal buffers are used for retrieval.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvUntil( in  hWeb      : number,
                   out sData     : string allownull,
                   in  nMaxData  : number,
                   out nReceived : number allownull,
                   in  sPattern  : string,
                   in  nLength   : number optional ): boolean;

Return value

  • true if the end of response is found

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect
sData

Buffer to store the received data.

This field also can be set to NULL to use only internal buffers, for example, if data is not to be parsed
nMaxData

Maximum amount of bytes to store into sData. Specify STRING_COMPLETE to get all received data.

This value has no effect when sData is set to NULL.
nReceived | Parameter that receives the actual amount of data received from the server
sPattern

The termination string. Predefined constants are:

  • WEB_CRLF ("\r\n")

  • WEB_CRLFCRLF ( "\r\n\r\n")

  • WEB_CRLFDOTCRLF ("\r\n.\r\n")

  • WEB_CRNULL ("\h0D00")

  • WEB_LFNULL ("\h0A00")

This may also be binary data. For using all available binary data specify STRING_COMPLETE for nLength and use the bin() operator for sData (see example).
nLength | The length of the binary pattern (optional). Omit this parameter to use all available data.

Example

dcltrans
  transaction TWeb
  var
    hWeb      : number;
    sHdr      : string;
    sSize     : string(20);
    nReceived : number;
    sPattern  : string;
  begin
    WebTcpipConnect(hWeb, "lab3", 80);
    sHdr := "GET /file5k.html HTTP/1.1\r\n"
                 "Host: lab3\r\n\r\n";

    // send HTTP request header
    WebTcpipSend(hWeb, sHdr);

    // receive HTTP response header
    WebTcpipRecvUntil(hWeb, sHdr, STRING_COMPLETE, nReceived, "\r\n\r\n");
    SPattern := "\r\n";
    WebTcpipRecvUntil(hWeb, sHdr, STRING_COMPLETE, nReceived, "\r\n\r\n");

    // receive document
    StrSearchDelimited(sSize, STRING_COMPLETE, sHdr, "Content-Length: ", 1, "\r\n",
                      1, STR_SEARCH_FIRST);
    WebTcpipRecvExact(hWeb, NULL, number(sSize));

    // reset the persistent connection
    WebTcpipShutdown(hWeb, WEB_SHUTDOWN_RESET);
  end TWeb;

Sample scripts

WebTcpipHttp01.bdf, WebTcpipImap401.bdf

親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvProtoEx Function

Action

Like the WebTcpipRecvProto function, but with the additional possibility to verify a fixed portion of the tcp packet (by specifying its starting position and length), and two additional parameters to define the performed packet-length calculation (multiplication and addition). If the verification fails an error is raised.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvProtoEx( in  hWeb          : number,
                     in  nProtoStart   : number,
                     in  nProtoLength  : number,
                     in  nOption       : number optional,
                     out sData         : string optional,
                     in  nMaxData      : number optional,
                     out nReceived     : number optional,
                     in  sVerify       : string optional,
                     in  nVerifyStart  : number optional,
                     in  nVerifyLength : number optional,
                     in  nMultiply     : number optional,
                     in  nAdd          : number optional ): boolean;

Return value

  • true if the receive operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect.
nProtoStart | Starting byte of the packet-length specification.
nProtoLength | Length of the packet-length specification.
nOption

Specify any combination of following flags (optional):

  • TCP_FLAG_LITTLE_ENDIAN. Specifies the byte order of the packet-length section. Little-endian means, that the most significant byte is at the end. Big-endian (default) means, that the most significant byte is at the front of the packet-length section.

  • TCP_FLAG_INCLUDE_PROTO. Specify this flag to signal, that the bytes of the protocol header (ending with the specified packet-length section) are included in the calculated packet-length. If this flag is not set, the receive operation of the calculated packet-length starts after the protocol header.

  • TCP_FLAG_TextProto. Specify this option if the length specification is provided as a string (readable value). By default this value will be interpreted as a decimal number. Use TCP_FLAG_TextProtoHex for a hexadecimal number or TCP_FLAG_TextProtoOct for an octal representation.

  • TCP_FLAG_TextProtoNumberOnly. Specify this flag in combination with TCP_FLAG_TextProto if the length specification consists of an unknown number of digits and if the header is not included in the specified length (TCP_FLAG_INCLUDE_PROTO must not be specified). If specified the body starts after the last digit of the length specification.

  • TCP_FLAG_TextProtoHex. Use this flag in combination with the TCP_FLAG_TextProto option to interpret the length specification as a hexadecimal number.

  • TCP_FLAG_TextProtoOct. Use this flag in combination with the TCP_FLAG_TextProto option to interpret the length specification as an octal number.
sData

Buffer to store the received data (optional).

This field also can be set to NULL (default) to use only internal buffers, for example, if data is not to be parsed.
nMaxData

Maximum amount of bytes to store into sData (optional). Specify STRING_COMPLETE to get all received data.

This value has no effect when sData is set to NULL. If this parameter is omitted only internal buffers are used.
nReceived | Parameter that receives the actual amount of data received from the server (optional).
sVerify | Binary pattern to verify (optional). If this parameter is omitted no verification is performed.
nVerifyStart | Starting position of the pattern verification (optional). If this parameter is omitted the verification starts at the beginning.
nVerifyLength | Length of the verification pattern (optional). If this parameter is omitted no verification is performed.
nMultiply | The parsed packet-length (specified by the nProtoStart, nProtoLength and bLittleEndian parameters) is multiplied by nMultiply and finally nSum is added (optional). If this parameter is omitted no multiplication is performed.
nAdd | The parsed packet-length (specified by the nProtoStart, nProtoLength and bLittleEndian parameters) is multiplied by nMultiply and finally nAdd is added (optional). If this parameter is omitted no addition is performed.

Example

dcltrans
  transaction TWeb
  var
    hWeb      : number;
    sHdr      : string(2000);
    sSize     : string(20);
    nReceived : number;
  begin
    WebTcpipConnect(hWeb, "lab3", 80);

    WebTcpipSend(hWeb, "Start\r\n");

    WebTcpipRecvProtoEx(hWeb, 0, 2, TCP_FLAG_INCLUDE_PROTO | TCP_FLAG_LITTLE_ENDIAN, sHdr, STRING_COMPLETE, nReceived,
                        "WIDECHARS", 2, 9, 2, 18);

    StrSearchDelimited(sSize, STRING_COMPLETE, sHdr,
                       "Age: ", 1, "\r\n",
                       1, STR_SEARCH_FIRST);

    WebTcpipShutdown(hWeb, WEB_SHUTDOWN_RESET);
  end TWeb;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvUntilIdle Function


WebTcpipRecvUntilIdle Function

Action

Receives data from a connection until the connection remains idle for a specified period of time.

Include file

WebAPI.bdh

Syntax

WebTcpipRecvUntilIdle(
    in hWeb      : number,
    out sDataRecv : string optional,
    in  nIdleTime : number optional,
    in  sTimer    : string optional ) : boolean;

Return value

  • true if the operation received any data

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect.
sDataRecv | Optional output binary string variable where the received data is placed.
nIdleTime | Timeout period (in milliseconds) for which the connection must remain idle.
sTimer | Name of the timer returning the sum of response times of the function call (optional). If this parameter is omitted, no measurements are performed.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true, TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSend Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function


WebTcpipScreenRecvPacketsUntilCursor Function

Action

Receives packets from a Telnet server until cursor is detected at a specified position.

Include file

WebAPI.bdh

Syntax

WebTcpipScreenRecvPacketsUntilCursor(
    in hWeb  : number,
    in nCol  : number,
    in nRow  : number,
    out sRecv : string ): boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hObject | Valid handle to a Web connection created by WebTcpipConnect. Web connection must be in Telnet mode (by a previous WebTcpipSetTelnetMode function call) and have a screen renderer associated with it.
nCol | 1-based horizontal cursor position.
nRow | 1-based vertical cursor position.
sRecv | Optional output buffer variable for all received binary data, including the matching packet.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true, TELNET_MODEOPT_RFC_1576);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipScreenRecvPacketsUntilCursor(hWeb0, 1, 21, sBuffer);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetTelnetMode Function


WebTcpipScreenRecvPacketsUntilField Function

Action

Receives data from a given connection until the rendered screen contains a specified field. This function is only valid on open connections that have a screen renderer associated with them and define fields via an underlying protocol, as is the case with Telnet connections.

Include file

WebAPI.bdh

Syntax

WebTcpipScreenRecvPacketsUntilField(    in  hWeb        : number,
                                        in  nFieldIndex : number,
                                        in  sText       : string,
                                        in  nOptions    : number optional,
                                        in  nMaxLen     : number optional,
                                        out sRecv       : string optional ) : boolean;

Return value

  • true if the operation was successful and data was received until given text was found in give field

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect. Web connection must be in Telnet mode (by a previous WebTcpipSetTelnetMode function call) and have a screen renderer associated with it.
nFieldIndex | Field index to which content from sText should be compared (1 based).
sText | Text value that should be compared against the field value.
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.
nMaxLen | Maximum field value length for comparison (optional). This is generally the length of sText.
sRecv | Output buffer for all binary data received from the connection until sText matches the rendered field, including the last received packet that produces the desired screen content (optional).

Example

dcltrans
transaction TInit
  begin
    StrSetHostCP(1148);
// 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
   transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
// Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");  // ·¦·······¨··     000000A0
    WebTelnetRecvRecord(hWeb0);
    WebTcpipRecvPackets(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTcpipScreenRecvPacketsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTcpipScreenRecvPacketsUntilText(hWeb0, 6, 22, "Choice: ");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTcpipSetPacketBoundary(hWeb0, "\nFFEF");
    WebTcpipScreenRecvPacketsUntilField(hWeb0, 1, " ");
    iFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,16, 22);
    if iFieldPos = 1 then
    WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetTelnetMode Function


WebTcpipScreenRecvPacketsUntilStatus Function

Action

Receives data from a given connection until rendered screen signals a specified status. This function is only valid on open connections that have a screen renderer associated with them and define statuses by an underlying protocol, as is the case with Telnet connections.

Include file

WebAPI.bdh

Syntax

WebTcpipScreenRecvPacketsUntilStatus(    in  hWeb         : number,
                                         in  sStatusName  : string,
                                         in  sStatusValue : string,
                                         in  nOptions     : number optional,
                                         in  nMaxLen      : number optional,
                                         out sRecv        : string optional ) : boolean;

Return value

  • true if the operation was successful and data was received until specified status value was found

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect. Web connection must be in Telnet mode (by a previous WebTcpipSetTelnetMode function call) and have a screen renderer associated with it.
sStatusName | Status identifier against which the content of sStatusValue should be compared. The only supported status is "Keyboard Locked".
sStatusValue | String value that the status value should be compared against. Valid strings are "true" and "false".
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.
nMaxLen | Maximum string length of the value to be compared (optional).
sRecv | Output buffer for all binary data received from the connection until sStatusValue matches the rendered field, including the last received packet that has the desired status value (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080
      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨·· 000000A0
    WebTelnetRecvRecord(hWeb0);
    WebTcpipRecvPackets(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTcpipScreenRecvPacketsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTcpipScreenRecvPacketsUntilText(hWeb0, 6, 22, "Choice: ");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTcpipSetPacketBoundary(hWeb0, "\nFFEF");
    WebTcpipScreenRecvPacketsUntilField(hWeb0, 1, " ");
    iFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,16, 22);
    if iFieldPos = 1 then
     WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetTelnetMode Function


WebTcpipScreenRecvPacketsUntilText Function

Action

Receives data from a given connection until rendered screen contains specified text. This function is only valid on open connections that have a screen renderer associated with them, as is the case with Telnet connections.

Include file

WebAPI.bdh

Syntax

WebTcpipScreenRecvPacketsUntilText(    in  hWeb        : number,
                                       in  nCol        : number,
                                       in  nRow        : number,
                                       in  sText       : string,
                                       in  nOptions    : number optional,
                                       in  nTextLength : number optional,
                                       out sRecv       : dstring optional ): boolean;

Return value

  • true if the operation was successful and data was received until specified text was rendered on screen

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect. Web connection must be in Telnet mode (by a previous WebTcpipSetTelnetMode function call) and have a screen renderer associated with it.
nCol | Column on rendered screen at which position the text should be compared.
nRow | Row on rendered screen at which position the text should be compared.
sText | Text value that should be compared against the rendered screen.
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.
nTextLength | Length of rendered text that is to be compared (optional). By default this means the length of sText.
sRecv | Output buffer for all binary data received from the connection until sText matches rendered screen portion including the last received packet which produced the desired screen content (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148);// 1148  (IBM EBCDIC - International(500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");      // ·¦·······¨··    000000A0
    WebTelnetRecvRecord(hWeb0);
    WebTcpipRecvPackets(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTcpipScreenRecvPacketsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTcpipScreenRecvPacketsUntilText(hWeb0, 6, 22, "Choice:");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTcpipSetPacketBoundary(hWeb0, "\nFFEF");
    WebTcpipScreenRecvPacketsUntilField(hWeb0, 1, "");
    iFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,16, 22);

    if iFieldPos = 1 then
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetTelnetMode Function


WebTcpipSelect Function

Action

Checks if a subsequent WebTcpipRecv operation on the provided connection handle will block, or succeed immediately. If the timeout parameter is provided the function call waits until the subsequent WebTcpipRecv function will not block anymore or the timeout expires. A WebTcpipRecv operation succeeds, if data is available or the connection has been closed by the remote host.

Include file

WebAPI.bdh

Syntax

WebTcpipSelect( in hWeb     : number,
                in fTimeout : float ): boolean;

Return value

  • true if a subsequent WebTcpipRecv operation will not block.

  • false if the timeout expires.

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect.
fTimeout | Time in seconds the WebTcpipSelect function will wait until the described condition occurs. If this condition cannot be met in the specified time, false is returned. (Default is 0, which means, that the WebTcpipSelect function will not block, regardless if it returns true or false). Specify TIMEOUT_INFINITE if you do not want a timeout to occur.

Example

dcltrans
  transaction TMain
  var
    hWeb : number;
    sResponse : string(1000);
  begin
    WebTcpipConnect(hWeb, "server", 80);
    WebTcpipSend(hWeb, "GET / HTTP/1.0\r\n\r\n");
    while not WebTcpipSelect(hWeb, 1.0) do
      print("no data yet ");
    end;
    WebTcpipRecvClose(hWeb, sResponse);
    WebTcpipShutdown(hWeb);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


WebTcpipSend Function

Action

Sends a string to the remote host. Before WebTcpipSend can be used, a valid connection has to be established with WebTcpipConnect.

Include file

WebAPI.bdh

Syntax

WebTcpipSend( in hWeb          : number,
              in sStringToSend : string ): boolean;

Return value

  • true if the string is sent successfully

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect
sStringToSend | String to send to the remote host

Example

dcltrans
  transaction TWebApplevel
  var
    hWeb : number;
    nRecv : number;
  begin
    // Get the root HTML page of the Web server defined
    // by standardhost with a custom client header
    WebTcpipConnect(hWeb, "standardhost", WEB_PORT_HTTP);
    WebTcpipSend(hWeb, "GET / HTTP/1.0\r\n"
                     "User-Agent: CustomClient/1.0\r\n"
                     "Accept: */*\r\n\r\n");
    WebTcpipRecvClose(hWeb, 0, 0, nRecv);
    WebTcpipShutdown(hWeb);
  end TWebApplevel;

Sample scripts

WebFileUpload01.bdf, WebMulti01.bdf, WebSecure01.bdf, WebTcpipHttp01.bdf, WebTcpipWebStone01.bdf

親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipRecv Function
WebTcpipRecvExact Function
WebTcpipRecvClose Function
WebTcpipRecvPackets Function
WebTcpipRecvPacketsUntilData Function
WebTcpipRecvProto Function
WebTcpipRecvUntil Function
WebTcpipRecvProtoEx Function
WebTcpipRecvUntilIdle Function


WebTcpipSendFile Function

Action

Sends the data of a file in binary mode to the remote host. Before WebTcpipSendFile can be used, a valid connection has to be established with WebTcpipConnect.

Include file

WebAPI.bdh

Syntax

WebTcpipSendFile( in hWeb      : number,
                  in sFileName : string ): boolean;

Return value

  • true if the file was sent successfully

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect
sFileName | File to send to the server. The file is opened in binary mode and sent until end of file.

Example

dcltrans
transaction TWebApplevel
  var
    hWeb: number;
  begin
    WebTcpipConnect(hWeb, "standardhost", WEB_PORT_HTTP);
    WebTcpipSendFile(hWeb, "c:\\temp\\archive.zip");
    WebTcpipShutdown(hWeb);
  end TWebApplevel;

Sample scripts

WebFileUpload01.bdf

親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


WebTcpipSendBin Function

Action

Sends a string/buffer containing binary data to the remote host. Before WebTcpipSendBin can be used, a valid connection has to be established with WebTcpipConnect.

Include file

WebAPI.bdh

Syntax

WebTcpipSendBin ( in hWeb     : number,
                  in sData    : string,
                  in nDataLen : number optional ): boolean;

Return value

  • true if the data is sent successfully

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect.
sData | String containing the data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLen | Number of bytes to send to the server (optional) . Specify STRING_COMPLETE or omit this parameter to post all available data.

Example

dcltrans
  transaction TWebApplevel
  var
    hWeb  : number;
    sData : string;
  begin
    sData := "\h00010203040506070809101112131415";
    WebTcpipConnect(hWeb, "standardhost", 6644);
    WebTcpipSendBin(hWeb, bin(sData));
    WebTcpipShutdown(hWeb);
  end TWebApplevel;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


WebTcpipSendPacket Function

Action

Sends a single out-going packet to an open connection. A packet is defined as a TCP/IP packet (which equates to WebTcpipSend()) or as data terminated by a packet boundary, which is set by WebTcpipSetPacketBoundary()).

Include file

WebAPI.bdh

Syntax

WebTcpipSendPacket(    in hWeb  : number,
                       in sSend : string ): boolean;

Return value

  • true if the operation was successful and the data was sent

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect.
sSend | Binary data to be sent to an open connection.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591
(ISO 8859-1 Latin I)
  end TInit;   transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0,NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipSetPacketBoundary Function
WebTcpipRecvPackets Function
WebTcpipSend Function


WebTcpipSetOptions Function

Action

Sets a TCP/IP connection’s specific options.

Include file

WebAPI.bdh

Syntax

WebTcpipSetOptions(    in hWeb           : number,
                       in nOptions       : number,
                       in bEnable        : boolean optional,
                       in sAutoReplyData : string optional ): boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect.
nOptions

Connection behavior settings, which may be any bitwise combination of the following:

  • TELNET_MODEOPT_FILTER_NOPS := 0x0001;

  • TELNET_MODEOPT_AUTOANSWER_TM := 0x0002;

  • TELNET_MODEOPT_FILTER_TM := 0x0004;

  • TELNET_MODEOPT_RFC_1576 := 0x0007;

  • TELNET_MODEOPT_AUTO_RECV := 0x0018;

  • TELNET_MODEOPT_SYNC := 0x0020;

  • TELNET_MODEOPT_3270E_AUTO_REPLY := 0x0040;

See WebTcpipSetTelnetMode for details.
bEnable | In case this parameter is present, a single option can be turned on/off without affecting the other options (optional). In case this parameter is omitted, the nOptions parameter sets all available options according to its bitmask.
sAutoReplyData | In combination with TELNET_MODEOPT_3270E_AUTO_REPLY an auto-reply string to the server may be specified here, which is by default a NULL byte - 0x0 (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591
(ISO 8859-1 Latin I)
  end TInit;   transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_AUTO_RECV);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipGetOptions Function
WebTcpipSetTelnetMode Function


WebTcpipSetPacketBoundary Function

Action

Sets a packet boundary for an existing connection and is used to split in-coming and out-going data when using WebTcpipRecvPackets and WebTcpipSendPacket functions. By default, each “packet” consists of a TCP/IP packet. So, in effect, the packet boundary is set to NULL.

Include file

WebAPI.bdh

Syntax

WebTcpipSetPacketBoundary(    in hWeb      : number,
                              in sBoundary : string ): boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect.
sBoundary | Binary string representing the new packet boundary. If NULL is passed as a parameter, a raw TCP/IP packet is recognized as a packet.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;
transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSetPacketBoundary(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function
WebTcpipGetPacketBoundary Function
WebTcpipRecvPackets Function
WebTcpipSendPacket Function


WebTcpipSetTelnetMode Function

Action

Switches pure TCP/IP connection mode to Telnet connection mode. Telnet connections allow several Telnet protocol-specific BDL operations for terminal emulation support.

Include file

WebAPI.bdh

Syntax

WebTcpipSetTelnetMode(    in hWeb        : number,
                          in sRendererId : string,
                          in nCols       : number optional,
                          in nRows       : number optional,
                          in bUseColor   : number optional,
                          in nOptions    : number optional ): boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect.
sRendererId

ID of a renderer that should be used when handling high-level Telnet functions. Currently defined rendererIds are:

  • TELNET_RENDERER_3270: Connection drives a 3270 terminal service renderer.

  • TELNET_RENDERER_5250: Connection drives a 5250 terminal service renderer.

  • TELNET_RENDERER_ANSI: Connection drives an ANSI terminal service renderer (VT100 Terminal Client Series).

  • TELNET_RENDERER_VT200: Connection drives an ANSI terminal service renderer (VT200 Terminal Client Series).
nCols | Rendered screen width (optional). Default (0) value is read from profile settings.
nRows | Rendered screen height (optional). Default (0) value is read from profile settings.
bUseColors | Specifies if rendered screen should be displayed in color (optional). Default is false.
nOptions

Specific Telnet service protocol option (optional). Currently the following options are available and can be ORed (+ operator):

  • TELNET_MODEOPT_FILTER_NOPS: According to RFC 1576, a host server periodically sends an IAC NOP sequence to test its connection status. These operations may be auto-filtered before getting to further BDL operations because in most cases they are sent periodically and not in the same command sequence order.

  • TELNET_MODEOPT_AUTOANSWER_TM: According to RFC 1576, a host server may periodically send an IAC DO TimingMark sequence, awaiting a IAC WONT TimingMark response, for checking availability of the telnet client. Because these signals are sent periodically and not in a defined sequence order, they may be filtered and auto-answered in the background by the connection itself.

  • TELNET_MODEOPT_RFC_1576: This option is an OR-combination of both TELNET_MODEOPT_FILTER_NOPS and TELNET_MODEOPT_AUTOANSWER_TM.

  • TELNET_MODEOPT_AUTO_RECV: For writing more robust scripts for telnet servers sending time-dependent dynamic information (e.g., server time), each send operation empties the receive buffer.

  • TELNET_MODEOPT_SYNC: For writing more robust scripts for telnet servers sending negotiating Telnet options in a non- or partly deterministic manner, expected commands, option negotiation or data may be noted. All expected data is then verified at next sending function and prepended to the data of the next receiving function. See WebTelnetSyncCommand, WebTelnetSyncSubNegotiation, and WebTelnetSyncData for details.

  • TELNET_MODEOPT_3270E_AUTO_REPLY: Enable this option for writing more robust scripts for Telnet servers using the 3270E protocol. Such servers require a client confirmation after each response, which may be individually set using WebTcpipSetOptions.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;
transaction TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


WebTcpipShutdown Function

Action

Shuts down the connection established by WebTcpipConnect.

Include file

WebAPI.bdh

Syntax

WebTcpipShutdown( inout hWeb  : number,
                  in    nMode : number optional ): boolean;

Return value

  • true if the shutdown succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect
nMode

Determines the shutdown mode (optional). Any of the following options is possible:

  • WEB_SHUTDOWN_GRACEFUL. Initiates a graceful shutdown: first closes and then resets the connection

  • WEB_SHUTDOWN_IMMEDIATE. Initiates a standard connection close (default)

  • WEB_SHUTDOWN_RESET. Resets the connection

Example

dcltrans
  transaction TWeb
  var
    hWeb      : number;
    sHdr      : string;
    sSize     : string(20);
    nReceived : number;
  begin    WebTcpipConnect(hWeb, "lab3", 80);
    sHdr := "GET /file5k.html HTTP/1.1\r\n"
                  "Host: lab3\r\n\r\n";

    // send HTTP request header
    WebTcpipSend(hWeb, sHdr);

    // receive HTTP response header
    WebTcpipRecvUntil(hWeb, sHdr, STRING_COMPLETE,
                      nReceived, "\r\n\r\n");

    // receive document
    StrSearchDelimited(sSize, STRING_COMPLETE, sHdr,
                       "Content-Length: ",1,"\r\n",
                       1, STR_SEARCH_FIRST);
    WebTcpipRecvExact(hWeb, NULL, number(sSize));

    // reset the persistent connection
    WebTcpipShutdown(hWeb, WEB_SHUTDOWN_RESET);
  end TWeb;

Sample scripts

WebFileUpload01.bdf, WebMulti01.bdf, WebSecure01.bdf, WebTcpipHttp11.bdf, WebTcpipWebStone01.bdf

親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


WebTcpipSSLHandshake Function

Action

Performs a secure handshake on an open connection. This function can be used if some insecure communication has to be done before the connection should turn into a secure connection (e.g. secure traffic over a http proxy).

Include file

WebAPI.bdh

Syntax

WebTcpipSSLHandshake( in hWeb : number ): boolean;

Return value

  • true if the function succeeds.

  • false otherwise.

Parameter | Description
hWeb | Valid handle to a Web connection that was created by WebTcpipConnect.

Example

dcltrans
  transaction TMain
  var
    hWeb      : number;
    sResponse : string;
    nRecvd    : number;
  begin
    WebTcpipConnect(hWeb, "proxy", 8080);
    WebTcpipSend(hWeb, "CONNECT lab3:443\r\n\r\n");
    WebTcpipRecvUntil(hWeb, sResponse, STRING_COMPLETE, nRecvd, WEB_CRLFCRLF);
    WebTcpipSSLHandshake(hWeb);    WebTcpipSend(hWeb, "GET / HTTP/1.0\r\n\r\n");
    WebTcpipRecvClose(hWeb);
    WebTcpipShutdown(hWeb);
  end TMain;
親トピック: Web TCP/IP Functions
関連資料
WebTcpipConnect Function


Web Telnet Functions

Silk Performer provides functions for testing applications that use the Web telnet protocol.

  • WebTelnetRecvCommand Function
    Receives a Telnet command from a Telnet connection.
  • WebTelnetRecvRecord Function
    Receives a Telnet record sequence from a terminal service server, which is a shortcut to <BinaryData> IAC EOR.
  • WebTelnetRecvRecordsUntilClose Function
    Receives data (packets terminated by IAC EOR) from a given connection until the Telnet connection is closed.
  • WebTelnetRecvRecordsUntilData Function
    Receives records (data terminated by IAC EOR) from a Telnet server until a record contains expected data.
  • WebTelnetRecvSubNegotiation Function
    Receives a Telnet option sub-negotiation sequence from a terminal service server, which is a shortcut to IAC SB <Option> <Data> IAC SE.
  • WebTelnetScreenGetCursor Function
    Queries cursor position on a rendered screen in an active Telnet connection.
  • WebTelnetScreenGetField Function
    Queries a rendered screen’s field value in an active Telnet connection.
  • WebTelnetScreenGetFieldCount Function
    Returns total number of fields in currently rendered screen in an active Telnet connection.
  • WebTelnetScreenGetFieldIndex Function
    Returns the index of a field in an open Telnet connection at a given position.
  • WebTelnetScreenGetFieldProperties Function
    Queries a rendered field’s attributes in an active Telnet connection.
  • WebTelnetScreenGetSize Function
    Queries rendered screen’s size in an active Telnet connection.
  • WebTelnetScreenGetStatus Function
    Queries rendered screen’s status value in an active Telnet connection.
  • WebTelnetScreenGetText Function
    Queries rendered screen content in an active Telnet connection.
  • WebTelnetScreenRecvRecordsUntilCursor Function
    Receives records (data terminated by IAC EOR) from a Telnet server until cursor is detected at a specified position.
  • WebTelnetScreenRecvRecordsUntilField Function
    Receives data (packets terminated by IAC EOR) from a given connection until the rendered screen contains a specified field.
  • WebTelnetScreenRecvRecordsUntilStatus Function
    Receives data (packets terminated by IAC EOR) from a given connection until the rendered screen contains a specified status.
  • WebTelnetScreenRecvRecordsUntilText Function
    Receives data (packets terminated by IAC EOR) from a given connection until the rendered screen contains specified text.
  • WebTelnetScreenVerifyCursor Function
    Verifies cursor position in a rendered screen in an active Telnet connection.
  • WebTelnetScreenVerifyField Function
    Verifies field content in a rendered screen in an active Telnet connection.
  • WebTelnetScreenVerifyStatus Function
    Verifies the status value of a rendered screen in an active Telnet connection.
  • WebTelnetScreenVerifyText Function
    Verifies rendered screen content in an active Telnet connection.
  • WebTelnetSendCommand Function
    Sends a Telnet command to a Telnet connection.
  • WebTelnetSendRecord Function
    Sends a Telnet record sequence to a terminal service server, which is a shortcut to <BinaryData> IAC EOR.
  • WebTelnetSendRecordExecute Function
    Sends a Telnet record to a terminal services server.
  • WebTelnetSendRecordPrepare Function
    Prepares a Telnet recording session consisting of binary data and text fields for later transmission to a terminal services server.
  • WebTelnetSendSubNegotiation Function
    Sends a Telnet option sub-negotiation sequence to a terminal service server, which is a shortcut to IAC SB <Option> <Data> IAC SE.
  • WebTelnetSendTerminalType Function
    Sends simulated terminal type identification code to a Telnet server, which is a shortcut to IAC SB TT IS <TerminalTypeId> IAC SE.
  • WebTelnetSetRecordString Function
    Sets the string value of a field in a data record that is being prepared for transmission to a terminal services server.
  • WebTelnetSyncCommand Function
    Notes a Telnet command to be verified as received on next sending operation in a Telnet connection.
  • WebTelnetSetTerminalConfigString Function
    Configures the behavior of a simulated ANSI or VT terminal in an active Telnet connection.
  • WebTelnetSyncData Function
    Notes binary data like VT100 escape sequences to be verified as received on next sending operation in a Telnet connection.
  • WebTelnetSyncSubNegotiation Function
    Notes a Telnet option sub-negotiation to be verified as received on next sending operation in a Telnet connection.
  • WebTelnetTypeKeys Function
    Simulates a user input to a Telnet server.
親トピック: TCP/IP Functions Reference


WebTelnetRecvCommand Function

Action

Receives a Telnet command from a Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetRecvCommand(    in  hWeb     : number,
    in  iCmd     : number optional,
    in  iOpt     : number optional,
    out iRecvCmd : number optional,
    out iRecvOpt : number optional ): boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
iCmd | Telnet command to be received from the server (optional). If omitted or set -1 then no verification will be performed. See constants in WebTelnetSendCommand for valid values.
iOpt | Telnet option for WILL/WONT/DO/DONT and SB Telnet commands (optional). See constants in WebTelnetSendCommand for valid values. If omitted or set to -1 no verification will be performed.
iRecvCmd | An optional variable may be passed to this function to obtain a Telnet command received from the server (optional).
iRecvOpt | An optional variable may be passed to this function to obtain a received Telnet command option (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;
  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTelnetSendCommand Function
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetRecvRecord Function

Action

Receives a Telnet record sequence from a terminal service server, which is a shortcut to <BinaryData> IAC EOR.

Include file

WebAPI.bdh

Syntax

WebTelnetRecvRecord(    in hWeb           : number,
                        in sDataRequired  : string optional,
                        out sDataRecv     : string optional ): boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sDataRequired | Optional binary data expected from a terminal server without the terminating IAC EOR. When omitted or set to NULL, no verification is performed (optional).
sDataRecv | Where optional output data (including the terminating IAC EOR) is to be placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148);
    // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨·· 000000A0

    WebTelnetRecvRecord(hWeb0);
    WebTcpipRecvPackets(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTcpipScreenRecvPacketsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTcpipScreenRecvPacketsUntilText(hWeb0, 6, 22, "Choice: ");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTcpipSetPacketBoundary(hWeb0, "\nFFEF");
    WebTcpipScreenRecvPacketsUntilField(hWeb0, 1, "");
    iFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,16, 22);
    if iFieldPos = 1 then
     WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetRecvRecordsUntilClose Function

Action

Receives data (packets terminated by IAC EOR) from a given connection until the Telnet connection is closed. This function is only valid on open Telnet connections.

Include file

WebAPI.bdh

Syntax

WebTelnetRecvRecordsUntilClose(    in  hWeb  : number,
                                   out sRecv : string optional ): boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sRecv | Optional string variable where all received binary data is to be placed until connection is closed.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1047); // 1047
 (IBM EBCDIC - Latin-1/Open System)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV | TELNET_MODEOPT_3270E_AUTO_REPLY);

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TN3270E);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TN3270E);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_DEVICE_TYPE + TN3270E_CMD_REQUEST + "IBM-3278-2-E");
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_FUNCTIONS + TN3270E_CMD_REQUEST + TN3270E_FUNC_BIND_IMAGE
      + TN3270E_FUNC_RESPONSES + TN3270E_FUNC_SYSREQ);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h00000000007DD4D2"); // ·····}ÔÒ
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h00000000017D4040"); // ·····}@@
    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 57, 24);
    WebTelnetSendRecord(hWeb0, "\h00000000027D5DE9115DE8" + StrToHostCP("1___________________"));
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h00000000037D5D6C"); // ·····}]l
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h00000000047D5DE9115DE8" + StrToHostCP("3___________________"));
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h00000000057D50F311C77E" + StrToHostCP("p") + "\h11506E" + StrToHostCP(
      "hello_____________________________________"));

    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h0000000006F35D6A"); // ·····ó]j
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h0000000007F3C77E"); // ·····óÇ~
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h0000000008F35DE8"); // ·····ó]è
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetSendRecord(hWeb0, "\h0000000009F35DE8"); // ·····ó]è
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h000000000AF3D4D2"); // ·····óÔÒ
    WebTelnetRecvRecordsUntilClose(hWeb0);

    WebTcpipShutdown(hWeb0)
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetRecvRecordsUntilData Function

Action

Receives records (data terminated by IAC EOR) from a Telnet server until a record contains expected data.

Include file

WebAPI.bdh

Syntax

WebTelnetRecvRecordsUntilData(    in  hWeb          : number,
    in  sDataExpected : string,
    in  nOptions      : number optional,
    out sDataReceived : string optional ): boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sDataExpected | Binary string that is to be looked for in received records.
nOptions

Comparison options; this is a case-insensitive "contains" by default, or may be one of the following:

  • TELNET_FLAG_EQUAL: Lengths of both values must match.

  • TELNET_FLAG_CASE_SENSITIVE: Comparison is performed case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: sText must occur within rendered screen text. (default)

  • TELNET_FLAG_FROM_LEFT: comparison is performed from the left side.

  • TELNET_FLAG_TRIM_LEFT: Leading blank spaces are trimmed from received data before comparison is performed.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from received data before comparison is performed.

  • TELNET_FLAG_TRIM_BOTH: Status value is trimmed from both sides of content before comparison is performed.

  • TELNET_FLAG_FROM_RIGHT: Comparison is performed beginning from the right side.
sDataReceived | Optional string variable where all received binary data is to be placed until comparison succeeds (up to and including the last received record).

Example

dcltrans  transaction TInit
  begin
    StrSetHostCP(1148);
// 1148  (IBM EBCDIC - International
(500 + Euro))
  end TInit;
   transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
// Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨·· 000000A0

    WebTelnetRecvRecordsUntilData(hWeb0, "\h4040405C");
    if not WebTelnetScreenVerifyCursor(hWeb0, 16, 23, SEVERITY_SUCCESS) then
      WebTcpipShutdown(hWeb0);
    else
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, "");
      WebTcpipShutdown(hWeb0);    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetRecvSubNegotiation Function

Action

Receives a Telnet option sub-negotiation sequence from a terminal service server, which is a shortcut to IAC SB <Option> <Data> IAC SE.

Include file

WebAPI.bdh

Syntax

WebTelnetRecvSubNegotiation(    in  hWeb          : number,
                                in iOpt           : number optional,
                                in sDataExpected  : string optional,
                                out iOptReceived  : number optional,
                                in sDataReceived  : string optional ): boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
iOpt | Optional Telnet sub-negotiation option that is expected from the server (optional). See constants in WebTelnetSendCommand for valid values. Set -1 when no validation is to be performed.
sDataExpected | Binary sub-negotiation data string expected from the server (optional). Set to NULL if no validation is to be performed.
iOptReceived | Optional variable where the sub-negotiation option received from the server is to be placed (optional).
sDataReceived | Optional output string buffer where data received from the server is to be placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591
(ISO 8859-1 Latin I)
  end TInit;   transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;

    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetCursor Function

Action

Queries cursor position on a rendered screen in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetCursor(    in  hWeb : number,
    out nCol : number optional,
    out nRow : number optional ): boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCol | Optional numeric variable, where cursor’s 1-based column is to be placed on a rendered screen (optional).
nRow | Optional numeric variable where cursor’s 1-based row is to be placed on a rendered screen (optional).

Example

dcltrans  transaction TInit
  begin
    StrSetHostCP(1148);
// 1148  (IBM EBCDIC - International
(500 + Euro))
  end TInit;
   transaction TMain
  var
    hWeb0      : number;
    iFieldPos  : number;
    nCursorCol : number;
    nCursorRow : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨·· 000000A0

    WebTelnetRecvRecordsUntilData(hWeb0, "\h4040405C");
    WebTelnetScreenGetCursor(hWeb0, nCursorCol, nCursorRow);
    if (nCursorCol <> 16) and (nCursorCol <> 23) then
      WebTcpipShutdown(hWeb0);
    else
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetField Function

Action

Queries a rendered screen’s field value in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetField(    in hWeb        : number,
                            in nFieldIndex : number,
                            in nOptions    : number optional,
                            in nMaxLen     : number optional ) : string;

Return value

String representing the field’s value

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nFieldIndex | 1-based field’s index of the value that is to be queried.
nOptions

Optionally specifies output string value pre-processing; may be any of following values (optional):

  • TELNET_FLAG_TRIM_LEFT: Leading blank spaces are trimmed from field’s value.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blank spaces are trimmed from field’s value.

  • TELNET_FLAG_TRIM_BOTH: Rendered field’s value is trimmed from both sides.

  • TELNET_FLAG_UPPERCASE: Output value will be converted to upper case.

  • TELNET_FLAG_LOWERCASE: Output value will be converted to lower case.
nMaxLen | Maximum length of output value, which by default is the whole string (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148);
    // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580") // ·¦·······¨·· 000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetField(hWeb0, 1);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    if (not WebTelnetScreenVerifyField(hWeb0, 1, StrToHostCP("1"))) or (sRecv = "") then
    WebTcpipShutdown(hWeb0);
    else
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice:");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, "");
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetFieldCount Function

Action

Returns total number of fields in currently rendered screen in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetFieldCount(in hWeb : number ): number;

Return value

  • -1 on error

  • Positive number or 0 representing total number of currently rendered fields

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.

Example

dcltrans  transaction TInit
  begin
    StrSetHostCP(1148);
    // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0       : number;
    nFieldPos   : number;
    nFieldCount : number;
    nFieldCol   : number;
    nFieldRow   : number;
    nScrRows    : number;
    nScrCols    : number;

  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨··     000000A0

    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);

    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" +StrToHostCP("1"));
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice:");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, "");
    nFieldCount := WebTelnetScreenGetFieldCount(hWeb0);

    if nFieldCount = 1 then
      WebTelnetScreenGetFieldProperties(hWeb0, 1, nFieldCol, nFieldRow, 0);
      if (nScrCols >= nFieldCol) and (nScrRows >= nFieldRow) then
        nFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,nFieldCol, nFieldRow);
        if nFieldPos = 1 then
          WebTcpipShutdown(hWeb0);
        end;
      end;
   end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetFieldIndex Function

Action

Returns the index of a field in an open Telnet connection at a given position. The index returned may be used for further data retrieval and comparison.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetFieldIndex(    in hWeb : number,
                                 in nCol : number,
                                 in nRow : number ) : number;

Return value

  • 1-based index of the rendered field at a given position.

  • 0 on error

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCol | 1-based column of the searched field.
nRow | 1-based row of the searched field.

Example

dcltrans  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81"  // ················ 00000090

      "\h80A687888185869997A89580");  // ·¦·······¨··  000000A0
    WebTelnetRecvRecord(hWeb0);
    WebTcpipRecvPackets(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTcpipScreenRecvPacketsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTcpipScreenRecvPacketsUntilText(hWeb0, 6, 22, "Choice:");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTcpipSetPacketBoundary(hWeb0, "\nFFEF");
    WebTcpipScreenRecvPacketsUntilField(hWeb0, 1, "");
    iFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,16, 22);
    if iFieldPos = 1 then
    WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetFieldProperties Function

Action

Queries a rendered field’s attributes in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetFieldProperties(    in  hWeb        : number,
                                      in  nFieldIndex : number,
                                      out nCol        : number optional,
                                      out nRow        : number optional,
                                      out nLength     : number optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nFieldIndex | 1-based screen field index of the attributes that are to be queried.
nCol | Optional numeric variable where field’s 1-based column is to be placed (optional).
nRow | Optional numeric variable where field’s 1-based row is to be placed (optional).
nLength | Optional numeric variable where field’s length is to be placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
  transaction TMain
  var
    hWeb0       : number;
    nFieldPos   : number;
    nFieldCount : number;
    nFieldCol   : number;
    nFieldRow   : number;
    nScrRows    : number;
    nScrCols    : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");    // ·¦·······¨·· 000000A0

    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
    nFieldCount := WebTelnetScreenGetFieldCount(hWeb0);
    if nFieldCount = 1 then
      WebTelnetScreenGetFieldProperties(hWeb0, 1, nFieldCol, nFieldRow, 0);
      if (nScrCols >= nFieldCol) and (nScrRows >= nFieldRow) then
        nFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,nFieldCol, nFieldRow);
        if nFieldPos = 1 then
          WebTcpipShutdown(hWeb0);
        end;
      end;
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetSize Function

Action

Queries rendered screen’s size in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetSize(    in  hWeb  : number,
                           out nCols : number optional,
                           out nRows : number optional ): boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCols | Optional numeric variable, where rendered screen’s width is to be placed (optional).
nRows | Optional numeric variable, where to put rendered screen’s height is to be placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0       : number;
    nFieldPos   : number;
    nFieldCount : number;
    nFieldCol   : number;
    nFieldRow   : number;
    nScrRows    : number;
    nScrCols    : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL,TELNET_OPT_TransmitBinary);
    WebTelnetScreenGetSize(hWeb0, nScrCols,nScrRows);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨·· 000000A0

    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
    nFieldCount := WebTelnetScreenGetFieldCount(hWeb0);
    if nFieldCount = 1 then
      WebTelnetScreenGetFieldProperties(hWeb0, 1, nFieldCol, nFieldRow, 0);
      if (nScrCols >= nFieldCol) and (nScrRows >= nFieldRow) then
        nFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,nFieldCol, nFieldRow);
        if nFieldPos = 1 then
          WebTcpipShutdown(hWeb0);
        end;
      end;
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetStatus Function

Action

Queries rendered screen’s status value in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetStatus(    in hWeb        : number,
                             in sStatusName : string,
                             in nOptions    : number optional,
                             in nMaxLen     : number optional ) : string;

Return value

  • String representing the status value

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sStatusName | Status identifier name (e.g., "Keyboard Locked").
nOptions

Optionally specifies output string value pre-processing; may be any of following values.

  • TELNET_FLAG_TRIM_LEFT: Leading blank spaces are trimmed from status’ value.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blank spaces are trimmed from status’ value.

  • TELNET_FLAG_TRIM_BOTH: Rendered status’ value is trimmed from both sides.

  • TELNET_FLAG_UPPERCASE: Output value will be converted to upper case.

  • TELNET_FLAG_LOWERCASE: Output value will be converted to lower case.
nMaxLen | Maximum length of output value, which is by default the whole string.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨··  000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetStatus(hWeb0, "Keyboard Locked");
    if sRecv = "false" then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenGetText Function

Action

Queries rendered screen content in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenGetText(    in hWeb     : number,
                           in nCol     : number,
                           in nRow     : number,
                           in nLength  : number optional,
                           in nOptions : number optional ) : string;

Return value

  • String representing the screen content

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCol | 1-based screen column where reading of screen content is to begin.
nRow | 1-based screen row from where reading screen content is to begin.
nLength | Length of screen portion to be queried (optional). If omitted, all remaining screen content from given position will be returned.
nOptions

Optionally specifies output string value pre-processing; may be any of following values (optional):

  • TELNET_FLAG_TRIM_LEFT: Leading blank spaces are trimmed from rendered screen text.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blank spaces are trimmed from rendered screen text.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides of screen content.

  • TELNET_FLAG_UPPERCASE: Output value will be converted to upper case.

  • TELNET_FLAG_LOWERCASE: Output value will be converted to lower case.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");  // ·¦·······¨·· 000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetText(hWeb0, 7, 22, 8);
    if sRecv = "Comments" then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenRecvRecordsUntilCursor Function

Action

Receives records (data terminated by IAC EOR) from a Telnet server until cursor is detected at a specified position.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenRecvRecordsUntilCursor( in hWeb  : number,
    in  nCol  : number,
    in  nRow  : number,
    out sRecv : string ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCol | 1-based horizontal cursor position.
nRow | 1-based vertical cursor position.
sRecv | Optional output buffer variable for all received binary data, including the matching packet (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
   transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");   // ·¦·······¨··   000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetStatus(hWeb0, "Keyboard Locked");
    if sRecv = "false" then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice:");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenRecvRecordsUntilField Function

Action

Receives data (packets terminated by IAC EOR) from a given connection until the rendered screen contains a specified field. This function is only valid on open connections that have a screen renderer associated with them and define fields via an underlying protocol, as is the case with Telnet 3270 connections.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenRecvRecordsUntilField(    in  hWeb        : number,
                                         in  nFieldIndex : number,
                                         in  sText       : string,
                                         in nOptions     : number optional,
                                         in nMaxLen      : number optional,
                                         out sRecv       : string optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nFieldIndex | Field index to which content from sText should be compared (1 based).
sText | Text value that should be compared against the field value.
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.
nMaxLen | Length of screen portion to be compared with sText (optional). If omitted or 0, the length of sText is taken.
sRecv | Optional string variable where all received binary data is to be placed until comparison succeeds (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81"  // ················ 00000090

      "\h80A687888185869997A89580");   // ·¦·······¨·· 000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetStatus(hWeb0, "Keyboard Locked");
    if sRecv = "false" then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice:");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenRecvRecordsUntilStatus Function

Action

Receives data (packets terminated by IAC EOR) from a given connection until the rendered screen contains a specified status. This function is only valid on open connections that have a screen renderer associated with them and define statuses via an underlying protocol, as is the case with Telnet 3270 connections.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenRecvRecordsUntilStatus(    in hWeb        : number,
                                          in sStatusName : string,
                                          in sText       : string,
                                          in nOptions    : number optional,
                                          in nTextLength : number optional,
                                          out sRecv       : string optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sStatusName | Identifies the status of the value that is to be compared. The only supported status is "Keyboard Locked".
sText | String value that the status should be compared against. Valid strings are "true" and "false".
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.
nTextLength | Defines how many characters of sText are taken for comparison with sText (optional). If omitted or 0, the length of sText is taken.
sRecv | String variable where all received binary data is to be placed until comparison succeeds. (optional)

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,

      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");  // ·¦·······¨·· 000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetStatus(hWeb0, "Keyboard Locked");
    if sRecv = "false"then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenRecvRecordsUntilText Function

Action

Receives data (packets terminated by IAC EOR) from a given connection until the rendered screen contains specified text. This function is only valid on open connections that have a screen renderer associated with them, as is the case with Telnet connections.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenRecvRecordsUntilText(    in  hWeb        : number,
                                        in nCol         : number,
                                        in nRow         : number,
                                        in sText        : string,
                                        in nOptions     : number optional,
                                        in nTextLength  : number optional,
                                        out sRecv       : string optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCol | 1-based screen column where text comparison is to be performed.
nRow | 1-based screen row where text comparison is to be performed.
sText | Text to be compared.
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.
nTextLength | Length of screen portion to be compared with sText (optional). If omitted or 0, the length of sText is compared.
sRecv | Optional string variable where all received binary data is to be placed until comparison succeeds.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;

  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨·· 000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetStatus(hWeb0, "Keyboard Locked");
    if sRecv = "false" then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice:");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenVerifyCursor Function

Action

Verifies cursor position in a rendered screen in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenVerifyCursor( in  hWeb      : number,
                             in nCol       : number,
                             in nRow       : number,
                             in nSeverity  : number optional := SEVERITY_ERROR,
                             out nActCol   : number optional,
                             out nActRow   : number optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCol | Expected 1-based horizontal cursor position.
nRow | Expected 1-based vertical cursor position.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nActCol | Optional numeric variable indicating where actual cursor column is to be placed (optional).
nActRow | Optional numeric variable indicating where actual cursor row is to be placed (optional).

Example

dcltrans  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
   transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");  // ·¦·······¨··  000000A0

    WebTelnetRecvRecordsUntilData(hWeb0, "\h4040405C");
    if not WebTelnetScreenVerifyCursor(hWeb0, 16, 23, SEVERITY_SUCCESS) then
      WebTcpipShutdown(hWeb0);
    else
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice:");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, "");
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenVerifyField Function

Action

Verifies field content in a rendered screen in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenVerifyField( in  hWeb        : number,
                            in  nFieldIndex : number,
                            in  sVerify     : string,
                            in  nOptions    : number optional,
                            in  nSeverity   : number optional := SEVERITY_ERROR,
                            in  nTextLength : number optional,
                            out sRecv       : string optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nFieldIndex | 1-based screen field index of which value should be used for comparison.
sVerify | Text to be compared.
nOptions By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nTextLength | Length of screen portion to be compared with sVerify (optional). If omitted or 0, the length of sVerify is taken.
sRecv | Optional string variable where field content is placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨··  000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    sRecv := WebTelnetScreenGetField(hWeb0, 1);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    if (not WebTelnetScreenVerifyField(hWeb0, 1, StrToHostCP("1"))) or (sRecv = "") then
      WebTcpipShutdown(hWeb0);    else
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenVerifyStatus Function

Action

Verifies the status value of a rendered screen in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenVerifyStatus( in  hWeb        : number,
                             in  sStatusName : string,
                             in  sVerify     : string,
                             in  nOptions    : number optional,
                             in  nSeverity   : number optional := SEVERITY_ERROR,
                             in  nTextLength : number optional,
                             out sRecv       : string optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sStatusName | Identifies the status of the value that is to be verified. The only supported status is "Keyboard Locked".
sVerify | String value that the status value should be compared against. Valid strings are "true" and "false".
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nTextLength | Defines how many characters of sVerify are taken for comparison with sVerify (optional). If omitted or 0, the length of sVerify is taken.
sRecv | Optional string variable where the current status value is placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");  // ·¦·······¨··   000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    if WebTelnetScreenVerifyStatus(hWeb0,"Keyboard Locked","false" ) then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilText(hWeb0, 6, 22, "Choice: ");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetScreenVerifyText Function

Action

Verifies rendered screen content in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetScreenVerifyText(    in  hWeb      : number,
                              in  nCol      : number,
                              in  nRow      : number,
                              in  sVerify   : string,
                              in  nOptions  : number optional,
                              in  nSeverity : number optional := SEVERITY_ERROR,
                              in  nLength   : number optional,
                              out sRecv     : string optional ) : boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
nCol | 1-based screen column from where to perform the text comparison.
nRow | 1-based screen row from where to perform the text comparison.
sVerify | Text to compare.
nOptions

By default the retrieved content has to be equal with the compared sVerify string, case-insensitively (optional). Comparison options are:

  • TELNET_FLAG_EQUAL: Comparison is made against both whole strings. (default)

  • TELNET_FLAG_CASE_SENSITIVE: Perform comparison case-sensitively.

  • TELNET_FLAG_IS_DIFFERENT: Negates the logical comparison.

  • TELNET_FLAG_IGNORE_WHITE_SPACE: All whitespaces in both compared strings are cut before comparison is performed.

  • TELNET_FLAG_CONTAINS: Compared string must occur within the retrieved content.

  • TELNET_FLAG_FROM_LEFT: The retrieved content only has to begin with the compared string.

  • TELNET_FLAG_TRIM_LEFT: Leading blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_RIGHT: Trailing blanks are trimmed from retrieved content before comparison.

  • TELNET_FLAG_TRIM_BOTH: Rendered text is trimmed from both sides before comparison.

  • TELNET_FLAG_FROM_RIGHT: Comparison is made from the right of the retrieved content.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nTextLength | Length of screen portion to compare with sVerify (optional). If omitted or 0, the length of sVerify is compared.
sRecv | Optional string variable indicating given position where screen portion is to be placed (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(1148); // 1148  (IBM EBCDIC - International (500 + Euro))
  end TInit;
  transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
    sRecv     : string;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET); // Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580"); // ·¦·······¨·· 000000A0

    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 16, 23, sRecv);
    if WebTelnetScreenVerifyText(hWeb0, 7, 22, "Comments") then
      WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
      WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard Locked", "false");
      WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
      WebTelnetScreenVerifyText(hWeb0, 6, 22, "Choice:");
      WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
      WebTelnetScreenRecvRecordsUntilField(hWeb0, 1, " ");
      WebTcpipShutdown(hWeb0);
    else
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSendCommand Function

Action

Sends a Telnet command to a Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetSendCommand(    in hWeb : number,
                         in iCmd : number,
                         in iOpt : number optional ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
iCmd

Telnet command to be sent to server. May be:

  • TELNET_CMD_SE: End of sub-negotiation parameters.

  • TELNET_CMD_NOP: No operation.

  • TELNET_CMD_DataMark: The data stream portion of a synch. This should always be accompanied by an urgent TCP notification.

  • TELNET_CMD_Break: NVT character BRK.

  • TELNET_CMD_InterruptProcess: The function IP.

  • TELNET_CMD_AbortOutput: The function AO.

  • TELNET_CMD_AreYouThere: The function AYT.

  • TELNET_CMD_EraseCharacter: The function EC.

  • TELNET_CMD_EraseLine: The function EL.

  • TELNET_CMD_GoAhead: The GA signal.

  • TELNET_CMD_SB: Indicates that what follows is sub-negotiation of the indicated option.

  • TELNET_CMD_WILL: Indicates the desire to begin performing (or is confirmation that you are now performing) the indicated option.

  • TELNET_CMD_WONT: Indicates the refusal to perform (or continue performing) the indicated option.

  • TELNET_CMD_DO: Indicates the request that the other party perform (or confirmation that you are expecting the other party to perform) the indicated option.

  • TELNET_CMD_DONT: Indicates the demand that the other party stop performing (or confirmation that you are no longer expecting the other party to perform) the indicated option.

  • TELNET_CMD_EOF: End of file

  • TELNET_CMD_SUSP: Suspend current process

  • TELNET_CMD_ABORT: Abort process

  • TELNET_CMD_EOR: End of record (RFC 885)
iOpt

Optional Telnet command option (optional). Only valid for commands WILL/WONT/DO/DONT and SB.

For a complete list of telnet options, please refer to http://www.iana.org/assignments/telnet-options.

The following predefined constants are available, however (due to the nature of Telnet options) are not mandatory:

  • TELNET_OPT_TransmitBinary: Binary transmission [RFC856, RFC1576]

  • TELNET_OPT_Echo: Echo [RFC857, RFC1576]

  • TELNET_OPT_Reconnection: Reconnection [NIC50005]

  • TELNET_OPT_SuppressGoAhead: Suppress go ahead [RFC858, RFC1576]

  • TELNET_OPT_ApproxMsgSizeNegotiation: Approx message size negotiation [ETHERNET]

  • TELNET_OPT_Status: Status [RFC859, RFC1576]

  • TELNET_OPT_TimingMark: Timing mark [RFC860, RFC1576]

  • TELNET_OPT_RemoteContrTransAndEcho: Remote controlled trans and echo [RFC726]

  • TELNET_OPT_OutputLineWidth: Output line width [NIC50005]

  • TELNET_OPT_OutputPageSize: Output page size [NIC50005]

  • TELNET_OPT_OutputCRDisp: Output carriage-return disposition [RFC652]

  • TELNET_OPT_OutputHorTabStops: Output horizontal tab stops [RFC653]

  • TELNET_OPT_OutputHorTabDisp: Output horizontal tab disposition [RFC654]

  • TELNET_OPT_OutputFFDisp: Output form-feed disposition [RFC655]

  • TELNET_OPT_OutputVerTabStops: Output vertical tab stops [RFC656]

  • TELNET_OPT_OutputVerTabDisp: Output vertical tab disposition [RFC657]

  • TELNET_OPT_OutputLFDisp: Output line-feed disposition [RFC658]

  • TELNET_OPT_ExtendedASCII: Extended ASCII [RFC698]

  • TELNET_OPT_Logout: Logout [RFC727]

  • TELNET_OPT_ByteMacro: Byte macro [RFC735]

  • TELNET_OPT_DataEntryTerminal: Data entry terminal [RFC1043, RFC732]

  • TELNET_OPT_SupDup: SUPDUP [RFC736, RFC734]

  • TELNET_OPT_SupDupOutput: SUPDUP output [RFC749]

  • TELNET_OPT_SendLocation: Send location [RFC779]

  • TELNET_OPT_TerminalType: Terminal type [RFC1091, RFC930, RFC1576]

  • TELNET_OPT_EndOfRecord: End of record [RFC885, RFC1576]

  • TELNET_OPT_TacacsUserId: TACACS user identification [RFC927]

  • TELNET_OPT_OutputMarking: Output marking [RFC933]

  • TELNET_OPT_TerminalLocNr: Terminal location number [RFC946]

  • TELNET_OPT_3270Regime: Telnet 3270 regime [RFC1041, RFC1576]

  • TELNET_OPT_X3PAD: X.3 PAD [RFC1053]

  • TELNET_OPT_NegotiateWindowSize: Negotiate about window size [RFC1073]

  • TELNET_OPT_TerminalSpeed: Terminal speed [RFC1079]

  • TELNET_OPT_RemoteFlowControl: Remote flow control [RFC1372]

  • TELNET_OPT_LineMode: Line mode [RFC1184]

  • TELNET_OPT_XDisplayLocation: X display location [RFC1096]

  • TELNET_OPT_Environment: Environment option [RFC1408]

  • TELNET_OPT_Authentication: Authentication option [RFC2941]

  • TELNET_OPT_Encryption: Encryption option [RFC2946]

  • TELNET_OPT_NewEnvironment: New environment option [RFC1572]

  • TELNET_OPT_TN3270E: TN3270E [RFC1647]

  • TELNET_OPT_XAUTH: XAUTH [Earhart]

  • TELNET_OPT_CHARSET: CHARSET [RFC2066]

  • TELNET_OPT_RemoteSerialPort: Telnet remote serial port (RSP) [Barnes]

  • TELNET_OPT_ComPortControl: Com port control option [RFC2217]

  • TELNET_OPT_SuppressLocalEcho: Telnet suppress local echo [Atmar]

  • TELNET_OPT_StartTLS: Telnet start TLS [Boe]

  • TELNET_OPT_Kermit: KERMIT [RFC2840]

  • TELNET_OPT_SendUrl: SEND-URL [Croft]

  • TELNET_OPT_ForwardX: FORWARD_X [Altman]

  • TELNET_OPT_PragmaLogon: TELOPT PRAGMA LOGON [McGregory]

  • TELNET_OPT_SspiLogon: TELOPT SSPI LOGON [McGregory]

  • TELNET_OPT_PragmaHeartbeat: TELOPT PRAGMA HEARTBEAT [McGregory]

  • TELNET_OPT_EXOPL: Extended options list [RFC861]

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;
  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSendRecord Function

Action

Sends a Telnet record sequence to a terminal service server, which is a shortcut to <BinaryData> IAC EOR.

Include file

WebAPI.bdh

Syntax

WebTelnetSendRecord(    in hWeb  : number,
                        in sData : string ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sData | Binary data to be sent to a terminal server.

Example

dcltrans  transaction TInit
  begin
    StrSetHostCP(1148);
// 1148  (IBM EBCDIC - International
(500 + Euro))
  end TInit;
   transaction TMain
  var
    hWeb0     : number;
    iFieldPos : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
// Port: 23
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "IBM-3278-2-E");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_EndOfRecord);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TransmitBinary);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TransmitBinary);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0,
      "\h88001181A600000B0100005000180050" // ····¦······P···P 00000000

      "\h001800168186000800F4F1F1F2F2F3F3" // ·········ôññòòóó 00000010

      "\hF4F4F5F5F6F6F7F7000D81870400F0F1" // ôôõõöö÷÷······ðñ 00000020

      "\hF1F2F2F4F40007818800010200178181" // ñòòôô··········· 00000030

      "\h01000050001801000100030004000909" // ···P············ 00000040

      "\h0C0780001B81858200090C0000000007" // ················ 00000050

      "\h00000002B900250100F103C301360006" // ····¹·%··ñ·Ã·6·· 00000060

      "\h81990000001281970000080008000101" // ················ 00000070

      "\h000B0401C0C1000981A80200F0FFFFFF" // ····ÀÁ···¨··ð··· 00000080

      "\hFF000C81950000081108110101000F81" // ················ 00000090

      "\h80A687888185869997A89580");    // ·¦·······¨··    000000A0
    WebTelnetRecvRecord(hWeb0);
    WebTcpipRecvPackets(hWeb0);
    WebTelnetRecvRecord(hWeb0);
    WebTelnetSendRecord(hWeb0, "\h7D5B6F115B6F" + StrToHostCP("1"));
    WebTcpipScreenRecvPacketsUntilStatus(hWeb0, "Keyboard Locked", "false");
    WebTelnetSendRecord(hWeb0, "\h7D5BF0115BF0" + StrToHostCP("12"));
    WebTcpipScreenRecvPacketsUntilText(hWeb0, 6, 22, "Choice: ");
    WebTelnetSendRecord(hWeb0, "\h7D5A5E115A5E" + StrToHostCP("12"));
    WebTcpipSetPacketBoundary(hWeb0, "\nFFEF");
    WebTcpipScreenRecvPacketsUntilField(hWeb0, 1, "");
    iFieldPos := WebTelnetScreenGetFieldIndex(hWeb0,16, 22);
    if iFieldPos = 1 then
      WebTcpipShutdown(hWeb0);
    end;
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSendRecordExecute Function

Action

Sends a Telnet record to a terminal services server. The data record is dynamically composed from a record previously specified in the corresponding WebTelnetSendRecordPrepare command, with field values specified in one or more WebTelnetSetRecordString commands.

Include file

WebAPI.bdh

Syntax

WebTelnetSendRecordExecute( in hWeb : number,
  in hHandle : number ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sData | Valid handle to a data record that is being prepared, from a previous WebTelnetSendRecordPrepare command

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(37); // 37    (IBM EBCDIC - U.S./Canada)
    ErrorAdd(FACILITY_WINSOCK, 18, SEVERITY_TRANS_EXIT);
  end TInit;

  transaction TMain
  var
    hHandle0 : number;
    hWeb0    : number;
  begin
    WebTcpipConnect(hWeb0, "My.Telnet.Host.IP", 5558);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV |
      TELNET_MODEOPT_3270E_AUTO_REPLY);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TN3270E);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TN3270E);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_DEVICE_TYPE + TN3270E_CMD_REQUEST + "IBM-3278-2-E");
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_FUNCTIONS + TN3270E_CMD_REQUEST + TN3270E_FUNC_BIND_IMAGE
       + TN3270E_FUNC_SYSREQ);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_FUNCTIONS + TN3270E_CMD_IS);
    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 26, 10);

    ThinkTime(8.7);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D4C7E1140C4" + StrToHostCP("1") + "\h114BE9" + "%s1" + "\h114CC3" + "%s2"
       + "\h114CF9" + "%s3" + "\h114EC9" + "%s4" + "\h1150E9" + "%s5" + "\h115B61" + StrToHostCP(
      "Please type your userid.                                                       "));
    WebTelnetSetRecordString(hHandle0, "%s1", StrToHostCP("USER1   "));
    WebTelnetSetRecordString(hHandle0, "%s2", StrToHostCP("        "));
    WebTelnetSetRecordString(hHandle0, "%s3", StrToHostCP("USER1   "));
    WebTelnetSetRecordString(hHandle0, "%s4", StrToHostCP("   "));
    WebTelnetSetRecordString(hHandle0, "%s5", StrToHostCP("        "));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    ThinkTime(2.3);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D40C4" + StrToHostCP(
      "acctE0012I Signon complete at V00F, for user USER1. Local security is disabled. 13:17:29"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D4AF3114AD5" + "%s3" + "\h114AE2" + "%s4");
    WebTelnetSetRecordString(hHandle0, "%s3", StrToHostCP("d"));
    WebTelnetSetRecordString(hHandle0, "%s4", StrToHostCP("12345"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    ThinkTime(9.9);
    WebTelnetSendRecord(hWeb0, "\h00000000006D"); // •••••m
    WebTelnetRecvRecord(hWeb0);

    ThinkTime(2.1);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D40C4" + StrToHostCP("exit"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetRecvRecordsUntilClose(hWeb0);
    WebTcpipShutdown(hWeb0);
end TMain;
親トピック: Web Telnet Functions
関連資料
WebTelnetSendRecordPrepare Function
WebTelnetSetRecordString Function


WebTelnetSendRecordPrepare Function

Action

Prepares a Telnet recording session consisting of binary data and text fields for later transmission to a terminal services server.

Include file

WebAPI.bdh

Syntax

WebTelnetSendRecordPrepare( out hHandle : number,
  in sData : string ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hHandle | Variable receiving the handle to the data record being prepared, to be used following commands WebTelnetSendRecordString and WebTelnetSendRecordExecute.
sData | The binary data containing text fields that is to be prepared for later transmission to a terminal services server.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(37); // 37    (IBM EBCDIC - U.S./Canada)
    ErrorAdd(FACILITY_WINSOCK, 18, SEVERITY_TRANS_EXIT);
  end TInit;

  transaction TMain
  var
    hHandle0 : number;
    hWeb0    : number;
  begin
    WebTcpipConnect(hWeb0, "My.Telnet.Host.IP", 5558);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV |
      TELNET_MODEOPT_3270E_AUTO_REPLY);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TN3270E);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TN3270E);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_DEVICE_TYPE + TN3270E_CMD_REQUEST + "IBM-3278-2-E");
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_FUNCTIONS + TN3270E_CMD_REQUEST + TN3270E_FUNC_BIND_IMAGE
       + TN3270E_FUNC_SYSREQ);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_FUNCTIONS + TN3270E_CMD_IS);
    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 26, 10);

    ThinkTime(8.7);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D4C7E1140C4" + StrToHostCP("1") + "\h114BE9" + "%s1" + "\h114CC3" + "%s2"
       + "\h114CF9" + "%s3" + "\h114EC9" + "%s4" + "\h1150E9" + "%s5" + "\h115B61" + StrToHostCP(
      "Please type your userid.                                                       "));
    WebTelnetSetRecordString(hHandle0, "%s1", StrToHostCP("USER1   "));
    WebTelnetSetRecordString(hHandle0, "%s2", StrToHostCP("        "));
    WebTelnetSetRecordString(hHandle0, "%s3", StrToHostCP("USER1   "));
    WebTelnetSetRecordString(hHandle0, "%s4", StrToHostCP("   "));
    WebTelnetSetRecordString(hHandle0, "%s5", StrToHostCP("        "));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    ThinkTime(2.3);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D40C4" + StrToHostCP(
      "acctE0012I Signon complete at V00F, for user USER1. Local security is disabled. 13:17:29"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D4AF3114AD5" + "%s3" + "\h114AE2" + "%s4");
    WebTelnetSetRecordString(hHandle0, "%s3", StrToHostCP("d"));
    WebTelnetSetRecordString(hHandle0, "%s4", StrToHostCP("12345"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    ThinkTime(9.9);
    WebTelnetSendRecord(hWeb0, "\h00000000006D"); // •••••m
    WebTelnetRecvRecord(hWeb0);

    ThinkTime(2.1);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D40C4" + StrToHostCP("exit"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetRecvRecordsUntilClose(hWeb0);
    WebTcpipShutdown(hWeb0);
end TMain;
親トピック: Web Telnet Functions
関連資料
WebTelnetSetRecordString Function
WebTelnetSendRecordExecute Function


WebTelnetSendSubNegotiation Function

Action

Sends a Telnet option sub-negotiation sequence to a terminal service server, which is a shortcut to IAC SB <Option> <Data> IAC SE.

Include file

WebAPI.bdh

Syntax

WebTelnetSendSubNegotiation(    in hWeb : number,
                                in iOpt : number,
                                in sSub : string ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
iOpt | Telnet option to sub-negotiate with server. See constants in WebTelnetSendCommand for valid values.
sSub | Binary sub-negotiation data string to be sent to server.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;
  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTelnetSendCommand Function
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSendTerminalType Function

Action

Sends simulated terminal type identification code to a Telnet server, which is a shortcut to IAC SB TT IS <TerminalTypeId> IAC SE.

Include file

WebAPI.bdh

Syntax

WebTelnetSendTerminalType(    in hWeb          : number,
                        in sTerminalType : string ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sTerminalType | Terminal type identification string to be sent to a Telnet server.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;
  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSetRecordString Function

Action

Sets the string value of a field in a data record that is being prepared for transmission to a terminal services server.

Include file

WebAPI.bdh

Syntax

WebTelnetSetRecordString( in hHandle : number,
  in sFieldname : string,
  in sValue : string,
  in iLen : number optional ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hHandle | Valid handle to a data record that is being prepared, from a previous WebTelnetSendRecordPrepare command.
sFieldname | Name of the field. Must match one of the field names embedded in the data record previously specified in a WebTelnetSendRecordPrepare command, in the format: “%s###”, such as “%s1”.
sValue | Value to be assigned to the field specified by sFieldname. This string value will be dynamically inserted in the data record when it is transmitted to the terminal server.
iLen | Length of the value to insert (optional). If sValue is longer than iLen, it will be cut off at iLen. If not specified, the value is zero, meaning that sValue can be of any length.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(37); // 37    (IBM EBCDIC - U.S./Canada)
    ErrorAdd(FACILITY_WINSOCK, 18, SEVERITY_TRANS_EXIT);
  end TInit;

  transaction TMain
  var
    hHandle0 : number;
    hWeb0    : number;
  begin
    WebTcpipConnect(hWeb0, "My.Telnet.Host.IP", 5558);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_3270, 80, 24, true, TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_AUTO_RECV |
      TELNET_MODEOPT_3270E_AUTO_REPLY);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TN3270E);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TN3270E);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_DEVICE_TYPE + TN3270E_CMD_REQUEST + "IBM-3278-2-E");
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_FUNCTIONS + TN3270E_CMD_REQUEST + TN3270E_FUNC_BIND_IMAGE
       + TN3270E_FUNC_SYSREQ);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TN3270E);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_TN3270E, TN3270E_CMD_FUNCTIONS + TN3270E_CMD_IS);
    WebTelnetScreenRecvRecordsUntilCursor(hWeb0, 26, 10);

    ThinkTime(8.7);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D4C7E1140C4" + StrToHostCP("1") + "\h114BE9" + "%s1" + "\h114CC3" + "%s2"
       + "\h114CF9" + "%s3" + "\h114EC9" + "%s4" + "\h1150E9" + "%s5" + "\h115B61" + StrToHostCP(
      "Please type your userid.                                                       "));
    WebTelnetSetRecordString(hHandle0, "%s1", StrToHostCP("USER1   "));
    WebTelnetSetRecordString(hHandle0, "%s2", StrToHostCP("        "));
    WebTelnetSetRecordString(hHandle0, "%s3", StrToHostCP("USER1   "));
    WebTelnetSetRecordString(hHandle0, "%s4", StrToHostCP("   "));
    WebTelnetSetRecordString(hHandle0, "%s5", StrToHostCP("        "));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    ThinkTime(2.3);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D40C4" + StrToHostCP(
      "acctE0012I Signon complete at V00F, for user USER1. Local security is disabled. 13:17:29"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D4AF3114AD5" + "%s3" + "\h114AE2" + "%s4");
    WebTelnetSetRecordString(hHandle0, "%s3", StrToHostCP("d"));
    WebTelnetSetRecordString(hHandle0, "%s4", StrToHostCP("12345"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetScreenRecvRecordsUntilStatus(hWeb0, "Keyboard locked", "False");

    ThinkTime(9.9);
    WebTelnetSendRecord(hWeb0, "\h00000000006D"); // •••••m
    WebTelnetRecvRecord(hWeb0);

    ThinkTime(2.1);
    WebTelnetSendRecordPrepare(hHandle0, "\h00000000007D40C4" + StrToHostCP("exit"));
    WebTelnetSendRecordExecute(hWeb0, hHandle0);
    WebTelnetRecvRecordsUntilClose(hWeb0);
    WebTcpipShutdown(hWeb0);
end TMain;
親トピック: Web Telnet Functions
関連資料
WebTelnetSendRecordPrepare Function
WebTelnetSendRecordExecute Function


WebTelnetSyncCommand Function

Action

Notes a Telnet command to be verified as received on next sending operation in a Telnet connection. This asynchronous function helps building more robust scripts because some Telnet servers mix Telnet command sequences with regular output data. The received data itself will be prepended to data in the order it was received in the next subsequently received function call.

Include file

WebAPI.bdh

Syntax

WebTelnetSyncCommand(    in hWeb : number,
    in iCmd : number,
    in iOpt : number optional ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode. The connection must be in “Sync-Mode” (set option TELNET_MODEOPT_SYNC).
iCmd | Telnet command to be received from the server (optional). If omitted or set -1 then no verification will be performed. See constants in WebTelnetSendCommand for valid values.
iOpt | Telnet option for WILL/WONT/DO/DONT and SB Telnet commands (optional). See constants in WebTelnetSendCommand for valid values. If omitted or set to -1 no verification will be performed.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_SYNC);
    WebTelnetSetTerminalConfigString(hWeb0, "AutoWrap=false 8Bit=false Tab=9*");

    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SendLocation);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);

    // commands above are verified here
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018"); //•P••
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_SendLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSyncSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_SendLocation);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_XDisplayLocation);
    // sync commands above are verified here
    WebTelnetSendTerminalType(hWeb0, "vt100");
    // sync commands above are received here
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTelnetSendCommand Function
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSetTerminalConfigString Function

Action

Configures the behavior of a simulated ANSI or VT terminal in an active Telnet connection.

Include file

WebAPI.bdh

Syntax

WebTelnetSetTerminalConfigString(    in hWeb          : number,
                                     in sConfigString : string ) :boolean;

Return value

  • true if the operation succeeded

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sConfigString

The default configuration string is set when choosing a terminal type. The configurable name describes the behavior of the terminal emulation. Configurations can be separated with semicolons, commas, or blank spaces. The available names are:

  • AutoWrap: If false, the screen waits for a new line command when the cursor position is at the right screen border.

  • 8Bit: If true, the screen parses 8bit and 7bit commands. If false, the parser only parses 7bit commands (which are required for double-byte interpretation).

  • Tabs: Tab length used.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;

  transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true, TELNET_MODEOPT_RFC_1576);
    WebTelnetSetTerminalConfigString(hWeb0, "AutoWrap=false 8Bit=true");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"), 359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSyncData Function

Action

Notes binary data like VT100 escape sequences to be verified as received on next sending operation in a Telnet connection. This asynchronous function helps building more robust scripts because some Telnet servers mix Telnet command sequences with regular output data. The received data itself will be prepended to data in the order it was received in the next subsequently received function call.

Include file

WebAPI.bdh

Syntax

WebTelnetSyncData(    in hWeb  : number,
                      in sData : string ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode. The connection must be in “Sync-Mode” (set option TELNET_MODEOPT_SYNC).
sData | Binary data string expected from the server.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;   transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_SYNC);
    WebTelnetSetTerminalConfigString(hWeb0, "AutoWrap=false 8Bit=false Tab=9*");

    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SendLocation);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);

    // commands above are verified here
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018"); // •P••
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_SendLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSyncSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_SendLocation);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_XDisplayLocation);
    // sync commands above are verified here
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("guest") + WEB_CRNULL, 294.1, TELNET_FLAG_CASE_SENSITIVE);
    WebTelnetSyncData(hWeb0, "\h0D0A1B5B63"); // •••[c
    // sync data above is verified here
    WebTcpipSend(hWeb0, "\h1B5B3F313B3063"); // •[?1;0c
    WebTelnetSyncData(hWeb0, "\h5B366E1B38"); // [6n•8
    // sync data above is verified here
    WebTcpipSend(hWeb0, "\h1B5B32343B383052"); // •[24;80R
    // received sync data is prepended to received data here
    WebTcpipScreenRecvPacketsUntilCursor(hWeb0, 40, 23);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetSyncSubNegotiation Function

Action

Notes a Telnet option sub-negotiation to be verified as received on next sending operation in a Telnet connection. This asynchronous function helps building more robust scripts because some Telnet servers mix Telnet command sequences with regular output data. The received data itself will be prepended to data in the order it was received in the next subsequently received function call.

Include file

WebAPI.bdh

Syntax

WebTelnetSyncSubNegotiation(    in hWeb          : number,
                                in iOpt          : number,
                                in sDataExpected : number optional ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode. The connection must be in “Sync-Mode” (set option TELNET_MODEOPT_SYNC).
iOpt | Telnet sub-negotiation option that is expected from the server. See constants in WebTelnetSendCommand for valid values.
sDataExpected | Binary sub-negotiation data string expected from the server (optional). Set to NULL if no validation is to be performed.

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;   transaction   TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
  begin
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_RFC_1576 | TELNET_MODEOPT_SYNC);
    WebTelnetSetTerminalConfigString(hWeb0, "AutoWrap=false 8Bit=false Tab=9*");

    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SendLocation);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);

    // commands above are verified here
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018"); // •P••
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_SendLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSyncSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_SendLocation);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSyncCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_XDisplayLocation);
    // sync commands above are verified here
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("guest") + WEB_CRNULL, 294.1, TELNET_FLAG_CASE_SENSITIVE);
    WebTelnetSyncData(hWeb0, "\h0D0A1B5B63"); // •••[c
    // sync data above is verified here
    WebTcpipSend(hWeb0, "\h1B5B3F313B3063"); // •[?1;0c
    WebTelnetSyncData(hWeb0, "\h5B366E1B38"); // [6n•8
    // sync data above is verified here
    WebTcpipSend(hWeb0, "\h1B5B32343B383052"); // •[24;80R
    // received sync data is prepended to received data here
    WebTcpipScreenRecvPacketsUntilCursor(hWeb0, 40, 23);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTelnetSendCommand Function
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


WebTelnetTypeKeys Function

Action

Simulates a user input to a Telnet server. This function sends alphanumeric character data that is specified at a specific rate and optionally verifies data echoed by the server.

Include file

WebAPI.bdh

Syntax

WebTelnetTypeKeys(    in hWeb            : number,
                      in sData           : string,
                      in nCharsPerMinute : float optional,
                      in nEchoOptions    : number optional,
                      in sPassswordChar  : string optional,
                      out sEchoReceived   : string optional ) : boolean;

Return value

  • true if the operation was successful

  • false otherwise

Parameter | Description
hWeb | Valid handle to a Web connection created by WebTcpipConnect and set to Telnet mode using WebTcpipSetTelnetMode.
sData | Data to be sent.
nCharsPerMinute | Optional typematic rate (characters-per-minute). If omitted or set to 0, all of the data is sent immediately.
nEchoOption

If specified, you may define how received data is to be compared (optional). The default setting is ‘no’ verification, but you can set one of the following constants:

  • TELNET_FLAG_NOECHO: Do not receive echoed data.

  • TELNET_FLAG_ECHO: Received characters are to be compared against expected data case-insensitively.

  • TELNET_FLAG_PASSWORD: Receive as many characters from server as were sent to a Telnet server. All received characters must have the same value.

  • TELNET_FLAG_CASE_SENSITIVE: Received characters are to be compared against expected data case-sensitively.
sPasswordChar | If TELNET_FLAG_PASSWORD is used, an expected reply character may be specified in this parameter (optional). If omitted then the first character received is used for verification.
sEchoReceived | Defines the variable for storing the echoed data from the server (optional).

Example

dcltrans
  transaction TInit
  begin
    StrSetHostCP(28591); // 28591 (ISO 8859-1 Latin I)
  end TInit;
  transaction TMain
  var
    hWeb0     : number;
    sBuffer   : string;
    sBoundary : string;
    nOption   : number;
    WebTcpipConnect(hWeb0, "My.TelnetHost.IP", WEB_PORT_TELNET);
    WebTcpipSetTelnetMode(hWeb0, TERMINAL_TYPE_ANSI, 80, 24, true,
      TELNET_MODEOPT_SYNC);
    WebTcpipGetOptions(hWeb0, nOption);
    if nOption <> TELNET_MODEOPT_RFC_1576 then
      WebTcpipSetOptions(hWeb0, TELNET_MODEOPT_RFC_1576);
    end;
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalType);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_TerminalSpeed);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_XDisplayLocation);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NewEnvironment);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_TerminalType);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_TerminalSpeed);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_XDisplayLocation);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_NewEnvironment);
    WebTelnetRecvSubNegotiation(hWeb0, TELNET_OPT_TerminalType);
    WebTelnetSendTerminalType(hWeb0, "vt100");
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_SuppressGoAhead);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_Echo);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_NegotiateWindowSize);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Status);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_RemoteFlowControl);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DO, TELNET_OPT_SuppressGoAhead);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_Echo);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_NegotiateWindowSize);
    WebTelnetSendSubNegotiation(hWeb0, TELNET_OPT_NegotiateWindowSize, "\h00500018");
    WebTelnetSendCommand(hWeb0, TELNET_CMD_DONT, TELNET_OPT_Status);
    WebTelnetSendCommand(hWeb0, TELNET_CMD_WONT, TELNET_OPT_RemoteFlowControl);
    WebTelnetRecvCommand(hWeb0, TELNET_CMD_WILL, TELNET_OPT_Echo);
    WebTcpipGetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvPacketsUntilData(hWeb0, "login: ");
    WebTelnetTypeKeys(hWeb0, StrToHostCP("leo"),359.3, TELNET_FLAG_CASE_SENSITIVE);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipRecvExact(hWeb0, NULL, 390);
    WebTcpipSetPacketBoundary(hWeb0, sBoundary);
    WebTcpipRecvUntilIdle(hWeb0, NULL, 5000);
    WebTcpipSendBin(hWeb0, "\h0D000D0A");
    WebTcpipRecvPackets(hWeb0, NULL, 3);
    WebTcpipSendBin(hWeb0, "\h0D00");
    WebTcpipSendPacket(hWeb0, StrToHostCP("8") + "\h0D00");
    WebTcpipRecvClose(hWeb0, NULL);
    WebTcpipShutdown(hWeb0);
  end TMain;
親トピック: Web Telnet Functions
関連資料
WebTcpipSetTelnetMode Function
WebTcpipConnect Function


UDP Functions Reference

  • WebUdpCreate Function
    Creates an UDP handle, which can be used in subsequent calls to WebUdpXXX functions.
  • WebUdpGetBindInfo Function
    Receives the IP address and the port to which the specified UDP socket is bound.
  • WebUdpSendTo Function
    Sends a string or binary data to the specified host port combination using the UDP protocol.
  • WebUdpRecvFrom Function
    Receives data using the UDP protocol.
  • WebUdpClose Function
    Closes an UDP handle, which has been created by a call to the WebUdpCreate function.
親トピック: Internet Functions


WebUdpCreate Function

Action

Creates an UDP handle, which can be used in subsequent calls to WebUdpXXX functions. If this handle is no longer used, call WebUdpClose to free all associated system resources. The optional IP and port parameters can be used to explicitly bind the UDP socket to a single IP and/or port. This has to be done if a WebUdpRecvFrom function is called before a WebUdpSendTo. If the socket is not bound, the latter function automatically binds it to a system generated port. This port can be queried by the WebUdpGetBindInfo function.

Include file

WebAPI.bdh

Syntax

WebUdpCreate( out hUdp  : number,
              in sIp   : string optional,
              in nPort : number optional ): boolean;

Return value

  • true if the handle has been created successfully

  • false otherwise

Parameter | Description
hUdp | UDP handle, that has to be created.
sIp | IP address to bind the UDP socket to (optional). Must be a valid IP address for the local machine. If this parameter is omitted, or a null value is specified no specific IP address is bound. Therefore data can be sent to (and read from) any valid IP of the local host.
nPort | Port to bind the UDP socket to (optional). Specify this parameter to assign a special port to the UDP socket. If this parameter is omitted no special port is assigned and the next WebUdpSendTo function will bind the socket to a system generated port. If this parameter is omitted calls to WebUdpRecvFrom will fail unless the first WebUdpSendTo function is called.

Example

dcltrans
  transaction TWeb
    var
      nUdp  : number;
      sBuf  : string;
      sIp   : string;
      nPort : number;
  begin
    WebUdpCreate(nUdp, null, 9999);
    WebUdpRecvFrom(nUdp, sBuf, 300, sIp, nPort);
      print("got data from "+sIp+" : "+string(nPort));
    WebUdpClose(nUdp);
      print(sBuf);
  end TWeb;
親トピック: UDP Functions Reference
関連資料
WebUdpClose Function
WebUdpGetBindInfo Function
WebUdpRecvFrom Function
WebUdpSendTo Function


WebUdpGetBindInfo Function

Action

Receives the IP address and the port to which the specified UDP socket is bound. If the socket has been bound by the optional parameters of the WebUdpCreate function, the function would simply return these values. If the port has not explicitly been specified, then the function would retrieve the value, which has been automatically set by the system during the first WebUdpSendTo function. If the socket is not bound to a specific IP address a value of “0.0.0.0” is returned. If the socket is not bound to a specifically port yet a value of 0 is returned.

Include file

WebAPI.bdh

Syntax

WebUdpGetBindInfo( in  hUdp  : number,
                   out sIp   : string,
                   out nPort : number ): boolean;

Return value

  • true if the bind information has been queried successfully

  • false otherwise

Parameter | Description
hUdp | Valid UDP handle, that has been created by WebUdpCreate.
sIp | String that receives the IP address to which the specified socket is bound. “0.0.0.0” is returned if the socket is not bound to a specific IP address.
nPort | Variable that receives the port number to which the specified socket is bound. If the socket is not bound yet a 0 is returned.

Example

dcltrans
  transaction TWeb
  var
    nUdp  : number;
    sBuf  : string;
    sIp   : string;
    nPort : number;
  begin
    WebUdpCreate(nUdp);
    WebUdpSendTo(nUdp, "10.5.2.103", 9998, "1234567890");
    WebUdpGetBindInfo(nUdp, sIp, nPort);
    print("bound to "+sIp+" : "+string(nPort));
    WebUdpRecvFrom(nUdp, sBuf, STRING_COMPLETE, sIp, nPort);
    print("got data from "+sIp+" : "+string(nPort));
    WebUdpClose(nUdp);    print(sBuf);
  end TWeb;
親トピック: UDP Functions Reference
関連資料
WebUdpClose Function
WebUdpCreate Function
WebUdpRecvFrom Function
WebUdpSendTo Function


WebUdpSendTo Function

Action

Sends a string or binary data to the specified host port combination using the UDP protocol. In contrary to the TCP protocol UDP is an unreliable communication where no logical connection has to be established, but before WebUdpSendTo can be used, a valid handle has to be created with the WebUdpCreate command. This handle can be used in subsequent calls to the WebUdpRecvFrom function to receive reply data. If the UDP socket (represented by the handle) has not been bound to a specific port by the WebUdpCreate function, the system automatically assigns a free port during the WebUdpSendTo function. This port can subsequently be queried by a call to the WebUdpGetBinfInfo function.

Include file

WebAPI.bdh

Syntax

WebUdpSendTo( in hUdp     : number,
              in sHost    : string,
              in nPort    : number,
              in sData    : string,
              in nDataLen : number optional ): boolean;

Return value

  • true if the data is sent successfully

  • false otherwise

Parameter | Description
hUdp | Valid UDP handle, that has been created by WebUdpCreate.
sHost | Host name or IP address, for example, "box1.hostname.com" or "192.231.34.1".
nPort | Port to send the data to.
sData | Data that should be sent.
nDataLen | Number of bytes to send to the server (optional). If this parameter is omitted all available data is sent.

Example

dcltrans
  transaction TWeb
    var
    nUdp  : number;
      sBuf  : string;
      sIp   : string;
    nPort : number;
  begin
    WebUdpCreate(nUdp);
    WebUdpSendTo(nUdp, "10.5.2.103", 9998, "1234567890");
    WebUdpGetBindInfo(nUdp, sIp, nPort);
    print("bound to "+sIp+" : "+string(nPort));
    WebUdpRecvFrom(nUdp, sBuf, STRING_COMPLETE, sIp, nPort);
    print("got data from "+sIp+" : "+string(nPort));
    WebUdpClose(nUdp);
    print(sBuf);
  end TWeb;
親トピック: UDP Functions Reference
関連資料
WebUdpClose Function
WebUdpCreate Function
WebUdpGetBindInfo Function
WebUdpRecvFrom Function


WebUdpRecvFrom Function

Action

Receives data using the UDP protocol. In contrary to the TCP protocol UDP is an unreliable communication where no logical connection has to be established, but before WebUdpRecvFrom can be used, a valid handle has to be created with the WebUdpCreate command. If the UDP socket (represented by the handle) has not been bound to a specific port by the WebUdpCreate function, calls to WebUdpRecvFrom will fail until the first WebUdpSendTo function is called, which assigns a system generated port.

Include file

WebAPI.bdh

Syntax

WebUdpRecvFrom( in  hUdp      : number,
                out sData     : string optional,
                in  nMaxData  : number optional,
                out sFromIp   : string optional,
                out nFromPort : number optional): boolean;

Return value

  • true if the data has been received successfully

  • false otherwise

Parameter | Description
hUdp | Valid UDP handle, that has been created by WebUdpCreate.
sData | String where the received data should be stored (optional). If this parameter is omitted the received data is discarded.
nMaxData | The maximum number of bytes that should be read (optional). Omit this parameter or specify STRING_COMPLETE to receive as much data as is available.
sFromIp | String that will receive the IP address of the host, which sent the data (optional).
nFromPort | Variable, that will receive the source port (optional).

Example

dcltrans
  transaction TWeb
    var
      nUdp  : number;
      sBuf  : string;
      sIp   : string;
      nPort : number;
  begin
    WebUdpCreate(nUdp);
    WebUdpSendTo(nUdp, "10.5.2.103", 9998, "1234567890");
    WebUdpGetBindInfo(nUdp, sIp, nPort);
    print("bound to "+sIp+" : "+string(nPort));
    WebUdpRecvFrom(nUdp, sBuf, STRING_COMPLETE, sIp, nPort);
    print("got data from "+sIp+" : "+string(nPort));
    WebUdpClose(nUdp);
    print(sBuf);
  end TWeb;
親トピック: UDP Functions Reference
関連資料
WebUdpClose Function
WebUdpCreate Function
WebUdpGetBindInfo Function
WebUdpSendTo Function


WebUdpClose Function

Action

Closes an UDP handle, which has been created by a call to the WebUdpCreate function. Every handle created with the WebUdpCreate function must be closed by using this function in order to free all allocated system resources.

Include file

WebAPI.bdh

Syntax

WebUdpClose( inout hUdp : number ): boolean;

Return value

  • true if the handle has been closed successfully

  • false otherwise

Parameter | Description
hUdp | Valid UDP handle, that has been created by WebUdpCreate.

Example

dcltrans
  transaction TWeb
    var
      nUdp  : number;
      sBuf  : string;
      sIp   : string;
      nPort : number;
  begin
    WebUdpCreate(nUdp);
    WebUdpSendTo(nUdp, "10.5.2.103", 9998, "1234567890");
    WebUdpGetBindInfo(nUdp, sIp, nPort);
    print("bound to "+sIp+" : "+string(nPort));
    WebUdpRecvFrom(nUdp, sBuf, STRING_COMPLETE, sIp, nPort);
    print("got data from "+sIp+" : "+string(nPort));
    WebUdpClose(nUdp);
    print(sBuf);
  end TWeb;
親トピック: UDP Functions Reference
関連資料
WebUdpCreate Function
WebUdpGetBindInfo Function
WebUdpRecvFrom Function
WebUdpSendTo Function


Web Functions Reference

  • Document Cache Emulation
    The Silk Performer replay engine provides emulation of Web browser document cache.
  • General Web Functions
  • Browser Settings
  • Low-Level Web Functions
  • Page-Level Web Functions Overview
    The page-level web functions focus on Web pages rather than on single documents.
  • Asynchronous Communication Functions
  • Page Statistic Functions
  • Cookie Database Functions Overview
    Under HTTP (HyperText Transfer Protocol), cookies are the means by which a server or a script can maintain state information on the client workstation.
  • Parsing Functions
    HTML parsing functions allow for the parsing of HTML content that can be viewed in Web browsers. Data parsing functions can be applied to response data returned by servers.
  • Response Verification Functions
  • MMS Functions
親トピック: Internet Functions


Document Cache Emulation

The Silk Performer replay engine provides emulation of Web browser document cache. A real Web browser stores cached Web documents in files in a central document cache. To save memory and optimize performance, Silk Performer stores just references to the documents in the physical memory, without writing them to the hard drive. Each virtual user has its own independent document cache and does not store any files to the disk.

Caching is basically meant to reduce network traffic; to reuse recently downloaded documents and render them again in your Web client. A Web surfer who enables document caching in his/her client will therefore experience more timely responses in his/her online sessions, as the time for updating the Web browser's content can be reduced to a minimum. Logically, most browsers will be operated with one of the following caching options:

  • Once per session

  • Every time

  • Never

What we need to be concerned with when choosing one of these caching strategies, is the resulting HTTP traffic - which may vary dramatically depending on the cache strategy used. We are also interested in the type of documents that can be cached.

Images are the best example of documents that can be cached. Also, static HTML documents which may have the file extension .htm or .html. In regards to the HTML generated by Active Server Pages or servlets, it doesn't make sense to cache the response data of Active Server Pages or JSP pages, since it is dynamically generated content. To find out whether a document may be cached or not, the Web client has to examine the HTTP response header of each response.

When to use the document cache emulation:

  • The document cache is recommended when replaying traffic with the page-level web function (the functions with the WebPage prefix). The page-level web functions parse HTML and use the document cache emulation to filter out duplicate requests of a single document, just like a real Web browser does.

  • The document cache emulation can also be used with the low-level replay web functions. However, it is not recommended to do so since the SilkRecorder does not include documents cached by the browser in the script. Besides, document cache emulation can decrease the performance of the low-level replay.

Document cache emulation functions

WebSetUserBehavior
Specifies whether the user resets his browser after each transaction.
WebSetDocumentCache
Specifies whether Silk Performer simulates a document cache.
WebBrowserReset
Specifies whether the user resets his browser after each transaction.
WebDeleteCacheEntry
This function is used to delete a cache entry in the browser cache of a user.
WebSuspendCache
This function is used to disable the browser cache or influence its behavior.
WebResumeCache
This function is used to restore the normal cache behaviour.

Combinations

User behavior/Cache strategy | Never | Once per session | Every time
Disable | 1 | 2 | 3
First time user | 4 | 5 | 6
Revisiting user | 7 | 8 | 9

  1. The user never clears document cache and never resets the cookie database throughout all transactions. No conditional requests for already cached documents.

  2. The user never clears document cache and never resets the cookie database throughout all transactions. During one execution cycle of a transaction request, only one conditional request will be sent if the document can be found in cache.

  3. Similar to 1., but conditional requests will be sent to the server if the document can be found in the cache.

  4. Documents will be retrieved from the cache unless they are expired. Each time a virtual user is done with a transaction, Silk Performer clears the cookie database and document cache. Persistent cookies cannot be maintained over the execution of transactions.

  5. Select this combination for Web applications that have to deal with a large or increasing number of new customers; e.g. search engines, or online shopping malls approaching a high-volume retail season.

  6. As 5.

  7. When the transaction is done, the virtual user simply clears the non-persistent cookies and closes all connections. You can compare the returning user to someone who simply closes the browser when he/she is done with the transaction and returns some random time later.

  8. and 9. The only difference to 7. is the frequency of conditional requests.

As you can see with Silk Performer, you can design your tests to simulate many different caching strategies. For example, a search engine may experience many new users after running a successful advertisement. Well-known service providers or online stores will have to face a great number of returning users.

親トピック: Web Functions Reference
関連資料
WebSetUserBehavior Function
WebSetDocumentCache Function
WebBrowserReset Function
WebDeleteCacheEntry Function
WebSuspendCache Function
WebResumeCache Function


General Web Functions

  • WebBrowserReset Function
    Emulates a Web browser restart.
  • WebDeleteCacheEntry Function
    This function is used to delete a cache entry in the browser cache of a user.
  • WebSuspendCache Function
    This function is used to disable the browser cache or (if the option parameter is provided) influence its behavior.
  • WebResumeCache Function
    Restores the normal cache behavior, changed by a prior call to the WebSuspendCache function.
  • WebSetCacheLimit Function
    This function allows you to implement different cache resizing strategies.
  • WebSetCacheLimitIE Function
    Use this function (usually at the beginning of your script - Init transaction) to enable the emulation of the cache size limit similar to IE.
  • WebCacheGetSize Function
    Returns the actual size of the cache in bytes.
  • WebCacheReSize Function
    Resizes the cache by deleting cache entries, beginning by the oldest entries, to the specified size.
  • WebThreadWait Function
    Waits until all threads of the user are ready.
  • WebIgnoreServerError Function
    Modifies the error severity of a specified server error for the subsequent web function call.
  • WebPing Function
    Checks the availability of a specified host by sending an ICMP echo request (ping).
  • WebBase64Decode Function
    Converts ASCII-encoded data into unsigned binary data.
  • WebBase64DecodeEx function
    Converts ASCII-encoded data into unsigned binary data.
  • WebBase64Encode Function
    Converts unsigned binary input into ASCII-encoded, printable characters.
  • WebBase64EncodeEx Function
    Converts unsigned binary input into ASCII-encoded, printable characters.
  • WebMD5Encode Function
    Encodes a string using the MD5 algorithm.
  • WebFormUrlDecode Function
    Decodes encoded strings included in URLs.
  • WebFormUrlEncode Function
    Encodes any unsafe characters included in URLs in order to comply with the Uniform Resource Locators specification.
  • WebFormDefineEncodeCustom Function
    Defines how the encoding type ENCODE_CUSTOM encodes individual characters.
  • WebCancelAllRules Function
    Disables all existing verification and parsing rules that have been set by prior calls of verification or parsing functions with the WEB_FLAG_RULE flag set.
  • FlashRemotingTransformation Function
    This function enables the transformation from binary AMF to a textual XML-based representation.
  • WebSetBrowserSim Function
    This functions allows to adjust the advanced options for the browser simulation.
  • WebSetHttpTag Function
    This functions allows to add an unique HTTP header tag to every web request of a loadtest.
  • WebGetHttpTag Function
  • WebSetDiagnostics Function
    Sets appropriate HTTP headers for a diagnostics tool.
  • WebSetUserSim Function
    Adjusts the advanced options for the user tolerance simulation.
親トピック: Web Functions Reference


WebBrowserReset Function

Action

Emulates a Web browser restart. This function closes all persistent connections and clears the document cache, the document history, all persistent cookies, the authentication databases, and the SSL context cache of the user’s browser.

Include file

WebAPI.bdh

Syntax

WebBrowserReset( in nMode : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nMode

Specifies whether to complete reset the browser or to keep persistent cookies and the document cache (optional). This parameter must be one of the following values:

WEB_RESET_ALL
Emulates closing and opening the Web browser, and clears the document cache and the cookie database.
WEB_RESET_NONPERSIST
Emulates closing and opening the browser without clearing the document cache and deleting persistent cookies.

If this parameter is omitted, Silk Performer simulates the behavior specified in the Simulation tab of the Profile Settings - Web dialog.

Example

dcltrans
  transaction TInit
  begin
    WebSetUserBehavior(WEB_USERBEHAVIOR_REVISITING);
    WebSetDocumentCache(true, WEB_CACHE_CHECK_ALWAYS);
  end TInit;

  transaction TMain
  begin
    WebPageUrl("standardhost");
    WebBrowserReset(WEB_RESET_ALL);
    WebPageUrl("standardhost");
  end TMain;
親トピック: General Web Functions
関連資料
WebSetUserBehavior Function
WebSetDocumentCache Function


WebDeleteCacheEntry Function

Action

This function is used to delete a cache entry in the browser cache of a user. If a URL that is going to be requested from the server, cannot be found in the browser cache a full request is performed (no cache hit or conditional request).

Include file

WebAPI.bdh

Syntax

WebDeleteCacheEntry( in sUrl : string ): boolean;

Return value

  • true if the cache entry has been deleted successfully.

  • false otherwise.

Parameter | Description
sUrl | Absolute URL of the cache entry to be deleted.

Example

dcltrans
  transaction TMain
  var
    sResult : string(100);
  begin
    WebPageUrl("http://standardhost/shopit/", "ShopIt - Greetings");
    WebDeleteCacheEntry("http://standardhost/shopit/images/arrowBrown.gif");
    WebPageUrl("http://standardhost/shopit/",
"ShopIt - Greetings");
  end TMain;
親トピック: General Web Functions


WebSuspendCache Function

Action

This function is used to disable the browser cache or (if the option parameter is provided) influence its behavior.

Include file

WebAPI.bdh

Syntax

WebSuspendCache( in nOption : number optional );

Return value

  • none

Parameter Description
nOption

If this parameter is omitted the cache will be disabled (no cache hits at all). If it is provided it can be one of the following values:

WEB_CACHE_NO_FULL_HIT
Documents, that would normally be a full cache hit (no request to the server) will be requested conditionally (if-modified-since header)
WEB_CACHE_FULL_HIT_ONLY_IN_PAGE
Identical with the WEB_CACHE_NO_FULL_HIT option with the exception, that duplicate embedded objects in a page are requested just once (what normally a browser does)

Example

dcltrans
  transaction TMain
  begin
    WebSuspendCache();
    WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
    WebSuspendCache(WEB_CACHE_FULL_HIT_ONLY_IN_PAGE);
    WebPageUrl("http://lab3/", "homepage");
    WebResumeCache();
  end TMain;
親トピック: General Web Functions


WebResumeCache Function

Action

This function is used to restore the normal cache behavior, changed by a prior call to the WebSuspendCache function.

Include file

WebAPI.bdh

Syntax

WebResumeCache();

Return value

  • none

Example

dcltrans
  transaction TMain
  begin
    WebSuspendCache();
    WebPageUrl("http://lab3/shopit/","ShopIt - Greetings");
    WebResumeCache();
    WebPageUrl("http://lab3/","home page");
  end TMain;
親トピック: General Web Functions
関連資料
WebSuspendCache Function


WebSetCacheLimit Function

Action

This function allows you to implement different cache resizing strategies. You can use this function (usually at the beginning of your script - Init transaction) to enable the emulation of a cache size limit. Without specifying this function the cache size will not be limited. When you specify this function Silk Performer's cache manager will automatically check the cache size on every write operation to the cache. If the size exceeds the size specified by the nMaxSize parameter it deletes cache entries, beginning with the oldest entries, till the cache size drops below nReducedSize or no more documents older (or of equal age) than nSeconds are available.

注: That it never deletes entries which are younger than nSeconds seconds.

Include file

WebApi.bdh

Syntax

WebSetCacheLimit( in nMaxSize     : number,
                  in nReducedSize : number optional,
                  in nSeconds     : number optional );
Parameter | Description
nMaxSize | Cache limit in bytes.
nReducedSize | If the cache manager gets triggered (nMaxSize exceeded) it starts to delete cache entries (beginning with the oldest) which are older (or of equal age) than nSecond seconds, in order to reach a cache size of below nReducedSize bytes (optional). Omit this parameter (or specify 0) to delete all cache entries, which fulfil the age restriction.
nSeconds | Specifies the minimum age which a document must have to be able to get cleared by the cache manager (only if the specified nMaxSize is exceeded) (optional). Omit this parameter to disable the age calculation (force the achievement of the specified size).

Example

dcltrans
  transaction TInit
  begin
    WebSetCacheLimit(1000000, 500000, 10 );
  end TInit;

 transaction TWeb
 begin
    WebPageUrl("http://lab3/stadyn_file500k.html");
    print(string(WebCacheGetSize()));
    Wait 3.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=1");
    print(string(WebCacheGetSize()));
    Wait 3.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=2");
    print(string(WebCacheGetSize()));
    Wait 3.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=3");
    print(string(WebCacheGetSize()));
    Wait 3.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=4");
    print(string(WebCacheGetSize()));

  end TWeb;

Output

512000
1024000
1536000
1536000
512000
親トピック: General Web Functions
関連資料
WebSetCacheLimitIE Function
WebCacheGetSize Function
WebCacheReSize Function


WebSetCacheLimitIE Function

Action

Use this function (usually at the beginning of your script - Init transaction) to enable the emulation of the cache size limit similar to IE. When you specify this function Silk Performer's cache manager will automatically remove entries out of the cache when the cache size gets larger than the specified value of fMaxSize according to IE's caching strategy.

Include file

WebApi.bdh

Syntax

WebSetCacheLimitIE( in fMaxSize : float );
Parameter | Description
fMaxSize | Cache limit in MB.

Example

dcltrans
  transaction TInit
  begin
    WebSetCacheLimitIE(1.0);
  end TInit;

  transaction TWeb
  begin
    WebPageUrl("http://lab3/stadyn_file500k.html");
    print(string(WebCacheGetSize()));
    Wait 180.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=1");
    print(string(WebCacheGetSize()));
    Wait 180.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=2");
    print(string(WebCacheGetSize()));
    Wait 180.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=3");
    print(string(WebCacheGetSize()));
    Wait 180.0;

    WebPageUrl("http://lab3/stadyn_file500k.html?x=4");
    print(string(WebCacheGetSize()));

  end TWeb;

Output

512000
1024000
1536000
2048000
2048000
親トピック: General Web Functions
関連資料
WebSetCacheLimit Function
WebCacheGetSize Function
WebCacheReSize Function


WebCacheGetSize Function

Action

Returns the actual size of the cache in bytes.

Include file

WebApi.bdh

Syntax

WebCacheGetSize(): number;

Return value

Actual size of the cache.

Example

dcltrans
  transaction TWeb
  begin
    WebPageUrl("http://lab3/stadyn_file500k.html");
    writeln(WebCacheGetSize());
    WebPageUrl("http://lab3/stadyn_file500k.html?x=1");
    writeln(WebCacheGetSize());
    WebPageUrl("http://lab3/stadyn_file50k.html");
    writeln(WebCacheGetSize());
    WebPageUrl("http://lab3/stadyn_file50k.html?x=1");
    writeln(WebCacheGetSize());
    WebPageUrl("http://lab3/stadyn_file5k.html");
    writeln(WebCacheGetSize());
  end TWeb;

Output

512000
1024000
1075200
1126400
1131520
親トピック: General Web Functions
関連資料
WebSetCacheLimit Function
WebSetCacheLimitIE Function
WebCacheReSize Function


WebCacheReSize Function

Action

Resizes the cache by deleting cache entries, beginning by the oldest entries, to the specified size. It will only drop elements that have been stored (or last accessed) at or before the specified date/time. Omit the second parameter to force the achievement of the specified size (regardless of the age of the cache entries).

Include file

WebApi.bdh

Syntax

WebCacheReSize( in nSize     : number,
                in nEdgeTime : number optional );

Return value

  • true if successful

  • false otherwise

Parameter | Description
nSize | Size which should be reached by deleting the oldest cache entries (if they are old enough - see nEdgeTime param).
nEdgeTime | Specifies the edge time of cache entries to delete (optional). If entries are younger then the specified time, they must not be deleted! A negative value specifies the actual time minus the specified seconds (-4 means actual time minus 4 seconds). A positive value specifies an exact date/time in the format seconds elapsed since midnight (00:00:00), January 1, 1970 as GMT (use number(GetTimeStamp(TIMESTAMP_GMT | TIMESTAMP_IN_SEC)) to get the actual time).Omit this parameter to disable the age calculation.

Example

dcltrans
  transaction TWeb
  begin
    WebPageUrl("http://lab3/stadyn_file5k.html");
    writeln(WebCacheGetSize());
    Wait 3.0;
    WebPageUrl("http://lab3/stadyn_file5k.html?x=1");
    writeln(WebCacheGetSize());
    Wait 3.0;
    WebPageUrl("http://lab3/stadyn_file5k.html?x=2");
    writeln(WebCacheGetSize());
    Wait 3.0;
    WebPageUrl("http://lab3/stadyn_file5k.html?x=3");
    writeln(WebCacheGetSize());
    Wait 3.0;
    WebPageUrl("http://lab3/stadyn_file5k.html?x=4");
    writeln(WebCacheGetSize());
    Wait 3.0;

    WebCacheReSize(0, -31);
    writeln(WebCacheGetSize());

  end TWeb;

Output

5120
10240
15360
20480
25600
25600
親トピック: General Web Functions
関連資料
WebSetCacheLimit Function
WebSetCacheLimitIE Function
WebCacheGetSize Function


WebThreadWait Function

Action

Waits until all threads of the user are ready. This function is used to synchronize multiple threads.

Include file

WebAPI.bdh

Syntax

WebThreadWait( in nFlag: number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nFlag

Flag used to specify the following additional option (optional):

  • WAIT_CLOSECONNECTIONS. Close all open connections, for example, if the Keep-Alive semantics is enabled

Example

dcltrans
  transaction TMain
  begin
    WebUrl("http://www.MyCompany.com");
    // do anything more
    ...
    WebThreadWait();
  end TMain;
親トピック: General Web Functions


WebIgnoreServerError Function

Action

Modifies the error severity of a specified server error for the subsequent web function call. This can be done for a specified amount of server errors or for all.

Include file

WebAPI.bdh

Syntax

WebIgnoreServerError( in nStatusCode : number,
                      in nSeverity   : number optional := SEVERITY_SUCCESS,
                      in nCount      : number optional );

Return value

  • none

Parameter | Description
nStatusCode | Server status code to ignore or change the severity for (e.g. 404).
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: (Default) Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nCount | The specified error can occur nCount times before an error with the default severity is raised. If this parameter is omitted the specified severity is valid for all server responses

Example

dcltrans
transaction TWeb
begin
  WebIgnoreServerError(404);
  WebUrl("http://standardhost/", 0.0);
  WebIgnoreServerError(404, SEVERITY_SUCCESS, 3);
  WebIgnoreServerError(500, SEVERITY_WARNING);
  WebPageUrl("http://standardhost/");
end TWeb;
親トピック: General Web Functions


WebPing Function

Action

Checks the availability of a specified host by sending an ICMP echo request (ping).

Include file

WebAPI.bdh

Syntax

WebPing( in sHost     : string,
         in nTimeout  : number optional,
         in nPings    : number optional,
         in nDataSize : number optional): boolean;

Return value

  • true if the host responds at least one time

  • false otherwise

Parameter | Description
sHost | Domain name or IP address, for example, hostname.com or 192.231.34.1
nTimeout | Time, in ms, in which the tested host has to respond, otherwise it is considered to be not responding (optional). The default timeout is 1 second.
nPings | Number of pings to be sent (optional). The default value is 3.
nDataSize | Size of the additional data that the ICMP echo request sends (optional). This must be a value between 0 and 65527, inclusive. The default value is 32.

Example

dcltrans
transaction TMain
var
  nResult: number;
begin
  if not WebPing("lab1") then
    Print("host lab1 is not responding")
  else
    Print("host lab1 is alive")
  end;
  if not WebPing("192.168.100.101", 500, 1)  then
    Print("host 192.168.100.101 is not responding")
  else
    Print("host 192.168.100.101 is alive")
  end;
end TMain;
親トピック: General Web Functions


WebBase64Decode Function

Action

Converts ASCII-encoded data into unsigned binary data.

注: This function is obsolete. It can still be used, although it's recommended to use the WebBase64DecodeEx function instead.

Include file

WebAPI.bdh

Syntax

WebBase64Decode( out   sTarget : string,
                 inout nTarget : number,
                 in    sSource : string ): boolean;

Return value

  • true if the decoding was successful

  • false otherwise

Parameter | Description
sTarget | String variable to receive the data.
nTarget | Maximum number of bytes to write into sTarget. This value must be less than or equal to the size of sTarget. nTarget will contain the length of the encoded binary data after a successful return.
sSource | Source string to decode.

For example, the string "dGVzdHVzZXI6dGVzdHBhc3M=" is converted to "testuser:testpass".

Example

dcltrans
  transaction TWebBase64Decode
  var
    sPlain    : string;
    sCoded    : string(100);
    nPlainLen : number;
    nCodedLen : number;
  begin
    sPlain := "testuser:testpass";
    write("plain: "); write(sPlain); writeln;

    WebBase64Encode(sCoded, sizeof(sCoded), nCodedLen, sPlain, Strlen(sPlain));
    write("encoded: "); write(sCoded); writeln;

    nPlainLen := sizeof(sPlain);
    WebBase64Decode(sPlain, nPlainLen, sCoded);
    write("decoded: "); write(sPlain); writeln;
  end TWebBase64Decode;

Output

plain: testuser:testpass
encoded: dGVzdHVzZXI6dGVzdHBhc3M=
decoded: testuser:testpass
親トピック: General Web Functions
関連概念
Handling Uniform Resource Locators (URLs)
関連資料
WebBase64Encode Function
WebBase64DecodeEx function


WebBase64DecodeEx function

Action

Converts ASCII-encoded data into unsigned binary data.

Include file

WebAPI.bdh

Syntax

WebBase64DecodeEx( out   sTarget : string,
                   in    sSource : string ): boolean;

Return value

  • true if the decoding was successful

  • false otherwise

Parameter | Description
sTarget | String variable to receive the decoded data.
sSource | Source string to decode.

Example

transaction TWeb
  var
    sEncoded : string;
    sDecoded : string;
  begin
    WebBase64EncodeEx(sEncoded, "Hallo");
    WebBase64DecodeEx(sDecoded, sEncoded);
    print(sEncoded);
    print(sDecoded);
  end TWeb;
親トピック: General Web Functions
関連資料
WebBase64Decode Function
WebBase64EncodeEx Function


WebBase64Encode Function

Action

Converts unsigned binary input into ASCII-encoded, printable characters.

注: This function is obsolete. It can still be used, although it's recommended to use the WebBase64EncodeEx function instead.

Include file

WebAPI.bdh

Syntax

WebBase64Encode( out sTarget    :string,
                 in  nMaxTarget : number,
                 out nLenTarget : number,
                 in  sSource    : string,
                 in  nSourceLen : number optional ): boolean;

Return value

  • true if the encoding was successful

  • false otherwise

Parameter | Description
sTarget | String variable to receive the encoded string.
nMaxTarget | Maximum number of characters to write into sTarget.
nLenTarget | Parameter receiving the number of characters in sTarget after successful encoding.
sSource | Source data to encode. This can also be binary data.
nSourceLen | Length in bytes of the source data (optional). Specifiy STRING_COMPLETE or omit this parameter to encode all available data.

For example, the string "testuser:testpass" is converted to "dGVzdHVzZXI6dGVzdHBhc3M=". Binary data can also be encoded in order to transport it safely over a 7-bit transport environment.

注: The data size increases by 30% due to the encoding.

Example

dcltrans
  transaction TWebOwnAuthHeader
  var
    sUserPass : string;
    nUserPassLen : number;
  begin
    // Build your own authentication header
    WebBase64Encode(sUserPass, 200, nUserPassLen,
      "smith:paranoia{}[]~^");

    sUserPass := "Basic " + sUserPass;

    WebHeaderAdd("Authorization", sUserPass);
    WebUrl("http://standardhost/", 0.0);
  end TWebOwnAuthHeader;

Sample scripts

WebEncoding01.bdf, WebForms02.bdf

親トピック: General Web Functions
関連概念
Handling Uniform Resource Locators (URLs)
関連資料
WebBase64Decode Function
WebBase64EncodeEx Function


WebBase64EncodeEx Function

Action

Converts unsigned binary input into ASCII-encoded, printable characters.

Include file

WebAPI.bdh

Syntax

WebBase64EncodeEx( out sTarget    :string,
                   in  sSource    : string,
                   in  nSourceLen : number optional ): boolean;

Return value

  • true if the encoding was successful

  • false otherwise

Parameter | Description
sTarget | String variable to receive the encoded string.
sSource | Source data to encode. This can also be binary data.
nSourceLen | Length in bytes of the source data (optional). Specifiy STRING_COMPLETE or omit this parameter to encode all available data.

Example

transaction TWeb
  var
    sEncoded : string;
    sDecoded : string;
  begin
    WebBase64EncodeEx(sEncoded, "Hallo");
    WebBase64DecodeEx(sDecoded, sEncoded);
    print(sEncoded);
    print(sDecoded);
  end TWeb;
親トピック: General Web Functions
関連資料
WebBase64DecodeEx function
WebBase64Encode Function


WebMD5Encode Function

Action

Encodes a string using the MD5 algorithm. The result is a string that comprises 32 hexadecimal digits.

Include file

WebAPI.bdh

Syntax

WebMD5Encode( out sResult    : string,
              in  nMaxResult : number,
              in  sToEncode  : string ): boolean;

Return value

  • true if the encoding was successful

  • false otherwise

Parameter | Description
sResult | String variable that receives the result. This string variable must be at least 33 characters long.
nMaxResult | Size of the specified string variable.
sToEncode | String that is to be encoded.

Example

dcltrans
  transaction TMain
  var
    sResult: string;
  begin
    WebMD5Encode(sResult, STRING_COMPLETE, "Password");
    Print(sResult);
  end TMain;
親トピック: General Web Functions
関連資料
WebBase64Encode Function


WebFormUrlDecode Function

Action

Decodes encoded strings included in URLs. See WebFormUrlEncode for more details about the encoding format.

Include file

WebAPI.bdh

Syntax

WebFormUrlDecode( inout sString: string ): boolean;

Return value

  • true if the string could be decoded

  • false otherwise

Parameter | Description
sString | String variable to decode
注: The input string is overwritten and replaced by the shorter or equal-sized decoded string.

Example

dcltrans
  transaction TWebFormUrlDecode
  var
    sPlain, sUrl : string;
    nUrlLen      : number;
  begin
    sPlain := "http://www.testurl.com/demo[1]()";
    write("plain: "); write(sPlain); writeln;
    nUrlLen := sizeof(sUrl);
    WebFormUrlEncode(sUrl, nUrlLen, sPlain);
    write("encoded: "); write(sUrl); writeln;
    WebFormUrlDecode(sUrl);
    write("decoded: "); write(sUrl); writeln;
  end TWebFormUrlDecode;

Output

plain: http://www.testurl.com/demo[1]()
encoded:
http%3A//www.testurl.com/demo%5B1%5D%28%29
decoded: http://www.testurl.com/demo[1]()
親トピック: General Web Functions
関連資料
WebFormUrlEncode Function


WebFormUrlEncode Function

Action

Encodes any unsafe characters included in URLs in order to comply with the Uniform Resource Locators specification. This encoding is commonly applied to URL parameters or FORM post parameters.

Include file

WebAPI.bdh

Syntax

WebFormUrlEncode( out   sTarget    :string,
                  inout nMaxTarget : number,
                  in    sSource    : string ): boolean;

Return value

  • true if encoding was successful

  • false if an error occurred or the buffer size is too small

Parameter | Description
sTarget | String variable to receive the encoded string
nMaxTarget | Parameter containing the maximum number of characters to write into sTarget. This value must be <=<= the size of sTarget. If the buffer size is too small, WebFormUrlEncode returns false and sets nMaxTarget to the needed size.
sSource | Source string to encode

Printable ASCII characters being URL-encoded to its hexadecimal representation %hh by Silk Performer: % ? # [ ] { } | \ & = @ : ^ ~ ` " $ + ! * ' ( ) , < > ; /

注: Octets must be encoded if they have no corresponding graphic character within the US ASCII coded character set, if the use of the corresponding character is unsafe, or if the corresponding character is reserved for some other interpretation within the particular URL scheme. No corresponding graphic US ASCII: URLs are written only with the printable graphic characters of the US ASCII coded character set. The octets 80-FF hexadecimal are not used in US ASCII, and the octets 00-1F and 7F hexadecimal represent control characters; these must be encoded.

Example

dcltrans
  transaction TWebFormUrlEncode
  var
    sUrl     : string;
    sPass    : string(100);
    nPassLen : number;
  begin
    // Encode all unsafe characters in a password
    nPassLen := sizeof(sPass);
    WebFormUrlEncode(sPass, nPassLen, "paranoia{}[]~^");
    sUrl := "http://smith:" + sPass + "@standardhost/";
    WebUrl(sUrl);
  end TWebFormUrlEncode;

Sample scripts

WebEncoding01.bdf

親トピック: General Web Functions
関連資料
WebFormUrlDecode Function
WebBase64Encode Function


WebFormDefineEncodeCustom Function

Action

Defines how the encoding type ENCODE_CUSTOM encodes individual characters.

Include file

WebAPI.bdh

Syntax

WebFormDefineEncodeCustom( in sEncodingDefinition : string ): boolean;

Return value

  • true if successful

  • false otherwise (syntax error in sEncodingDefinition)

Parameter | Description
sEncodingDefinition | String that defines how the encoding type ENCODE_CUSTOM works.

Syntax of an encoding definition

EncodingDef = SingleDef { Separator SingleDef }
Separator   = ";" | ","
SingleDef   = BaseDef | BlankDef | RangeDef
BaseDef     = "base" "=" StandardEnc
StandardEnc = "ENCODE_FORM" | "ENCODE_ESCAPE" | "ENCODE_BLANKS" | "ENCODE_NONE"
BlankDef    = PosNegDef "Blank2Plus"
PosNegDef   = "+" | "-" | "*"
RangeDef    = PosNegDef CharSet
CharSet     = String | CharRange
String      = "'" { character } "'"
CharRange   = SingleChar [ ".." SingleChar ]
SingleChar  = ( number from 0 to 255 ) | ( "'" character "'" )

Example

// define ENCODE_CUSTOM identical to ENCODE_FORM (1st possibility)
WebFormDefineEncodeCustom("+0..255; -'a'..'z';"
                          " -'A'..'Z'; -'0'..'9';"
                          " -'*-@_. '; +Blank2Plus");

// define ENCODE_CUSTOM identical to ENCODE_FORM (2nd possibility)
WebFormDefineEncodeCustom("base=ENCODE_FORM");

// define ENCODE_CUSTOM identical to ENCODE_ESCAPE (1st possibility)
WebFormDefineEncodeCustom("+0..255; -'a'..'z';"
                          " -'A'..'Z'; -'0'..'9';"
                          " -'*-@_+./'; -Blank2Plus");

// define ENCODE_CUSTOM identical to ENCODE_ESCAPE (2nd possibility)
WebFormDefineEncodeCustom("base= ENCODE_ESCAPE");

// define ENCODE_CUSTOM identical to ENCODE_BLANKS (1st possibility)
WebFormDefineEncodeCustom("-0..255; +' '; +0; -Blank2Plus");

// define ENCODE_CUSTOM identical to ENCODE_BLANKS (2nd possibility)
WebFormDefineEncodeCustom("base= ENCODE_BLANKS");

// define ENCODE_CUSTOM identical to ENCODE_NONE (1st possibility)
WebFormDefineEncodeCustom("-0..255; -Blank2Plus");

// define ENCODE_CUSTOM identical to ENCODE_NONE (2nd possibility)
WebFormDefineEncodeCustom("base= ENCODE_NONE");

// URL encoding of Siebel 7 web client (1st possibility)
WebFormDefineEncodeCustom("+0..255; -'a'..'z';"
                          " -'A'..'Z'; -'0'..'9';"
                          " -' *-_.!()'; +Blank2Plus");

// URL encoding of Siebel 7 web client (2nd possibility)
WebFormDefineEncodeCustom("base=ENCODE_FORM; +'@'; -'!()'");
親トピック: General Web Functions
関連概念
Low-Level Web Function Replay Timing
関連資料
WebFormBuild Function
WebFormClear Function
WebFormValuePairInsert Function
WebFormValuePairRemove Function
WebFormValueSet Function
WebFormGet Function
Web Form Declarations


WebCancelAllRules Function

Action

Disables all existing verification and parsing rules that have been set by prior calls of verification or parsing functions with the WEB_FLAG_RULE flag set.

Include file

WebAPI.bdh

Syntax

WebCancelAllRules();

Return value

  • none

親トピック: General Web Functions


FlashRemotingTransformation Function

Action

This function enables the transformation from binary AMF to a textual XML-based representation. This function is usually called in the TInit transaction of Flash Remoting scripts.

Include file

FlashRemoting.bdh

Syntax

FlashRemotingTransformation( in bRequest  : boolean,                             in bResponse :
boolean optional,                             in sOptions  :
string optional );
Parameter | Description
bRequest | If true, binary AMF in request bodies will be transformed.
bResponse | If true, binary AMF in response bodies will be transformed. If this parameter is omitted, the corresponding setting from the Web/Replay/Transformation tab in the profile settings dialog is used.
sOptions | Specifies additional options for the AMF transformation. If omitted, the corresponding setting from the Web/Replay/Transformation tab in the profile settings dialog is used.

Example

dcltrans
  transaction TInit
  begin
    FlashRemotingTransformation(true, true, "Verbose");
  end TInit;
親トピック: General Web Functions


WebSetBrowserSim Function

Action

This functions allows to adjust the advanced options for the browser simulation.

Allows the limitation of connections on a per server basis (e.g. 2 connections to one server, 4 connections to two servers). Additionally distinguishes between HTTP 1.0 and HTTP 1.1 connections. (By default the Internet Explorer uses 2 connections to every server connected with HTTP 1.1 and 4 connections to all other servers).

Allows to tune the retry strategy of the emulated browser, too.

Include file

WebAPI.bdh

Syntax

WebSetBrowserSim(
   in nOption : number allownull,
   in nValue  : number ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
nOption

Specify any of the following values:

WEB_BROWSER_SIM_ConnHttp10
Specify the number of connection limit to every server using HTTP 1.0. Specify 0 to disable the connection emulation on the server basis.
WEB_BROWSER_SIM_ConnHttp11
Specify the number of connection limit to every server using HTTP 1.1. Specify 0 to disable the connection emulation on the server basi
WEB_BROWSER_SIM_ConnAll
Use this option to specify the unitary connection limit to every server, regardless if it uses HTTP 1.0 or HTTP 1.1.
WEB_BROWSER_SIM_MaxConn
Specify the absolute maximum number of connections, which the emulated browser opens. To perform an accurate connection simulation this value should be above the per server setting (above options).
WEB_BROWSER_SIM_RetryOnResetNoData
Specifies the number of request retries a browser performs, when the server does not respond at all, but resets the connection.
WEB_BROWSER_SIM_RetryOnResetInHeader
Specifies the number of request retries a browser performs, when the server resets the connections during receiving of the HTTP header.
WEB_BROWSER_SIM_RetryOnResetInBody
Specifies the number of request retries a browser performs, when the server resets the connections during receiving of the HTTP body.
WEB_BROWSER_SIM_RetryOnFinNoData
Specifies the number of request retries a browser performs, when the server does not respond at all, but closes the connection gracefully (Fin).
WEB_BROWSER_SIM_RetryOnFinInHeader
Specifies the number of request retries a browser performs, when the server closes the connections gracefully during receiving of the HTTP header.
WEB_BROWSER_SIM_RetryOnErrorNoData
Specifies the number of request retries a browser performs, when it encounters any error (besides connection closes) before the response of the server is received.
WEB_BROWSER_SIM_RetryOnErrorInHeader
Specifies the number of request retries a browser performs, when it encounters any error (besides connection closes) before the HTTP header has been received completely.
WEB_BROWSER_SIM_RetryOnErrorInBody
Specifies the number of request retries a browser performs, when it encounters any error (besides connection closes) before the HTTP body has been received completely.
nValue | Specify the appropriate value. See nOptions for a description.

Example

dcltrans
transaction TInit
begin
   WebSetBrowserSim(WEB_BROWSER_SIM_ConnHttp10, 4);
   WebSetBrowserSim(WEB_BROWSER_SIM_ConnHttp11, 2);
   WebSetBrowserSim(WEB_BROWSER_SIM_MaxConn, 16);
   WebSetBrowserSim(WEB_BROWSER_SIM_RetryOnResetNoData, 5);
   end TInit;
親トピック: General Web Functions
関連資料
WebSetUserSim Function


WebSetHttpTag Function

Action

This functions allows to add an unique HTTP header tag to every web request of a load test. This can be used to correlate timing or accuracy problems during a load test with results of in-depth analysis tools.

Include file

WebAPI.bdh

Syntax

WebSetHttpTag( in sHeader : string,
               in nFlags  : number );
Parameter | Description
sHeader | Specify any valid HTTP header (name of the tag header).
nFlags Specify any combination of the following values:
WEB_TAG_FLAG_ProjectName
HTTP header contains the name of the load test: TE=<LoadTestName>
WEB_TAG_FLAG_TestName
HTTP header contains the name of the used Silk Performer project:TE=<ProjectName>
WEB_TAG_FLAG_ScriptName
HTTP header contains the name of the script: SN=<LoadTestName>
WEB_TAG_FLAG_ToolName
HTTP header identifies source as: SID=<SilkPerformerVersioned>
WEB_TAG_FLAG_UserGroup
HTTP header contains the name of the Silk Performer user-group to which the virtual user sending the request belongs: UG=<UserGroup>
WEB_TAG_FLAG_Profile
HTTP header contains the name of the Silk Performer profile which the virtual user sending the request uses: PF=<Profile>
WEB_TAG_FLAG_Workload
HTTP header contains the name of the Silk Performer workload which the virtual user sending the request uses: WL=<Workload>
WEB_TAG_FLAG_Transaction
HTTP header contains the name of the Silk Performer transaction which the virtual user sending the request is currently executing: TN=<Transaction>
WEB_TAG_FLAG_UserId
HTTP header contains a unique user id (cross loadtest): VU=<Id>
WEB_TAG_FLAG_BrowserSession
HTTP header contains a browser session id. This session id is incremented when the virtual user logically opens a browser: SI=<BrowserSessionId>
WEB_TAG_FLAG_PageContext
HTTP header contains a information about what document in the currently processed page is loaded. If it is a named frame then the value starts with the frame name. After a dot the page-unique document number is appended. Note that if embedded documents get cached this number need not be progresional: PC=<FrameName>.<DocId>
WEB_TAG_FLAG_RequestId
HTTP header contains a user-unique request id: ID=<RequestId>
WEB_TAG_FLAG_Timer
If the current request gets issued in a page context (page-level API) the HTTP header contains the specified timer name (if omitted the name is empty): NA=<TimerName>
WEB_TAG_FLAG_WorkloadType
HTTP header contains the Silk Performer workload type: WT=<WorkloadType>
Possible workload types:
  • 0: SteadyState
  • 1: Increasing
  • 2: Dynamic
  • 3: Queuing
  • 4: Monitoring
  • 5: AllDay
  • 6: Verify
  • 7: SingleUser
WEB_TAG_FLAG_Agent
HTTP header contains the name of the used Silk Performer agent: AN=<AgentName>
WEB_TAG_FLAG_LineNumber
HTTP header contains the line number of the currently executed Silk Performer function: LN=<LineNumber>
WEB_TAG_FLAG_Time
HTTP header contains the current controller time in the format of seconds since 1970: TI=<ElapsedSeconds>

Example

dcltrans
transaction TInit
begin
  WebSetHttpTag("MyTag",
  WEB_TAG_FLAG_RequestId |
  WEB_TAG_FLAG_UserId |
  WEB_TAG_FLAG_ProjectName |
  WEB_TAG_FLAG_UserGroup |
  WEB_TAG_FLAG_Profile |
  WEB_TAG_FLAG_LineNumber);
end TInit;
親トピック: General Web Functions
関連資料
WebGetHttpTag Function


WebGetHttpTag Function

Action

This function retrieves the values which have been set by a call to the WebSetHttpTag function.

Include file

WebAPI.bdh

Syntax

WebGetHttpTag( out sHeader : string,
               out nFlags  : number );
Parameter | Description
sHeader | String that receives the HTTP header (name of the tag header).
nFlags Receives any combination of the following values:
WEB_TAG_FLAG_ProjectName
HTTP header contains the name of the used Silk Performer project:PN=<ProjectName>
WEB_TAG_FLAG_UserGroup
HTTP header contains the name of the Silk Performer user-group to which the virtual user sending the request belongs: UG=<UserGroup>
WEB_TAG_FLAG_Profile
HTTP header contains the name of the Silk Performer profile which the virtual user sending the request uses: PF=<Profile>
WEB_TAG_FLAG_Workload
HTTP header contains the name of the Silk Performer workload which the virtual user sending the request uses: WL=<Workload>
WEB_TAG_FLAG_Transaction
HTTP header contains the name of the Silk Performer transaction which the virtual user sending the request is currently executing: TN=<Transaction>
WEB_TAG_FLAG_UserId
HTTP header contains a unique user id (cross loadtest): VU=<Id>
WEB_TAG_FLAG_BrowserSession
HTTP header contains a browser session id. This session id is incremented when the virtual user logically opens a browser: SI=<BrowserSessionId>
WEB_TAG_FLAG_PageContext
HTTP header contains a information about what document in the currently processed page is loaded. If it is a named frame then the value starts with the frame name. After a dot the page-unique document number is appended. Note that if embedded documents get cached this number need not be progresional: PC=<FrameName>.<DocId>
WEB_TAG_FLAG_RequestId
HTTP header contains a user-unique request id: ID=<RequestId>
WEB_TAG_FLAG_Timer
If the current request gets issued in a page context (page-level API) the HTTP header contains the specified timer name (if omitted the name is empty): NA=<TimerName>
WEB_TAG_FLAG_WorkloadType
HTTP header contains the Silk Performer workload type: WT=<WorkloadType>
Possible workload types:
  • 0: SteadyState
  • 1: Increasing
  • 2: Dynamic
  • 3: Queuing
  • 4: Monitoring
  • 5: AllDay
  • 6: Verify
  • 7: SingleUser
WEB_TAG_FLAG_Agent
HTTP header contains the name of the used Silk Performer agent:AN=<AgentName>
WEB_TAG_FLAG_LineNumber
HTTP header contains the line number of the currently executed Silk Performer function: LN=<LineNumber>
WEB_TAG_FLAG_Time
HTTP header contains the current controller time in the format of seconds since 1970: TI=<ElapsedSeconds>

Example

dcltrans
transaction TInit
var
  sHeader : string;
  nFlags  : number;
begin
  WebSetHttpTag("MyTag",
  WEB_TAG_FLAG_RequestId |
  WEB_TAG_FLAG_UserId |
  WEB_TAG_FLAG_ProjectName |
  WEB_TAG_FLAG_UserGroup |
  WEB_TAG_FLAG_Profile |
  WEB_TAG_FLAG_LineNumber);
  WebGetHttpTag(sHeader, nFlags);
end TInit;
親トピック: General Web Functions
関連資料
WebSetHttpTag Function


WebSetDiagnostics Function

Action

Sets appropriate HTTP headers for a diagnostics tool. A diagnostics tag is sent as an HTTP header along with each request, enabling linkage between client-side results and application diagnostics.

AppDynamics™ and dynaTrace Diagnostics™ each provide in-depth application performance diagnostics down to the code level. The WebSetDiagnostics function enables correlation of Web page and Web Service calls with both AppDynamics and dynaTrace PurePath™ results for root-cause analysis of performance bottlenecks.

Include file

WebAPI.bdh

Syntax

WebSetDiagnostics( in nOption : number );
Parameter Description
nOption Specify one of the following values:

  • WEB_DIAG_AppDynamics: Sends the appropriate HTTP headers for AppDynamics diagnostics

  • WEB_DIAG_dynaTraceDiagnostics: Sends the appropriate HTTP headers for dynaTrace AppMon

  • WEB_DIAG_dynaTraceSaasManaged: Sends the appropriate HTTP headers for dynaTrace Saas and Managed

  • 0: Disables HTTP header tagging

Example

dcltrans
transaction TInit
  begin
    WebSetDiagnostics(WEB_DIAG_AppDynamics);
  end TInit;
親トピック: General Web Functions
関連資料
WebSetHttpTag Function


WebSetUserSim Function

Action

This functions allows to adjust the advanced options for the user tolerance simulation.

There are 3 different timeout values, which can be specified for different load states of the page:
  • No response from server (normally the shortest periode)
  • At least the first (root) document is loaded, but the HTML content (frames) is not complete
  • HTML content is complete, but at least one embedded object is missing

Additionally the pure image (embedded objects) load time can be specified, which starts, when the last HTML document is loaded.

In case of a timeout there are several options which the virtual user could take:
  • Retry the page (x times)
  • Do one of the following:
    • Abandon the page
    • Continue waiting - unlimited or unless another timeout occurs
    • Continue waiting for another defined timeout value

Not only the load time tolerance, but also the error accaptance of the virtual user can be controlled by this function. Therefore the number of retries can be specified wether the error happens in the HTML document portion of the page, or in the embedded objects.

Include file

WebAPI.bdh

Syntax

WebSetUserSim(
   in nOption : number,
   in nValue  : number ) : boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
nOptions
Specify any of the following values:
WEB_USER_SIM_TimeoutNoData
Specifies the maximum time in ms an user is willing to wait when no response from the server arrives.
WEB_USER_SIM_ReloadNoData
Specifies if and how often the user presses the Refresh button in case of above timeout.
WEB_USER_SIM_ActionNoData
Specifies the action the user takes, after the above timeout occures and the page has already been retried the specified times:
Valid values:
WEB_USER_SIM_ACTION_Continue
The user continues waiting; unlimited or until another timeout occurs.
WEB_USER_SIM_ACTION_Abort
The user presses the Stop button - Abandons the page load.
Any positive value
Specifies the amount of ms the user waits additionally before he presses the Stop button.
WEB_USER_SIM_TimeoutDocNotComplete
Specify the maximum time in ms an user is willing to wait when the first (root) document is loaded, but the HTML content (frames) is not complete.
WEB_USER_SIM_ReloadDocNotComplete
Specifies if and how often the user presses the Refresh button in case of above timeout.
WEB_USER_SIM_ActionDocNotComplete
See WEB_USER_SIM_ActionNoData.
WEB_USER_SIM_TimeoutPageNotComplete
Specifies the maximum time in ms an user is willing to wait when the HTML content is complete, but at least one embedded object is missing.
WEB_USER_SIM_ReloadPageNotComplete
Specifies if and how often the user presses the Refresh button in case of above timeout.
WEB_USER_SIM_ActionPageNotComplete
See WEB_USER_SIM_ActionNoData
WEB_USER_SIM_ImgLoadTime
Specifies the maximum time in ms an user is willing to wait for the loading of all embedded objects. This time starts, when the last HTML document is loaded.
WEB_USER_SIM_ReloadImgLoadTimeExceeded
Specifies if and how often the user presses the Refresh button in case of above timeout.
WEB_USER_SIM_ActionImgLoadTimeExceeded
See WEB_USER_SIM_ActionNoData.
WEB_USER_SIM_ReloadPageOnError
Specifies if and how often the user presses the Refresh button in case of any error in the page. (e.g. missing image)
WEB_USER_SIM_ReloadOnlyIfErrorInDocs
Specifies if and how often the user presses the Refresh button in case of any error in the document portion of the page. (e.g. missing frame).
nValue | Specify the appropriate value. See nOptions for a description.

Example

dcltrans
  transaction TInit
  begin
   WebSetUserSim(WEB_USER_SIM_ImgLoadTime, 10000);
   WebSetUserSim(WEB_USER_SIM_ReloadImgLoadTimeExceeded, 1);
   WebSetUserSim(WEB_USER_SIM_ActionImgLoadTimeExceeded,
     WEB_USER_SIM_ACTION_Abort);
   WebSetUserSim(WEB_USER_SIM_ReloadOnlyIfErrorInDocs, 1);
  end TInit;
親トピック: General Web Functions
関連資料
WebSetBrowserSim Function


Browser Settings

  • WebSetAcceptTypes Function
    Sets the HTTP/HTTPS accept types.
  • WebGetAcceptTypes Function
    Gets the current values of HTTP/HTTPS accept types.
  • WebSetAutoRedirect Function
    Specifies whether Silk Performer automatically parses redirection responses and redirects the request to the specified server.
  • WebSetBrowser Function
    Sets the browser type to be used for simulation.
  • WebSetCookies Function
    Sets the maximum number of cookies to be stored per domain.
  • WebGetCookies Function
    Gets the current value of the maximum number of cookies.
  • WebSetDocumentCache Function
    Specifies whether Silk Performer emulates a document cache.
  • WebSetHttpHeader Function
    Sets one or more user-defined headers for HTTP/HTTPS.
  • WebGetHttpHeader Function
    Gets all user-defined headers for HTTP/HTTPS that are currently set.
  • WebModifyHttpHeader Function
    Sets, modifies or removes one or more user-defined headers for HTTP/HTTPS.
  • WebSetHttpVersion Function (Deprecated)
    Sets the HTTP/HTTPS version string to be used by low-level Web API functions.
  • WebGetHttpVersion Function (Deprecated)
    Gets the currently used HTTP/HTTPS version string to be used.
  • WebSetKeepAlive Function
    Sets the Keep-Connection semantics for HTTP/HTTPS.
  • WebGetKeepAlive Function
    Checks whether the KeepConnection flag is set.
  • WebSetMaxThreads Function
    Sets the upper limit of possible concurrent threads.
  • WebGetMaxThreads Function
    Returns the current value of maximum concurrent threads as a number.
  • WebSetProxy Function
    Sets the proxy host name and port for a specific protocol.
  • WebGetProxy Function
    Gets the current proxy host name and port number either for all protocols or for a specific protocol.
  • WebSetProxyAutoConfigFile Function
    Specifies the location of a PAC (Proxy Auto-Configuration) file.
  • WebSetProxyAuth Function
    Sets the password for proxy authentication login.
  • WebSetProxyAuthBasic Function
    Sets the password for basic proxy authentication login.
  • WebSetProxyAuthNtlm Function
  • WebSetProxyBypass Function
    Sets the names of hosts not be accessed through a proxy.
  • WebGetProxyBypass Function
    Gets the names of hosts not to be accessed through a proxy.
  • WebSetUserAgent Function
    Sets the HTTP/HTTPS user agent and overrides those of the workbench.
  • WebGetUserAgent Function
    Gets the current value of the HTTP/HTTPS user agent.
親トピック: Web Functions Reference


WebSetAcceptTypes Function

Action

Sets the HTTP/HTTPS accept types.

Include file

WebAPI.bdh

Syntax

WebSetAcceptTypes(in sAccept: string): boolean;

Return value

  • true if successful
  • false otherwise
Parameter | Description
sAccept | Contains the accept pattern string, for example, "*/*", "image/gif"

Example

dcltrans
transaction TWebInit
begin
  WebSetAcceptTypes("text/html, image/gif");
  WebDumpSettings();
end TWebInit;
親トピック: Browser Settings
関連資料
WebGetAcceptTypes Function
Settings Functions Reference
Internet Functions


WebGetAcceptTypes Function

Action

Gets the current values of HTTP/HTTPS accept types.

Include file

WebAPI.bdh

Syntax

WebGetAcceptTypes( out sAccept : string,
                   in  nMaxLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sAccept | A string buffer that will receive the current list of AcceptTypes.
nMaxLen | The maximum length of the receive buffer sAccept (optional).

Example

dcltrans
  transaction TWebInit
  var
    sAccept: string;
  begin
    WebGetAcceptTypes(sAccept);
    write("HttpAccept: "); write(sAccept); writeln;
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetAcceptTypes Function
Settings Functions Reference


WebSetAutoRedirect Function

Action

Specifies whether Silk Performer automatically parses redirection responses and redirects the request to the specified server.

Include file

WebAPI.bdh

Syntax

WebSetAutoRedirect( in bAuto     : boolean,
                    in nMaxRedir : number optional,
                    in nFlag     : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
bAuto | If this parameter is set to true, Silk Performer automatically parses redirection responses and redirects the request to the specified server
nMaxRedir | Specifies the maximum number of redirections that are automatically performed by Silk Performer (optional). The default value for this parameter is 5.
nFlag

Specifies whether to modify the standardhost variable (optional). This parameter can be one of the following:

WEB_AUTOREDIR_SETSTDHOST_FIRST
Sets the standardhost variable to the new location on the next redirection.
WEB_AUTOREDIR_SETSTDHOST_ALWAYS
Sets the standardhost variable to new location on all redirections.

The function’s default behavior is not to modify the standardhost variable.

The following error message is reported if too many redirections requests are received in a row:

HTTP: 1010 - too many redirections, possibly loop detected.

A possible reason for this error is that the script has not been customized properly. For example, a script must correctly handle session IDs that cause a Web application to send redirection messages.

Example

dcltrans
  transaction TMain
  var
    sUrl, sParam1, sSession: string(1000);
  begin
    // automatic redirect
    WebSetAutoRedirect(true);
    WebUrl("http://standardhost/SessionIdTest.asp");
    // manual redirect
    WebSetAutoRedirect(false);
    WebParseResponseRedirect(sUrl, sizeof(sUrl), NULL);
    WebParseResponseRedirect(sParam1, sizeof(sParam1), "Param1");
    WebParseResponseRedirect(sSession, sizeof(sSession),
                             "SessionID");
    WebUrl("http://standardhost/SessionIdTest.asp");
    writeln(sUrl); writeln(sParam1);
    writeln(sSession);
  end TMain;

Sample scripts

WebAuth01.bdf, WebHttpHeaders01.bdf, WebParseResponseHeader01.bdf, WebSecure02.bdf

親トピック: Browser Settings


WebSetBrowser Function

Action

Sets the browser type to be used for simulation. Different browsers send different header information to the Web server. For example, setting the browser to WEB_BROWSER_MSIE11 lets the low-level web functions use the preset headers for Microsoft Internet Explorer 11 simulation. The setting WEB_BROWSER_CUSTOM lets the functions use the custom-defined header strings of the workbench settings.

注: This setting overrides previous browser settings in your script.

Include file

WebAPI.bdh

Syntax

WebSetBrowser( in nBrowser: number ): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TWebInit
  begin
    WebSetBrowser(WEB_BROWSER_CUSTOM);
    WebDumpSettings();
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetUserAgent Function
WebSetAcceptTypes Function
WebSetHttpHeader Function


WebSetCookies Function

Action

Sets the maximum number of cookies to be stored per domain. If the maximum is reached, older cookies are discarded. Setting nCookies to 0 disables cookie usage. The cookie database is created per user and kept in memory at run time only.

Include file

WebAPI.bdh

Syntax

WebSetCookies( in nCookies: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nCookies | Maximum number of cookies
注: A call to WebSetCookies will reset the cookie database and delete all existing cookies.

Example

dcltrans  transaction TWebInit  begin    WebSetCookies(10);    WebDumpSettings();  end TWebInit;

Sample scripts

WebMulti01.bdf

親トピック: Browser Settings
関連概念
Cookie Database Functions Overview
関連資料
WebGetCookies Function


WebGetCookies Function

Action

Gets the current value of the maximum number of cookies.

Include file

WebAPI.bdh

Syntax

WebGetCookies( ): number;

Return value

Current value of the maximum number of cookies

Example

dcltrans
  transaction TWebInit
  begin
    write("MaxCookiesPerDomain: "); write(WebGetCookies());
    writeln;
  end TWebInit;
親トピック: Browser Settings
関連概念
Cookie Database Functions Overview
関連資料
WebSetCookies Function


WebSetDocumentCache Function

Action

Specifies whether Silk Performer emulates a document cache. A document cache is used to keep local copies of frequently accessed documents and thus reduce the hits at the server. You can specify to always, once per session, or never check whether a page has changed on the Web server since the virtual user last viewed it.

注: This function overrides the corresponding setting in the Simulation tab of the Profile Settings - Web dialog.

Include file

WebAPI.bdh

Syntax

WebSetDocumentCache( in bEnable : boolean,
                     in nMode   : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
bEnable | Specifies whether to emulate a document cache.
nMode

Specifies when to check whether a page has changed on the Web server since the virtual user last viewed it (optional). This parameter must be one of the following values:

WEB_CACHE_CHECK_SESSION
Checks once per session whether a page has changed since the virtual user last viewed it. The term of a session is the sequence of starting a Web browser, surfing the Web, and closing the Web browser. The correlation of a session to Silk Performer transactions can be adjusted with the WebSetUserBehavior function.
WEB_CACHE_CHECK_ALWAYS
Always checks whether a page has changed since the virtual user last viewed it.
WEB_CACHE_CHECK_NEVER
Never checks whether a page has changed since the virtual user last viewed it.

If this parameter is omitted, Silk Performer simulation the behavior specified in the Browser tab of the Internet Settings dialog.

Example 1 (WEB_CACHE_CHECK_SESSION)

transaction TInit
begin
  WebSetUserBehavior(WEB_USERBEHAVIOR_REVISITING);
  WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  WebCookieSet("Coffee=Bean; expires=Mon, 01-Jan-2001 05:00:00 GMT; path=/",
  "http://localhost"); // The cookie's scope is TInit!!!
end TInit;
transaction TWeb
begin
  WebPageUrl("http://localhost/ResponseCookie/Cookie.asp");
  WebPageLink("Corporate", "Corporate Link");
  WebPageUrl("http://localhost/ResponseCookie/Cookie.asp");
end TWeb;
transaction TMain
begin
  WebPageUrl("http://localhost/cache/cache_form.html", "Cache Test");
  WebPageSubmit("Submit with GET", SUBMIT_WITH_GET001, "Cache Handler");
  WebPageUrl("http://localhost/cache/cache_form.html", "Cache Test");
end TMain;
dclform
  SUBMIT_WITH_GET001:
    "Get-Button" := "Submit with GET";

We will have to execute each transaction at least twice to see how caching works. We used an additional function, WebsetUserBehavior, where we specified the script was to run a returning user (user behavior WEB_USERBEHAVIOR_REVISITING), for example, an online shopper that returns to his/her favorite shopping application.

Example 2 (WEB_CACHE_CHECK_ALWAYS)

transaction TInit
begin
  WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
  WebSetDocumentCache(true, WEB_CACHE_CHECK_ALWAYS);
  WebCookieSet("Coffee=Bean; expires=Mon, 01-Jan-2001 05:00:00 GMT; path=/",
  "http://localhost"); // The cookie's scope is TInit!!!
end TInit;
transaction TMain
begin  WebPageUrl("http://localhost/ResponseCookie/Cookie.asp");
  WebPageLink("Corporate", "Corporate Link");
  WebPageUrl("http://localhost/ResponseCookie/Cookie.asp");
end TMain;
dclform
  SUBMIT_WITH_GET001:
    "Get-Button" := "Submit with GET";

In this example, we specify the user behavior WEB_USERBEHAVIOR_FIRST_TIME. This means that each execution cycle of a transaction will be interpreted as a new user that has never visited the Web site - which is what the document cache and cookies are checking for. To achieve this, each virtual user will reset their connections, clean up their cookie database (persistent or non-persistent) and eventually clear the document cache each time a transaction has completed. When setting first time user behavior, be sure that you do not have a persistent cookie set in the TInit transaction. This cookie will not be accessible to all other transactions. It will be invalidated as soon as the transaction is done.

Example 3 (WEB_CACHE_CHECK_NEVER)

transaction TInit
begin
  WebSetUserBehavior(WEB_USERBEHAVIOR_DISABLE);
  WebSetDocumentCache(true, WEB_CACHE_CHECK_NEVER);
  WebCookieSet("Coffee=Bean; expires=Mon, 01-Jan-2001 05:00:00 GMT; path=/",
  "http://localhost"); // The cookie's scope is TInit!!!
end TInit;

The user behavior WEB_USERBEHAVIOR_DISABLE simply means that the document cache and the cookie database will be the same throughout all cycles of a transaction. The cookie database will not be reset and the document cache will not be cleared.

親トピック: Browser Settings
関連資料
WebBrowserReset Function
WebSetUserBehavior Function


WebSetHttpHeader Function

Action

Sets one or more user-defined headers for HTTP/HTTPS.

Include file

WebAPI.bdh

Syntax

WebSetHttpHeader( in sHeader : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sHeader | User defined header
注: One header must not be terminated by a CRLF sequence. Multiple headers must be separated by a CRLF sequence.

Example

dcltrans
  transaction TWebInit
  begin
    WebSetHttpHeader("CustomHeader: CustomValue");
    WebDumpSettings();
  end TWebInit;

Sample scripts

WebHttpHeaders01.bdf

親トピック: Browser Settings
関連資料
WebGetHttpHeader Function


WebGetHttpHeader Function

Action

Gets all user-defined headers for HTTP/HTTPS that are currently set. Note that this function retrieves values that are set with the WebSetHttpHeader function, but it does not retrieve values that are set with the WebHeaderAdd function.

Include file

WebAPI.bdh

Syntax

WebGetHttpHeader( out sHeader : string,
                  in  nMaxLen : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sHeader | A string buffer that will receive the current list of HTTP headers.
nMaxLen | The maximum length of the receive buffer sHeader (optional).

Example

dcltrans
  transaction TWebInit
  var
    sHeader : string;
  begin
    WebGetHttpHeader(sHeader);
    write("HttpHeader: "); write(sHeader); writeln;
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetHttpHeader Function
WebHeaderAdd Function


WebModifyHttpHeader Function

Action

Sets, modifies or removes one or more user-defined headers for HTTP/HTTPS. Note that this function is only applicable to certain HTTP headers. It cannot be used to modify headers such as Accept, User-Agent and Accept-Encoding.

  • For Accept, use the function WebSetAcceptTypes.
  • For User-Agent, use the function WebSetUserAgent.
  • For Accept-Encoding, use the function WebSetOption(WEB_OPT_ENABLE_CONTENT_ENCODING, 0); It disables the default accept-encoding.

Include file

WebAPI.bdh

Syntax

WebModifyHttpHeader( in sHeader : string,
                     in sValue  : string allownull,
                     in nOption : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sHeader | User defined header.
sValue | Value of the specified header.
nOption

Can be one of the following values:

WEB_MODIFY_OPT_Add
Adds the specified header to the actual set of headers.
WEB_MODIFY_OPT_ReplaceFirst
Replaces the value of the first header with identical name. All following headers with the same name (if present) are not changed. To remove all those headers use the WEB_MODIFY_OPT_RemoveAdd option. If no header with the specified name can be found, a new header is added.
WEB_MODIFY_OPT_Remove
Removes all headers with the specified name. The value of sValue is ignored.
WEB_MODIFY_OPT_RemoveAdd (default)
Removes all headers with the specified name and adds the specified sHeader – sValue pair.

Example

dcltrans
  transaction TWeb
  begin
    WebModifyHttpHeader("Accept-Language", "en-us");
    WebPageUrl("http://server/");
    WebModifyHttpHeader("Accept-Language", "de", WEB_MODIFY_OPT_Add);
    WebPageUrl("http://server/");
  end TWeb;
親トピック: Browser Settings
関連資料
WebSetHttpHeader Function


WebSetHttpVersion Function (Deprecated)

Action

This function has been deprecated. Use WebSetOption instead.

Sets the HTTP/HTTPS version string to be used by low-level Web API functions.

注: A subsequent WebSetBrowser call will override this setting.

Include file

WebAPI.bdh

Syntax

WebSetHttpVersion(in sVersion : string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sVersion | HTTP version string.

Example

dcltrans
transaction TWebInit
begin
  WebSetHttpVersion("HTTP/1.0");
  WebDumpSettings();
end TWebInit;
親トピック: Browser Settings
関連資料
WebGetHttpVersion Function (Deprecated)


WebGetHttpVersion Function (Deprecated)

Action

This function has been deprecated. Use WebGetOption instead.

Gets the currently used HTTP/HTTPS version string to be used.

Include file

WebAPI.bdh

Syntax

WebGetHttpVersion( out sVersion : string,
                   in  nMaxLen  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TWebInit
  var
    sVersion: string;
  begin
    WebGetHttpVersion(sVersion);
    write("HttpVersion: "); write(sVersion); writeln;
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetHttpVersion Function (Deprecated)


WebSetKeepAlive Function

Action

Sets the Keep-Connection semantics for HTTP/HTTPS.

注: A subsequent WebSetBrowser call will override this setting.

Include file

WebAPI.bdh

Syntax

WebSetKeepAlive( in bAlive : boolean ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
bAlive | If this parameter is set to true, a Keep-Alive header is added to the request
注: Silk Performer automatically tries to reuse an open connection on subsequent requests.

Example

dcltrans
  transaction TWebInit
  begin
    WebSetKeepAlive(true);
  end TWebInit;

Sample scripts

WebMultiClientIpAddresses01.bdf

親トピック: Browser Settings
関連資料
WebGetKeepAlive Function


WebGetKeepAlive Function

Action

Checks whether the KeepConnection flag is set.

Include file

WebAPI.bdh

Syntax

WebGetKeepAlive(): boolean;

Return value

  • true if flag is set

  • false otherwise

Example

dcltrans
transaction TWebInit
begin
  write("HttpKeepConnection: ");
  if WebGetKeepAlive() then
    write("true"); writeln;
  else
    write("false"); writeln;
  end;
end TWebInit;
親トピック: Browser Settings
関連資料
WebSetKeepAlive Function


WebSetMaxThreads Function

Action

Sets the upper limit of possible concurrent threads. Setting this limit to 1 lets the functions execute synchronously.

Include file

WebAPI.bdh

Syntax

WebSetMaxThreads(in nMaxThreads: number): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nMaxThreads | Maximum number of possible concurrent threads; this number is limited to 32.

Example

dcltrans
transaction TWebInit
begin
  WebSetMaxThreads(4);
  WebDumpSettings();
end TWebInit;

Sample scripts

WebMulti01.bdf

親トピック: Browser Settings
関連資料
WebGetMaxThreads Function


WebGetMaxThreads Function

Action

Returns the current value of maximum concurrent threads as a number.

Include file

WebAPI.bdh

Syntax

WebGetMaxThreads(): number;

Return value

Number of maximum concurrent threads

Example

dcltrans
transaction TWebInit
begin
  write("MaxThreads: "); write(WebGetMaxThreads()); writeln;
end TWebInit;
親トピック: Browser Settings
関連資料
WebSetMaxThreads Function


WebSetProxy Function

Action

Sets the proxy host name and port for a specific protocol.

By using the domain parameter, a “proxy stack” can be specified with multiple WebSetProxy calls. The last call has the highest priority. Using this functionality a PAC file like behaviour can be implemented.

Include file

WebAPI.bdh

Syntax

WebSetProxy(
  in nProxy  : number,
  in sHost   : string,
  in nPort   : number,
  in sDomain: string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nProxy

Proxy type. Can be one of the following types:

  • WEB_PROXY_FTP

  • WEB_PROXY_HTTP

  • WEB_PROXY_HTTPS

  • WEB_PROXY_SOCKS
sHost | Host name of the proxy server
nPort | Port the proxy server listens to
sDomain | If specified the proxy is only used by sending requests to the specified domain. The domain parameter may contain a wildcard (*) character either at the beginning or at the end. Multiple calls to WebSetProxy can be made, where the latest one has the top priority (proxy stack). Specifying an empty string ("") for the sHost parameter means no proxy for the specified domain or domain pattern.

Example

dcltrans
  transaction TWebInit
  begin    // Set up proxy connection using the WebSetting commands
    WebSetProxy(WEB_PROXY_HTTP, "proxy.mydomain.com", 80);
    WebSetProxyBypass(FALSE, NULL);     // Set password used for authentication
    WebSetProxyAuth("proxyuser", "proxypass");
  end TWebInit;
  transaction TWebInit1
  begin
    WebSetProxy(WEB_PROXY_HTTP, "proxy", 8080, "www*");
    //use this proxy for all hosts starting with "www"              (priority 4)
    WebSetProxy(WEB_PROXY_HTTP, "", 0, "www.microsoft.com");
    //but go directly to www.microsoft.com                          (priority 3)
    WebSetProxy(WEB_PROXY_HTTP, "proxy", 8081, "*yahoo.com");
    //use proxy on a different port for all "yahoo.com" domains     (priority 2)
    WebSetProxy(WEB_PROXY_HTTP, "proxy", 8082, "www.yahoo.com");
    //use proxy on a different port for all "www.yahoo.com" domains (priority 1)
  end TWebInit1;
親トピック: Browser Settings
関連資料
WebGetProxy Function


WebGetProxy Function

Action

Gets the current proxy host name and port number either for all protocols or for a specific protocol. If this function is called to retrieve all proxies set up, it returns a list like

http=http://www-proxy.austria.eu.net:8080
ftp=ftp://ftp-proxy.austria.eu.net:2121
注: Only default proxies are returned. Proxies that have been set with a domain specification are not returned.

Include file

WebAPI.bdh

Syntax

WebGetProxy( out sProxy     :string,
             in  nMaxLen    : number optional,
             in  nProxyType : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sProxy | A string buffer that will receive the list of default proxies.
nMaxLen | The maximum length of the receive buffer sProxy (optional).
nProxyType

Type of proxy settings to retrieve (optional). Can be one of the following protocols:

  • WEB_PROXY_FTP

  • WEB_PROXY_HTTP

  • WEB_PROXY_HTTPS

  • WEB_PROXY_SOCKS

If this parameter is omitted, this function returns a list containing all proxies currently set up.

Example

dcltrans
  transaction TInit
  var
    sProxy: string;
  begin
    WebGetProxy(sProxy);
    write("Proxies: "); write(sProxy); writeln;
  end TInit;
親トピック: Browser Settings
関連資料
WebSetProxy Function


WebSetProxyAutoConfigFile Function

Action

Specifies the location of a PAC (Proxy Auto-Configuration) file.

Include file

WebAPI.bdh

Syntax

WebSetProxyAutoConfigFile( in sProxyAutoConfig : string,
                           in bCachedLookups   : boolean optional );
Parameter | Description
sProxyAutoConfig | Specifies the location of the PAC file. This may be a Web URL like http://localhost:81/proxy.pac or it may be a file location like K:\temp\proxy.pac. Specify null to reset this setting.
bCachedLookups | "True" uses the cached proxy for reoccurring sites. "False" (default) always executes the proxy auto-config lookup.
親トピック: Browser Settings


WebSetProxyAuth Function

Action

Sets the password for proxy authentication login. Use empty strings or NULL values to disable proxy authentication.

注: This function overrides the corresponding setting in the Simulation tab of the Profile Settings - Web dialog.

Include file

WebAPI.bdh

Syntax

WebSetProxyAuth( in sUsername     : string allownull,
                 in sPassword     : string optional,
                 in sProxy        : string optional,
                 in bReactiveOnly : boolean optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUsername | User name for proxy authentication. This parameter may be NULL.
sPassword | Password for proxy authentication. This parameter may be NULL (optional).
sProxy | Proxy for which the username and password should be set (optional). If this parameter is omitted the username and password will be used for authentication after the next 407 response from the server.
bReactiveOnly | If this parameter is set to true (default is false; optional), the user and password pair can only be used in a reaction to a 407 response from the server.

Calling this function inserts the username/password pair into the authentication database used when a server requests proxy authentication (code 407). On subsequent requests, the authentication header line will be added to the request headers automatically.

  • To set the default username password, call WebSetUserAuth("user1", "pass1");

  • To delete the default username/password, call WebSetUserAuth("", ""); This does not remove the entry from the authentication database.

  • To remove all cached authentication entries from the cookie database, call WebSetUserAuth(NULL, NULL);

  • In addition, you can add authentication entries directly to the authentication database by providing a protection space and the realm. For example, WebSetUserAuth("BasicAuthUser", "BasicAuthPass", "proxy", false);

Example

dcltrans
  transaction TWebInit
  begin
    // Set up proxy connection using the WebSetting commands
    WebSetProxy(WEB_PROXY_HTTP, "proxy.mydomain.com", 80);
    WebSetProxyBypass(FALSE, NULL);     // Set password used for authentication
    WebSetProxyAuth("proxyuser", "proxypass", "proxy:80");
    WebSetProxyAuth("proxyusersecure", "proxypasssecure", "proxy:443");
  end TWebInit;

Sample scripts

WebAuth01.bdf

親トピック: Browser Settings
関連資料
WebSetProxy Function
WebSetProxyAuthBasic Function
WebSetProxyAuthNtlm Function
WebSetUserAuth Function
WebSetUserAuthBasic Function
WebSetUserAuthNtlm Function
WebSetUserAuthDigest Function


WebSetProxyAuthBasic Function

Action

Sets the password for basic proxy authentication login. Use empty strings or NULL values to disable proxy authentication.

注: This function overrides the corresponding setting in the Simulation tab of the Profile Settings - Web dialog. In contrary to the WebSetProxyAuth function it does not change the credentials for a NTLM/Kerberos user authentication.

Include file

WebAPI.bdh

Syntax

WebSetProxyAuthBasic( in sUsername     : string allownull,
                      in sPassword     : string optional,
                      in sProxy        : string optional,
                      in bReactiveOnly : boolean optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUsername | User name for proxy authentication. This parameter may be NULL.
sPassword | Password for proxy authentication (optional).
sProxy | Proxy for which the username and password should be set (optional). If this parameter is omitted the username and password will be used for authentication after the next 407 response from the server.
bReactiveOnly | If this parameter is set to true (optional; default is false), the user and password pair can only be used in a reaction to a 407 response from the server.

Calling this function inserts the username/password pair into the authentication database used when a server requests proxy authentication (code 407). On subsequent requests, the authentication header line will be added to the request headers automatically.

  • To set the default username password, call WebSetProxyAuthBasic("user1", "pass1");

  • To delete the default username/password, call WebSetProxyAuthBasic("", ""); This does not remove the entry from the authentication database.

  • To remove all cached authentication entries from the cookie database, call WebSetUse WebSetProxyAuthBasic rAuth(NULL);

  • In addition, you can add authentication entries directly to the authentication database by providing a protection space and the realm. For example, WebSetProxyAuthBasic ("BasicAuthUser", "BasicAuthPass", "proxy", false);

Example

dcltrans
  transaction TWebInit
  begin
    // Set up proxy connection using the WebSetting commands
    WebSetProxy(WEB_PROXY_HTTP, "proxy.mydomain.com", 80);
    WebSetProxyBypass(FALSE, NULL);

    // Set password used for authentication
    WebSetProxyAuthBasic("proxyuser", "proxypass", "proxy:80");
    WebSetProxyAuthBasic("proxyusersecure", "proxypasssecure",
  "proxy:443");
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetProxyAuth Function
WebSetProxyAuthNtlm Function
WebSetUserAuth Function
WebSetUserAuthBasic Function
WebSetUserAuthNtlm Function
WebSetUserAuthDigest Function


WebSetProxyAuthNtlm Function

Action

Sets the password for NTLM/Kerberos proxy authentication. In contrary to the WebSetProxyAuth function it does not change the credentials for basic proxy authentication.

Include file

WebAPI.bdh

Syntax

WebSetProxyAuthNtlm( in sUsername : string,
                     in sPassword : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUsername | User name for proxy authentication. If you have to specify a domain use the notation: "domain\\user".
sPassword | Password for proxy authentication.

To reset the username and password to the default (logged on user), call WebSetProxyAuthNTLM("","");

Example

dcltrans
  transaction TWebInit
  begin
    // Set up proxy connection using the WebSetting commands
    WebSetProxy(WEB_PROXY_HTTP, "lab1", 80);
    WebSetProxyBypass(FALSE, NULL);

    // Set password used for authentication
    WebSetProxyAuthNtlm("testlab\\admin", "pass");
    WebSetProxyAuthNtlm("", "");
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetProxyAuth Function
WebSetProxyAuthBasic Function
WebSetUserAuth Function
WebSetUserAuthBasic Function
WebSetUserAuthNtlm Function
WebSetUserAuthDigest Function


WebSetProxyBypass Function

Action

Sets the names of hosts not be accessed through a proxy.

Include file

WebAPI.bdh

Syntax

WebSetProxyBypass( in bBypassLocal : boolean,
                   in sBypass      : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
bBypassLocal | If this parameter is set to true, the low-level web functions bypass proxies to hosts that do not contain a period in their names
sBypass | Optional list of host names or IP addresses, or both, that should not be routed through the proxy (optional). The host names are separated by blanks. The list can contain wildcards. This parameter may be NULL if not needed.

Example

dcltrans
  transaction TWebInit
  begin
    // Set up proxy connection using the WebSetting commands
    WebSetProxy(WEB_PROXY_HTTP, "proxy.mydomain.com", 80);
    WebSetProxyBypass(FALSE);

    // Set password used for authentication
    WebSetProxyAuth("proxyuser", "proxypass");
  end TWebInit;
親トピック: Browser Settings
関連資料
WebGetProxyBypass Function


WebGetProxyBypass Function

Action

Gets the names of hosts not to be accessed through a proxy.

Include file

WebAPI.bdh

Syntax

WebGetProxyBypass( out sProxyBypass    : string,
                   in  nMaxProxyBypass : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sProxyBypass | String variable that receives the list of proxy bypasses set.
nMaxProxyBypass | Maximum number of characters to put into the string variable sProxyBypass (optional). This number must be smaller than or equal to the string buffer size of sProxyBypass.

Example

dcltrans
  transaction TWebInit
  var
    sProxyBypassList: string;
  begin
    WebGetProxyBypass(sProxyBypassList);
    write("ProxyBypassList: "); write(sProxyBypassList);writeln;
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetProxyBypass Function


WebSetUserAgent Function

Action

Sets the HTTP/HTTPS user agent and overrides those of the workbench.

Include file

WebAPI.bdh

Syntax

WebSetUserAgent(in sUserAgent: string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUserAgent | Contains the string to be used with the User-Agent header

Example

dcltrans
  transaction TWebInit
  begin
    WebSetUserAgent("CustomClient 1.0");
    WebDumpSettings();
  end TWebInit;
親トピック: Browser Settings
関連資料
WebGetUserAgent Function


WebGetUserAgent Function

Action

Gets the current value of the HTTP/HTTPS user agent.

Include file

WebAPI.bdh

Syntax

WebGetUserAgent( out sUserAgent : string,
                 in  nMaxLen    : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUserAgent | A string buffer that will receive the current name of user agent.
nMaxLen | The maximum length of the receive buffer sUserAgent (optional).

Example

dcltrans
  transaction TWebInit
  var
    sUserAgent: string;
  begin
    WebGetUserAgent(sUserAgent);
    write("HttpUserAgent: "); write(sUserAgent); writeln;
  end TWebInit;
親トピック: Browser Settings
関連資料
WebSetUserAgent Function


Low-Level Web Functions

  • Low-Level Web Functions Overview
    Silk Performer’s low-level web functions provide an easy, high-level method for communicating with a Web server.
  • Low-Level Web Function Replay Timing
    When low-level web traffic is recorded using the recorder, a wait time is included at the end of recorded functions to tell the replay engine how long to wait before executing the next function in the script.
  • WebUrl Function
    Requests and reads a complete document specified by a URL using FTP or HTTP.
  • WebUrlDelete Function
    Sends a DELETE request to the HTTP/1.1 server.
  • WebUrlHead Function
    Sends a HEAD request to the server.
  • WebUrlOptions Function
    Sends an OPTIONS request to the HTTP/1.1 server.
  • WebUrlPostBin Function
    Posts binary data to the Web server by means of the HTTP POST method.
  • WebUrlPutBin Function
    Sends binary data to the Web server by means of the HTTP PUT method.
  • WebUrlPostFile Function
    Posts binary data, stored in a file, to the Web server by means of the HTTP POST method.
  • WebUrlTrace Function
    Sends a TRACE request to the HTTP/1.1 server.
  • WebFileUpload Function
    Posts the content of a Web form, including specified files, to the Web server by means of the HTTP POST method.
  • WebFileUploadEx Function
    Uploads a file to the web server.
  • WebHeaderAdd Function
    Adds a custom HTTP header to the next WebUrl* or WebForm* function
  • WebAddImageCoordinates Function
    When a URL is submitted due to a server side image map request (ISMAP), this function adds the necessary pair of coordinates to the URL.
  • WebUrlBeginPage Function
    Marks the beginning of a page that is loaded by low-level web functions.
  • WebUrlEndPage Function
    Marks the end of a page that is loaded by low-level web functions.
  • WebFormBuild Function
    This function composes URL-encoded form strings similar to those specified in the dclform section.
  • WebFormClear Function
    Removes all entries from a Web form declared in the dclform section.
  • WebFormReset Function
    Resets a Web form as declared in the dclform section.
  • WebFormExpand Function
    This function converts forms specified in the dclform section to URL-encoded form strings.
  • WebFormGet Function
    Evaluates new values for the random variables (if specified in dclrand below) and sends the form content to the Web server.
  • WebFormHead Function
    Evaluates new values for the random variables and sends the form content to the Web server.
  • WebFormPost Function
    Posts the content of a Web form to the Web server by means of the HTTP POST method.
  • WebFormPostBin Function
    Posts binary data to the Web server by means of the HTTP POST method.
  • WebFormPostFile Function
    Posts binary data to the Web server by means of the HTTP POST method.
  • WebFormPostEx Function
    Posts the contents of two forms to the Web server by means of the HTTP POST method.
  • WebFormValuePairInsert Function
    Inserts a new pair of values into a Web form declared in the dclform section.
  • WebFormValuePairRemove Function
    Removes a number of pairs of values from a Web form declared in the dclform section.
  • WebFormValueSet Function
    Sets the left-side and/or the right-side value of a Web form entry.
  • WebFormValueGet Function
    Retrieves the left-side and/or the right-side value of a Web form entry.
  • WebCustomRequest Function
  • WebCustomRequestBin Function
  • WebCustomRequestFile Function
    Requests and reads a complete document specified by a URL using the specified HTTP method.
  • WebSetEncoding Function
    Compresses the data of the next WebUrl* or WebPage* function with the gzip or zlib (deflate) algorithm.
  • WebAddMultiPart Function
    When WebAddMultiPart or WebAddMultiPartFromeFile is called, the passed data is stored in lists. When WebPostMultiPart is called, these lists are then merged with a unique boundary and transferred to the server using WebUrlPostBin.
  • WebAddMultiPartFromFile Function
    When WebAddMultiPart or WebAddMultiPartFromeFile is called, the passed data is stored in lists. When WebPostMultiPart is called, these lists are then merged with a unique boundary and transferred to the server using WebUrlPostBin.
  • WebPostMultiPart Function
    When WebAddMultiPart or WebAddMultiPartFromeFile is called, the passed data is stored in lists. When WebPostMultiPart is called, these lists are then merged with a unique boundary and transferred to the server using WebUrlPostBin.
親トピック: Web Functions Reference
関連資料
Web Form Declarations


Low-Level Web Functions Overview

Silk Performer’s low-level web functions provide an easy, high-level method for communicating with a Web server. Each low-level web call results in sending a request and waiting for a response.

Low-level web functions can be used synchronously or asynchronously. Set the thread limitation value (see WebSetMaxThreads function) to 1 for synchronous operation.

Formatting URLs

Silk Performer’s low-level web functions rely heavily on the use of URLs. The format of all URLs must follow accepted syntax and semantics in order to access resources via the Web. Canonicalization is the process of formatting a URL to follow this accepted syntax and semantics. Characters that must be encoded include any characters that have no corresponding graphic character in the US ASCII coded character set (i.e., hexadecimal 80-FF, which are not used in the US-ASCII coded character set, and hexadecimal 00-1F and 7F, which are control characters), blank spaces, "%" (which is used to encode other characters) and unsafe characters (<, >, ", #, {, }, |, \, ^, ~, [, ], and ').

Printable ASCII characters being URL encoded % ? # [ ] { } | \ & = @ : ^ ~ ' ` " $ + ! * ' ( ) , < >

Form submissions

Forms declared in the dclform section are combined and URL encoded prior to submission.

Example

dclform
  SAMPLE1:
    "leftval1" := "rightval1",
    "leftval2" := "",
    ""         := "rightval3",
    "encoded"  := "unsafe @ characters";

will be sent as part of URLs

WebUrl("http://www.host.com/cgi/sample?leftval1=rightval1&"
"leftval2=&rightval3&encoded=unsafe+%40+characters");

or as POST body:

"leftval1=rightval1&leftval2=&rightval3&encoded=unsafe+%40+characters"
親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)
Low-Level Web Function Replay Timing
Parsing Functions
Cookie Database Functions Overview
関連資料
SSL (Secure Socket Layer) Extensions
WebSetMaxThreads Function
WebHeaderAdd Function
WebThreadWait Function


Low-Level Web Function Replay Timing

When low-level web traffic is recorded using the recorder, a wait time is included at the end of recorded functions to tell the replay engine how long to wait before executing the next function in the script. The use of wait times simulates slow connections and user wait times in order to help provide more realistic tests.

The wait time appended to a recorded function is the time elapsed between the execution of the current function and the execution of the next function. The implication of this behaviour is that low-level web functions with the wait parameter set to zero are executed in parallel up to the configured maximum number of concurrent threads (WebSetMaxThreads). A low-level web function with the wait parameter set to >0 makes the virtual user pause for the specified wait time. When the specified time has elapsed, the virtual user continues executing the script.

注: The wait time is always zero in Stress Test mode, regardless of the values specified in the low-level web functions.
親トピック: Low-Level Web Functions
関連資料
WebFormPost Function


WebUrl Function

Action

Requests and reads a complete document specified by a URL using FTP or HTTP. Use localhost if you want to connect to the local server.

Include file

WebAPI.bdh

Syntax

WebUrl( in sUrl  : string,
        in fWait : float optional ): boolean;

Return value

  • true if the worker thread communicating with the server could be started successfully

  • false otherwise. The return value will not inform about any Web traffic-related problems due to independent threaded operation.

Parameter | Description
sUrl | Complete URL to the file on the server
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
  transaction TMain
  var
   fMyWait : float init 5.0;
  begin
    WebUrl("http://www.myserver.com/index.html", 0.0);
    WebUrl("http://user:pass@www.myserver.com/index.html", 50.0);
    WebUrl("http://www.myserver.com:80/", 0.5);
    WebUrl("ftp://user:pass@ftp.myserver.com:21", fMyWait);
  end TMain;

Sample scripts

WebAuth01.bdf, WebCookie01.bdf, WebEncoding01.bdf, WebForms01.bdf, WebForms03.bdf, WebHello.bdf, WebHttp11.bdf, WebHttpHeaders01.bdf, WebIncreasingWorkload.bdf, WebMeasure01.bdf, WebMulti01.bdf, WebMultiClientIpAddresses01.bdf, WebParseResponseHeader01.bdf, WebRegularExpressions01.bdf, WebSecure02.bdf, WebStatusCodes01.bdf, WebStone01.bdf, WebTimer01.bdf, WebUrl01.bdf

SilkEssential sample

Ftp.sep

親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)


WebUrlDelete Function

Action

Sends a DELETE request to the HTTP/1.1 server. The DELETE method requests that the origin server delete the resource identified by the Request-URI. A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 202 (Accepted) if the action has not yet been enacted, or 204 (No Content) if the response is OK but does not include an entity.

Include file

WebAPI.bdh

Syntax

WebUrlDelete( in sUrl  : string,
              in fWait : float optional): boolean;

Return value

  • true if the worker thread communicating with the server could be started successfully

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
transaction TWebHttp11
  begin
    // To have a resource we can delete, we first have to
    // upload a test file to the server.
    // Note that you will need write permissions
    WebUrlPutBin("http://standardhost/test.html","1234567890", 10, "text/txt", 0.0);
    // And now let’s delete it again:
    WebUrlDelete("http://standardhost/test.html", 0.0);
  end TWebHttp11;

Sample scripts

WebHttp11.bdf

親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)


WebUrlHead Function

Action

Sends a HEAD request to the server. The server will send no data but a response message.

Include file

WebAPI.bdh

Syntax

WebUrlHead( in sUrl  : string,
            in fWait : float optional): boolean;

Return value

  • true if the worker thread communicating with the server could be started successfully

  • false otherwise. The return value will not inform about any Web traffic-related problems due to independent threaded operation.

Parameter | Description
sUrl | Complete URL to the file on the server
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
  transaction TMain
  begin
    WebUrlHead("http://www.myserver.com/index.html", 0.0);
  end TMain;
親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)


WebUrlOptions Function

Action

Sends an OPTIONS request to the HTTP/1.1 server. The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. This method allows the client to determine the options and/or requirements associated with a resource or the capabilities of a server without implying a resource action or initiating a resource retrieval. If the Request-URI is an asterisk ("*"), the OPTIONS request is intended to apply to the server as a whole. An "OPTIONS *" request can be applied through a proxy by specifying the destination server in the Request-URI without any path information.

Include file

WebAPI.bdh

Syntax

WebUrlOptions( in sUrl  : string,
               in fWait : float optional): boolean;

Return value

  • true if the worker thread communicating with the server could be started successfully

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
  transaction TWebGetOptions
  begin
    WebUrlOptions("http://standardhost/*", 0.0);
  end TWebGetOptions;

Sample scripts

WebHttp11.bdf

親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)


WebUrlPostBin Function

Action

Posts binary data to the Web server by means of the HTTP POST method. Instead of ASCII-encoded content, binary data may be sent using this post function. The Content-Length header will automatically be added to the request. The appropriate Content-Type has to be specified. In order to send binary data (octets) more safely over the Internet, use the WebBase64Encode to convert the data to 6-bit ASCII characters.

Include file

WebAPI.bdh

Syntax

WebUrlPostBin( in sUrl         : string,
               in sData        : string,
               in nDataLen     : number,
               in sContentType : string,
               in fWait        : float optional ): boolean;

Return value

  • true if the worker thread posting the form content to the server could be started successfully

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
sData | Data to post to the server. This may be binary data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLen | Length in bytes of data contained in the buffer sData. Specify STRING_COMPLETE or omit this parameter to post all available data
sContentType | Content type string used in the request, for example, "image/gif"
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
  transaction TWebFormPostBin
  var
    sBase64Encoded : string;
    nLen           : number;
    sData          : string;
  begin
    WebBase64Encode(sBase64Encoded, sizeof(sBase64Encoded), nLen,
      "name=Harry Smith&address=Elkenney Str. 26"
      "&phone=+43223344", 57);
    WebUrlPostBin("http://standardhost/data2html.asp", sBase64Encoded,
      STRING_COMPLETE, "text/html");
    WebUrlPostBin("http://standardhost/data2html.asp",
      bin(sData), STRING_COMPLETE, "application/octet-stream");
  end TWebFormPostBin;

Sample scripts

WebFileUpload01.bdf, WebForms02.bdf, WebPost01.bdf

親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)
関連資料
WebBase64Encode Function
WebUrlPostFile Function


WebUrlPutBin Function

Action

Sends binary data to the Web server by means of the HTTP PUT method. Instead of ASCII-encoded content, binary data may be sent using this function. The Content-Length header will automatically be added to the request. The appropriate Content-Type has to be specified. In order to send binary data (octets) more safely over the Internet, use the WebBase64Encode to convert the data to 6-bit ASCII characters.

Include file

WebAPI.bdh

Syntax

WebUrlPutBin( in sUrl     : string,
              in sData    : string,
              in nDataLen : number,
              in sContent : string,
              in fWait    : float optional): boolean;

Return value

  • true if the worker thread posting the form content to the server could be started successfully

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
sData | Data to post to the server. This may be also binary data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLen | Length in bytes of data contained in the buffer sData. Specify STRING_COMPLETE or omit this parameter to post all available data.
sContent | Content type string used in the request, for example "image/gif"
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
  transaction TWebHttp11
   var
    sData : string;
  begin
    WebUrlTrace("http://standardhost/index.html", 0.0);
    // To have a resource we can delete, we first have to
    // upload a test file to the server.
    // Note that you will need write permissions
    WebUrlPutBin("http://standardhost/test.html",
      "1234567890", STRING_COMPLETE, "text/txt", 0.0);
    sData := "\h00010203040506070809101112131415";
    WebUrlPutBin("http://standardhost/test.html",
                 bin(sData), STRING_COMPLETE, "application/octet-stream", 0.0);
    // And now let’s delete it again.
    WebUrlDelete("http://standardhost/test.html", 0.0);
    WebUrlOptions("http://standardhost/*", 0.0);
  end TWebHttp11;

Sample scripts

WebHttp11.bdf

親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)
関連資料
WebBase64Encode Function


WebUrlPostFile Function

Action

Posts binary data, stored in a file, to the Web server by means of the HTTP POST method. Instead of ASCII-encoded content, binary data may be sent using this post function. The Content-Length header will automatically be added to the request. The appropriate Content-Type has to be specified.

Include file

WebAPI.bdh

Syntax

WebUrlPostFile( in sUrl         : string,
                in sFile        : string,
                in sContentType : string,
                in fWait        : float optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server.
sFile | File containing the data, which should be posted to the server.
sContentType | Content type string used in the request, for example, "image/gif".
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0.

Example

dcltrans
  transaction TWeb
  var
    sFile : string;
  begin
    sFile := "c:\\temp\\dummyfile.txt";
    WebUrlPostFile("http://standardhost/data2html.asp", sFile, "text/plain");
  end TWeb;
親トピック: Low-Level Web Functions


WebUrlTrace Function

Action

Sends a TRACE request to the HTTP/1.1 server. The TRACE method is used to invoke a remote, application-layer loopback of the request message. The final recipient of the request SHOULD reflect the message received back to the client as the entity-body of a 200 (OK) response. Use of the Max-Forwards header field allows the client to limit the length of the request chain; this is useful for testing a chain of proxies forwarding messages in an infinite loop. If successful, the response SHOULD contain the entire request message in the entity body, with a Content-Type of "message/http".

Include file

WebAPI.bdh

Syntax

WebUrlTrace(
  in sUrl : string,
  in fWait : float optional): boolean;

Return value

  • true if the worker thread communicating with the server could be started successfully

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
  transaction TWebHttp11
  begin
    WebUrlTrace("http://standardhost/index.html", 0.0);
  end TWebHttp11;
親トピック: Low-Level Web Functions
関連概念
Handling Uniform Resource Locators (URLs)


WebFileUpload Function

Action

Posts the content of a Web form, including specified files, to the Web server by means of the HTTP POST method. This function implements a RFC1867-compliant file upload function for form-based file upload in HTML.

This is a mapping to WebUrlPostBin, and uses a form specified in the dclform section to construct the data to post to the server.

The form consists of name-value pairs as usual, only the files to upload need a minor modification: a file to upload needs to be specified by a name-value pair in the following way:

"filename" := "<name of the input tag>;<file name>;<content type>";

Example: upload of file c:\test.txt

HTML code:

<form enctype="multipart/form-data" action="data2html.asp" method=post>
  <input type="text" name="anyname" value="anyvalue">
  <input size="32" name="my_file" type="file">
  <input type="submit" value="Upload">
</form>

BDL form:

"anyname"  := "anyvalue",
"filename" := "my_file;C:\\test.txt;plain/text";

Include file

WebAPI.bdh

Syntax

WebFileUpload( in sUrl     : string,
               in formBody : form,
               in fWait    : float optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
formBody | Form identifier used in the dclform section (see example below). The expanded form is added to the body of the request. The Content-Length is added automatically. The Content-Type is multipart/form-data.
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

dcltrans
  transaction TWebFileUpload
  begin
    WebFileUpload("http://standardhost/data2html.asp", FILE_UPLOAD_FORM);
  end TWebFileUpload;

dclform
FILE_UPLOAD_FORM:
  "anyname"  := "anyvalue",
  "filename" := "my_file;C:\\temp\\test.doc;application/msword";
親トピック: Low-Level Web Functions
関連資料
WebUrlPostBin Function


WebFileUploadEx Function

Action

Uploads a file to the web server. This function implements a RFC1867-compliant file upload function for form-based file upload in HTML.

WebFileUploadEx automatically recognizes a multipart form and a file upload. When uploading a file during recording, the Silk Performer Recorder automatically scripts the respective function and the uploaded file is added to the data files.

A file that is to be uploaded must be specified by a name-value pair in the following way:
"filename" := "<name of the input tag>;<file name>;<content type>";

Include file

WebAPI.bdh

Syntax

WebFileUploadEx( in sUrl  : string,
                 formUrl  : form,
                 formBody : form,
                 in fWait : double optional ): boolean;

Return value

  • true if the file is found and submitted successfully

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
formUrl | Form identifier used in the dclform section (see example below). The expanded form is added to the URL after the "?".
formBody | Form identifier used in the dclform section (see example below). The expanded form is added to the body of the request. The Content-Length and Content-Type header are added automatically.
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

Example

The form content in the dclform section is represented in an unencoded format to enhance readability and customizability. The data gets URL encoded on file upload. There are two possibilities to send data unencoded:

  • Add the query string as it should be sent to the server directly to the URL, for example, "http://www.comp.com/cgi/special?<don't>;[encode]/this". Note that blanks are encoded when this method is used.
  • Use WebUrlPostBin or WebFormPostBin to post data as provided to the Web server.
dcltrans
  transaction TWebFileUpload
  begin
    WebFileUploadEx("http://standardhost/data2html.asp", URL_FORM, FILE_UPLOAD_FORM);
  end TWebFileUpload;

dclform
URL_FORM:
  "ID" := "1234";
FILE_UPLOAD_FORM:
  "anyname"  := "anyvalue",
  "filename" := "my_file;C:\\temp\\test.doc;application/msword";
親トピック: Low-Level Web Functions


WebHeaderAdd Function

Action

Adds a custom HTTP header to the next WebUrl* or WebForm* function. This also enables replacing standard headers, like the default POST encoding type "Content-Type: application/x-www-form-urlencoded", with a custom encoding type. You can add up to 128 headers per request by calling this function repeatedly.

Include file

WebAPI.bdh

Syntax

WebHeaderAdd( in sName  : string,
              in sValue : string ): boolean;

Return value

  • true if the header information was accepted

  • false otherwise

Parameter | Description
sName | Name of the HTTP header
sValue | Value string of this header

Example

dcltrans
  transaction TWebOwnAuthHeader
  var
    sUserPass    : string(200);
    nUserPassLen : number;
  begin
    // Build your own authentication header
    WebBase64Encode(sUserPass, 200, nUserPassLen,
                    "smith:paranoia{}[]~^",
    Strlen("smith:paranoia{}[]~^"));
    sUserPass := "Basic " + sUserPass;
    WebHeaderAdd("Authorization", sUserPass);
    WebUrl("http://standardhost/", 0.0);
  end TWebOwnAuthHeader;

Sample scripts

WebEncoding01.bdf, WebHttpHeaders01.bdf

親トピック: Low-Level Web Functions


WebAddImageCoordinates Function

Action

When a URL is submitted due to a server side image map request (ISMAP), this function adds the necessary pair of coordinates to the URL. After all query parameters are added, those coordinates are then added to the subsequent Web function call.

Include file

WebAPI.bdh

Syntax

WebAddImageCoordinates(in sCoordinates: string);
Parameter | Description
sCoordinates | Coordinates that you want to add to the URL.

Example

dcltrans
  transaction TMain
  begin
    WebPageUrl("http://standardhost");
    WebAddImageCoordinates("?172,79");
    WebPageLink("Click here");
  end TMain;
親トピック: Low-Level Web Functions


WebUrlBeginPage Function

Action

Marks the beginning of a page that is loaded by low-level web functions. It waits for all running threads (WebThreadWait) and starts a page timer. The next WebUrlBeginPage or WebUrlEndPage function call with a different timer name or without a timer name stops the timer.

This function is generated by the Recorder if the automatic page detection option is selected in the Recording tab of the Web category in the Profile Settings dialog.

Include file

WebAPI.bdh

Syntax

WebUrlBeginPage(in sTimer: string optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sTimer | Name of the timer for page measurements (optional). If this parameter is omitted, no measurements are performed.

Example

dcltrans
  transaction TMain
  begin
    WebUrlBeginPage("ShopIt");
    WebUrl("http://lab3/shopit/banner.gif");
    WebFormPost("http://lab3/shopit/product.asp", SHOPIT_PRODUCT_ASP002);
    WebUrl("http://lab3/shopit/pic.gif");
    WebUrlEndPage();
  end TMain;
dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
親トピック: Low-Level Web Functions
関連資料
WebUrlEndPage Function


WebUrlEndPage Function

Action

Marks the end of a page that is loaded by low-level web functions. It waits for all running threads (WebThreadWait) and stops the page timer.

This function is generated by the Recorder if the automatic page detection option is selected in the Recording tab of the Web category in the Profile Settings dialog.

Include file

WebAPI.bdh

Syntax

WebUrlEndPage(): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TMain
  begin
    WebUrlBeginPage("ShopIt");
    WebUrl("http://lab3/shopit/banner.gif");
    WebFormPost("http://lab3/shopit/product.asp", SHOPIT_PRODUCT_ASP002);
    WebUrl("http://lab3/shopit/pic.gif");
    WebUrlEndPage();
  end TMain;
dclform
SHOPIT_PRODUCT_ASP002:"code" := "2";
親トピック: Low-Level Web Functions
関連資料
WebUrlBeginPage Function


WebFormBuild Function

Action

This function composes URL-encoded form strings similar to those specified in the dclform section. The resulting string is commonly used to add parameters to URLs or to build up messages to be sent with WebUrlPostBin.

WebFormBuild appends a pair of sLeftVal "=" sRightVal at the end of sForm. If sForm is NULL when calling WebFormBuild, "&" is added before adding the pair of sLeftVal "=" sRightVal to the result of the previous call.

Include file

WebAPI.bdh

Syntax

WebFormBuild( out   sForm       : string allownull,
              inout nMaxFormLen : number,
              in    sLeftVal    : string allownull,
              in    sRightVal   : string allownull ): boolean;

Return value

  • true if the form is generated successfully

  • false otherwise

Parameter | Description
sForm | Target string to be filled; NULL value allowed
nMaxFormLen | Variable containing the maximum length of target string. On return it will contain the current length of the string written to sTarget.
sLeftVal | Left value of form parameter, which may be NULL
sRightVal | Right value of form parameter, which may be NULL
注: For the first call of WebFormBuild, sForm must be initialized with the string to be added and nMaxFormLen must be initialized with the maximum length of the buffer of sForm. For subsequent calls, sForm must be NULL.

  • If sLeftVal/sRightVal is not NULL and not empty, it is encoded using the function StrFormEscape.

  • If sLeftVal is NULL or empty, only sRightVal is added to sForm.

  • Is sRightVal is NULL or empty, sLeftVal and "=" is added to sForm.

Example

dcltrans
  transaction TWebFormBuild
  var
    sForm     : string(1000);
    nFormSize : number;
    bOk       : boolean;
  begin
    sForm     := "http://www.MyCompany.com?";
    nFormSize := sizeof(sForm);

    bOk := WebFormBuild(sForm, nFormSize, "country", "USA");
    bOk := WebFormBuild(NULL, nFormSize, "jack@datz.com", NULL);
    bOk := WebFormBuild(NULL, nFormSize, NULL, "46&kj%= jd");

    WebUrl(sForm);
    write("form = "); write(sForm); writeln;
    sForm := ""; nFormSize := sizeof(sForm);

    bOk := WebFormBuild(sForm, nFormSize, "TestLeftVal", "TestRightVal");

    WebUrlPostBin("http://www.company.com", sForm,
                  nFormSize, "text/html");
    write("form = "); write(sForm); writeln;
  end TWebFormBuild;

Output

form = http://www%2EMyCompany%2Ecom?country=USA&
jack%40datz%2Ecom=&46%26kj%25%3D+jd
form = TestLeftVal=TestRightVal

Sample scripts

WebForms03.bdf

親トピック: Low-Level Web Functions


WebFormClear Function

Action

Removes all entries from a Web form declared in the dclform section. This function can be used to dynamically modify the content of a Web form.

Include file

WebAPI.bdh

Syntax

WebFormClear( inout fForm: form ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
fForm | Web form whose entries will be removed

Example

dcltrans
  transaction TMain
  var
    sFirstName, sLastName, sPhone: string;
  begin
    WebFormValuePairInsert(fForm, "street", "Beach Road");
    WebFormValuePairInsert(fForm, "phone", "1212-555-8532");
    WebFormValueGet(fForm, sFirstName, sizeof(sFirstName),
      "first name");
    WebFormValueGet(fForm, sLastName, sizeof(sLastName), "last name");
    WebFormValueGet(fForm, sPhone, sizeof(sPhone), "phone");
    write("first name = "); write(sFirstName); writeln;
    write("last name = "); write(sLastName); writeln;
    write("phone = "); write(sPhone); writeln;
    WebFormValueSet(fForm, "phone", "1411-555-0969");
    WebFormValueGet(fForm, sPhone, sizeof(sPhone), "phone");
    write("phone = "); write(sPhone); writeln;
    WebFormValuePairRemove(fForm, "street");
    WebFormClear(fForm);
  end TMain;

  dclform
    fForm:
    "first name" := "Peter",
    "last name" := "Heart";

Sample scripts

WebForms04.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormValuePairInsert Function


WebFormReset Function

Action

Resets a Web form as declared in the dclform section. This function can be used to undo all dynamically made modifications.

Include file

WebAPI.bdh

Syntax

WebFormReset( inout fForm: form ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
fForm | Web form whose content will be reset

Example

dcltrans
  transaction TMain
  var
    sFirstName, sLastName, sPhone: string;
  begin
    WebFormValuePairInsert(fForm, "street", "Beach Road");
    WebFormValuePairInsert(fForm, "phone", "1212-555-8532");
    WebFormValueSet(fForm, "last name", "Smith");
    WebFormValueGet(fForm, sFirstName, sizeof(sFirstName), "first name");
    WebFormValueGet(fForm, sLastName, sizeof(sLastName), "last name");
    WebFormValueGet(fForm, sPhone, sizeof(sPhone), "phone");
    write("first name = "); write(sFirstName); writeln;
    write("last name = "); write(sLastName); writeln;
    write("phone = "); write(sPhone); writeln;

    WebFormReset(fForm);

    WebFormValueGet(fForm, sFirstName, sizeof(sFirstName), "first name");
    WebFormValueGet(fForm, sLastName, sizeof(sLastName), "last name");
    WebFormValueGet(fForm, sPhone, sizeof(sPhone), "phone");
    write("first name = "); write(sFirstName); writeln;
    write("last name = "); write(sLastName); writeln;
    write("phone = "); write(sPhone); writeln;
  end TMain;

dclform
  fForm:
    "first name" := "Peter",
    "last name"  := "Heart";
親トピック: Low-Level Web Functions
関連資料
WebFormClear Function
WebFormValuePairInsert Function
WebFormValuePairRemove Function
WebFormValueSet Function


WebFormExpand Function

Action

This function converts forms specified in the dclform section to URL-encoded form strings. The resulting string is commonly used to add parameters to URLs or to build up messages to be sent with WebUrlPostBin.

Include file

WebAPI.bdh

Syntax

WebFormExpand( in  fForm       : form,
               out sExpForm    : string,
               in  nMaxExpForm : number,
               in  bCalcRandom : boolean): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
fForm | Form declared in the dclform section.
sExpForm | String variable receiving the URL encoded form string.
nMaxExpForm | Length of the string receiving the URL encoded form string. If it is set to STRING_COMPLETE all available data is stored in sExpForm.
bCalcRandom | Specifies whether to calculate the random variables part of the form.

Example

dclrand
  nrPhone: RndUniN(5550000..5559999);

dcltrans
  transaction TMain
  var
    sForm : string(100);
    i : number;
  begin
    for i := 1 to 5 do
      // calculate new random values each time
      WebFormExpand(FORM_01, sForm, STRING_COMPLETE, true);
      write(sForm); writeln;
    end;

    // do not calculate new random values
    WebFormExpand(FORM_01, sForm, STRING_COMPLETE, false);
    write(sForm); writeln;
  end TMain;

dclform
  FORM_01:
    "name" := "John",
    "phone" := nrPhone;

Output

name=John&phone=5556872
name=John&phone=5558055
name=John&phone=5559284
name=John&phone=5558252
name=John&phone=5551969
name=John&phone=5551969

Sample scripts

WebForms04.bdf

親トピック: Low-Level Web Functions


WebFormGet Function

Action

Sends the form content to the Web server. The form content is transformed into a single string that is appended to the URL. The URL defines the file to be retrieved from the Web server using the HTTP GET method. If the form includes a random variable, this function selects a new random value each time the form is posted.

Include file

WebAPI.bdh

Syntax

WebFormGet(
  in sUrl : string,
  in formUrl : form,
  in fWait : float optional): boolean;

Return value

  • true if the worker thread communicating with the server could be started successfully

  • false otherwise. The return value will not inform about any Web traffic-related problems due to independent threaded operation.

Parameter | Description
sUrl | Complete URL to the file on the server
formUrl | Form identifier used in the dclform section (see example below). The expanded form string is appended to the URL after the "?".
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

The form content in the dclform section is represented in an unencoded format to enhance readability and customizability. The data gets URL encoded on form submission. There are two possibilities to send data unencoded:

  • Add the query string as it should be sent to the server directly to the URL, for example, http://www.comp.com/cgi/special?dont encode blanks

  • Use WebUrlPostBin or WebFormPostBin to post data as provided to the Web server.

Example

var
  nWait : float;
  sName : string(100);
dclrand
  rnWait : RndExpF(5.0);
  rnPhone : RndStr("0123456789"; 16..16);
  rsAddress : RndFile("Address.rnd", 100);
  rsFName : RndFile("gfname.rnd", 20);
  rsLName : RndFile("glname.rnd", 20);
dcltrans
transaction TWebFormGet
begin
  // Get a random full name
  sName := rsFName + " " + rsLName;
  // and a random think time
  nWait := rnWait;
  WebFormGet("http://standardhost:2080/data2html.asp", FORM_01, nWait);
end TWebFormGet;
dclform
  FORM_01:
    "name" := sName,
    "address" := rsAddress,
    "phone" := rnPhone;

Sample scripts

WebForms01.bdf, WebForms03.bdf, WebForms04.bdf, WebMeasure01.bdf, WebMulti01.bdf, WebParseResponse01.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormUrlDecode Function
WebFormUrlEncode Function
WebUrlPostBin Function
WebFormPostBin Function


WebFormHead Function

Action

Sends the form content to the Web server. The form content is transformed into a single string that is appended to the URL. The URL defines the file to be retrieved from the Web server by means of the HTTP HEAD method. If the form includes a random variable, this function selects a new random value each time the form is posted.

Include file

WebAPI.bdh

Syntax

WebFormHead( in sUrl   : string,
             in idForm : form,
             in fWait  : float optional ) : boolean;

Return value

  • true if the worker thread communicating with the server could be started successfully

  • false otherwise. The return value will not inform about any Web traffic-related problems due to independent threaded operation.

Parameter | Description
sUrl | Complete URL to the file on the server
idForm | Form identifier used in the dclform section (see example below)
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

The form content in the dclform section is represented in an unencoded format to enhance readability and customizability. The data gets URL encoded on form submission. There are two possibilities to send data unencoded:

  • Add the query string as it should be sent to the server directly to the URL, for example, http://www.comp.com/cgi/special?dont encode blanks

  • Use WebUrlPostBin or WebFormPostBin to post data as provided to the Web server.

Example

var
  rsRandomRequestString : string;
dcltrans
  transaction TWebFormHead
  begin
    ...
    WebFormHead("http://www.myserver.com/mail2form.cgi",
    FORM_CUST_REQUEST, 0.0);
    ...
    end TWebFormHead;

dclform
  FORM_CUST_REQUEST:
  "email"   := "joe@somewhere.com",
  "request" := rsRandomRequestString;
親トピック: Low-Level Web Functions
関連資料
WebFormUrlDecode Function
WebFormUrlEncode Function
WebUrlPostBin Function
WebFormPostBin Function


WebFormPost Function

Action

Posts the content of a Web form to the Web server by means of the HTTP POST method. If the form includes a random variable, this function selects a new random value each time the form is posted. Use the WebFormPostEx function to post two forms in the same request.

Include file

WebAPI.bdh

Syntax

WebFormPost( in sUrl     : string,
             in formBody : form,
             in fWait    : float optional ): boolean;

Return value

  • true if the worker thread posting the form content to the server could be started successfully

  • false otherwise. The return value will not inform about any Web traffic-related problems due to independent threaded operation.

Parameter | Description
sUrl | Complete URL to the file on the server
formBody | Form identifier used in the dclform section (see example below). The expanded form is added to the body of the request. The Content-Length and Content-Type header is added automatically. The default Content-Type is application/x-www-form-urlencoded and can be overwritten by a call to WebHeaderAdd("Content-Type", "myEncoding") prior to WebFormPost.
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

The form content in the dclform section is represented in an unencoded format to enhance readability and customizability. The data gets URL encoded on form submission. There are two possibilities to send data unencoded:

  • Add the query string as it should be sent to the server directly to the URL, for example, "http://www.comp.com/cgi/special?<don't>;[encode]/this". Note that blanks are encoded when this method is used.

  • Use WebUrlPostBin or WebFormPostBin to post data as provided to the Web server.

Example

var
  nWait : float;
  sName : string(100);

dclrand
  rnWait    : RndExpF(5.0);
  rnPhone   : RndStr("0123456789"; 16..16);
  rsAddress : RndFile("Address.rnd", 100);
  rsFName   : RndFile("gfname.rnd", 20);
  rsLName   : RndFile("glname.rnd", 20);

dcltrans
  transaction TWebFormPost
  begin
    // Get a random full name
    sName := rsFName + " " + rsLName;

    // and a random think time
    nWait := rnWait;
    WebFormPost("http://standardhost:2080/data2html.asp",
    FORM_01, nWait);
  end TWebFormPost;

dclform
  FORM_01:
    "name"    := sName,
    "address" := rsAddress,
    "phone"   := rnPhone;

Sample scripts

WebForms01.bdf, WebMeasure01.bdf, WebMulti01.bdf, WebParseResponse01.bdf, WebPost01.bdf, WebVerification01.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormUrlDecode Function
WebFormUrlEncode Function
WebUrlPostBin Function
WebFormPostBin Function
WebFormPostEx Function


WebFormPostBin Function

Action

Posts binary data to the Web server by means of the HTTP POST method. If the form includes a random variable, this function selects a new random value each time the form is posted.

Instead of ASCII-encoded form content, binary data may be sent using this post function. The Content-Length header will automatically be added to the request. The appropriate Content-Type has to be specified. In order to send binary data (octets) more safely over the Internet, use the WebBase64Encode to convert the data to 6-bit ASCII characters.

Include file

WebAPI.bdh

Syntax

WebFormPostBin( in sUrl         : string,
                in formUrl      : form,
                in sData        : string,
                in nDataLen     : number,
                in sContentType : string,
                in fWait        : float optional): boolean;

Return value

  • true successful.

  • false otherwise.

Parameter | Description
sUrl | Complete URL to the file on the server
formUrl | Form identifier used in the dclform section (see example below). The expanded form is added to the URL after the "?".
sData | Data to post to the server. This may be also binary data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLen | Length in bytes of data contained in the buffer sData. Specify STRING_COMPLETE or omit this parameter to post all available data.
sContentType | Content type string used in the request, for example, "image/gif"
fWait | Minimum time or minimum mean time that this function call has to last (optional). The default value is 0.0

The form content in the dclform section is represented in an unencoded format to enhance readability and customizability. The data gets URL encoded on form submission. There are two possibilities to send data unencoded:

  • Add the query string as it should be sent to the server directly to the URL, for example, "http://www.comp.com/cgi/special?<don't>;[encode]/this". Note that blanks are encoded when this method is used.

  • Use WebUrlPostBin to post data as provided to the Web server.

Example

dcltrans
  transaction TWebFormPostBin
  var
    sData : string;
  begin
    // Post hard coded binary data in hexadecimal form
    // (first 16 ASCII sequences) along with an additional sub query
    sData := "\h00010203040506070809101112131415";
    WebFormPostBin("http://standardhost/data2html.asp", FORM_01,
      bin(sData),
      STRING_COMPLETE, "binary/costum", 0.0);
  end TWebFormPostBin;

dclform
  FORM_01:
    "SessionID" := "SID12345";

Sample scripts

WebForms02.bdf, WebPost01.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormPost Function
WebFormPostEx Function
WebFormUrlDecode Function
WebFormUrlEncode Function
WebBase64Encode Function
WebUrlPostBin Function


WebFormPostFile Function

Action

Posts binary data to the Web server by means of the HTTP POST method. If the form includes a random variable, this function selects a new random value each time the form is posted.

Instead of ASCII-encoded form content, binary data may be sent using this post function. The Content-Length header will automatically be added to the request. The appropriate Content-Type has to be specified. In order to send binary data (octets) more safely over the Internet, use the WebBase64Encode to convert the data to 6-bit ASCII characters.

Include file

WebAPI.bdh

Syntax

WebFormPostFile( in sUrl         : string,
                 in formUrl      : form,
                 in sFile        : string,
                 in sContentType : string,
                 in fWait        : float optional): boolean;

Return value

  • true successful.

  • false otherwise.

Parameter | Description
sUrl | Complete URL to the file on the server
formUrl | Form identifier used in the dclform section (see example below). The expanded form is added to the URL after the "?".
sFile | File to post to the server.
sContentType | Content type string used in the request, for example, "image/gif"
fWait | Minimum time or minimum mean time that this function call has to last (optional). The default value is 0.0

The form content in the dclform section is represented in an unencoded format to enhance readability and customizability. The data gets URL encoded on form submission. There are two possibilities to send data unencoded:

  • Add the query string as it should be sent to the server directly to the URL, for example, "http://www.comp.com/cgi/special?<don't>;[encode]/this". Note that blanks are encoded when this method is used.

  • Use WebUrlPostBin to post data as provided to the Web server.

Example

dcltrans
  transaction TWebFormPostFile
  var
    sFile: string;
  begin
    sFile := "c:\\temp\\dummyfile.txt";
    WebFormPostFile("http://standardhost/data2html.asp", FORM_01,
    sFile, "text/plain", 0.0);
  end TWebFormPostFile;

dclform
  FORM_01:
    "SessionID" := "SID12345";
親トピック: Low-Level Web Functions
関連資料
WebFormUrlDecode Function
WebFormUrlEncode Function
WebFormPost Function
WebFormPostEx Function
WebBase64Encode Function
WebUrlPostBin Function


WebFormPostEx Function

Action

Posts the contents of two forms to the Web server by means of the HTTP POST method. If the form includes a random variable, this function selects a new random value each time the form is posted.

The difference between this function and the WebFormPost is that a form may be posted in the body of the request in addition to the URL.

Include file

WebAPI.bdh

Syntax

WebFormPostEx( inout sUrl     : string,
               in    formUrl  : form,
               in    formBody : form,
               in    fWait    : float optional ) : boolean;

Return value

  • true if the worker thread posting the form content to the server could be started successfully

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server
formUrl | Form identifier used in the dclform section (see example below). The expanded form is added to the URL after the "?".
formBody | Form identifier used in the dclform section (see example below). The expanded form is added to the body of the request. The Content-Length and Content-Type header are added automatically. The default Content-Type is application/x-www-form-urlencoded and can be overwritten by a call to WebHeaderAdd("Content-Type", "myEncoding") prior to invoking WebFormPostEx.
fWait | Minimum time or minimum mean time that this function call has to last (optional). Default value is 0.0

The form content in the dclform section is represented in an unencoded format to enhance readability and customizability. The data gets URL encoded on form submission. There are two possibilities to send data unencoded:

  • Add the query string as it should be sent to the server directly to the URL, for example, "http://www.comp.com/cgi/special?<don't>;[encode]/this". Note that blanks are encoded when this method is used.

  • Use WebUrlPostBin or WebFormPostBin to post data as provided to the Web server.

Example

var
  nWait : float;
  sName : string(100);

dclrand
  rnWait    : RndExpF(5.0);
  rnPhone   : RndStr("0123456789"; 16..16);
  rsAddress : RndFile("Address.rnd", 100);
  rsFName   : RndFile("gfname.rnd", 20);
  rsLName   : RndFile("glname.rnd", 20);

dcltrans
  transaction TWebFormPostEx
  begin
    // Get a random full name
    sName := rsFName + " " + rsLName;
    // and a random think time
    nWait := rnWait;
    WebFormPostEx("http://standardhost:2080/data2html.asp",
    FORM_01, FORM_01, nWait);
  end TWebFormPostEx;

dclform
  FORM_01:
  "name"    := sName,
  "address" := rsAddress,
  "p hone"  := rnPhone;

Sample scripts

WebForms01.bdf, WebPost01.bdf, WebTimer01.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormPost Function
WebFormPostBin Function
WebFormUrlDecode Function
WebFormUrlEncode Function
WebUrlPostBin Function


WebFormValuePairInsert Function

Action

Inserts a new pair of values into a Web form declared in the dclform section. This function can be used to dynamically modify the content of a Web form.

Include file

WebAPI.bdh

Syntax

WebFormValuePairInsert( in fForm       : form,
                        in sLeftValue  : string,
                        in sRightValue : string,
                        in nPosition   : number optional,
                        in nAttribute  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
fForm | Web form whose content will be extended by the given pair of values.
sLeftValue | String representing the left-side value of the pair of values inserted into the Web form.
sRightValue | String representing the right-side value of the pair of values inserted into the Web form.
nPosition | Position where the new pair of values is inserted (optional). If this parameter is omitted, the new pair is appended at the end of the Web form.
nAttribute | Attribute of the pair of values (optional). If this value is omitted no special attribute is assigned.

Example

dcltrans
  transaction TMain
  var
    sFirstName, sLastName, sPhone: string;
  begin
    WebFormValuePairInsert(fForm, "street", "Beach Road");
    WebFormValuePairInsert(fForm, "phone",
      "1212-555-8532", 4, USE_HTML_VAL);
    WebFormValueGet(fForm, sFirstName, STRING_COMPLETE, "first name");
    WebFormValueGet(fForm, sLastName, STRING_COMPLETE, "last name");
    WebFormValueGet(fForm, sPhone, STRING_COMPLETE, "phone");
    write("first name = "); write(sFirstName); writeln;
    write("last name = "); write(sLastName); writeln;
    write("phone = "); write(sPhone); writeln;
    WebFormValueSet(fForm, "phone", "1411-555-0969");
    WebFormValueGet(fForm, sPhone, STRING_COMPLETE, "phone");
    write("phone = "); write(sPhone); writeln;
    WebFormValuePairRemove(fForm, "street");
    WebFormClear(fForm);
  end TMain;

dclform
  fForm:
    "first name" := "Peter",
    "last name"  := "Heart";

Sample scripts

WebForms04.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormValuePairRemove Function


WebFormValuePairRemove Function

Action

Removes a number of pairs of values from a Web form declared in the dclform section. This function can be used to dynamically modify the content of a Web form.

Include file

WebAPI.bdh

Syntax

WebFormValuePairRemove( in fForm      : form,
                        in sLeftValue : string,
                        in nPosition  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
fForm | Web form whose content will be reduced by all matching pairs of values
sLeftValue | String representing the left-side value of all pairs of values removed from the Web form
nPosition | Position of the pair of values which is removed (optional). If this parameter is passed to the function, the sLeftValue parameter is ignored. Otherwise, if this parameter is omitted, Silk Performer searches the Web form for all occurrences of sLeftValue and removes all matching entries

Example

dcltrans
  transaction TMain
  var
    sFirstName, sLastName, sPhone: string;
  begin
    WebFormValuePairInsert(fForm, "street", "Beach Road");
    WebFormValuePairInsert(fForm, "phone", "1212-555-8532");
    WebFormValueGet(fForm, sFirstName, STRING_COMPLETE, "first name");
    WebFormValueGet(fForm, sLastName, STRING_COMPLETE, "last name");
    WebFormValueGet(fForm, sPhone, STRING_COMPLETE, "phone");
    write("first name = "); write(sFirstName); writeln;
    write("last name = "); write(sLastName); writeln;
    write("phone = "); write(sPhone); writeln;
    WebFormValueSet(fForm, "phone", "1411-555-0969");
    WebFormValueGet(fForm, sPhone, STRING_COMPLETE, "phone");
    write("phone = "); write(sPhone); writeln;
    WebFormValuePairRemove(fForm, "street");
    WebFormClear(fForm);
  end TMain;

dclform
  fForm:
    "first name" := "Peter",
    "last name"  := "Heart";

Sample scripts

WebForms04.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormValuePairInsert Function


WebFormValueSet Function

Action

Sets the left-side and/or the right-side value of a Web form entry. This function can be used to dynamically modify the content of a Web form.

Include file

WebAPI.bdh

Syntax

WebFormValueSet( in fForm       : form,
                 in sLeftValue  : string allownull,
                 in sRightValue : string allownull,
                 in nPosition   : number optional
                 in nAttribute  : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
fForm | Web form whose content will be modified
sLeftValue | String representing the left-side value to set or to search for, depending on the nPosition parameter
sRightValue | String representing the right-side value to set or to search for, depending on the nPosition parameter
nPosition

Position of the Web form entry whose values will be set (optional).

If this parameter is passed to the function, the function behaves as follows:

  • If sRightValue is not NULL, both values are set, the left-side value to sLeftValue, and the right-side value to sRightValue

  • If sRightValue is NULL, the specified left-side value is set to sLeftValue

  • If sLeftValue is NULL, the specified right-side value is set to sRightValue

Otherwise, if this parameter is omitted, Silk Performer searches the Web form for a matching left-side value and sets the corresponding right-side value.
nAttribute | Attribute of the pair of values (optional). If this value is omitted no special attribute is assigned. See the form attributes section in the Web form declarations section for all possible values.

Example

dcltrans
  transaction TMain
  var
    sFirstName, sLastName, sPhone: string;
  begin
    WebFormValuePairInsert(fForm, "street", "Beach Road");
    WebFormValuePairInsert(fForm, "phone", "1212-555-8532");
    WebFormValueGet(fForm, sFirstName, STRING_COMPLETE, "first name");
    WebFormValueGet(fForm, sLastName, STRING_COMPLETE, "last name");
    WebFormValueGet(fForm, sPhone, STRING_COMPLETE, "phone");
    write("first name = "); write(sFirstName); writeln;
    write("last name = "); write(sLastName); writeln;
    write("phone = "); write(sPhone); writeln;
    WebFormValueSet(fForm, "phone", "1411-555-0969",
0, USE_HTML_VAL);
    WebFormValueGet(fForm, sPhone, STRING_COMPLETE, "phone");
    write("phone = "); write(sPhone); writeln;
    WebFormValuePairRemove(fForm, "street");
    WebFormClear(fForm);
  end TMain;

dclform
  fForm:
    "first name" := "Peter",
    "last name" := "Heart";

Sample scripts

WebForms04.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormValueGet Function
Web Form Declarations


WebFormValueGet Function

Action

Retrieves the left-side and/or the right-side value of a Web form entry. This function can be used to dynamically modify the content of a Web form.

Include file

WebAPI.bdh

Syntax

WebFormValueGet( in  fForm      : form,
                 out sValue     : string,
                 in  nValueSize : number,
                 in  sLeftValue : string,
                 in  nPosition  : number optional,
                 in  bGetLeft   : boolean optional,
                 out nAttribute : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
fForm | Web form whose content will be retrieved.
sValue | String receiving the specified value of a Web form entry.
nValueSize | Length of the string receiving the value.
sLeftValue | String representing a left-side value to search for.
nPosition

Position of the Web form entry (optional).

If this parameter is passed to the function, the function returns either the right-side or the left-side value of the specified entry, depending on the bGetLeft parameter

Otherwise, if this parameter is omitted, this function searches the specified Web form for a left-side value equal to sLeftValue and returns the corresponding right-side value.
bGetLeft | Specifies whether to return the left-side or the right-side value of a given Web form entry (optional). If this parameter is passed to the function, the function retrieves the left-side value instead of the right-side value.
nAttribute | If this parameter is not omitted it receives the attribute of the specified pair of values.

Example

dcltrans
  transaction TMain
  var
    sString, sFirstName, sLastName, sPhone : string;
    nAttrFirst, nAttrLast                  : number;
  begin
    WebFormValuePairInsert(fForm, "street", "Beach Road");
    WebFormValuePairInsert(fForm, "phone", "1212-555-8532");
    WebFormValueGet(fForm, sFirstName, sizeof(sFirstName),
"first name", 0, false, nAttrFirst);
    WebFormValueGet(fForm, sLastName, sizeof(sLastName),
"last name", 0, false, nAttrLast);
    WebFormValueGet(fForm, sPhone, sizeof(sPhone), "phone");
    write("first name = "); write(sFirstName);
    write(", attribute = "); write(nAttrFirst); writeln;
    write("last name = "); write(sLastName);
    write(", attribute = "); write(nAttrLast); writeln;
    write("phone = "); write(sPhone); writeln;

    // retrieve the left-hand value of the first pair
    WebFormValueGet(fForm, sString, sizeof(sString), "", 1, true);
    WebFormValueSet(fForm, "phone", "1411-555-0969");
    WebFormValueGet(fForm, sPhone, sizeof(sPhone), "phone");
    write("phone = "); write(sPhone); writeln;
    WebFormValuePairRemove(fForm, "street");
    WebFormClear(fForm);
  end TMain;

dclform
  fForm:
    "first name" := "Peter" <ENCODE_CUSTOM>,
    "last name"  := "Heart";

Sample scripts

WebForms04.bdf

親トピック: Low-Level Web Functions
関連資料
WebFormValueSet Function


WebCustomRequest Function

Action

Requests and reads a complete document specified by a URL using the specified HTTP method.

Include file

WebAPI.bdh

Syntax

WebCustomRequest( in sMethod  : string,
                  in sUrl     : string,
                  in formBody : form optional,
                  in formUrl  : form optional,
                  in fWait    : float optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sMethod | HTTP method used for the request (like GET, POST or M-GET).
sUrl | Absolute URL to the file on the server. The entire character content of the query string will not be URL-encoded.
formBody

Form identifier used in the dclform section (optional). The expanded form is added to the body of the request. The Content-Length and Content-Type headers are added automatically. The default Content-Type is "application/x-www-form-urlencoded" and can be overwritten by a WebHeaderAdd("Content-Type", "myEncoding") function call prior to the WebCustomRequest function call.

Set this parameter to FORM_NULL if you do not want to specify a form. You would do this when you want to specify the following parameters but want to omit this parameter.
formUrl

Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Set this parameter to FORM_NULL if you do not want to specify a form. You would do this when you want to specify the following parameters but want to omit this parameter.
fWait | Minimum time or minimum mean time that this function call has to last (optional). The default value is 0.0.

Example

dcltrans
  transaction TMain
  begin
    WebCustomRequest("GET", "http://standardhost/product.asp?code=2");
    WebCustomRequest("M-POST", "http://standardhost/product.asp",
SHOPIT_PRODUCT_ASP003, SHOPIT_PRODUCT_ASP002);
  end TMain;

dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
  SHOPIT_PRODUCT_ASP003:
    "tent" := "1";
親トピック: Low-Level Web Functions
関連資料
WebCustomRequestBin Function


WebCustomRequestBin Function

Action

Requests and reads a complete document specified by a URL using the specified HTTP method. The optional request body consists of binary data.

Include file

WebAPI.bdh

Syntax

WebCustomRequestBin( in sMethod     : string,
                     in sUrl        : string,
                     in sData       : string,
                     in nDataLength : number optional,
                     in sContent    : string optional,
                     in formUrl     : form optional,
                     in fWait       : float optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sMethod | HTTP method used for the request (like GET, POST, or M-GET).
sUrl | Absolute URL to the file on the server. The entire character content of the query string will not be URL-encoded.
sData | Data to post to the server. This may also be binary data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLength | Amount of the data that is posted to the server (in bytes). Specify STRING_COMPLETE or omit this parameter to post all available data.
sContent | Content type string used in the request, for example, "image/gif" (optional). If this parameter is omitted, an "application/x-www-form-urlencoded" header is sent.
formUrl

Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Set this parameter to FORM_NULL if you do not want to specify a form. You would do this when you want to specify the following parameters but want to omit this parameter.
fWait | Minimum time or minimum mean time that this function call has to last (optional). The default value is 0.0.

Example

dcltrans
  transaction TMain
  var
    sData: string(4);
  begin
    SetLong(sData, 1, 15708);
    WebCustomRequest("GET", "http://standardhost/product.asp?code=2");
    WebCustomRequestBin("M-POST", "http://standardhost/main.asp",
      bin(sData), STRING_COMPLETE, "application/octet-stream", SHOPIT_PRODUCT_ASP002);
  end TMain;

dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
親トピック: Low-Level Web Functions
関連資料
WebCustomRequest Function
WebCustomRequestFile Function


WebCustomRequestFile Function

Action

Requests and reads a complete document specified by a URL using the specified HTTP method. The optional request body consists of binary data.

Include file

WebAPI.bdh

Syntax

WebCustomRequestFile( in sMethod  : string,
                      in sUrl     : string,
                      in sFile    : string,
                      in sContent : string optional,
                      in formUrl  : form optional,
                      in fWait    : float optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sMethod | HTTP method used for the request (like GET, POST, or M-GET).
sUrl | Absolute URL to the file on the server. The entire character content of the query string will not be URL-encoded.
sFile | File to post to the server.
sContent | Content type string used in the request, for example, "image/gif" (optional). If this parameter is omitted, an "application/x-www-form-urlencoded" header is sent.
formUrl

Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Set this parameter to FORM_NULL if you do not want to specify a form. You would do this when you want to specify the following parameters but want to omit this parameter.
fWait | Minimum time or minimum mean time that this function call has to last (optional). The default value is 0.0.

Example

dcltrans
  transaction TMain
  var
    sFile: string;
  begin
    sFile := "c:\\temp\\dummyfile.txt";
    WebCustomRequest("GET", "http://standardhost/product.asp?code=2");
    WebCustomRequestFile("M-POST", "http://standardhost/main.asp",
    sFile, "application/octet-stream", SHOPIT_PRODUCT_ASP002);
  end TMain;

dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
親トピック: Low-Level Web Functions
関連資料
WebCustomRequest Function


WebSetEncoding Function

Action

Compresses the data of the next WebUrl* or WebPage* function with the gzip or zlib (deflate) algorithm.

Include file

WebAPI.bdh

Syntax

WebSetEncoding( in nEncodingKind : number );
Parameter Description
nEncodingKind

Can be one of following values:

  • WEB_ENCODING_NONE
  • WEB_ENCODING_GZIP
  • WEB_ENCODING_ZLIB

Example

dcltrans
  transaction TmyTrans1
  var sData : string;
  begin
    WebHeaderAdd("Content-Encoding", "gzip");
    WebSetEncoding(WEB_ENCODING_GZIP);
    WebPagePost("http://demo.borland.com/TestSite/rawData2Html.asp",
                "Zip This Text With GZIP Before Sending To Server");

    WebHeaderAdd("Content-Encoding", "deflate");
    WebSetEncoding(WEB_ENCODING_ZLIB);
    WebPagePost("http://demo.borland.com/TestSite/rawData2Html.asp",
                "Zip This Text With ZLIB Before Sending To Server");

    sData := "Zip This Text With GZIP Before Sending To Server";
    WebHeaderAdd("Content-Encoding", "gzip");
    WebSetEncoding(WEB_ENCODING_GZIP);
    WebUrlPostBin("http://demo.borland.com/TestSite/rawData2Html.asp",
                  sData, binlen(sData), "text", 0.0);

    sData := "Zip This Text With ZLIB Before Sending To Server";
    WebHeaderAdd("Content-Encoding", "deflate");
    WebSetEncoding(WEB_ENCODING_ZLIB);
親トピック: Low-Level Web Functions
親トピック: Page-Level Web Functions Overview


WebAddMultiPart Function

Action

When WebAddMultiPart or WebAddMultiPartFromeFile is called, the passed data is stored in lists. When WebPostMultiPart is called, these lists are then merged with a unique boundary and transferred to the server using WebUrlPostBin.

Include file

WebAPI.bdh

Syntax

WebAddMultiPart ( in sBodyHeader : string,
                  in sBodyData   : string );

Return value

none

Parameter | Description
sBodyHeader | Auxiliary information that may be required when unpacking or processing the object, for example Content-Type, Content-Transfer-Encoding, Content-ID. Each line must end with \r\n.
sBodyData | The data of the multipart object.

Example

dcltrans
  transaction TMultiPartRelated
  var
    sMultiPartHeader: string;
    sMultiPartData: string;
  begin
// usage:
//
//   WebAddMultiPart(bodyheader, bodydata)
//   WebAddMultiPartFromFile(bodyheader, filename)
//   WebPostMultiPart("https://...", "multipart/related; type=\"text/xml\"");
//
// where bodyheader is e.g.:
//
//   Content-Type: text/xml; charset=UTF-8
//   Content-Transfer-Encoding: 8bit
//   Content-ID: <rootpart@soapui.org>
//
// and bodydata is
//   o) in case of WebAddMultiPart, e.g.:
//
//     <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:kun="http://services.dst.baintern.de/wsdl/basis/dokumentenmgmt/KundenBescheideAblageServiceMessages_V_1" xmlns:bes="http://services.dst.baintern.de/types/basis/dokumentenmgmt/BescheidDokumenteEinstellen_StatusPerDateitransferDTOType_v_1" xmlns:all="http://services.dst.baintern.de/types/basis/dokumentenmgmt/AllgemeinDTOType_v_1">
//     ...
//     </soapenv:Envelope>
//
//   o) in case of WebAddMultiPartFromFile the filename of the document to upload, e.g. "1_Bescheid.zip"

    //sample 1, doing a 4 part request:
    sMultiPartHeader := "Content-Type: text/plain\r\n";
    sMultiPartData   := "This is my first text\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: application/octet-stream\r\n";
    sMultiPartData   := "\h0102030405060708090A0B0C0D0E0F0D0A";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/plain\r\n";
    sMultiPartData   := "This is my second text\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/xml\r\n";
    sMultiPartData   := "<xml>This is xml</xml>\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/plain\r\nContent-Disposition: attachment; name=\"simpletext.txt\"\r\n";
    sMultiPartData   := "simpletext.txt";
    WebAddMultiPartFromFile(sMultiPartHeader, sMultiPartData);
    WebPostMultiPart("http://demo.borland.com/testsite/rawdata2html.asp", "multipart/related");

    //sample 2:
    //throws an error as no WebAddMultiPart was specified
    WebPostMultiPart("https://demo.borland.com/testsite/svars.asp", "x");

    //sample 3:
    // throws an error as the file is not existent (in Silk Performer's search scope)
    sMultiPartHeader:=
      "Content-Type: application/zip\r\n"
      "Content-Disposition: attachment; name=\"test.zip\"\r\n";
    WebAddMultiPartFromFile(sMultiPartHeader, "test.zip");
    WebPostMultiPart("http://demo.borland.com/testsite/rawdata2html.asp", "multipart/related");

  end TMultiPartRelated;
親トピック: Low-Level Web Functions


WebAddMultiPartFromFile Function

Action

When WebAddMultiPart or WebAddMultiPartFromeFile is called, the passed data is stored in lists. When WebPostMultiPart is called, these lists are then merged with a unique boundary and transferred to the server using WebUrlPostBin.

Include file

WebAPI.bdh

Syntax

WebAddMultiPartFromFile ( in sBodyHeader : string,
                          in sFileName   : string );

Return value

none

Parameter | Description
sBodyHeader | Auxiliary information that may be required when unpacking or processing the object, for example Content-Type, Content-Transfer-Encoding, Content-ID. Each line must end with \r\n.
sFileName | The file name of the document.

Example

dcltrans
  transaction TMultiPartRelated
  var
    sMultiPartHeader: string;
    sMultiPartData: string;
  begin
// usage:
//
//   WebAddMultiPart(bodyheader, bodydata)
//   WebAddMultiPartFromFile(bodyheader, filename)
//   WebPostMultiPart("https://...", "multipart/related; type=\"text/xml\"");
//
// where bodyheader is e.g.:
//
//   Content-Type: text/xml; charset=UTF-8
//   Content-Transfer-Encoding: 8bit
//   Content-ID: <rootpart@soapui.org>
//
// and bodydata is
//   o) in case of WebAddMultiPart, e.g.:
//
//     <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:kun="http://services.dst.baintern.de/wsdl/basis/dokumentenmgmt/KundenBescheideAblageServiceMessages_V_1" xmlns:bes="http://services.dst.baintern.de/types/basis/dokumentenmgmt/BescheidDokumenteEinstellen_StatusPerDateitransferDTOType_v_1" xmlns:all="http://services.dst.baintern.de/types/basis/dokumentenmgmt/AllgemeinDTOType_v_1">
//     ...
//     </soapenv:Envelope>
//
//   o) in case of WebAddMultiPartFromFile the filename of the document to upload, e.g. "1_Bescheid.zip"

    //sample 1, doing a 4 part request:
    sMultiPartHeader := "Content-Type: text/plain\r\n";
    sMultiPartData   := "This is my first text\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: application/octet-stream\r\n";
    sMultiPartData   := "\h0102030405060708090A0B0C0D0E0F0D0A";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/plain\r\n";
    sMultiPartData   := "This is my second text\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/xml\r\n";
    sMultiPartData   := "<xml>This is xml</xml>\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/plain\r\nContent-Disposition: attachment; name=\"simpletext.txt\"\r\n";
    sMultiPartData   := "simpletext.txt";
    WebAddMultiPartFromFile(sMultiPartHeader, sMultiPartData);
    WebPostMultiPart("http://demo.borland.com/testsite/rawdata2html.asp", "multipart/related");

    //sample 2:
    //throws an error as no WebAddMultiPart was specified
    WebPostMultiPart("https://demo.borland.com/testsite/svars.asp", "x");

    //sample 3:
    // throws an error as the file is not existent (in Silk Performer's search scope)
    sMultiPartHeader:=
      "Content-Type: application/zip\r\n"
      "Content-Disposition: attachment; name=\"test.zip\"\r\n";
    WebAddMultiPartFromFile(sMultiPartHeader, "test.zip");
    WebPostMultiPart("http://demo.borland.com/testsite/rawdata2html.asp", "multipart/related");

  end TMultiPartRelated;
親トピック: Low-Level Web Functions


WebPostMultiPart Function

Action

When WebAddMultiPart or WebAddMultiPartFromeFile is called, the passed data is stored in lists. When WebPostMultiPart is called, these lists are then merged with a unique boundary and transferred to the server using WebUrlPostBin.

Include file

WebAPI.bdh

Syntax

WebPostMultiPart ( in sUrl         : string,
                   in sContentType : string );

Return value

none

Parameter | Description
sUrl | Complete URL to the file on the server.
sContentType | The multipart/related Content-Type request header, optional parameters are type, start and start-info. The boundary delimiter is created automatically.

Example

dcltrans
  transaction TMultiPartRelated
  var
    sMultiPartHeader: string;
    sMultiPartData: string;
  begin
// usage:
//
//   WebAddMultiPart(bodyheader, bodydata)
//   WebAddMultiPartFromFile(bodyheader, filename)
//   WebPostMultiPart("https://...", "multipart/related; type=\"text/xml\"");
//
// where bodyheader is e.g.:
//
//   Content-Type: text/xml; charset=UTF-8
//   Content-Transfer-Encoding: 8bit
//   Content-ID: <rootpart@soapui.org>
//
// and bodydata is
//   o) in case of WebAddMultiPart, e.g.:
//
//     <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:kun="http://services.dst.baintern.de/wsdl/basis/dokumentenmgmt/KundenBescheideAblageServiceMessages_V_1" xmlns:bes="http://services.dst.baintern.de/types/basis/dokumentenmgmt/BescheidDokumenteEinstellen_StatusPerDateitransferDTOType_v_1" xmlns:all="http://services.dst.baintern.de/types/basis/dokumentenmgmt/AllgemeinDTOType_v_1">
//     ...
//     </soapenv:Envelope>
//
//   o) in case of WebAddMultiPartFromFile the filename of the document to upload, e.g. "1_Bescheid.zip"

    //sample 1, doing a 4 part request:
    sMultiPartHeader := "Content-Type: text/plain\r\n";
    sMultiPartData   := "This is my first text\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: application/octet-stream\r\n";
    sMultiPartData   := "\h0102030405060708090A0B0C0D0E0F0D0A";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/plain\r\n";
    sMultiPartData   := "This is my second text\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/xml\r\n";
    sMultiPartData   := "<xml>This is xml</xml>\r\n";
    WebAddMultiPart(sMultiPartHeader, sMultiPartData);
    sMultiPartHeader := "Content-Type: text/plain\r\nContent-Disposition: attachment; name=\"simpletext.txt\"\r\n";
    sMultiPartData   := "simpletext.txt";
    WebAddMultiPartFromFile(sMultiPartHeader, sMultiPartData);
    WebPostMultiPart("http://demo.borland.com/testsite/rawdata2html.asp", "multipart/related");

    //sample 2:
    //throws an error as no WebAddMultiPart was specified
    WebPostMultiPart("https://demo.borland.com/testsite/svars.asp", "x");

    //sample 3:
    // throws an error as the file is not existent (in Silk Performer's search scope)
    sMultiPartHeader:=
      "Content-Type: application/zip\r\n"
      "Content-Disposition: attachment; name=\"test.zip\"\r\n";
    WebAddMultiPartFromFile(sMultiPartHeader, "test.zip");
    WebPostMultiPart("http://demo.borland.com/testsite/rawdata2html.asp", "multipart/related");

  end TMultiPartRelated;
親トピック: Low-Level Web Functions


Page-Level Web Functions Overview

The page-level web functions focus on Web pages rather than on single documents. A high-speed HTML parser enables the Web replay engine to access hyperlinks, forms and other load-relevant elements while downloading HTML documents. The functions also download embedded documents like images, applets and frames automatically.

One of the most important benefits of parsing HTML is direct access to session IDs that may reside in query strings of URLs or in hidden fields of forms. However, for sake of speed and memory overhead, HTML elements that are not relevant for navigation or data entry are ignored by the parser. This means that you can query the HTML document for hyperlinks, but in order to access HTML tables you still need to use the WebParseResponseData function.

When to use the page-level web functions :

  • When your Web pages contain dynamically embedded documents, for example, ad banner rotators.

  • When you do not want to care about session handling or when pages contain lots of session information that would require many WebParseResponseData function calls to maintain the session during replay.

  • When your server requires the “referrer” header to be set dynamically.

  • When your load balancer redirects the client to different servers dynamically.

  • When you want to use automatic verification for a page that checks whether the context between pages can be maintained.

  • For shorter, easy-to-read scripts.

When to use the low-level web functions instead:

  • When you need to generate the highest possible load on your server (number of virtual users, throughput)

  • When your Web pages use lots of client-side scripting, for example, JavaScript, VBScript, in order to download further documents or cause page transitions.

  • When your application is not Web-browser-based, for example, multimedia clients that use HTTP for communication but do not use HTML.

  • When maintaining context between pages is not relevant.

Page context

The Web page context is the link used to navigate from one page to another. The context can be maintained if there is enough HTML hyperlink information in page A to navigate to page B. Thus the context-less page-level web functions use an absolute URL to request a Web document, whereas the contextual functions try to retrieve the URL from the prior Web page. If a contextual function fails to find the necessary hyperlink information, the context is lost and all subsequent page download requests may also fail.

Context-less functions

WebPageUrl
Requests a document.
WebPageForm
Submits the form data.
WebPagePost
Posts the content of a Web form in binary format to the Web server by means of the HTTP POST method.
WebPagePostFile
Posts the content of a Web form in binary format to the Web server by means of the HTTP POST method.
WebPageCustomRequest
Requests and reads a complete Web page specified by a URL using HTTP. If the retrieved document is of content type HTML, it is parsed, and embedded documents are requested.
WebPageCustomRequestBin
Requests and reads a complete Web page specified by a URL using HTTP. If the retrieved document is of content type HTML, it is parsed, and embedded documents are requested.
WebPageCustomRequestFile
Requests and reads a complete document specified by a URL using the specified HTTP method.

Context-full functions

WebPageLink
Queries the link information and requests a document
WebPageBack
Goes back one page.
WebPageSubmit
Queries form information and submits a form.
WebPageSubmitBin
Queries form information and submits binary data.

Context query functions

WebPageQueryLink
Queries context information for available hyperlinks.
  • Context Management Overview
    The HTTP protocol, by its very nature, is a stateless protocol.
  • WebPageUrl Function
    Requests and reads a complete document specified by a URL using the specified HTTP method.
  • WebPageForm Function
    Posts the content of a Web form to the Web server by means of the HTTP POST method.
  • WebPagePost Function
    Posts binary data to the Web server by means of the HTTP POST method.
  • WebPagePostFile Function
    Posts binary data to the Web server by means of the HTTP POST method.
  • WebPageLink Function
    Queries the currently active page for the specified HTML hyperlink.
  • WebPageBack Function
    Moves the page context back for one or more pages.
  • WebPageSubmit Function
    Queries the currently active page for the specified HTML form.
  • WebPageSubmitBin Function
    Queries the currently active page for the specified HTML form.
  • WebPageSubmitFile Function
    Queries the currently active page for the specified HTML form.
  • WebPageSubmitFileUpload Function
    Queries the currently active page for the specified HTML form.
  • WebPageFileUpload Function
    Posts the content of a Web form, including specified files, to the Web server by means of the HTTP POST method.
  • WebPageAddUrl Function
  • WebPageQueryLink Function
    This function queries the currently active page context for hyperlinks.
  • WebPageCustomRequest Function
  • WebPageCustomRequestBin Function
    Requests and reads a complete document specified by a URL using the specified HTTP method.
  • WebPageCustomRequestFile Function
  • WebPageStoreContext Function
    Stores the context of the last page in the history, so that it will be available to all subsequent WebPageLink and WebPageSubmit calls.
  • WebPageDeleteContext Function
    Deletes a context stored by a call of the WebPageStore function.
  • WebPageSuppress function
    Specifies a file that must not be loaded by future Web function calls.
  • WebPageLoadAll Function
  • WebPageSetActionUrlAbs Function
    Modifies the action URL of a subsequent WebPageSubmit or WebPageSubmitBin function using an absolute URL specified by the sUrl parameter.
  • WebPageSetActionUrl Function
    Modifies the action URL of a subsequent WebPageSubmit or WebPageSubmitBin function using a URL parsed by a call to the WebPageParseUrl function.
  • WebPageParseUrl Function
    Modifies the html-parser to find additional hyperlinks (for subsequent WebPageLink functions) and URLs, which can be used in subsequent WebPageSetActionUrl or WebPageQueryParsedUrl commands.
  • WebPageQueryParsedUrl Function
    This function is used to retrieve the URL parsed because of a WebPageParseUrl function call with the WEB_FLAG_PARSE_URL flag set.
  • WebSetEncoding Function
    Compresses the data of the next WebUrl* or WebPage* function with the gzip or zlib (deflate) algorithm.
親トピック: Web Functions Reference
関連資料
WebParseResponseData Function


Context Management Overview

The HTTP protocol, by its very nature, is a stateless protocol. HTTP follows a simple request/response paradigm. The client (that is the browser or any other application /applet, which uses HTTP for communication with a server) opens a TCP/IP connection to the server, sends a request, and receives the response from the server. Different requests from the same client to the same server - be it on the same TCP/IP connection or on another one - do not bear any relationship to each other.

Web applications, on the other hand, are becoming more and more complex and need to embed single requests within a larger entity, for example, a complete HTML page, a user session which has been initiated on the Web server, a shopping cart, a registered customer, etc.

To do so, there must be some means to transfer state information from the server to the client, which in turn is returned back to the server within subsequent HTTP requests so that the server can associate the request with the user session (shopping cart, customer, etc.) and respond properly.

By their very nature, any Web browser properly handles the techniquesused by Web applications to transfer state information.

A load testing project that should deliver useful results must simulate real users using real browsers for accessing a Web server. Otherwise the results would be inaccurate at best, or mere meaningless. To accomplish this, a load testing tool must be able to cope with all techniques used for maintaining state information, just like any browser does.

  • Context Less
    A context-less function does not refer to previous events or results during the script execution.
  • Context Full
    In contrast to context-less functions, context-full functions are designed to use results from previous function calls.
親トピック: Page-Level Web Functions Overview


Context Less

A context-less function does not refer to previous events or results during the script execution. Thus it works without using information from previous steps. This means that for a context-less function call, all information that is necessary to perform this function must be specified in the script. Scripting or recording a context-less function is therefore the reason of session or other dynamic information in scripts.

A typical feature of context-less functions is that they have a parameter that specifies the URL to download.

Context-less functions in Silk Performer's page-level API are:

WebPageUrl
Requests a document.
WebPageForm
Submits the form data.
WebPagePost
Posts the content of a Web form in binary format to the Web server by means of the HTTP POST method.
WebPagePostFile
Posts binary data to the Web server by means of the HTTP POST method.
WebPageCustomRequest
Requests and reads a complete Web page specified by a URL using HTTP. If the retrieved document is of content type HTML, it is parsed, and embedded documents are requested.
WebPageCustomRequestBin
Requests and reads a complete Web page specified by a URL using HTTP. The optional request body consists of binary data. If the retrieved document is of content type HTML, it is parsed, and embedded documents are requested.
WebPageCustomRequestFile
Requests and reads a complete document specified by a URL using the specified HTTP method.

If any of these functions uses a form from the "dclform" - section in the script, we say that this form is used context-less. This is because there is no corresponding HTML form where unchanged (e.g. hidden) values can be taken from. All form values must be specified in the script.

親トピック: Context Management Overview


Context Full

In contrast to context-less functions, context-full functions are designed to use results from previous function calls. How to use the results can be specified in a way that, with a high probability, does not incorporate dynamic data.

Context-full functions in Silk Performer's page-level API are:

WebPageLink
Queries the link information and requests a document.
WebPageBack
Goes back one page.
WebPageSubmit
Queries form information and submits a form.
WebPageSubmitBin
Queries form information and submits binary data.
親トピック: Context Management Overview


WebPageUrl Function

Action

Requests and reads a complete document specified by a URL using the specified HTTP method. Use localhost if you want to connect to the local server. If the retrieved document is of content type HTML, it is parsed and embedded documents are requested.

Include file

WebAPI.bdh

Syntax

WebPageUrl(
  in sUrl : string,
  in sTimer : string optional,
in formUrl : form optional): boolean;

Return value

  • true if the page is downloaded successfully

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the file on the server. All characters that are part of the query string are not URL-encoded.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Example

dcltrans
  transaction TMain
  begin
    WebPageUrl("http://lab3/shopit/product.asp?code=2");
    WebPageUrl("http://lab3/shopit/product.asp",
"ShopIt - Product", SHOPIT_PRODUCT_ASP002);
  end TMain;
dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
親トピック: Page-Level Web Functions Overview


WebPageForm Function

Action

Posts the content of a Web form to the Web server by means of the HTTP POST method. If the form includes a random variable, this function selects a new random value each time the form is posted. If the retrieved document is of content type HTML, it is parsed and embedded documents are retrieved.

Include file

WebAPI.bdh

Syntax

WebPageForm(
  in sUrl : string,
  in formBody : form,
  in sTimer : string optional,
  in formUrl : form optional): boolean;

Return value

  • true if the page is downloaded successfully

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the document on the server. All characters that are part of the query string are not URL-encoded.
formBody | Form identifier used in the dclform section. The expanded form is added to the body of the request. The Content-Length and Content-Type header are added automatically. The default Content-Type is application/x-www-form-urlencoded and can be overwritten by a WebHeaderAdd("Content-Type", "myEncoding") function call prior to the WebPageForm function call.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Example

dcltrans
  transaction TMain
  begin
    WebPageForm("http://lab3/shopit/kindofpayment.asp", SUBMIT001,
"ShopIt - Pay with credit card");
  end TMain;
dclform
  SUBMIT001:
    "choice" := "Credit card",
    "paymentButton" := "Submit";
親トピック: Page-Level Web Functions Overview


WebPagePost Function

Action

Posts binary data to the Web server by means of the HTTP POST method. If the optional form for the query string includes a random variable, this function selects a new random value each time the form is posted. If the retrieved document is of content-type HTML, it is parsed and embedded documents are retrieved.

Instead of ASCII-encoded form content, binary data may be sent using this post function. The Content-Length header is automatically added to the request. The appropriate Content-Type has to be specified. In order to send binary data (octets) more safely over the Internet, use the WebBase64Encode function to convert the data to 6-bit ASCII characters.

Include file

WebAPI.bdh

Syntax

WebPagePost( in sUrl        : string,
             in sData       : string,
             in nDataLength : number optional,
             in sContent    : string optional,
             in sTimer      : string optional,
             in formUrl     : form optional ): boolean;

Return value

  • true if the page is downloaded successfully

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the document on the server. All characters that are part of the query string are not URL-encoded.
sData | Data to post to the server. This may also be binary data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLength | Amount of the data that is posted to the server (in bytes). Specify STRING_COMPLETE or omit this parameter to post all available data.
sContent | Content type string used in the request, for example, "image/gif".
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form is added to the URL after the "?".

Example

dcltrans
  transaction TWebPagePost
  begin
    // Post hard coded binary data in hexadecimal form
    // (first 20 ASCII sequences) along with an additional sub query
    WebPagePost("http://standardhost/data2html.asp",
        "\h0001020304050607080910111213141516171819",
        STRING_COMPLETE, "binary/custom", "Dummy Timer", FORM_01);
  end TWebPagePost;

dclform
  FORM_01:
    "SessionID" := "SID12345";
親トピック: Page-Level Web Functions Overview
関連資料
WebBase64Encode Function
WebPageForm Function
WebPagePostFile Function


WebPagePostFile Function

Action

Posts binary data to the Web server by means of the HTTP POST method. If the optional form for the query string includes a random variable, this function selects a new random value each time the form is posted. If the retrieved document is of content-type HTML, it is parsed and embedded documents are retrieved.

Instead of ASCII-encoded form content, binary data may be sent using this post function. The Content-Length header is automatically added to the request. The appropriate Content-Type has to be specified. In order to send binary data (octets) more safely over the Internet, use the WebBase64Encode function to convert the data to 6-bit ASCII characters.

Include file

WebAPI.bdh

Syntax

WebPagePostFile( in sUrl     : string,
                 in sFile    : string,
                 in sContent : string optional,
                 in sTimer   : string optional,
                 in formUrl  : form optional ): boolean;

Return value

  • true if the page is downloaded successfully

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the document on the server. All characters that are part of the query string are not URL-encoded.
sFile | File to post to the server.
sContent | Content type string used in the request, for example, "image/gif" (optional).
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form is added to the URL after the "?".

Example

dcltrans
  transaction TWebPagePostFile
  var
    sFile: string;
  begin
    sFile := "c:\\temp\\dummyfile.txt";
    WebPagePostFile("http://standardhost/data2html.asp",
    sFile, "text/plain", "Dummy Timer", FORM_01);
  end TWebPagePostFile;

dclform
  FORM_01:
    "SessionID" := "SID12345";
親トピック: Page-Level Web Functions Overview
関連資料
WebBase64Encode Function


WebPageLink Function

Action

Queries the currently active page for the specified HTML hyperlink. If this link is found, the function requests and reads the complete Web page that the link refers to. If the retrieved document is of content type HTML, it is parsed and embedded documents are requested.

There are different possibilities how hyperlinks can be named. These hyperlink identification rules are listed herein, ordered by priority:

  • Content text between the anchor begin and anchor end tag.

    <a href="data2html.asp">Content</a>

  • If the hyperlink is image-based, the “alt” attribute is used and added to the content text between the anchor begin and anchor end tag.

    <a href="data2html.asp"><img alt="BBK" src="p.gif"></a>

In the case of changing hyperlink descriptions, you can refer to the hyperlink by number instead of the description text. All hyperlinks are numbered sequentially throughout the Web page.

Include file

WebAPI.bdh

Syntax

WebPageLink( in sHyperlink : string allownull,
             in sTimer     : string optional,
             in nLinkNo    : number optional,
             in sFrame     : string optional,
             in hContext   : number optional): boolean;

Return value

  • true if the hyperlink is found and the page is downloaded successfully

  • false otherwise

Parameter | Description
sHyperlink | The name of the hyperlink to search for in the currently active Web page, or if the hContext parameter is not omitted to search for in the specified context. Set this parameter to NULL if a name is not available or if you want to identify the hyperlink only by number.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
nLinkNo | Number of the hyperlink in the Web page (optional). If sHyperlink is NULL, the function requests the document that the n-th hyperlink in the page refers to. If sHyperlink specifies a name, the function follows the n-th hyperlink with the given name.
sFrame | The name of the frame the document is assigned to (optional). If this parameter is provided, the hyperlink is searched only within this frame document.
hContext | Context, stored by a prior call of the WebPageStoreContext function, where to search for the link (optional). If this parameter is omitted the link is searched in the actual page and all stored contexts.

Example

dcltrans
  transaction TMain
  var
    hContext: number;
  begin
    WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
    WebPageStoreContext(hContext);
    WebPageLink("Join the experience!", "ShopIt - New Visitor");
    WebPageSubmit("Continue", CONTINUE001, "ShopIt - Main menu");
    WebPageLink("Products", "ShopIt - Products");
    WebPageLink(NULL, "ShopIt - Product", 3);
    WebPageLink("Help", "ShopIt - Help", 0, NULL, hContext);
  end TMain;

dclform
  CONTINUE001:
    "name"            := "jack",
    "New-Name-Button" := "Continue";
親トピック: Page-Level Web Functions Overview
関連資料
WebPageQueryLink Function


WebPageBack Function

Action

Moves the page context back for one or more pages.

Include file

WebAPI.bdh

Syntax

WebPageBack( in nPages: number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nPages | Number of pages to move the page context back (optional). If this parameter is omitted, the functions moves the page context back for one page.

Example

dcltrans
  transaction TMain
  begin
    WebPageUrl("http://www.mytestmall.com/", "Testmall - Menu");
    WebPageLink("Products", "Testmall - Products");
    WebPageBack();
    WebPageLink("Search", "Testmall - Search");
  end TMain;
親トピック: Page-Level Web Functions Overview


WebPageSubmit Function

Action

Queries the currently active page for the specified HTML form. If the form is found, the function submits the form to the Web server by means of the HTTP POST method and reads the response page. If the retrieved document is of content type HTML, it is parsed and embedded documents are requested. This function also supports multi-part file upload (RFC1867-compliant file upload).

The form value pairs of the parsed HTML base are used to provide data for the subsequent submission. This way hidden fields, for example, session ids, are automatically taken from the HTML form and submitted to the server. These default values may be overwritten by using a form identifier declared in the dclform section. The submission method, GET or POST, is defined by the HTML form. If it is missing, the GET method will be used.

WebPageSubmit() recognizes automatically form and form entry.

A file that is to be uploaded must be specified by a name-value pair in the following way:
"filename" := "<name of the input tag>;<file name>;<content type>";

Form identification rules are listed herein, ordered by priority:

  • HTML forms to be queried are identified by a name:

    <form name="form1" action="data2html.asp">
  <input type=hidden name="cantfind" value="#b21334a45">
  <input type=text name=ShoeSize value=44>
</form>

  • The “value” attribute of the submit button:

    <form name="form1" action="data2html.asp">
  <input type="submit" value=Insert>
</form>

  • The image used for submission may provide an “alt” attribute:

    <form name="form1" action="data2html.asp">
  <input type="image" src=box5.gif alt="PostBox">
</form>

In the case of a changing HTML form name, you can refer to the HTML form by number. All forms are numbered sequentially throughout the Web page.

Include file

WebAPI.bdh

Syntax

WebPageSubmit( in sHtmlForm   : string allownull,
               in formSubmit  : form,
               in sTimer      : string optional,
               in nHtmlFormNo : number optional,
               in sFrame      : string optional,
               in hContext    : number optional): boolean;

Return value

  • true if the form is found and submitted successfully

  • false otherwise

Parameter | Description
sHtmlForm | The name of the HTML form to search for in the currently active Web page, or if the hContext parameter is not omitted to search for in the specified context. Set this parameter to NULL if a name is not available or if you want to identify the HTML form only by its number.
formSubmit | Form identifier used in the dclform section. The expanded form is added to the body of the request. The Content-Length and Content-Type header are added automatically.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
nHtmlFormNo | Number of the Web form in the Web page (optional). If sHtmlForm is NULL, the number specifies the n-th form in the page. If sHtmlForm specifies a name, the number specifies the n-th form with the given name.
sFrame | The name of the frame the document is assigned to (optional). If this parameter is provided, the form is searched only within this frame document.
hContext | Context, stored by a prior call of the WebPageStoreContext function, where to search for the form (optional). If this parameter is omitted the form is searched in the actual page and all stored contexts.

Example

dcltrans
  transaction TMain
  var
    hContext: number;
  begin
    WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
    WebPageStoreContext(hContext);
    WebPageLink("Join the experience!", "ShopIt - New Visitor");
    WebPageSubmit("Continue", CONTINUE001, "ShopIt - Main menu");
    WebPageLink("Products", "ShopIt - Products");
    WebPageLink(NULL, "ShopIt - Product", 3);
    WebPageSubmit("Search", SEARCH001, "ShopIt - Search", 0, NULL, hContext);
  end TMain;

dclform
  CONTINUE001:
    "name"            := "jack",
    "New-Name-Button" := "Continue";
  SEARCH001:
    "search"          := "boot";

Example (for file upload)

 transaction TMain
  var
  begin
    WebPageUrl("http://demowebsite/conn_main.asp", "SilkPerformer Internet Compliancy Tests - Connectivity - Main");

    ThinkTime(37.7);
    WebPageSubmit("Submit", SUBMIT001, "Upload"); // Form 8

    ThinkTime(12.7);
    WebPageLink("Back", "SilkPerformer Internet Compliancy Tests - Connectivity - Main (#1)"); // Link 1
  end TMain;

dclform
  SUBMIT001:
    "filename" := "my_file;Math.jar;application/x-zip-compressed" <ENCODE_NONE> , // changed
    "submit"   := "" <USE_HTML_VAL> ; // unchanged, value: "Submit"
親トピック: Page-Level Web Functions Overview


WebPageSubmitBin Function

Action

Queries the currently active page for the specified HTML form. If this form is found, the function submits the form to the Web server by means of the HTTP POST method and reads the response page. If the retrieved document is of content type HTML, it is parsed and embedded documents are requested.

This function is used when the form submission uses an encoding format different to ‘application/x-www-form-urlencoded’. Most common cases are file uploads which use content-type ‘multipart/form-data’. Note that the default value pairs of the HTML form are not automatically used for submission. The body message has to be supplied as a whole.

Form identification rules are listed herein, ordered by priority:

  • HTML forms to be queried are identified by a name:

    <form name="form1" action="data2html.asp">
    <input type=hidden name="cantfind" value="#b21334a45">
    <input type=text name=ShoeSize value=44>
</form>

  • The “value” attribute of the submit button:

    <form name="form1" action="data2html.asp">
    <input type="submit" value=Insert>
</form>

  • The image used for submission may provide an “alt” attribute:

    <form name="form1" action="data2html.asp">
    <input type="image" src=box5.gif alt="PostBox">
</form>

In the case of changing HTML form name, you can refer to the HTML form by number. All forms are numbered sequentially throughout the Web page.

Include file

WebAPI.bdh

Syntax

WebPageSubmitBin( in sHtmlForm   : string allownull,
                  in sData       : string,
                  in nDataLength : number optional,
                  in sContent    : string optional,
                  in sTimer      : string optional,
                  in nFormNo     : number optional
                  in sFrame      : string optional,
                  in hContext    : number optional ): boolean;

Return value

  • true if the form is found and submitted successfully

  • false otherwise

Parameter | Description
sHtmlForm | The name of the HTML form to search for in the currently active Web page, or if the hContext parameter is not omitted in the specified context. Set this parameter to NULL if a name is not available or if you want to identify the HTML form only by its number.
sData | Data to post to the server. This may also be binary data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLength | Amount of data that is posted to the server (in bytes). Specify STRING_COMPLETE or omit this parameter to post all available data.
sContent | Content type string used in the request, for example, "image/gif" (optional).
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
nFormNo | Number of the Web form in the Web page (optional). If sHtmlForm is NULL, the number specifies the n-th form in the page. If sHtmlForm specifies a name, the number specifies the n-th form with the given name.
sFrame | The name of the frame the document is assigned to (optional). If this parameter is provided, the form is searched only within this frame document.
hContext | Context, stored by a prior call of the WebPageStoreContext function, where to search the form (optional). If this parameter is omitted the form is searched for in the actual page and all stored contexts.

Example

transaction TMain
begin
  WebPageUrl("http://lab1/", "Silk Performer Test Site");
  WebPageLink("File Upload Samples",
              "SA-FileUp Samples - Main Page");
  WebPageLink("Simple", "Simple Upload Example");
  WebPageSubmitBin("Upload File",
    "-----------------------------210021814825312\r\n"
    "Content-Disposition: form-data; name=\"FILE1\";"
    " filename=\"C:\\log.txt\"\r\n"
    "Content-Type: text/plain\r\n"
    "\r\n"
    "18:03:37.037 try to enter\r\n"
    "19:00:50.726 try to enter\r\n"
    "16:35:41.361 try to enter\r\n"
    "18:10:54.004 try to enter\r\n"
    "\r\n"
    "-----------------------------210021814825312\r\n"
    "Content-Disposition: form-data; name=\"SUB1\"\r\n"
    "\r\n"
    "Upload File\r\n"
    "-----------------------------210021814825312--\r\n", STRING_COMPLETE,
    "multipart/form-data",
    "Simple File Upload Results");
end TMain;

transaction TMain1
  var
    sData : string;
  begin
    sData := "\h0000656600760403000000003400";
    WebPageUrl("http://lab1/", "Silk Performer Test Site");
    WebPageSubmitBin("Upload Data", bin(sData), STRING_COMPLETE, "application/octet-stream")
  end TMain1;
親トピック: Page-Level Web Functions Overview


WebPageSubmitFile Function

Action

Queries the currently active page for the specified HTML form. If this form is found, the function submits the form to the Web server by means of the HTTP POST method and reads the response page. If the retrieved document is of content type HTML, it is parsed and embedded documents are requested.

This function is used when the form submission uses an encoding format different to ‘application/x-www-form-urlencoded’. Most common cases are file uploads which use content-type ‘multipart/form-data’. Note that the default value pairs of the HTML form are not automatically used for submission. The body message has to be supplied as a whole.

Form identification rules are listed herein, ordered by priority:

  • HTML forms to be queried are identified by a name:

    <form name="form1" action="data2html.asp">
  <input type=hidden name="cantfind" value="#b21334a45">
  <input type=text name=ShoeSize value=44>
</form>

  • The “value” attribute of the submit button:

    <form name="form1" action="data2html.asp">
  <input type="submit" value=Insert>
</form>

  • The image used for submission may provide an “alt” attribute:

    <form name="form1" action="data2html.asp">
  <input type="image" src=box5.gif alt="PostBox">
</form>

In the case of changing HTML form name, you can refer to the HTML form by number. All forms are numbered sequentially throughout the Web page.

Include file

WebAPI.bdh

Syntax

WebPageSubmitFile( in sHtmlForm : string allownull,
                   in sFile     : string,
                   in sContent  : string optional,
                   in sTimer    : string optional,
                   in nFormNo   : number optional,
                   in sFrame    : string optional,
                   in hContext  : number optional): boolean;

Return value

  • true if the form is found and submitted successfully

  • false otherwise

Parameter | Description
sHtmlForm | The name of the HTML form to search for in the currently active Web page, or if the hContext parameter is not omitted in the specified context. Set this parameter to NULL if a name is not available or if you want to identify the HTML form only by its number.
sFile | File to post to the server.
sContent | Content type string used in the request, for example, "image/gif" (optional).
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
nFormNo | Number of the Web form in the Web page (optional). If sHtmlForm is NULL, the number specifies the n-th form in the page. If sHtmlForm specifies a name, the number specifies the n-th form with the given name.
sFrame | The name of the frame the document is assigned to (optional). If this parameter is provided, the form is searched only within this frame document.
hContext | Context, stored by a prior call of the WebPageStoreContext function, where to search the form (optional). If this parameter is omitted the form is searched for in the actual page and all stored contexts.

Example

dcltrans
  transaction TMain
  var
    sFile: string;
  begin
    sFile := "c:\\temp\\dummyfile.txt";
    WebPageUrl("http://lab1/", "Silk Performer Test Site");
    WebPageLink("File Upload Samples",
                "SA-FileUp Samples - Main Page");
    WebPageLink("Simple", "Simple Upload Example");
    WebPageSubmitFile("Upload File", sFile);
  end TMain;
親トピック: Page-Level Web Functions Overview


WebPageSubmitFileUpload Function

Action

Queries the currently active page for the specified HTML form. If this form is found, the function submits the form, including specified files, to the Web server by means of the HTTP POST method and reads the response page. If the retrieved document is of content type HTML, it is parsed and embedded documents are requested. This function implements a RFC1867-compliant file upload function for form-based file upload in HTML.

This is a mapping to WebPageSubmitBin function, and uses a form specified in the dclform section to construct the data to post to the server.

The form consists of name-value pairs as usual, only the files to upload need a minor modification: a file to upload needs to be specified by a name-value pair in the following way:

"filename" := "<name of the input tag>;<file name>;<content type>";

Example

Upload of file c:\test.txt

HTML code:

<form enctype="multipart/form-data" action="data2html.asp" method=post>
  <input type="text" name="anyname" value="anyvalue">
  <input size="32" name="my_file" type="file">
  <input type="submit" value="Upload">
</form>

BDL form:

"anyname"  := "anyvalue",
"filename" := "my_file;C:\\test.txt;plain/text";

Include file

WebAPI.bdh

Syntax

WebPageSubmitFileUpload( in sHtmlForm  : string allownull,
                         in formSubmit : form,
                         in sTimer     : string optional,
                         in nFormNo    : number optional,
                         in sFrame     : string optional,
                         in hContext   : number optional) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sHtmlForm | The name of the HTML form to search for in the currently active Web page, or if the hContext parameter is not omitted in the specified context. Set this parameter to NULL if a name is not available or if you want to identify the HTML form only by its number.
formSubmit | Form identifier used in the dclform section. The expanded form is added to the body of the request. The Content-Length is added automatically. The Content-Type is multipart/form-data.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
nHtmlFormNo | Number of the Web form in the Web page (optional). If sHtmlForm is NULL, the number specifies the n-th form in the page. If sHtmlForm specifies a name, the number specifies the n-th form with the given name.
sFrame | The name of the frame the document is assigned to (optional). If this parameter is provided, the form is searched only within this frame document.
hContext | Context, stored by a prior call of the WebPageStoreContext function, where to search for the form (optional). If this parameter is omitted the form is searched in the actual page and all stored contexts.

Example

dcltrans
  transaction TWebPageSubmitFileUpload
  begin
    WebPageUrl("http://lab1/", "Test Site");
    WebPageLink("File Upload Samples", "Form-based File Upload ");
    WebPageSubmitFileUpload("uploadform", FILE_UPLOAD_FORM,
"File Upload Results");
  end TWebPageSubmitFileUpload;

dclform
  FILE_UPLOAD_FORM:
    "anyname"  := "anyvalue",
    "filename" := "my_file;C:\\temp\\test.doc;application/msword";
親トピック: Page-Level Web Functions Overview
関連資料
WebPageSubmitBin Function


WebPageFileUpload Function

Action

Posts the content of a Web form, including specified files, to the Web server by means of the HTTP POST method. This function implements a RFC1867-compliant file upload function for form-based file upload in HTML.

This is a mapping to WebPagePost, and uses a form specified in the dclform section to construct the data to post to the server.

The form consists of name-value pairs as usual, only the files to upload need a minor modification: a file to upload needs to be specified by a name-value pair in the following way:

"filename" := "<name of the input tag>;<file name>;<content type>";

Example

Upload of file c:\test.txt

HTML code:

<form enctype="multipart/form-data"
action="data2html.asp" method=post>
  <input type="text" name="anyname" value="anyvalue">
  <input size="32" name="my_file" type="file">
  <input type="submit" value="Upload">
</form>

BDL form:

"anyname"  := "anyvalue", "filename" := "my_file;C:\\test.txt;plain/text";

Include file

WebAPI.bdh

Syntax

WebPageFileUpload( in sUrl     : string,
                   in formBody : form,
                   in sTimer   : string optional,
                   in formUrl  : form optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUrl | Complete URL to the file on the server.
formBody | Form identifier used in the dclform section (see example below). The expanded form is added to the body of the request. The Content-Length is added automatically. The Content-Type is multipart/form-data.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form is added to the URL after the "?".

Example

dcltrans
  transaction TWebPageFileUpload
  begin
    WebPageFileUpload("http://standardhost/data2html.asp",
                      FILE_UPLOAD_FORM);
  end TWebPageFileUpload;

dclform
  FILE_UPLOAD_FORM:
    "anyname"  := "anyvalue",
    "filename" := "my_file;"
                  "C:\\temp\\test.doc;application/msword";
親トピック: Page-Level Web Functions Overview
関連資料
WebPagePost Function


WebPageAddUrl Function

Action

This function specifies an additional URL to be downloaded by the next page-level web function call (e.g.: WebPageUrl, WebPageLink).

This function specifies an additional URL to be downloaded by the next page-level web function call (e.g.: WebPageUrl, WebPageLink). This can be used to simulate the loading of documents done by JavaScript or applets.

注: This function does not perform any network requests. The subsequent WebPage function call will include this URL in the Web page download. Thus, the page download timer will correctly include the download of these documents.

Include file

WebAPI.bdh

Syntax

WebPageAddUrl(in sUrl : string,
              in formUrl : form optional,
              in nCount : number optional) : boolean;

Return value

  • true if the URL was added successfully

  • false otherwise

Parameter | Description
sUrl | Absolute or relative URL to the file on the server. All characters that are part of the query string are not URL-encoded. A relative URL is resolved to an absolute URL base on the URL that is downloaded by the next page-level Web API function call.
formUrl | Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.
nCount | The specified URL is added nCount times.

Example

dcltrans
transaction TMain
begin
  // absolute URL
  WebPageAddUrl("http://adimages.lab3/advertisement.gif");
  // relative URL, absolute path - downloads: "http://lab3/images/banner.gif"
  WebPageAddUrl("banner.gif");
  // relative URL, query string, 3 times
  // downloads: "http://lab3/images/product.asp?code=2"
  WebPageAddUrl("product.asp", SHOPIT_PRODUCT_ASP002, 3);
  WebPageUrl("http://lab3/shopit/", "ShopIt - Product");
end TMain;
dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
親トピック: Page-Level Web Functions Overview


WebPageQueryLink Function

Action

This function queries the currently active page context for hyperlinks. The query can be specified by defining a substring which has to occur in the hyperlinks URL (tag “href”) or by providing the number of the link. The results are the hyperlink’s name, the URL and the sequential number if the hyperlink is found.

Include file

WebAPI.bdh

Syntax

WebPageQueryLink( in  sUrlFilter   : string allownull,
                  in  nLinkNo      : number optional,
                  out sLinkName    : string optional,
                  in  nLinkNameLen : number optional,
                  out sUrl         : string optional,
                  in  nMaxUrlLen   : number optional,
                  in  sFrame       : string optional,
                  in  nMode        : number optional ): number;

Return value

  • the sequential number of the hyperlink found.

  • zero otherwise.

Parameter | Description
sUrlFilter | String which has to occur in the hyperlink's URL (tag “href”). Specify NULL to query for all hyperlinks.
nLinkNo | Hyperlink number to query for. If sUrlFilter is NULL, the function queries the n-th hyperlink in the page. Otherwise, the function queries the n-th hyperlink that matches the filter. Specify zero to use only the filter.
sLinkName | String variable that receives the name of the hyperlink (optional). See the WebPageLink function for naming rules.
nLinkNameLen | Maximum length of the hyperlink name to return (optional). This value must be less than or equal to the size of the string variable sLinkName.
sUrl | String receiving the URL the hyperlink refers to (optional). See the WebPageLink function for naming rules.
nMaxUrlLen | Maximum length of the URL string to return. This value must be less than or equal to the size of the string variable sUrl.
sFrame | The name of the frame the document is assigned to (optional). If this parameter is provided, the hyperlink is searched only within this frame document.
nMode

This can be any combination of the following values (optional):

  • WEB_QUERY_FLAG_LAST_PAGE (default)

  • WEB_QUERY_FLAG_HISTORY

  • WEB_QUERY_FLAG_STORED_CONTEXTS

Example

dcltrans
  transaction TMain
  var
    nLinkNo : number;
    sLink   : string(100);
    sUrl    : string(200);
  begin
    WebPageUrl("http://www.mytestmall.com/welcome_new.asp",
               "New Shopper");
    WebPageLink("Store Directory", "Product Listing Page");

    // search for the first hyperlink
    // with the string "pfid" in the URL
    nLinkNo := WebPageQueryLink("pfid", 0, sLink, STRING_COMPLETE, sUrl);

    // write test output
    write("link = "); writeln(sLink);
    write("URL = "); writeln(sUrl);

    // now request the page of the selected product
    WebPageLink(sLink, "SelectProductFromListing");
  end TMain;

Example

dcltrans
  transaction TQueryAllLinks
  var
    sName : string;
    i     : number;
  begin
    WebPageUrl("http://www.mycompany.com/");

    i := 1;
    while (WebPageQueryLink(NULL, i, sName, STRING_COMPLETE) > 0) do
      Print(string(i) + ". link: " + sName);
      i := i+1;
    end;

    Print(string(i-1) + " hyperlinks found");
  end TQueryAllLinks;
親トピック: Page-Level Web Functions Overview
関連資料
WebPageLink Function


WebPageCustomRequest Function

Action

Requests and reads a complete document specified by a URL using the specified HTTP method. If the retrieved document is of content type HTML, it is parsed, and embedded documents are requested.

Include file

WebAPI.bdh

Syntax

WebPageCustomRequest( in sMethod  : string,
                      in sUrl     : string,
                      in formBody : form optional,
                      in sTimer   : string optional,
                      in formUrl  : form optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sMethod | HTTP method used for the request (like GET, POST, or M-GET).
sUrl | Absolute URL to the file on the server. The entire character content of the query string will not be URL-encoded.
formBody

Form identifier used in the dclform section (optional). The expanded form is added to the body of the request. The Content-Length and Content-Type headers are added automatically. The default Content-Type is "application/x-www-form-urlencoded" and can be overwritten by a WebHeaderAdd("Content-Type", "myEncoding") function call prior to the WebPageCustomRequest function call.

Set this parameter to FORM_NULL if you do not want to specify a form. You would do this when you want to specify the following parameters but want to omit this parameter.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Example

dcltrans
  transaction TMain
  begin
    WebPageCustomRequest("GET", "http://standardhost/product.asp?code=2");
    WebPageCustomRequest("M-POST", "http://standardhost/product.asp",
      SHOPIT_PRODUCT_ASP003, "ShopIt - Product", SHOPIT_PRODUCT_ASP002);
  end TMain;

dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
  SHOPIT_PRODUCT_ASP003:
    "tent" := "1";
親トピック: Page-Level Web Functions Overview
関連資料
WebPageCustomRequestBin Function


WebPageCustomRequestBin Function

Action

Requests and reads a complete document specified by a URL using the specified HTTP method. The optional request body consists of binary data. If the retrieved document is of content type HTML, it is parsed, and embedded documents are requested.

Include file

WebAPI.bdh

Syntax

WebPageCustomRequestBin( in sMethod     : string,
                         in sUrl        : string,
                         in sData       : string,
                         in nDataLength : number optional,
                         in sContent    : string optional,
                         in sTimer      : string optional,
                         in formUrl     : form optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sMethod | HTTP method used for the request (like GET, POST, or M-GET).
sUrl | Absolute URL to the file on the server. The entire character content of the query string will not be URL-encoded.
sData | Data to post to the server. This may also be binary data. For posting all available binary data specify STRING_COMPLETE for nDataLength and use the bin() operator for sData (see example).
nDataLength | Amount of the data that is posted to the server (in bytes). Specify STRING_COMPLETE or omit this parameter to post all available data.
sContent | Content type string used in the request, for example, "image/gif" (optional). If this parameter is omitted, an "application/x-www-form-urlencoded" header is sent.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Example

dcltrans
  transaction TMain
  var
    sData: string(4);
  begin
    SetLong(sData, 1, 15708);
    WebPageCustomRequest("GET", "http://standardhost/product.asp?code=2");
    WebPageCustomRequestBin("M-POST", "http://standardhost/product.asp", bin(sData),
        STRING_COMPLETE, "application/octet-stream",
        "M-Post", SHOPIT_PRODUCT_ASP002);
  end TMain;

dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
親トピック: Page-Level Web Functions Overview
関連資料
WebPageCustomRequest Function
WebPageCustomRequestFile Function
WebCustomRequest Function


WebPageCustomRequestFile Function

Action

Requests and reads a complete document specified by a URL using the specified HTTP method. The optional request body consists of binary data. If the retrieved document is of content type HTML, it is parsed, and embedded documents are requested.

Include file

WebAPI.bdh

Syntax

WebPageCustomRequestFile( in sMethod  : string,
                          in sUrl     : string,
                          in sFile    : string,
                          in sContent : string optional,
                          in sTimer   : string optional,
                          in formUrl  : form optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sMethod | HTTP method used for the request (like GET, POST, or M-GET).
sUrl | Absolute URL to the file on the server. The entire character content of the query string will not be URL-encoded.
sFile | File to post to the server.
sContent | Content type string used in the request, for example, "image/gif" (optional). If this parameter is omitted, an "application/x-www-form-urlencoded" header is sent.
sTimer | Name of the timer used for page measurements (optional). If this parameter is omitted, no measurements are performed.
formUrl | Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Example

dcltrans
  transaction TMain
  var
    sFile: string;
  begin
    sFile := "c:\\temp\\dummyfile.txt";
    WebPageCustomRequest("GET", "http://standardhost/product.asp?code=2");
    WebPageCustomRequestFile("M-POST", "http://standardhost/product.asp", sFile,
                             "application/octet-stream", "M-Post", SHOPIT_PRODUCT_ASP002);
  end TMain;

dclform
  SHOPIT_PRODUCT_ASP002:
    "code" := "2";
親トピック: Page-Level Web Functions Overview
関連資料
WebPageCustomRequest Function


WebPageStoreContext Function

Action

Stores the context of the last page in the history, so that it will be available to all subsequent WebPageLink and WebPageSubmit calls. The available memory places are limited to 10 stored contexts. Call the WebPageDeleteContext function if the stored context is not needed any more.

The function call WebBrowserReset(WEB_RESET_ALL) deletes all stored contexts!

Include file

WebAPI.bdh

Syntax

WebPageStoreContext( inout hContext: number ): boolean;

Return value

  • true if the context is stored successfully

  • false otherwise

Parameter | Description
hContext | Variable that receives a handle to the stored context (used for a call to the WebPageDeleteContext function only.

Example

dcltrans
  transaction TInit
  begin
    //WebSetBrowser(WEB_BROWSER_MSIE5);
    WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;

  transaction TMain
  var
    hContext: number;
  begin
    WebPageUrl("http://mycompany.com/");
    WebPageStoreContext(hContext);
    WebPageLink("Internet Compliancy Tests");
    WebPageLink("Frame Tests");
    WebPageLink("sample", "Main Frame");
    WebPageUrl("http://quote.broker.com/");
    WebPageLink("quotes", "Document Moved");
    // this is a link of the page: "http://mycompany.com/"
    WebPageLink("VCRocket", "VCRocket", 0, NULL, hContext);
    WebPageDeleteContext(hContext);
  end TMain;
親トピック: Page-Level Web Functions Overview
関連資料
WebPageDeleteContext Function


WebPageDeleteContext Function

Action

Deletes a context stored by a call of the WebPageStore function.

Include file

WebAPI.bdh

Syntax

WebPageDeleteContext(in hContext: number): boolean;

Return value

  • true if the context is deleted successfully

  • false otherwise

Parameter | Description
hContext | Handle to a stored context.

Example

dcltrans
  transaction TInit
  begin
    //WebSetBrowser(WEB_BROWSER_MSIE5);
    WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;

  transaction TMain
  var
    hContext: number;
  begin
    WebPageUrl("http://mycompany.com/");
    WebPageStoreContext(hContext);
    WebPageLink("Internet Compliancy Tests");
    WebPageLink("Frame Tests");
    WebPageLink("sample", "Main Frame");
    WebPageUrl("http://quote.broker.com/");
    WebPageLink("quotes", "Document Moved");
    // this is a link of the page: "http://mycompany.com/"
    WebPageLink("VCRocket", "VCRocket", 0, NULL, hContext);
    WebPageDeleteContext(hContext);
  end TMain;
親トピック: Page-Level Web Functions Overview
関連資料
WebPageStoreContext Function


WebPageSuppress function

Action

Specifies a file that must not be loaded by future Web function calls.

Include file

WebAPI.bdh

Syntax

WebPageSuppress(in sUrl: string): boolean;

Return value

  • true if the file is successfully added to the suppress list

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the file on the server.

Example

dcltrans
transaction TMain
begin
WebPageSuppress("http://mycompany.com/t?s=all");
WebPageUrl("http://mycompany.com/");
WebPageLoadAll();
WebPageUrl("http://mycompany.com/");
end TMain;
親トピック: Page-Level Web Functions Overview
関連資料
WebPageLoadAll Function
WebSetDomainSuppress Function


WebPageLoadAll Function

Action

Clears all suppress-file entries added by prior calls to the WebPageSuppress function. No files are suppressed any more.

Include file

WebAPI.bdh

Syntax

WebPageLoadAll(): boolean;

Return value

  • true if the suppress-file list is cleared successfully

  • false otherwise

Example

dcltrans
transaction TMain
begin
WebPageSuppress("http://mycompany.com/t?s=all");
WebPageUrl("http://mycompany.com/");
WebPageLoadAll();
WebPageUrl("http://mycompany.com/");
end TMain;
親トピック: Page-Level Web Functions Overview
関連資料
WebPageSuppress function
WebSetDomainSuppress Function


WebPageSetActionUrlAbs Function

Action

Modifies the action URL of a subsequent WebPageSubmit or WebPageSubmitBin function using an absolute URL specified by the sUrl parameter.

If only the action URL of an HTML form is changed with client side scripting, all fields of the parsed form can be used and the action URL can be changed to any valid URL using this function.

Include file

WebAPI.bdh

Syntax

WebPageSetActionUrlAbs(  in sUrl    : string,
                         in formUrl : form optional ): boolean;

Return value

  • true if the operation completed successfully

  • false otherwise

Parameter | Description
sUrl | Absolute URL to the file on the server. All characters that are part of the query string are not URL-encoded.
formUrl | Form identifier used in the dclform section (optional). The expanded form string is appended to the URL after the "?". All unsafe characters are URL-encoded.

Example

dcltrans
  transaction TMain
  begin
    WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
    WebPageLink("Join the experience!", "ShopIt - New Visitor");
    WebPageSetActionUrlAbs("http://lab3/welcome.asp");
    WebPageSubmit("Continue", FORM_NULL, "ShopIt - Main menu")
  end TMain;
親トピック: Page-Level Web Functions Overview


WebPageSetActionUrl Function

Action

Modifies the action URL of a subsequent WebPageSubmit or WebPageSubmitBin function using a URL parsed by a call to the WebPageParseUrl function.

If only the action URL of an HTML form is changed with client side scripting, all fields of the parsed form can be used and the action URL can be changed to any parsed URL.

Include file

WebAPI.bdh

Syntax

WebPageSetActionUrl( in sUrl     : string,
                     in nUrlNo   : number optional,
                     in sFrame   : string optional,
                     in hContext : number optional): boolean;

Return value

  • true if the operation completed successfully

  • false otherwise

Parameter | Description
sUrl | Specifies the URL (parsed by a call to WebPageParseUrl) of which the URL should be used as action URL in the subsequent form submission. This URL is searched in the currently active Web page, or if the hContext parameter is not omitted it is searched in the specified context.
nUrlNo | Number of the URL in the specified frame (optional). The first appearance is taken if this parameter is omitted.
sFrame | Specifies the frame where to search the URL.
hContext | Context, stored by a prior call of the WebPageStoreContext function, where to search the URL (optional). If this parameter is omitted the URL is searched in the actual page and all stored contexts.

Example

dcltrans
  transaction TMain
  begin
    WebPageParseUrl("Continue", "load=\"", "\"");
    WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
    WebPageLink("Join the experience!", "ShopIt - New Visitor");
    WebPageSetActionUrl("Continue");
    WebPageSubmit("buy", FORM_BUY, "ShopIt - Main menu");
  end TMain;

dclform
  FORM_BUY;
親トピック: Page-Level Web Functions Overview


WebPageParseUrl Function

Action

Modifies the html-parser to find additional hyperlinks (for subsequent WebPageLink functions) and URLs, which can be used in subsequent WebPageSetActionUrl or WebPageQueryParsedUrl commands. A name must be specified, which is assigned to the links and URLs. A CR or LF between the beginning of the left boundary and the end of the right boundary is not allowed.

More than one WebPageParseUrl statements can be placed before a page-level API call, resulting in multiple parsing rules applied concurrently during downloading of the page.

注: A sub-sequent WebPageParseUrl call with the same sName parameter removes any parsed results from the first WebPageParseUrl call.

Include file

WebAPI.bdh

Syntax

WebPageParseUrl( in sName          : string,
                 in sLeftBoundary  : string optional,
                 in sRightBoundary : string optional,
                 in nOptions       : number optional ) : boolean;

Return value

  • none

Parameter | Description
sName | Name that is assigned to all links and URLs found.
sLeftBoundary | Left boundary string of the link or URL to search for (optional). If this parameter is omitted the parsing starts at the beginning of the document.
sRightBoundary | Right boundary string of the link or URL to search for (optional). If this parameter is omitted the parsing stops at the end of the document.
nOptions

Set to any combination of the following flags:

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that only documents are parsed which are downloaded (no cache hit).
WEB_FLAG_PARSE_URL
Specify this flag to enable the usage of the found URLs in subsequent calls to WebPageSetActionUrl and WebPageQueryParsedUrl.
WEB_FLAG_PARSE_LINK
Specify this flag to enable the usage of the found URLs in subsequent calls to WebPageLink.

If neither, WEB_FLAG_PARSE_URL nor WEB_FLAG_PARSE_LINK are specified a combination of the two flags is used.

Example

dcltrans
  transaction TMain
  begin
    WebPageParseUrl("Continue", "load=\"", "\"");
    WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
    WebPageLink("Join the experience!", "ShopIt - New Visitor");
    WebPageSetActionUrl("Continue");
    WebPageSubmit("unnamed", FORM_NULL, "ShopIt - Main menu");
  end TMain;
親トピック: Page-Level Web Functions Overview
関連資料
WebPageSetActionUrl Function
WebPageQueryParsedUrl Function


WebPageQueryParsedUrl Function

Action

This function is used to retrieve the URL parsed because of a WebPageParseUrl function call with the WEB_FLAG_PARSE_URL flag set.

Include file

WebAPI.bdh

Syntax

WebPageQueryParsedUrl( out sResult    : string,
                       in  nResultLen : number,
                       in  sUrl       : string,
                       in  nUrlNumber : number optional,
                       in  sFrame     : string optional,
                       in  hContext   : number optional): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sResult | String variable that receives the parsed URL.
nResultLen | Maximum length of the URL to return. This value must be less than or equal to the size of the string variable sUrl.
sUrl | Name that has been specified by the WebPageParseUrl command
nUrlNumber | The nUrlNumber appearance of the URL is retrieved (optional). If this parameter is omitted the first appearance is taken.
sFrame | The name of the frame the where the URL should be searched (optional). If this parameter is provided, the URL is searched only within this frame document.
hContext | Context, stored by a prior call of the WebPageStoreContext function, where to search the URL (optional). If this parameter is omitted the URL is searched in the actual page and all stored contexts.

Example

dcltrans
  transaction TMain
  var
    sResult : string;
  begin
    WebPageParseUrl("Continue", "load=\"", "\"");
    WebPageUrl("http://lab3/shopit/", "ShopIt - Greetings");
    WebPageLink("Join the experience!", "ShopIt - New Visitor");
    WebPageQueryParsedUrl(sResult, STRING_COMPLETE, "Continue", 2);
    WebPageUrl(sResult, "Continue");
  end TMain;
親トピック: Page-Level Web Functions Overview


Asynchronous Communication Functions

  • WebAsyncPreparePush Function
    Prepares an asynchronous communication channel for the push model.
  • WebAsyncPreparePoll Function
    Prepares an asynchronous communication channel for the poll model.
  • WebAsyncPrepareLongPoll Function
    Prepares an asynchronous communication channel for the long poll model.
  • WebAsyncGetResponseHeaders Function
    Retrieves the HTTP headers of the response.
  • WebAsyncStop Function
    Stops an asynchronous communication channel and aborts outstanding requests of this channel.
  • WebSocketConnect Function
    Connects to a WebSocket server and establishes an asynchronous bidirectional communication channel.
  • WebSocketConnectSync Function
    Connects to a WebSocket server and establishes a synchronous bidirectional communication channel.
  • WebSocketClose Function
    Closes the WebSocket communication channel.
  • WebSocketSendTextMessage Function
    Sends a text message to the WebSocket server. The function does not wait for a response.
  • WebSocketSendBinaryMessage Function
    Sends a binary message to the WebSocket server. The function does not wait for a response.
  • WebSocketReceiveMessage Function
    Receives a WebSocket message from the server.
親トピック: Web Functions Reference
関連概念
WebSocket 接続をテストする


WebAsyncPreparePush Function

Action

Prepares an asynchronous communication channel for the push model. The next BDL API call must be a low-level web API call, which will initiate an asynchronous communication channel. Asynchronous page-level API calls are not supported. The asynchronous request(s) happen in the background and will be executed in parallel to subsequent BDL API calls in the script.

An asynchronous communication channel is closed either by calling the BDL function WebAsyncStop() or when the browser session ends or at the end of the transaction if first time user behaviour is configured.

The callback will be called for each message part sent from the server and once with an empty sResponseBody argument when the communication channel is closed (end of response).

Include file

webapi.bdh

Syntax

WebAsyncPreparePush( in cbResponseCallback : callback optional ): number;
Parameter | Description
cbResponseCallback | The asynchronous response callback function. It has to be passed with the callback keyword (for example: callback(FCallback). The function has to be declared as follows: function FWebAsyncResponseCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>. The function has to be of type ASYNC_CALLBACK_FUNCTION. sResponseBody of the callback contains the content of the current response message part.

Return value

Returns a handle to the prepared asynchronous communication channel. This value has to be passed to WebAsyncStop() to stop the asynchronous communication and close the channel.

Example

dclfunc
  function FAsyncCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>
  begin
    RepMessage("MESSAGE: '" + sResponseBody + "'", SEVERITY_INFORMATIONAL);
    if (StrSearch(sResponseBody, "last message", STR_SEARCH_FIRST) <> 0) then
      UserSignal("LastMessage");
    end;
  end FAsyncCallback;

dcltrans
  transaction TMainListen
  var
    nAsyncChannel : number;
  begin
    WebPageUrl("http://demo.borland.com:8080/atmosphere-meteor-pubsub-2.1.3/", "/atmosphere-meteor-pubsub-2.0.3/");
    nAsyncChannel := WebAsyncPreparePush(callback(FAsyncCallback));
    WebFormGet("http://demo.borland.com:8080/atmosphere-meteor-pubsub-2.1.3/pubsub/mychannel_1234",
      METEOR_PUB_SUB_FORM);

    UserWaitFor("LastMessage", 60);

    WebAsyncStop(nAsyncChannel);

  end TMainListen;
親トピック: Asynchronous Communication Functions
関連概念
プロトコル レベルでの非同期通信のテスト
関連資料
WebAsyncPreparePoll Function
WebAsyncPrepareLongPoll Function


WebAsyncPreparePoll Function

Action

Prepares an asynchronous communication channel for the poll model. The next BDL API call must be a low-level web API call, which will initiate an asynchronous communication channel. Asynchronous page-level API calls are not supported. The asynchronous request(s) happen in the background and will be executed in parallel to subsequent BDL API calls in the script.

An asynchronous communication channel is closed either by calling the BDL function WebAsyncStop() or when the browser session ends or at the end of the transaction if first time user behaviour is configured.

The poll requests will be performed automatically at the specified interval until the asynchronous communication channel is closed. The callback will be called exactly once for each poll request.

Include file

webapi.bdh

Syntax

WebAsyncPreparePoll( in fInterval          : double,
                     in cbResponseCallback : callback optional ): number;
Parameter | Description
fInterval | The interval of the poll requests in seconds. If a poll request takes longer than the interval time, the following request will be performed immediately afterwards.
cbResponseCallback | The asynchronous response callback function. It has to be passed with the callback keyword (for example: callback(FCallback). The function has to be declared as follows: function FWebAsyncResponseCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>. The function has to be of type ASYNC_CALLBACK_FUNCTION. sResponseBody of the callback contains the content of the current response message part.

Return value

  • true if successful

  • false otherwise

Example

dclfunc
  function FAsyncCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>
  var
  begin
     RepMessage("RESPONSE: " + sResponseBody, SEVERITY_INFORMATIONAL);
  end FAsyncCallback;

dcltrans
  transaction TMain
  var
    nAsyncChannel : number;
  begin
    WebPageUrl("http://ajaxify.com/run/wiki/", "Ajax Wiki Demo");

    nAsyncChannel := WebAsyncPreparePoll(5.0, callback(FAsyncCallback));
    WebFormGet("http://ajaxify.com/run/wiki/content.php", WIKI_MESSAGES);

    Wait(23.0);

    WebAsyncStop(nAsyncChannel); // can be ommitted at the end of the transaction/script

  end TMain;
親トピック: Asynchronous Communication Functions
関連概念
プロトコル レベルでの非同期通信のテスト
関連資料
WebAsyncPreparePush Function
WebAsyncPrepareLongPoll Function


WebAsyncPrepareLongPoll Function

Action

Prepares an asynchronous communication channel for the long poll model. The next BDL API call must be a low-level web API call, which will initiate an asynchronous communication channel. Asynchronous page-level API calls are not supported. The asynchronous request(s) happen in the background and will be executed in parallel to subsequent BDL API calls in the script.

An asynchronous communication channel is closed either by calling the BDL function WebAsyncStop() or when the browser session ends or at the end of the transaction if first time user behaviour is configured.

Long poll requests are performed automatically until the asynchronous communication channel is closed. One long poll request follows immediately after the other. The callback will be called for each response message part received from the server and with an empty sResponseBody argument once the communication channel is closed.

Include file

webapi.bdh

Syntax

WebAsyncPrepareLongPoll( in cbResponseCallback : callback optional ): number;
Parameter | Description
cbResponseCallback | The asynchronous response callback function. It has to be passed with the callback keyword (for example: callback(FCallback). The function has to be declared as follows: function FWebAsyncResponseCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>. The function has to be of type ASYNC_CALLBACK_FUNCTION. sResponseBody of the callback contains the content of the current response message part.

Return value

  • true if successful

  • false otherwise

Example

var
  nTrackingId : number;
dclfunc
  function FAsyncCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>
  begin
    if Strlen(sResponseBody) = 0 then return end;

    RepMessage("MESSAGE: '" + sResponseBody + "'", SEVERITY_INFORMATIONAL);

    if (nTrackingId >= 5) then
      UserSignal("LastMessage");
    else
      nTrackingId := nTrackingId+1;
    end;
  end FAsyncCallback;

dcltrans
  transaction TMain
  var
    nAsyncChannel : number;
  begin
    nTrackingId := 0;

    nAsyncChannel := WebAsyncPrepareLongPoll(callback(FAsyncCallback));
    WebFormGet("http://lnz-testsite/showImage.php", FORM_PARAMS);

    UserWaitFor("LastMessage", 60);

    WebAsyncStop(nAsyncChannel);
  end TMain;

dclform

  FORM_PARAMS:
    "timewait"   := 1,
    "id="        := nTrackingId;
親トピック: Asynchronous Communication Functions
関連概念
プロトコル レベルでの非同期通信のテスト
関連資料
WebAsyncPreparePush Function
WebAsyncPreparePoll Function


WebAsyncGetResponseHeaders Function

Action

Retrieves the HTTP headers of the response sent by the server through an asynchronous communication channel. This function can only be called in an asynchronous callback function.

Include file

webapi.bdh

Syntax

WebAsyncGetResponseHeaders( out sHeaders : string ): boolean;
Parameter | Description
sHeaders | Out variable, which receives the HTTP headers string.

Return value

  • true if successful

  • false otherwise

Example

dclfunc
  function FAsyncCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>
  var
    sHeader : string;
  begin
    WebAsyncGetResponseHeaders(sHeader);
    RepMessage("HEADER: '" + sHeader + "'", SEVERITY_INFORMATIONAL);
    RepMessage("MESSAGE: '" + sResponseBody + "'", SEVERITY_INFORMATIONAL);

   if (StrSearch(sResponseBody, "last message", STR_SEARCH_FIRST) <> 0) then
      UserSignal("LastMessage");
    end;
  end FAsyncCallback;

dcltrans
  transaction TMainListen
  var
    nAsyncChannel : number;
    sParsedTrackingId : string;
  begin
    WebPageUrl("http://demo.borland.com:8080/atmosphere-meteor-pubsub-2.1.3/", "/atmosphere-meteor-pubsub-2.0.3/");

    Print("sTrackingId: '" + sTrackingId + "'");

    WebParseDataBoundEx(sParsedTrackingId, STRING_COMPLETE, "\n", 0, "|", WEB_FLAG_ALL_RESPONSES | WEB_FLAG_CASE_SENSITIVE, 1);
    WebFormGet("http://demo.borland.com:8080/atmosphere-meteor-pubsub-2.1.3/pubsub/mychannel_1234",
      METEOR_PUB_SUB_FORM, 5.0);

    sTrackingId := sParsedTrackingId;
    Print("sTrackingId: '" + sParsedTrackingId + "'");

    nAsyncChannel := WebAsyncPrepareLongPoll(callback(FAsyncCallback));
    WebFormGet("http://demo.borland.com:8080/atmosphere-meteor-pubsub-2.1.3/pubsub/mychannel_1234",
      METEOR_PUB_SUB_FORM);

    UserWaitFor("LastMessage", 60);

    WebAsyncStop(nAsyncChannel);

  end TMainListen;
親トピック: Asynchronous Communication Functions


WebAsyncStop Function

Action

Stops an asynchronous communication channel and aborts outstanding requests of this channel.

Include file

webapi.bdh

Syntax

WebAsyncStop( nAsyncHandle : number ): boolean;
Parameter | Description
nAsyncHandle | The handle value of the asynchronous communication channel, which was returned by a preceding WebAsyncPrepare...() function.

Return value

  • true if successful

  • false otherwise

Example

dclfunc
  function FAsyncCallback(sResponseBody : string) <ASYNC_CALLBACK_FUNCTION>
  begin
    RepMessage("MESSAGE: '" + sResponseBody + "'", SEVERITY_INFORMATIONAL);
    if (StrSearch(sResponseBody, "last message", STR_SEARCH_FIRST) <> 0) then
      UserSignal("LastMessage");
    end;
  end FAsyncCallback;

dcltrans
  transaction TMainListen
  var
    nAsyncChannel : number;
  begin
    WebPageUrl("http://demo.borland.com:8080/atmosphere-meteor-pubsub-2.1.3/", "/atmosphere-meteor-pubsub-2.0.3/");
    nAsyncChannel := WebAsyncPreparePush(callback(FAsyncCallback));
    WebFormGet("http://demo.borland.com:8080/atmosphere-meteor-pubsub-2.1.3/pubsub/mychannel_1234",
      METEOR_PUB_SUB_FORM);

    UserWaitFor("LastMessage", 60);

    WebAsyncStop(nAsyncChannel);

  end TMainListen;
親トピック: Asynchronous Communication Functions


WebSocketConnect Function

Action

Connects to a WebSocket server and establishes an asynchronous bidirectional communication channel.

Include file

webapi.bdh

Syntax

WebSocketConnect( in sUrl               : string,
                  in csResponseCallback : callback <ASYNC_CALLBACK_FUNCTION> optional ): number

Parameter | Description
sUrl | The URL of the WebSocket server. A WebSocket URL in JavaScript usually looks like this: ws://echo.websocket.org In Silk Performer, you have to specify http instead of ws, for example: http://echo.websocket.org
csResponseCallback | The asynchronous response callback function. It has to be passed with the callback keyword (for example: callback(FCallback). The function has to be declared as follows: function WebSocketConnect(csResponseCallback : string) <ASYNC_CALLBACK_FUNCTION>. The function has to be of type ASYNC_CALLBACK_FUNCTION. csResponseCallback of the callback contains the content of the current response message part.

Return value

  • a handle, which identifies the WebSocket, if the connection was established successfully
  • false otherwise

Example

 transaction TMain
  var
    hWebSocket : number;
  begin
    hWebSocket := WebSocketConnect("http://echo.websocket.org", callback(FWebSocketMessageReceived));

    WebSocketSendTextMessage(hWebSocket, "Rock it with HTML5 WebSocket");

    Print("Waiting...");
    Wait(4.1);

    WebSocketSendTextMessage(hWebSocket, "Hello World!");

    Print("Waiting...");
    Wait(3.6);

    WebSocketSendTextMessage(hWebSocket, "Bye");
    WebSocketClose(hWebSocket);
  end TMain;
親トピック: Asynchronous Communication Functions


WebSocketConnectSync Function

Action

Connects to a WebSocket server and establishes a synchronous bidirectional communication channel.

Include file

webapi.bdh

Syntax

WebSocketConnectSync( in sUrl : string ): number

Parameter | Description
sUrl | The URL of the WebSocket server. A WebSocket URL in JavaScript usually looks like this: ws://echo.websocket.org In Silk Performer, you have to specify http instead of ws, for example: http://echo.websocket.org

Return value

  • a handle, which identifies the WebSocket, if the connection was established successfully
  • false otherwise

Example

transaction TMain
  var
    hWebSocket0 : number;
    sMessage : string;
    nMessageKind : number;
  begin

    // SYNCHRONOUS: Messages from server via WebSocketReceiveMessage

    hWebSocket0 := WebSocketConnectSync("http://lnz-testsite:90/websocketechoexample/websocketecho");

    ThinkTime(2.1);
    WebSocketSendTextMessage(hWebSocket0, "Rock it with HTML5 WebSocket");

    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind);

    Print("Received message: '" + sMessage + "'");
    if (nMessageKind = WEBSOCKET_MESSAGEKIND_TEXT) then
      Print("Message Kind: TEXT");
    elseif (nMessageKind = WEBSOCKET_MESSAGEKIND_BINARY) then
      Print("Message Kind: BINARY");
    end;

    ThinkTime(3.8);
    WebSocketSendTextMessage(hWebSocket0, "Hello World!");

    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind);

    Print("Received message: '" + sMessage + "'");
    if (nMessageKind = WEBSOCKET_MESSAGEKIND_TEXT) then
      Print("Message Kind: TEXT");
    elseif (nMessageKind = WEBSOCKET_MESSAGEKIND_BINARY) then
      Print("Message Kind: BINARY");
    end;

    ThinkTime(2.8);
    WebSocketSendTextMessage(hWebSocket0, "Bye");

    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind);

    Print("Received message: '" + sMessage + "'");
    if (nMessageKind = WEBSOCKET_MESSAGEKIND_TEXT) then
      Print("Message Kind: TEXT");
    elseif (nMessageKind = WEBSOCKET_MESSAGEKIND_BINARY) then
      Print("Message Kind: BINARY");
    end;

    // NO MESSAGE FROM SERVER => Timeout, expect error to be raised for the following WebSocketReceiveMessage() (after 4.0 seconds of waiting)
    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind, 4.0); // specify 4.0 seconds timeout, default is infinite

    ThinkTime(1.0);
    WebSocketClose(hWebSocket0);
  end TMain;
親トピック: Asynchronous Communication Functions


WebSocketClose Function

Action

Closes a WebSocket communication channel. The client sends a close message to the server and waits until the server actually closes the connection. After WebSocketClose has been called, the associated WebSocket handle is not valid any longer.

Include file

webapi.bdh

Syntax

WebSocketClose( in hWebSocket    : number,
                in nStatusCode   : number optional,
                in sCloseMessage : dstring optional ): boolean;
Parameter | Description
hWebSocket | A handle, which identifies the WebSocket. To retrieve this handle, use the WebSocketConnect() function.
nStatusCode Optional: Reason for closing the WebSocket connection. For valid values, refer to http://tools.ietf.org/html/rfc6455#section-7.4. Some well known values are defined as BDL constants:
  • WEBSOCKET_CLOSESTATUS_NORMAL_CLOSURE := 1000;
  • WEBSOCKET_CLOSESTATUS_GOING_AWAY := 1001;
  • WEBSOCKET_CLOSESTATUS_PROTOCOL_ERROR := 1002;
  • WEBSOCKET_CLOSESTATUS_DATATYPE_NOT_ACCEPTED := 1003;
  • WEBSOCKET_CLOSESTATUS_NO_STATUSCODE := 1005;
  • WEBSOCKET_CLOSESTATUS_CLOSED_ABNORMALLY := 1006;
  • WEBSOCKET_CLOSESTATUS_DATA_INCONSISTENT := 1007;
  • WEBSOCKET_CLOSESTATUS_POLICY_VIOLATION := 1008;
  • WEBSOCKET_CLOSESTATUS_MESSAGE_TOO_BIG := 1009;
  • WEBSOCKET_CLOSESTATUS_EXTENSION_NOT_SUPPORTED := 1010;
  • WEBSOCKET_CLOSESTATUS_UNEXPECTED_CONDITION := 1011;
  • WEBSOCKET_CLOSESTATUS_TLS_HANDSHAKE_FAILURE := 1015;
sCloseMessage | Optional: Additional message for diagnostic purposes

Return value

  • true if successful

  • false otherwise

Example

 transaction TMain
  var
    hWebSocket : number;
  begin
    hWebSocket := WebSocketConnect("http://echo.websocket.org", callback(FWebSocketMessageReceived));

    WebSocketSendTextMessage(hWebSocket, "Rock it with HTML5 WebSocket");

    Print("Waiting...");
    Wait(4.1);

    WebSocketSendTextMessage(hWebSocket, "Hello World!");

    Print("Waiting...");
    Wait(3.6);

    WebSocketSendTextMessage(hWebSocket, "Bye");
    WebSocketClose(hWebSocket);
  end TMain;
親トピック: Asynchronous Communication Functions


WebSocketSendTextMessage Function

Action

Sends a text message to the WebSocket server. The function does not wait for a response. Note: A WebSocket is an asynchronous communication channel, which is not bound to the conventional request-response pattern. Both the client and the server can send messages at any time.

Include file

webapi.bdh

Syntax

WebSocketSendTextMessage( in hWebSocket       : number,
                          in sData            : dstring,
                          in nMaxFragmentSize : number optional ): boolean

Parameter | Description
hWebSocket | A handle, which identifies the WebSocket. To retrieve this handle, use the WebSocketConnect() function.
sData | The content of the message to be sent to the server.
nMaxFragmentSize | Large messages can be split up into smaller parts or fragments by the client. This parameter specifies the maximum size of one fragment.

Return value

  • true if successful

  • false otherwise

Example

 transaction TMain
  var
    hWebSocket : number;
  begin
    hWebSocket := WebSocketConnect("http://echo.websocket.org", callback(FWebSocketMessageReceived));

    WebSocketSendTextMessage(hWebSocket, "Rock it with HTML5 WebSocket");

    Print("Waiting...");
    Wait(4.1);

    WebSocketSendTextMessage(hWebSocket, "Hello World!");

    Print("Waiting...");
    Wait(3.6);

    WebSocketSendTextMessage(hWebSocket, "Bye");
    WebSocketClose(hWebSocket);
  end TMain;
親トピック: Asynchronous Communication Functions


WebSocketSendBinaryMessage Function

Action

Sends a binary message to the WebSocket server. The function does not wait for a response. Note: A WebSocket is an asynchronous communication channel, which is not bound to the conventional request-response pattern. Both the client and the server can send messages at any time.

Include file

webapi.bdh

Syntax

WebSocketSendBinaryMessage( in hWebSocket       : number,
                            in sData            : dstring,
                            in nMaxFragmentSize : number optional ): boolean

Parameter | Description
hWebSocket | A handle, which identifies the WebSocket. To retrieve this handle, use the WebSocketConnect() function.
sData | The content of the message to be sent to the server.
nMaxFragmentSize | Large messages can be split up into smaller parts or fragments by the client. This parameter specifies the maximum size of one fragment.

Return value

  • true if successful

  • false otherwise

Example

transaction TMain
  var
    hWebSocket : number;
  begin
    hWebSocket := WebSocketConnect("http://echo.websocket.org", callback(FWebSocketMessageReceived));

    WebSocketSendTextMessage(hWebSocket, "Rock it with HTML5 WebSocket");

    Print("Waiting...");
    Wait(4.1);

    WebSocketSendBinaryMessage(hWebSocket, "\h48656c6c6f20576f726c6421");

    Print("Waiting...");
    Wait(3.6);

    WebSocketSendTextMessage(hWebSocket, "Bye");
    WebSocketClose(hWebSocket);
  end TMain;
親トピック: Asynchronous Communication Functions


WebSocketReceiveMessage Function

Action

Receives a WebSocket message from the server. You must establish a synchronous WebSocket connection (with the function WebSocketConnectSync) beforehand. Do not use the function WebSocketConnect in this case, as this will establish an asynchronous WebSocket connection.

Include file

webapi.bdh

Syntax

WebSocketReceiveMessage( in hWebSocket    : number,
                         out sData        : dstring optional,
                         out nMessageKind : number optional,
                         in fTimeout      : double optional ): boolean
Parameter | Description
hWebSocket | A handle, which identifies the WebSocket. To retrieve this handle, use the WebSocketConnectSync() function.
sData Will contain the WebSocket message received from the server.

If nMessageKind is of type text, sData will contain the text converted in the current codepage.

If nMessageKind is of type binary, sData will contain the bytes received from the server.

nMessageKind Will contain the kind of WebSocket message received from the server. Can be one of the following:
  • WEBSOCKET_MESSAGEKIND_TEXT := 1; // text message
  • WEBSOCKET_MESSAGEKIND_BINARY := 2; // binary message
fTimeout | Defines the timeout (in seconds) for waiting for a WebSocket message from the server. If no message is received within this timespan, the function returns false. The default value is 0 (infinite).

Return value

  • true if successful

  • false otherwise

Example

 transaction TMain
  var
    hWebSocket0 : number;
    sMessage : string;
    nMessageKind : number;
  begin

    // SYNCHRONOUS: Messages from server via WebSocketReceiveMessage

    hWebSocket0 := WebSocketConnectSync("http://lnz-testsite:90/websocketechoexample/websocketecho");

    ThinkTime(2.1);
    WebSocketSendTextMessage(hWebSocket0, "Rock it with HTML5 WebSocket");

    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind);

    Print("Received message: '" + sMessage + "'");
    if (nMessageKind = WEBSOCKET_MESSAGEKIND_TEXT) then
      Print("Message Kind: TEXT");
    elseif (nMessageKind = WEBSOCKET_MESSAGEKIND_BINARY) then
      Print("Message Kind: BINARY");
    end;

    ThinkTime(3.8);
    WebSocketSendTextMessage(hWebSocket0, "Hello World!");

    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind);

    Print("Received message: '" + sMessage + "'");
    if (nMessageKind = WEBSOCKET_MESSAGEKIND_TEXT) then
      Print("Message Kind: TEXT");
    elseif (nMessageKind = WEBSOCKET_MESSAGEKIND_BINARY) then
      Print("Message Kind: BINARY");
    end;

    ThinkTime(2.8);
    WebSocketSendTextMessage(hWebSocket0, "Bye");

    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind);

    Print("Received message: '" + sMessage + "'");
    if (nMessageKind = WEBSOCKET_MESSAGEKIND_TEXT) then
      Print("Message Kind: TEXT");
    elseif (nMessageKind = WEBSOCKET_MESSAGEKIND_BINARY) then
      Print("Message Kind: BINARY");
    end;

    // NO MESSAGE FROM SERVER => Timeout, expect error to be raised for the following WebSocketReceiveMessage() (after 4.0 seconds of waiting)
    WebSocketReceiveMessage(hWebSocket0, sMessage, nMessageKind, 4.0); // specify 4.0 seconds timeout, default is infinite

    ThinkTime(1.0);
    WebSocketClose(hWebSocket0);
  end TMain;
親トピック: Asynchronous Communication Functions


Page Statistic Functions

  • WebPageStatistics Function
    Provides measurements for the last page-level function call.
  • WebPageStatCalcSummaryNode Function
    Calculates a node summary of all nodes that match the specified search criteria.
  • WebPageStatCountNodes Function
    Counts all nodes that match the specified search criteria.
  • WebPageStatFindFirstNode Function
    Returns the first node that matches the specified search criteria.
  • WebPageStatFindNextNode Function
    Returns the next node that matches the specified search criteria.
  • WebPageStatGetFirstEmbedded Function
    Returns the first embedded object of a node (specified by node ID).
  • WebPageStatGetNextEmbedded Function
  • WebPageStatGetFirstFrame Function
    Returns the first frame of a node (specified by node ID).
  • WebPageStatGetNextFrame Function
  • WebPageStatGetNextReload Function
    Returns the subsequent node in a redirection chain.
  • WebPageStatGetNodeData Function
    Returns information about a node (specified by the node ID) that is returned by a previous WebPageStatXXX function call.
  • WebPageStatGetNodeInfo Function
    Returns information about a node (specified by the node ID) that is returned by a previous WebPageStatXXX function call.
  • WebPageStatGetRootNode Function
    Returns the root node of the most recently loaded page.
  • WebPageStatToTsd Function
    Adds detailed timers for the last page to the time series data.
親トピック: Web Functions Reference


WebPageStatistics Function

Action

Provides measurements for the last page-level function call.

Include file

WebAPI.bdh

Syntax

WebPageStatistics(
   in  nSource : number,
   in  nOption : number,
   out nResult : number): boolean;

Return value

  • true if the specified value was set

  • false otherwise

Parameter | Description
nSource

Specifies for which documents to provide measurements. This parameter must be one of the following values:

STATFLAG_HTMLDOC
Provides measurements for all HTML documents.
STATFLAG_OTHERDOC
Provides measurements all types of documents except HTML documents.
STATFLAG_ALL
Provides measurements for all types of documents.
nOption

Can be set to one of the following values:

STATFLAG_HTTPREQUESTS
Number of requests without an "if-modified-since" header.
STATFLAG_CONDHTTPREQUESTS
Number of conditional requests; these are requests with an "if-modified-since" header.
STATFLAG_CACHEHITS
Number of cache hits; that is, when the requested document was found in the document cache and no request was sent to the server.
STATFLAG_HITSFAILED
Number of failed requests.
STATFLAG_1XX
Number of 1xx responses.
STATFLAG_2XX
Number of 2xx responses.
STATFLAG_3XX
Number of 3xx responses.
STATFLAG_4XX
Number of 4xx responses.
STATFLAG_5XX
Number of 5xx responses.
STATFLAG_TIMERCONNECT
Sum of the duration, in ms, of all TCP/IP connects.
STATFLAG_TIMERSSLCONNECT
Sum of the duration, in ms, of all SSL connects.
STATFLAG_TIMERSEND
Sum of the duration, in ms, of all send operations.
STATFLAG_TIMERSERVERBUSY
Sum of all server-busy times, in ms. The time measurement starts after the last packet was sent and stops when the first packet is received.
STATFLAG_TIMERRECV
Sum of the duration, in ms, of all receive operations.
STATFLAG_TIMERDNS
Sum of the duration, in ms, of all domain name resolutions.
STATFLAG_CONNECTCOUNT
Number of TCP/IP connects.
STATFLAG_SSLCONNECTCOUNT
Number of SSL connection handshakes; this is a subset of the STATFLAG_CONNECTCOUNT measurement.
STATFLAG_SENDCOUNT
Number of requests sent to the server.
STATFLAG_LINKS
Number of HTTP(S) links in the most recently downloaded Web page. The Link checking option must be enabled for this result to be available.
STATFLAG_LINKSWORKING
Number of working HTTP(S) links in the most recently downloaded Web page. The Link checking option must be enabled for this result to be available.
STATFLAG_BYTESSENT
Number of bytes sent to the server.
STATFLAG_BYTESRECEIVED
Number of bytes received from the server.
STATFLAG_TimeToFirstByte
Time from request start until the first response from the server arrives.
nResult | Variable that receives the result.

Example

dcltrans
  transaction TMain
  var
    nResult: number;
  begin
    WebPageUrl("http://standardhost/");
    WebPageStatistics(STATFLAG_ALL, STATFLAG_TIMERSERVERBUSY, nResult);
    Print(string(nResult));
    WebPageStatistics(STATFLAG_HTMLDOC, STATFLAG_TIMERDNS, nResult);
    Print(string(nResult));
  end TMain;
親トピック: Page Statistic Functions


WebPageStatCalcSummaryNode Function

Action

Calculates a node summary of all nodes that match the specified search criteria. Possible search parameters include: URL, content-type of the response, document load-type (load, cache-hit, suppressed), document kind (html or embedded), and the location within a redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

The return value is the number of nodes that have been used for the calculation of the summary node.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatCalcSummaryNode(
   in sUrlFilter         : string optional,
   in sContentTypeFilter : string optional,
   in nMatch             : number optional,
   in nFlags             : number optional ): number;

Return value

The number of nodes that have been used for the calculation of the summary node.

Parameter | Description
sUrlFilter | String to which the actual URL is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”), no URL comparison is performed.
sContentTypeFilter | String to which the actual content-type (server response) is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”) no content-type comparison is performed.
nMatch

Specify one of the following values (optional):

PAGE_STAT_MATCH_Exact (default)
Case-sensitive comparison.
PAGE_STAT_MATCH_ExactNoCase
Case-insensitive comparison.
PAGE_STAT_MATCH_Wildcard
The search string must either begin or end with a ‘*’ character, which matches everything. The remainder of the string is compared case-sensitively.
PAGE_STAT_MATCH_WildcardNoCase
The search string must either begin or end with a ‘*’ character, which matches everything. The rest of the string is compared case-insensitively.
PAGE_STAT_MATCH_RegExp
The search string is a regular expression. See the regular expression chapter for a description of Silk Performer regular expression capability.
nFlags

Specifies the various options used by the search for the nodes. When this parameter is omitted the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_UseHtml
The search includes nodes of the document section of the page (commonly html documents).
PAGE_STAT_FLAG_UseEmbedded
The search includes nodes of the embedded section of the page (commonly images or scripts).
PAGE_STAT_FLAG_NodeTypeLoad
The search includes nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
The search includes nodes that have been found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
The search includes nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyFirst
The search only returns the first nodes of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server). Any subsequent nodes of a redirection chain are not returned.
PAGE_STAT_FLAG_RedirChainOnlyLast
The search only returns the last nodes of a potential redirection chain. Any proceeding nodes of a redirection chain are not returned. This option can be used to only find documents that the browser can actually show to the user.

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodes  : number;
    fValue  : float;
  begin

    WebPageURL("http://lab3/");
    nNodes := WebPageStatCalcSummaryNode(null, "image/*",
              PAGE_STAT_MATCH_WildcardNoCase);
    if nNodes > 0 then
      WebPageStatGetNodeData(STATFLAG_BytesSent, fValue,
                             PAGE_STAT_Calculated);
      print("Bytes sent for images: " + string(fValue));
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatCountNodes Function

Action

Counts all nodes that match the specified search criteria. Possible search parameters are: URL, content-type of the response, document load-type (load, cache-hit, suppressed), document kind (html or embedded), and location within a redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

The return value is the number of nodes that match the specified search criteria.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatCountNodes(
   in sUrlFilter         : string optional,
   in sContentTypeFilter : string optional,
   in nMatch             : number optional,
   in nFlags             : number optional ): number;

Return value

The number of nodes that match the specified search criteria.

Parameter | Description
sUrlFilter | String to which the actual URL is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”), no URL comparison is performed.
sContentTypeFilter | String to which the actual content-type (server response) is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”) no content-type comparison is performed.
nMatch

Specify one of the following values (optional):

PAGE_STAT_MATCH_Exact (default)
Case-sensitive comparison
PAGE_STAT_MATCH_ExactNoCase
Case-insensitive comparison
PAGE_STAT_MATCH_Wildcard
The search string must either begin or end with a ‘*’ character, which matches everything. The remainder of the string is compared case-sensitively.
PAGE_STAT_MATCH_WildcardNoCase
The search string must either begin or end with a ‘*’ character, which matches everything. The rest of the string is compared case-insensitively.
PAGE_STAT_MATCH_RegExp
The search string is a regular expression. See the regular expression chapter for a description of Silk Performer regular expression capability.
nFlags

Specifies the various options used by the search for the nodes. When this parameter is omitted the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_UseHtml
The search includes nodes of the document section of the page (commonly html documents).
PAGE_STAT_FLAG_UseEmbedded
The search includes nodes of the embedded section of the page (commonly images or scripts).
PAGE_STAT_FLAG_NodeTypeLoad
The search includes nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
The search includes nodes that have been found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
The search includes nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyFirst
The search only returns the first nodes of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server). Any subsequent nodes of a redirection chain are not returned.
PAGE_STAT_FLAG_RedirChainOnlyLast
The search only returns the last nodes of a potential redirection chain. Any proceeding nodes of a redirection chain are not returned. This option can be used to only find documents that the browser can actually show to the user.

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodes  : number;
    fValue  : float;
  begin

    WebPageURL("http://lab3/");
    nNodes := WebPageStatCountNodes(null, "image/*",
              PAGE_STAT_MATCH_WildcardNoCase);
    if nNodes > 0 then
      WebPageStatGetNodeData(STATFLAG_BytesSent, fValue,
                             PAGE_STAT_Calculated);
      print("number of images: " + string(fValue));
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatFindFirstNode Function

Action

Returns the first node that matches the specified search criteria. Possible search parameters are: URL, content-type of the response, document load-type (load, cache-hit, suppressed), document kind (html or embedded), and location within a redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

The return value is a node ID that can be used in other WebPageStatXXX calls.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatFindFirstNode(
   in sUrlFilter         : string optional,
   in sContentTypeFilter : string optional,
   in nMatch             : number optional,
   in nFlags             : number optional ): number;

Return value

  • 0 if the node can not be found

  • >0 otherwise

Parameter | Description
sUrlFilter | String to which the actual URL is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”), no URL comparison is performed.
sContentTypeFilter | String to which the actual content-type (server response) is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”) no content-type comparison is performed.
nMatch

Specify one of the following values (optional):

PAGE_STAT_MATCH_Exact (default)
Case-sensitive comparison.
PAGE_STAT_MATCH_ExactNoCase
Case-insensitive comparison.
PAGE_STAT_MATCH_Wildcard
The search string must either begin or end with a ‘*’ character, which matches everything. The remainder of the string is compared case-sensitively.
PAGE_STAT_MATCH_WildcardNoCase
The search string must either begin or end with a ‘*’ character, which matches everything. The rest of the string is compared case-insensitively.
PAGE_STAT_MATCH_RegExp
The search string is a regular expression. See the regular expression chapter for a description of Silk Performer regular expression capability.
nFlags

Specifies the various options used by the search for the nodes. When this parameter is omitted the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_UseHtml
The search includes nodes of the document section of the page (commonly html documents).
PAGE_STAT_FLAG_UseEmbedded
The search includes nodes of the embedded section of the page (commonly images or scripts).
PAGE_STAT_FLAG_NodeTypeLoad
The search includes nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
The search includes nodes that have been found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
The search includes nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyFirst
The search only returns the first nodes of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server). Any subsequent nodes of a redirection chain are not returned.
PAGE_STAT_FLAG_RedirChainOnlyLast
The search only returns the last nodes of a potential redirection chain. Any proceeding nodes of a redirection chain are not returned. This option can be used to only find documents that the browser can actually show to the user.

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodes  : number;
    sUrl    : string;
  begin

    WebPageURL("http://lab3/");
    nNodes := WebPageStatFindFirstNode(null, "image/*",
             PAGE_STAT_MATCH_WildcardNoCase);
    while nNodes > 0 do
      WebPageStatGetNodeInfo(null, sURL);
      print("URL: " + sURL);
      nNodes := WebPageStatFindNextNode(null, "image/*",
               PAGE_STAT_MATCH_WildcardNoCase);
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatFindNextNode Function

Action

Returns the next node that matches the specified search criteria. Use in combination with WebPageStatFindFirstNode. Possible search parameters are: URL, content-type of the response, document load-type (load, cache-hit, suppressed), document type (html or embedded), and the location within a redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

The return value is a node ID that can be used in other WebPageStatXXX calls.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatFindNextNode(
   in sUrlFilter         : string optional,
   in sContentTypeFilter : string optional,
   in nMatch             : number optional,
   in nFlags             : number optional ): number;

Return value

  • 0 if the node can not be found

  • >0 otherwise

Parameter | Description
sUrlFilter | String to which the actual URL is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”), no URL comparison is performed.
sContentTypeFilter | String to which the actual content-type (server response) is to be compared. The nMatch parameter specifies the comparison method. When this parameter is omitted (null or “”) no content-type comparison is performed.
nMatch

Specify one of the following values (optional):

PAGE_STAT_MATCH_Exact (default)
Case-sensitive comparison.
PAGE_STAT_MATCH_ExactNoCase
Case-insensitive comparison.
PAGE_STAT_MATCH_Wildcard
The search string must either begin or end with a ‘*’ character, which matches everything. The remainder of the string is compared case-sensitively.
PAGE_STAT_MATCH_WildcardNoCase
The search string must either begin or end with a ‘*’ character, which matches everything. The rest of the string is compared case-insensitively.
PAGE_STAT_MATCH_RegExp
The search string is a regular expression. See the regular expression chapter for a description of Silk Performer regular expression capability.
nFlags

Specifies the various options used by the search for the nodes. When this parameter is omitted the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_UseHtml
The search includes nodes of the document section of the page (commonly html documents).
PAGE_STAT_FLAG_UseEmbedded
The search includes nodes of the embedded section of the page (commonly images or scripts).
PAGE_STAT_FLAG_NodeTypeLoad
The search includes nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
The search includes nodes that have been found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
The search includes nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyFirst
The search only returns the first nodes of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server). Any subsequent nodes of a redirection chain are not returned.
PAGE_STAT_FLAG_RedirChainOnlyLast
The search only returns the last nodes of a potential redirection chain. Any proceeding nodes of a redirection chain are not returned. This option can be used to only find documents that the browser can actually show to the user.

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodes  : number;
    sUrl    : string;
  begin

    WebPageURL("http://lab3/");
    nNodes := WebPageStatFindFirstNode(null, "image/*",
             PAGE_STAT_MATCH_WildcardNoCase);
    while nNodes > 0 do
      WebPageStatGetNodeInfo(null, sURL);
      print("URL: " + sURL);
      nNodes := WebPageStatFindNextNode(null, "image/*",
               PAGE_STAT_MATCH_WildcardNoCase);
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetFirstEmbedded Function

Action

Returns the first embedded object of a node (specified by node ID). The node ID is returned by a previous WebPageStatXXX function call. Use this function in combination with WebPageStatGetNextEmbedded().

The return value is a node ID that can be used in other WebPageStatXXX calls.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatGetFirstEmbedded(
   in nNode  : number,
   in nFlags : number optional ): number;

Return value

  • 0 if there is no embedded object

  • >0 otherwise

Parameter | Description
nNode | Node ID returned by a previous WebPageStatXXX function.
nFlags

Specifies the various options used by the search. If this parameter is omitted, the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_NodeTypeLoad
Returns nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
Returns nodes that have been found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
Returns nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyLast:
Returns the last node of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodeRoot : number;
    nNode     : number;
    fValue    : float;
    sUrl      : string;
  begin

    WebPageURL("http://lab3/");
    nNodeRoot := WebPageStatGetRootNode();
    if nNodeRoot > 0 then
      nNode := WebPageStatGetFirstEmbedded(nNodeRoot);
      while nNode > 0 do
        WebPageStatGetNodeInfo(null, sUrl);
        WebPageStatGetNodeData(STATFLAG_BytesSent, fValue);
        print("Url: " + sUrl);
        print("BytesSent: " + string(fValue));
        nNode := WebPageStatGetNextEmbedded(nNodeRoot);
      end;
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetNextEmbedded Function

Action

Returns the next embedded object of a node (specified by its node ID). Use this function in combination with WebPageStatGetFirstEmbedded().

The return value is a node ID, which can be used in various other WebPageStatXXX calls.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatGetNextEmbedded(
   in nNode  : number,
   in nFlags : number optional ): number;

Return value

  • 0 if there are no more embedded objects

  • >0 otherwise

Parameter | Description
nNode | Node ID returned by a previous WebPageStatXXX function.
nFlags

Specifies the various options used by the search for the node. If this parameter is omitted the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_UseEmbedded
Returns nodes of the embedded section of the page (commonly images or scripts).
PAGE_STAT_FLAG_NodeTypeLoad
Returns nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
Returns nodes found in the cache (full cache hit), so that no request to the server is sent.
PAGE_STAT_FLAG_NodeTypeSuppress
Returns nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyLast
Returns the last node of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodeRoot : number;
    nNode     : number;
    fValue    : float;
    sUrl      : string;
  begin

    WebPageURL("http://lab3/");
    nNodeRoot := WebPageStatGetRootNode();
    if nNodeRoot > 0 then
      nNode := WebPageStatGetFirstEmbedded(nNodeRoot);
      while nNode > 0 do
        WebPageStatGetNodeInfo(null, sUrl);
        WebPageStatGetNodeData(STATFLAG_BytesSent, fValue);
        print("Url: " + sUrl);
        print("BytesSent: " + string(fValue));
        nNode := WebPageStatGetNextEmbedded(nNodeRoot);
      end;
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetFirstFrame Function

Action

Returns the first frame of a node (specified by node ID). The node ID is returned by a previous WebPageStatXXX function call. Use this function in combination with WebPageStatGetNextFrame().

The return value is a node ID that can be used in other WebPageStatXXX calls.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatGetFirstFrame(
   in nNode  : number,
   in nFlags : number optional ): number;

Return value

  • 0 if no frame is present

  • >0 otherwise

Parameter | Description
nNode | Node ID returned by a previous WebPageStatXXX function.
nFlags

Specifies the various options used by the search. If this parameter is omitted, the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_NodeTypeLoad
Returns nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
Returns nodes that have been found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
Returns nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyLast
Returns the last node of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server.)

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodeRoot : number;
    nNode     : number;
    fValue    : float;
    sUrl      : string;
  begin

    WebPageURL("http://lab3/");
    nNodeRoot := WebPageStatGetRootNode();
    if nNodeRoot > 0 then
      nNode := WebPageStatGetFirstFrame(nNodeRoot);
      while nNode > 0 do
        WebPageStatGetNodeInfo(null, sUrl);
        WebPageStatGetNodeData(STATFLAG_BytesSent, fValue);
        print("Url: " + sUrl);
        print("BytesSent: " + string(fValue));
        nNode := WebPageStatGetNextFrame(nNodeRoot);
      end;
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetNextFrame Function

Action

Returns the next frame of a node (specified by its node ID). Use this function in combination with WebPageStatGetFirstFrame().

The return value is a node ID, which can be used in other WebPageStatXXX calls.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatGetNextFrame(
   in nNode  : number,
   in nFlags : number optional ): number;

Return value

  • 0 if there are no more frames

  • >0 otherwise

Parameter | Description
nNode | Node ID returned by a previous WebPageStatXXX function.
nFlags

Specifies the various options used by the search for the node. If this parameter is omitted the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise specify one of the following values:

PAGE_STAT_FLAG_NodeTypeLoad
Returns nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
Returns nodes that have been found in the cache (full cache hit), so that no request to the server is sent.
PAGE_STAT_FLAG_NodeTypeSuppress
Returns nodes for which no request has been sent to the server because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyLast
Returns the last node of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNodeRoot : number;
    nNode     : number;
    fValue    : float;
    sUrl      : string;
  begin

    WebPageURL("http://lab3/");
    nNodeRoot := WebPageStatGetRootNode();
    if nNodeRoot > 0 then
      nNode := WebPageStatGetFirstFrame(nNodeRoot);
      while nNode > 0 do
        WebPageStatGetNodeInfo(null, sUrl);
        WebPageStatGetNodeData(STATFLAG_BytesSent, fValue);
        print("Url: " + sUrl);
        print("BytesSent: " + string(fValue));
        nNode := WebPageStatGetNextFrame(nNodeRoot);
      end;
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetNextReload Function

Action

Returns the subsequent node in a redirection chain. A redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server.

The return value is a node ID, which can be used in various other WebPageStatXXX calls.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatGetNextReload( in nNode: number optional ): number;

Return value

  • 0 if there is no redirection chain or the provided node is the last node in the chain.

  • >0 otherwise

Parameter | Description
nNode | Node ID returned by a previous WebPageStatXXX function. When this parameter is omitted, the most recently returned node ID is used.

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedNodes);
  end TInit;

  transaction TWeb
  var
    nNode       : number;
    nNodeReload : number;
    fValue      : float;
    sUrl        : string;
  begin
    WebPageUrl("http://lab3/");
    nNode := WebPageStatGetRootNode();
    if nNode > 0 then
      nNodeReload := WebPageStatGetNextReload();
      if nNodeReload > 0 then
        WebPageStatGetNodeInfo(null, sUrl);
        print("Reload Url: " + sUrl);
        nNode := nNodeReload;
      end;

      if WebPageStatGetFirstFrame(nNode) > 0 then
        WebPageStatGetNodeData(STATFLAG_BytesSent, fValue);
        print("BytesSent: " + string(fValue));
      end;
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetNodeData Function

Action

Returns information about a node (specified by the node ID) that is returned by a previous WebPageStatXXX function call.

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatGetNodeData(
   in  nOption : number,
   out fResult : float,
   in  nNode   : number optional ): boolean;

Return value

  • true if the information is retrieved successfully

  • false otherwise

Parameter | Description
nOption

Specify one of the following values:

STATFLAG_TimerConnect
Sum of the duration, in seconds, of all TCP/IP connects.
STATFLAG_TimerSSLConnect
Sum of the duration, in seconds, of all SSL connects.
STATFLAG_TimerSend
Sum of the duration, in seconds, of all send operations.
STATFLAG_TimerServerBusy
Sum of all server-busy times, in seconds. Time measurement begins after the last packet is sent and ends when the first packet is received.
STATFLAG_TimerRecv
Sum of the duration, in seconds, of all receive operations.
STATFLAG_TimerDns
Sum of the duration, in seconds, of all domain name resolutions.
STATFLAG_TimerDoc
The duration of the whole server round-trip (starting with DNS time and stopping when with the last byte is received). If used on a calculated summary node this will be a summary of the individual node times.
STATFLAG_ConnectCount
Number of TCP/IP connects.
STATFLAG_ConnectCountFailed
Number of failed TCP/IP connects.
STATFLAG_ConnectCountRetries
Number of retried TCP/IP connects.
STATFLAG_BYTESSENT
Number of bytes sent to the server.
STATFLAG_BYTESRECEIVED
Number of bytes received from the server.
STATFLAG_CookiesSent
Number of sent cookies.
STATFLAG_CookiesReceived
Number of received cookies.
fResult | Retrieves the result of the specified value.
nNode | Specify the node ID of the node for which information is to be returned (possibly returned by a previous WebPageStatXXX function). Provide a value of PAGE_STAT_Calculated if data of the most recent calculated node should be returned (WebPageStatCalcSummaryNode). When this parameter is omitted, the most recently returned or calculated node is used.

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNode  : number;
    nNodes : number;
    fValue : float;
  begin
    WebPageUrl("http://lab3/");
    nNode := WebPageStatGetRootNode();
    if nNode > 0 then
      WebPageStatGetNodeData(STATFLAG_TimerServerBusy, fValue);
      print("ServerBusyTime [s]: " + string(fValue));
      nNodes := WebPageStatCalcSummaryNode(null, "image/*",
              PAGE_STAT_MATCH_WildcardNoCase);
      if nNodes > 0 then
        WebPageStatGetNodeData(STATFLAG_BytesSent, fValue,
                             PAGE_STAT_Calculated);
        print("Bytes sent for images: " + string(fValue));
      end;
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetNodeInfo Function

Action

Returns information about a node (specified by the node ID) that is returned by a previous WebPageStatXXX function call. Possible return values are the URL, the content-type of the response, the document load-type (load, cache-hit, or suppressed), the document kind (html or embedded) and the location within a redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).

To generally enable extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT (for a detailed description of the various values see WebSetOption).

Include file

WebAPI.bdh

Syntax

WebPageStatGetNodeInfo(
   out nNodeType    : number allownull,
   out sUrl         : string optional,
   out sContentType : string optional,
   out bHtml        : boolean optional,
   out bReload      : boolean optional,
   in  nNode        : number optional ): boolean;

Return value

  • true if the information is retrieved successfully

  • false otherwise

Parameter | Description
nNodeType

Will be one of the following values:

PAGE_STAT_FLAG_NodeTypeLoad
Node caused a request to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
Node found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
No request has been sent to the server for this node because it has been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).

If this value is not of interest, null can be specified.

sUrl

Returns the URL of the node.

If this value is not of interest, it can be omitted. Or null can be specified.

sContentType

Returns the content-type (server response) of the node.

If this value is not of interest, it can be omitted. Or null can be specified.

bHtml

Returns whether the node belongs to the document section of the page (normally html) or to the embedded section (normally an image or a script).

If this value is not of interest, it can be omitted. Or null can be specified.

bReload | Returns if the node is not the first document of a potential redirection chain (a redirection chain is created when a request is retried or reissued because of a redirection or an authentication request by the server).
nNode | Specify the node ID of the node for which information is to be returned (possibly returned by a previous WebPageStatXXX function). Provide a value of PAGE_STAT_Calculated if data of the most recent calculated node should be returned (WebPageStatCalcSummaryNode). When this parameter is omitted, the most recently returned or calculated node is used.

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNode  : number;
    nType  : number;
    sUrl   : string;
    sCT    : string;
    bReload: boolean;
    fValue : float;
  begin
    WebPageUrl("http://lab3/");
    nNode := WebPageStatGetRootNode();
    if nNode > 0 then
      WebPageStatGetNodeInfo(nType, sUrl, sCT, null, bReload, nNode);
      WebPageStatGetNodeData(STATFLAG_TimerServerBusy, fValue);
      print("Type: " + string(nType));
      print("Url: " + sUrl);
      print("Content type: " + sCT);
      if bReload then
        print("root doc needed more than one request");
      end;
      print("ServerBusyTime [s]: " + string(fValue));
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatGetRootNode Function

Action

Returns the root node of the most recently loaded page. A node is a request/response pair which is illustrated as one element of the page-tree in TrueLog Explorer. Dependent of the setting specified by the call to WebSetOption, the returned node is either the first issued request (PAGE_STAT_FLAG_RedirChainOnlyFirst) or, if this request is redirected or retried, the last one when called with a value of PAGE_STAT_FLAG_RedirChainOnlyLast. The optional flag parameter can be used to overwrite the default flag value specified by the call to WebSetOption.

The return value is a node ID, which can be used in various other WebPageStatXXX calls.

To generally enable the extended page statistics functionality, call WebSetOption with an option of WEB_OPT_DETAILED_PAGE_STAT. For a detailed description of the various values see WebSetOption().

Include file

WebAPI.bdh

Syntax

WebPageStatGetRootNode( in nFlags: number optional ): number;

Return value

  • 0 if the node could not be found

  • >0 otherwise

Parameter Description
nFlags

Specifies the various options used by the search for the root node. If this parameter is omitted, the default options specified by the call to WebSetOption(WEB_OPT_DETAILED_PAGE_STAT) are used. Otherwise, specify one of the following values:

PAGE_STAT_FLAG_UseHtml
Returns nodes of the document section of the page (commonly html documents).
PAGE_STAT_FLAG_NodeTypeLoad
Returns nodes that caused a request to be sent to the server (no cache hits and no suppressed documents).
PAGE_STAT_FLAG_NodeTypeCacheHit
Returns nodes that have been found in the cache (full cache hit), so that no request to the server has been sent.
PAGE_STAT_FLAG_NodeTypeSuppress
Returns nodes for which no request has been sent to the server, because they have been suppressed by the user (WebPageSuppress or WebSetDomainSuppress).
PAGE_STAT_FLAG_RedirChainOnlyLast
Returns the last node of a potential redirection chain. (A redirection chain evolves when a request is retried or reissued because of a redirection or an authentication request by the server).

Example

dcltrans
  transaction TInit
  begin
    WebSetOption(WEB_OPT_DETAILED_PAGE_STAT,
                 PAGE_STAT_FLAG_AllLoadedDocs);
  end TInit;

  transaction TWeb
  var
    nNode  : number;
    fValue : float;
    sUrl   : string;
  begin
    WebPageUrl("http://lab3/");
    nNode := WebPageStatGetRootNode();
    if nNode > 0 then
      WebPageStatGetNodeInfo(null, sUrl);
      print("Root Url: " + sUrl);

      if WebPageStatGetFirstFrame(nNode) > 0 then
        WebPageStatGetNodeData(STATFLAG_BytesSent, fValue);
        print("BytesSent: " + string(fValue));
      end;
    end;
  end TWeb;
親トピック: Page Statistic Functions


WebPageStatToTsd Function

Action

Adds detailed timers for the last page to the time series data.

Adds following timers to the “Timer” section:

  • <timername> - Connect

  • <timername> - DNS

  • <timername> - Recv

  • <timername> - Send

  • <timername> - ServerBusy

  • <timername> - SSL Handshake

The nOption parameter specifies which portion of the page should be measured. To execute this function for every page level call with a provided timername use the WebSetOption function.

Include file

WebAPI.bdh

Syntax

WebPageStatToTsd( in sTimer  : string,
                  in nSource : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sTimer | Specifies the prefix, used to compose the complete timer names.
nSource

Specifies for which part of the page should be measured. This parameter must be one of the following values:

STATFLAG_HtmlDoc
Measures all HTML documents.
STATFLAG_OtherDoc
Measures all types of documents except HTML documents.
STATFLAG_RootDoc
Measures only the first document.
STATFLAG_All
Measures all documents.

Example

dcltrans
  transaction TMain
  begin
    WebPageUrl("http://standardhost/");
    WebPageStatToTsd("Homepage", STATFLAG_All);
    WebPageLink("click here");
    WebPageLink("again");
    WebPageStatToTsd("Project view", STATFLAG_HtmlDoc );
  end TMain;
親トピック: Page Statistic Functions
関連資料
WebSetOption Function
WebPageStatistics Function


Cookie Database Functions Overview

Under HTTP (HyperText Transfer Protocol), cookies are the means by which a server or a script can maintain state information on the client workstation. Silk Performer has implemented a non-persistent cookie database per virtual user for this purpose. WebCookie functions are provided so users can set cookies into, and access them from, the cookie database.

See WebSetCookies to set the size of the cookie database or to disable the use of cookies.

注: The URL provided with the cookie function contains information about three cookie options: domain, secure and path.
  • WebCookieGet Function
    Returns the cookie header for the specified URL once all threads have finished their tasks.
  • WebCookieList Function
    Lists all cookies out of the cookie database and writes them to the output file.
  • WebCookieListFirst Function
    Lists the first cookie found in the cookie database.
  • WebCookieListNext Function
    Lists the next cookie found in the cookie database.
  • WebCookieResetDb Function
    Deletes all cookies in the cookie database.
  • WebCookieSet Function
    Sets a cookie in the cookie database.
親トピック: Web Functions Reference
関連概念
クッキー
関連資料
WebSetCookies Function
WebGetCookies Function


WebCookieGet Function

Action

Returns the cookie header for the specified URL once all threads have finished their tasks.

Include file

WebAPI.bdh

Syntax

WebCookieGet( out sCookie    : string,
              in  nMaxCookie : number,
              in  sUrl       : string): boolean;

Return value

  • true if a cookie is found

  • false otherwise

Parameter | Description
sCookie | Buffer that receives the cookie header if WebCookieGet succeeds
nMaxCookie | Specifies the size of the sCookie buffer. Specify STRING_COMPLETE to get all received data.
sUrl | URL for which to get cookies

Example

dclfunc
  function CookieGet(sUrl: string)
  var
    sCookieBuffer: string;
  begin
    if WebCookieGet(sCookieBuffer, STRING_COMPLETE, sUrl) then
      write("["); write(sCookieBuffer); write("] to URL: ");
      write(sUrl); writeln;
    else
      write("no appropriate cookie found! - URL: ");
      write(sUrl); writeln;
    end;
  end CookieGet;

SilkEssential sample

Cookies.sep

親トピック: Cookie Database Functions Overview
関連資料
WebCookieSet Function


WebCookieList Function

Action

Lists all cookies out of the cookie database and writes them to the output file. This BDL function is implemented in WebAPI.bdh.

Include file

WebAPI.bdh

Syntax

WebCookieList(in nOptions : number optional);
Parameter Description
nOptions

(optional)

WEB_COOKIE_FLAG_DONT_FORCE_DOMAIN
Specifies that the domain of the cookie should only be included if it was originally specified when the cookie was entered into the cookie database.

Example

// This function shows how to list cookies stored
// in the cookie database
dclfunc
  function WebCookieList(nOptions : number optional)
  const MAX_COOKIE_BUF := 4096;
  var
    bCookie : boolean;
    sCookieBuffer : string(MAX_COOKIE_BUF);
  begin
    write("------ cookie database ------"); writeln;
    bCookie := WebCookieListFirst(sCookieBuffer, MAX_COOKIE_BUF, nOptions);
    while bCookie do
      write(sCookieBuffer); writeln;
      bCookie := WebCookieListNext(sCookieBuffer, MAX_COOKIE_BUF, nOptions);
    end;
  end WebCookieList;
親トピック: Cookie Database Functions Overview
関連資料
WebCookieListFirst Function
WebCookieListNext Function


WebCookieListFirst Function

Action

Lists the first cookie found in the cookie database. This function waits for all threads to finish before listing the data.

Include file

WebAPI.bdh

Syntax

WebCookieListFirst( out sCookie    : string,
                    in  nMaxCookie : number optional,
                    in  nOptions   : number optional): boolean;

Return value

  • true if a cookie is found

  • false otherwise

Parameter | Description
sCookie | Buffer that receives the cookie header.
nMaxCookie | Specifies the size of the sCookie buffer (optional). Specify STRING_COMPLETE to get all received data.
nOptions

(optional)

WEB_COOKIE_FLAG_DONT_FORCE_DOMAIN
Specifies that the domain of the cookie should only be included if it was originally specified when the cookie was entered into the cookie database.

Example

// This function shows how to list cookies stored
// in the cookie database
dclfunc
  function WebCookieList(nOptions : number optional)
  var
    bCookie       : boolean;
    sCookieBuffer : string;
  begin
    write("------ cookie database ------"); writeln;
    bCookie := WebCookieListFirst(sCookieBuffer, STRING_COMPLETE, nOptions);
    while bCookie do
      write(sCookieBuffer); writeln;
      bCookie := WebCookieListNext(sCookieBuffer, STRING_COMPLETE, nOptions);
    end;
  end WebCookieList;

SilkEssential sample

Cookies.sep

親トピック: Cookie Database Functions Overview
関連資料
WebCookieList Function
WebCookieListNext Function


WebCookieListNext Function

Action

Lists the next cookie found in the cookie database. Use this function after a successful WebCookieListFirst function call.

注: This function waits for all threads to finish before listing the data.

Include file

WebAPI.bdh

Syntax

WebCookieListNext( out sCookie    : string,
                   in  nMaxCookie : number optional,
                   in  nOptions   : number optional): boolean;

Return value

  • true if a cookie is found

  • false if the end of the cookie database is reached

Parameter | Description
sCookie | Buffer that receives the cookie header.
nMaxCookie | Specifies the size of the sCookie buffer (optional). Specify STRING_COMPLETE to get all received data.
nOptions

(optional)

WEB_COOKIE_FLAG_DONT_FORCE_DOMAIN
Specifies that the domain of the cookie should only be included if it was originally specified when the cookie was entered into the cookie database.

Example

// This function shows how to list cookies stored
// in the cookie database
dclfunc
  function WebCookieList(nOptions : number optional)
  var
    bCookie : boolean;
    sCookieBuffer : string;
  begin
    write("------ cookie database ------"); writeln;
    bCookie := WebCookieListFirst(sCookieBuffer, STRING_COMPLETE, nOptions);

    while bCookie do
      write(sCookieBuffer); writeln;
      bCookie := WebCookieListNext(sCookieBuffer, STRING_COMPLETE, nOptions);
    end;
  end WebCookieList;

SilkEssential sample

Cookies.sep

親トピック: Cookie Database Functions Overview
関連資料
WebCookieList Function
WebCookieListFirst Function


WebCookieResetDb Function

Action

Deletes all cookies in the cookie database.

Include file

WebAPI.bdh

Syntax

WebCookieResetDb(): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TWebCookieResetDb
  begin
    WebCookieResetDb();
  end TWebCookieResetDb;
親トピック: Cookie Database Functions Overview


WebCookieSet Function

Action

Sets a cookie in the cookie database. The optional arguments domain, path and secure not specified in the sCookie string are set to their appropriate default values by examining sUrl.

Include file

WebAPI.bdh

Syntax

WebCookieSet( in sCookie : string,
              in sUrl    : string,
              in nDocNum : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sCookie | Data of a Set-Cookie: response header.
sUrl | String that specified the URL for which the cookie should be set.
nDocNum | If this parameter is not specified, the cookie is added to the cookie database immediatly. By specifying this parameter the cookie becomes a delayed cookie. This means, it will not be added to the cookie database immediately, but only before the document (frame) with the given number of the following page is downloaded.

Example

const
  MAX_COOKIE_BUFFER := 4096;

dclrand
  rsCustNo     : RndStr("0123456789", 10..10);
  rsCookieName : RndStr("COOKIE", 6..12);

dcltrans
  transaction TWebCookie
  var
    sCookie: string(MAX_COOKIE_BUFFER);
  begin
    // Put randomized cookies into the cookie database
    sCookie := "CUSTOMER_NO=" + rsCustNo +
               "; path=/; expires=Wednesday, 09-Nov-99 23:12:40";
    WebCookieSet(sCookie, "http://standardhost/");

    // Put a cookie into the cookie database
    sCookie := rsCookieName + "=; path=/; secure";
    WebCookieSet(sCookie, "http://standardhost/");
    // Put a cookie with a random name into the cookie database
    sCookie := rsCookieName + "=; path=/; secure";
    WebCookieSet(sCookie, "http://standardhost/");

    // Put a cookie into the cookie database
    // after the frameset and the first frame has been downloaded
    WebCookieSet(sCookie, "http://standardhost/", 3);
    WebPageUrl("http://standardhost/"); // frameset with 5 frames
  end TWebCookie;

Sample scripts

WebMulti01.bdf

SilkEssential sample

Cookies.sep

親トピック: Cookie Database Functions Overview
関連資料
WebCookieGet Function
WebSetCookies Function
WebGetCookies Function


Parsing Functions

  • WebParseHtmlBound Function
    Parses the HTML content for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult.
  • WebParseHtmlBoundEx function
    Parses the HTML content for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult.
  • WebParseHtmlBoundArray Function
    Parses the HTML content for sLeftBoundary and sRightBoundary and stores all strings between these boundaries in saResult.
  • WebParseDataBound Function
    Parses the response data for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult.
  • WebParseDataBoundEx Function
    Parses the response data for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult.
  • WebParseDataBoundArray Function
    Parses the response data for sLeftBoundary and sRightBoundary and stores all strings between these boundaries in saResult.
  • WebParseHtmlTitle Function
    Parses the <TITLE> tag of the HTML response and stores the content it in the provided string.
  • WebParseTable Function
    Parses HTML tables and stores the content of the specified cell in the provided string.
  • WebParseTableVLookup Function
    Parses HTML tables and stores the content of the specified cell in the provided string. In contrast to the function WebParseTable, the row number is determined dynamically through the content of a search column.
  • WebParseResponseData Function
    Parses the response data (commonly HTML) for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult.
  • WebParseResponseHeader Function
    Parses the HTTP headers of a server response and stores the header value in sResult.
  • WebParseResponseRedirect Function
    Parses the URL of a redirection response for URL encoded parameters.
  • WebParseResponseStatus Function
    Parses the response header status line if a variable is specified as an out parameter.
  • WebParseResponseTag Function
    Parses the HTML response and stores the value of a specified attribute in a string variable.
  • WebParseResponseTagContent Function
    Parses the HTML response and stores the HTML content or the raw HTML code in a string variable.
親トピック: Web Functions Reference


WebParseHtmlBound Function

Action

Parses the HTML content for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult. If the right delimiter (sRightBoundary) is not specified (set to NULL), the string after sLeftBoundary with length nMaxResultLen is returned. If the left delimiter (sLeftBoundary) is not specified (set to NULL), the string from beginning to the right delimiter with a maximum length of nMaxResultLen is returned. If both boundary search strings are omitted (sLeftBoundary and sRightBoundary are set to NULL), all data with maximum length is stored into sResult. If the nMaxResultLen is set to STRING_COMPLETE an unlimited amount of data is stored in the sResult parameter.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

Include file

WebAPI.bdh

Syntax

WebParseHtmlBound( out sResult        : string,
                   in  nMaxResultLen  : number optional,
                   in  sLeftBoundary  : string optional,
                   in  sRightBoundary : string optional,
                   in  nOptions       : number optional,
                   in  sFrame         : string optional,
                   out nBytesParsed   : number optional );

Return value

  • none

Parameter | Description
sResult | String variable that receives the string between the specified boundary strings.
nMaxResultLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
sLeftBoundary | Left boundary of the HTML content to compare.
sRightBoundary | Right boundary of the HTML content to compare.
nOptions

Parsing options (optional). If this flag is omitted, none of the listed options are applied, meaning that the string comparison is case-insensitive, white spaces are not ignored, etc.

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that nothing is parsed if the specified table is not loaded (cache hit).
WEB_FLAG_RULE
Specify this flag to perform the parsing operation in every subsequent web function. After every web function the specified output variables are set to the new value. If you want to use the variables in other transactions or in event handler functions use global variables! Call WebCancelAllRules() do disable all verification and parsing rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
sFrame | Frame that gets searched for the content string (optional). If this parameter is omitted the whole page is scanned.
nBytesParsed | Variable receiving the number of the bytes that are actually parsed (optional).

Example

dcltrans
  transaction TMain
  var
    nResult : number;
    sResult : string;
  begin
    WebParseHtmlBound(sResult, STRING_COMPLETE, "Begin", "X.X");
    WebPageUrl("http://mycompany.com/");
    Print(sResult);

    WebParseHtmlBound(sResult,
STRING_COMPLETE, "Begin", "X.X",  WEB_FLAG_IGNORE_WHITE_SPACE, "FrameA", nResult);
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sResult);
    Print(string(nResult) + "Bytes parsed");
  end TMain;
親トピック: Parsing Functions


WebParseHtmlBoundEx function

Action

Parses the HTML content for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult. If the right delimiter (sRightBoundary) is not specified (set to NULL), the string after sLeftBoundary with length nMaxResultLen is returned. If the left delimiter (sLeftBoundary) is not specified (set to NULL), the string from beginning to the right delimiter with a maximum length of nMaxResultLen is returned. If both boundary search strings are omitted (sLeftBoundary and sRightBoundary are set to NULL), all data with maximum length is stored into sResult. If the nMaxResultLen is set to STRING_COMPLETE an unlimited amount of data is stored in the sResult parameter.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Include file

WebAPI.bdh

Syntax

WebParseHtmlBoundEx(out sResult         : string,
                    in  nMaxResultLen   : number optional,
                    in  sLeftBoundary   : string optional,
                    in  nLeftOccurrence : number optional,
                    in  sRightBoundary  : string optional,
                    in  nOptions        : number optional,
                    in  sFrame          : string optional,
                    out nBytesParsed    : number optional);

Return value

  • none

Parameter | Description

sResult

String variable that receives the string between the specified boundary strings.
nMaxResultLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
sLeftBoundary | Left boundary of the HTML content to compare.
nLeftOccurrence | The sLeftBoundary has to be found nLeftOccurrence times, before the copy process starts and the right boundary is searched (optional). The default value is one. Provide WEB_OCCURENCE_LAST to specify the last Occurrence.
sRightBoundary | Right boundary of the HTML content to compare.

nOptions

Parsing options (optional). If this flag is omitted, none of the listed options are applied, meaning that the string comparison is case-insensitive, white spaces are not ignored, etc.

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for the subsequent request. Note that nothing is parsed if the specified table is not loaded (cache hit).
WEB_FLAG_RULE
Specify this flag to perform the parsing operation in every subsequent Web function. After every Web function the specified output variables are set to the new value. If you want to use the variables in other transactions or in event handler functions, you must use global variables. Call WebCancelAllRules() to disable all verification and parsing rules.
重要: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function.
sFrame | Frame that gets searched for the content string (optional). If this parameter is omitted the whole page is scanned.
nBytesParsed | Variable receiving the number of the bytes that are actually parsed (optional).

Example

dcltrans
  transaction TMain
  var
    nResult : number;
    sResult : string;
  begin
    WebParseHtmlBoundEx(sResult, STRING_COMPLETE, "Begin", 2, "X.X");
    WebPageUrl("http://mycompany.com/");
    Print(sResult);

    WebParseHtmlBoundEx(sResult, STRING_COMPLETE, "Begin", 2, "X.X", WEB_FLAG_IGNORE_WHITE_SPACE, "FrameA", nResult);
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sResult);
    Print(string(nResult) + "Bytes parsed");
  end TMain;
親トピック: Parsing Functions


WebParseHtmlBoundArray Function

Action

Parses the HTML content for sLeftBoundary and sRightBoundary and stores all strings between these boundaries in saResult. If the right delimiter (sRightBoundary) is not specified (set to NULL), every nMaxLen (must be specified) bytes after the occurrences of sLeftBoundary are returned. In contrary the WebParseHtmlBoundEx function the second left boundary is only searched after the right boundary has been found or, if the right boundary parameter is omitted, nMaxLen bytes after the occurrence of the first left boundary.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Include file

WebAPI.bdh

Syntax

WebParseHtmlBoundArray( inout saResult       : array of string,
                        in    nMaxCount      : number,
                        in    sLeftBoundary  : string,
                        in    sRightBoundary : string allownull,
                        out   nFound         : number optional,
                        in    nOptions       : number optional,
                        in    nSkip          : number optional,
                        in    sFrame         : string optional,
                        in    nMaxLen        : number optional);
Parameter | Description
saResult | Array of string variable that receives all the strings between the specified boundary strings.
nMaxCount | Maximum number of strings copied into the provided array. This value must be less than or equal to the size of the array.
sLeftBoundary | Left boundary to compare.
sRightBoundary | Right boundary. After the sLeftBoundary has to been found, all data is copied into the actual string parameter until the right boundary is found (optional). If this parameter is omitted the nMaxLen parameter must be specified.
nFound | Variable that receives the number of the found strings (optional).
nOptions

Parsing options (optional). If this flag is omitted, none of the listed options are applied, meaning that the string comparison is case-insensitive, white spaces are not ignored, etc.

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that nothing is parsed if the specified table is not loaded (cache hit).
WEB_FLAG_RULE
Specify this flag to perform the parsing operation in every subsequent web function. After every web function the specified output variables are set to the new value. If you want to use the variables in other transactions or in event handler functions use global variables! Call WebCancelAllRules() do disable all verification and parsing rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
nSkip | Specifies the number of parse results, which should not be stored in the array (optional). The first element of the array will be the (nSkip+1) th parse result.
sFrame | Frame that gets searched for the content string (optional). If this parameter is omitted the whole page is scanned.
nMaxLen | Specifies the maximum number of bytes copied to each string (optional). If the sRightBoundary parameter is omitted this parameter must be specified and determines the end of every parsing operation.

Example

transaction TWeb
  var
    sa, sa1         : array[10] of string;
    nFound, nFound1 : number;
    i               : number;
  begin
    WebParseHtmlBoundArray(sa, 10, "Price:", "Euro", nFound);
    WebParseHtmlBoundArray(sa1,
10, "Begin", null, nFound1, 0, 0, null, 5);
    WebPageUrl("http://lab3");

    print("found " + string(nFound) + " prices");
    print("found " + string(nFound1) + " Begin... statements");
    for i:= 1 to  nFound do
      print(sa[i]);
    end;
    for i:= 1 to nFound1 do
      print(sa1[i]);
    end;
  end TWeb;
親トピック: Parsing Functions
関連資料
WebParseDataBoundArray Function


WebParseDataBound Function

Action

Parses the response data for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult. If the right delimiter (sRightBoundary) is not specified (set to NULL), the string after sLeftBoundary with length nMaxResultLen is returned. If the left delimiter (sLeftBoundary) is not specified (set to NULL), the string from beginning (or after the last position of a previous search with) with maximum length nMaxResultLen is returned. If both boundary search strings are omitted (sLeftBoundary and sRightBoundary are set to NULL), all data with maximum length is stored into sResult. If the nMaxResultLen is set to STRING_COMPLETE an unlimited amount of data is stored in the sResult parameter.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (e.g. a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: This function can be added automatically to your script using the visual parsing functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebParseDataBound( out sResult        : string,
                   in  nMaxResultLen  : number optional,
                   in  sLeftBoundary  : string optional,
                   in  sRightBoundary : string optional,
                   in  nOptions       : number optional,
                   in  nDocNum        : number optional,
                   out nBytesParsed   : number optional );

Return value

  • none

Parameter | Description
sResult | String variable that receives the string between the specified boundary strings.
nMaxResultLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
sLeftBoundary | Left boundary of the HTML content to compare.
sRightBoundary | Right boundary of the HTML content to compare.
nOptions

Parsing options (optional). If this flag is omitted, none of the listed options are applied, meaning that the string comparison is case-insensitive, white spaces are not ignored, etc.

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored .
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that nothing is parsed if the specified table is not loaded (cache hit).
WEB_FLAG_SYNCHRON
Parsing operations with this flag set, are done in a sequential way. The second parsing operation is not executed before the first has been completed.
WEB_FLAG_ALL_RESPONSES
If this flag is specified all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED.
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified, every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the parsing operation in every subsequent web function. After every web function the specified output variables are set to the new value. If you want to use the variables in other transactions or in event handler functions use global variables! Call WebCancelAllRules() do disable all verification and parsing rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
nDocNum | Specifies the document to parse (optional). Specify WEB_DOC_ALL if you want to parse all documents. If this parameter is omitted, the first document gets parsed. (see above definition FLAG_INCLUDE_EMBEDDED)
nBytesParsed | Variable receiving the number of bytes actually parsed (optional).

Example

dcltrans
  transaction TMain
  var
    nResult : number;
    sHead   : string;
    sResult : string;
  begin
    WebParseDataBound(sResult, STRING_COMPLETE, "<Title>", "</Title>");
    WebPageUrl("http://mycompany.com/");
    WebParseDataBound(sHead, STRING_COMPLETE, "<head>", "</head>",
      WEB_FLAG_CASE_SENSITIVE | WEB_FLAG_IGNORE_WHITE_SPACE);
    WebParseDataBound(sResult, 200, "<b>Shop",
"&amp;", WEB_FLAG_CASE_SENSITIVE, 2, nResult);
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sHead);
    Print(sResult);
    Print(string(nResult) + "Bytes parsed");
  end TMain;
親トピック: Parsing Functions


WebParseDataBoundEx Function

Action

Parses the response data for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult. If the right delimiter (sRightBoundary) is not specified (set to NULL), the string after sLeftBoundary with length nMaxResultLen is returned. If the left delimiter (sLeftBoundary) is not specified (set to NULL), the string from beginning (or after the last position of a previous search with) with maximum length nMaxResultLen is returned. If both boundary search strings are omitted (sLeftBoundary and sRightBoundary are set to NULL), all data with maximum length is stored into sResult. If the nMaxResultLen is set to STRING_COMPLETE an unlimited amount of data is stored in the sResult parameter. If nLeftOccurrence is greater than 1 (default is one) the sLeftBoundary has to be found nLeftOccurrence times, before the copy process starts and the right boundary is searched.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (e.g. a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: This function can be added automatically to your script using the visual parsing functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebParseDataBoundEx(out sResult        : string,
                    in  nMaxResultLen  : number optional,
                    in  sLeftBoundary  : string optional,
                    in  nLeftOccurrence : number optional,
                    in  sRightBoundary : string optional,
                    in  nOptions       : number optional,
                    in  nDocNum        : number optional,
                    out nBytesParsed   : number optional);

Return value

  • none

Parameter | Description
sResult | String variable that receives the string between the specified boundary strings.
nMaxResultLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
sLeftBoundary | Left boundary of the HTML content to compare.
nLeftOccurrence | The sLeftBoundary has to be found nLeftOccurrence times, before the copy process starts and the right boundary is searched (optional). The default value is one. Provide WEB_OCCURENCE_LAST to specify the last occurrence.
sRightBoundary | Right boundary of the HTML content to compare.
nOptions

Parsing options (optional). If this flag is omitted, none of the listed options are applied, meaning that the string comparison is case-insensitive, white spaces are not ignored, etc.

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that nothing is parsed if the specified table is not loaded (cache hit).
WEB_FLAG_SYNCHRON
Parsing operations with this flag set, are done in a sequential way. The second parsing operation is not executed before the first has been completed.
WEB_FLAG_ALL_RESPONSES
If this flag is specified all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified, every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the parsing operation in every subsequent web function. After every web function the specified output variables are set to the new value. If you want to use the variables in other transactions or in event handler functions use global variables! Call WebCancelAllRules() do disable all verification and parsing rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
nDocNum | Specifies the document to parse (optional). Specify WEB_DOC_ALL if you want to parse all documents. If this parameter is omitted, the first document gets parsed. (see above definition FLAG_INCLUDE_EMBEDDED)
nBytesParsed | Variable receiving the number of bytes actually parsed (optional).

Example

dcltrans
  transaction TMain
  var
    nResult: number;
    sFont: string;
    sResult: string;
  begin
    WebParseDataBoundEx(sResult, STRING_COMPLETE, "<table>", 2, "</table>");
    WebPageUrl("http://mycompany.com/");
    WebParseDataBoundEx(sFont,
STRING_COMPLETE, "<font>", 6, "</font>", WEB_FLAG_CASE_SENSITIVE |
WEB_FLAG_IGNORE_WHITE_SPACE);
    WebParseDataBoundEx(sResult, 200, "<b>Shop", 2,
"&amp;", WEB_FLAG_CASE_SENSITIVE, 2, nResult);
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sFont);
    Print(sResult);
    Print(string(nResult) + "Bytes parsed");
  end TMain;
親トピック: Parsing Functions


WebParseDataBoundArray Function

Action

Parses the response data for sLeftBoundary and sRightBoundary and stores all strings between these boundaries in saResult. If the right delimiter (sRightBoundary) is not specified (set to NULL), every nMaxLen (must be specified) bytes after the occurrences of sLeftBoundary are returned. In contrary the WebParseDataBoundEx function the second left boundary is only searched after the right boundary has been found or, if the right boundary parameter is omitted, nMaxLen bytes after the occurrence of the first left boundary.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (for example a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Include file

WebAPI.bdh

Syntax

WebParseDataBoundArray( inout saResult       : array of string,
                        in    nMaxCount      : number,
                        in    sLeftBoundary  : string,
                        in    sRightBoundary : string allownull,
                        out   nFound         : number optional,
                        in    nOptions       : number optional,
                        in    nSkip          : number optional,
                        in    nDocNum        : number optional,
                        in    nMaxLen        : number optional);
Parameter Description

saResult

Array of string variable that receives all the strings between the specified boundary strings.

nMaxCount

Maximum number of strings copied into the provided array. This value must be less than or equal to the size of the array.

sLeftBoundary

Left boundary to compare.

sRightBoundary

Right boundary. After the sLeftBoundary has been found, all data is copied into the actual string parameter until the right boundary is found (optional). If this parameter is omitted the nMaxLen parameter must be specified.

nFound

Variable that receives the number of the found strings (optional).

nOptions

Parsing options (optional). If this flag is omitted, none of the listed options are applied, meaning that the string comparison is case-insensitive, white spaces are not ignored, etc.

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for the subsequent request. Note that nothing is parsed if the specified table is not loaded (cache hit).
WEB_FLAG_SYNCHRON
Parsing operations with this flag set are done in a sequential way. The second parsing operation is not executed before the first has been completed.
WEB_FLAG_ALL_RESPONSES
If this flag is specified all server responses are scanned, even redirection responses, which are normally not displayed by a browser.
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified, every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the parsing operation in every subsequent Web function. After every Web function the specified output variables are set to the new value. If you want to use the variables in other transactions or in event handler functions, you must use global variables. Call WebCancelAllRules() to disable all verification and parsing rules.
重要: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function.

nSkip

Specifies the number of parse results that should not be stored in the array (optional). The first element of the array will be the parse-result number nSkip+1.

nDocNum

Specifies the document to parse (optional). Specify WEB_DOC_ALL if you want to parse all documents. If this parameter is omitted, the first document gets parsed (see also FLAG_INCLUDE_EMBEDDED).

nMaxLen

Specifies the maximum number of bytes copied to each string (optional). If the sRightBoundary parameter is omitted, this parameter must be specified and determines the end of every parsing operation.

Example

transaction TWeb
  var
    sa, sa1         : array[10] of string;
    nFound, nFound1 : number;
    i               : number;
  begin
    WebParseDataBoundArray(sa, 10, "<!--", "-->", nFound);
    WebParseDataBoundArray(sa1,
10, "Begin", null, nFound1, 0, 0, 0, 5); //5 bytes
    WebPageUrl("http://lab3");

    print("found " + string(nFound) + " comments");
    print("found " + string(nFound1) + " Begin... statements");
    for i:= 1 to nFound do
      print(sa[i]);
    end;
    for i:= 1 to nFound1 do
      print(sa1[i]);
    end;
  end TWeb;
親トピック: Parsing Functions
関連資料
WebParseHtmlBoundArray Function


WebParseHtmlTitle Function

Action

Parses the <TITLE> tag of the HTML response and stores the content it in the provided string. A subsequent low-level web function will not return a value until the request has finished. If a page consists of more than one HTML document, the sub frame that gets parsed for the HTML title can be specified with the nDoc parameter.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (e.g. a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Include file

WebAPI.bdh

Syntax

WebParseHtmlTitle( out sResult       : string,
                   in  nMaxResultLen : number optional,
                   in  nDocNum       : number optional );

Return value

  • none

Parameter | Description
sResult | String variable that receives the string between the specified boundary strings.
nMaxResultLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
nDocNum | Specifies the document where to parse the HTML title (optional). The default (1) specifies the top document (e.g. a frameset).

Example

dcltrans
  transaction TMain
  var
    sResult  : string;
    sResult1 : string;
  begin
    WebParseHtmlTitle(sResult, STRING_COMPLETE);
    WebPageUrl("http://mycompany.com/");
    WebParseHtmlTitle(sResult, STRING_COMPLETE);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyHtmlTitle(sResult);
    WebVerifyHtmlTitle(sResult1, 200, 2); // second frame
    WebPageUrl("http://mycompany.com/frame/framea.html");
  end TMain;
親トピック: Parsing Functions


WebParseTable Function

Action

Parses HTML tables and stores the content of the specified cell in the provided string. A subsequent low-level web function will not return a value until the request has finished.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Include file

WebAPI.bdh

Syntax

WebParseTable( out sResult       : string,
               in  nMaxResultLen : number,
               in  nTablenNum    : number,
               in  nRow          : number,
               in  nColumn       : number,
               in  nOptions      : number optional,
               in  sFrame        : string optional,
               out nBytesParsed  : number optional);

Return value

  • none

Parameter | Description
sResult | String variable that receives the content of the specified cell.
nMaxResultLen | Maximum length of the string to return. Set this parameter to STRING_COMPLETE all available data is stored in sResult.
nTableNum | The nTableNum th table is parsed.
nRow | Specifies the row of the cell to parse.
nColumn | Specifies the column of the cell to parse.
nOptions

Parsing options (optional). If this flag is omitted, none of the listed options are applied, meaning that the string comparison is case-insensitive, white spaces are not ignored, etc.

WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that nothing is parsed if the specified table is not loaded (cache hit).
sFrame | Frame that gets searched for the specified table (optional). If this parameter is omitted the whole page is scanned.
nBytesParsed | Variable receiving the number of the bytes that actually parsed (optional).

Example

dcltrans
  transaction TMain
  var
    sResult  : string;
    sResult1 : string;
    nResult  : number;
  begin
    WebParseTable(sResult, STRING_COMPLETE, 2, 3, 4);
    WebPageUrl("http://mycompany.com/");
    Print(sResult);

    WebParseTable(sResult,
STRING_COMPLETE, 2, 1, 2, WEB_FLAG_DONT_FORCE_LOAD); // sResult can be ""
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sResult);

    WebParseTable(sResult, STRING_COMPLETE, 2, 2, 2);
    WebParseTable(sResult,
STRING_COMPLETE, 3, 2, 3, 0, "FrameB", nResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    Print(sResult);
    Print(sResult1);
    Print(string(nResult) + "Bytes parsed");
  end TMain;
親トピック: Parsing Functions


WebParseTableVLookup Function

Action

Parses HTML tables and stores the content of the specified cell in the provided string. In contrast to the function WebParseTable, the row number is determined dynamically through the content of a search column. A subsequent low-level web function will not return a value until the request has finished.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Include file

WebAPI.bdh

Syntax

WebParseTableVLookup( out sResult        : string,
                      in  nMaxResultLen  : number,
                      in  nTableNum      : number,
                      in  nSearchColumn  : number,
                      in  sSearchText    : string,
                      in  nSearchOptions : number,
                      in  nResultColumn  : number,
                      in  sFrame         : string optional,
                      out nBytesParsed   : number optional);

Return value

  • none

Parameter | Description
sResult | String variable that receives the content of the specified cell.
nMaxResultLen | Maximum length of the string to return. Set this parameter to STRING_COMPLETE all available data is stored in sResult.
nTableNum | The nTableNum th table is parsed.
nSearchColumn | Specifies in which column to look for sSearchText.
nSearchText | The search text identifies the correct row. If multiple rows match the search text, the first matching row is parsed.
nSearchOptions
WEB_FLAG_CONTAINS
The actual parsed table cell must contain the specified string. Otherwise the verification fails.
WEB_FLAG_CONTAINS_NOT
The actual parsed table cell must not contain the specified string. Otherwise the verification fails.
WEB_FLAG_IS_DIFFERENT
The actual parsed table cell must not be equal to the specified string. Otherwise the verification fails.
WEB_FLAG_EQUAL
The actual parsed table cell must be equal to the specified string. Otherwise the verification fails. If none of the above 3 flags are specified, the WEB_FLAG_EQUAL flag is used.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (that are loaded) of a page.
nResultColumn | Specifies the column of the cell to parse.
sFrame | Frame that gets searched for the specified table (optional). If this parameter is omitted the whole page is scanned.
nBytesParsed | Variable receiving the number of the bytes that actually parsed (optional).

Example

/* Table #3 on the page:
Number  Name                         Price
  1000  3 Person Dome Tent        $ 299.99
  1001  External Frame Backpack   $ 179.95
  1002  Glacier Sun Glasses        $ 67.99
  1003  Padded Socks               $ 19.99
  1004  Hiking Boots              $ 109.90
  1005  Back Country Shorts        $ 24.95
*/
  transaction TMain
  var
    sResult : string;
  begin

    WebParseTableVLookup(sResult, STRING_COMPLETE, 3, 1, "1003", WEB_FLAG_EQUAL, 2);
    WebPageUrl("http://demo.borland.com/gmopost/online-catalog.htm", "OnLine Catalog");
    Print("sResult: " + sResult); // "Padded Socks"

    WebParseTableVLookup(sResult, STRING_COMPLETE, 3, 1, "1003", WEB_FLAG_EQUAL | WEB_FLAG_DONT_FORCE_LOAD, 2);
    WebPageUrl("http://demo.borland.com/gmopost/online-catalog.htm", "OnLine Catalog");
    Print("sResult: " + sResult); // sResult can be ""

  end TMain;
親トピック: Parsing Functions


WebParseResponseData Function

Action

Parses the response data (commonly HTML) for sLeftBoundary and sRightBoundary and stores the string between these boundaries in sResult. This modifier can be used in many situations. One of the most common is retrieving state information out of hidden form field values. When the right delimiter (sRightBoundary) is not specified (set to NULL), the string after sLeftBoundary with length nMaxResultLen is returned. When the left delimiter (sLeftBoundary) is not specified (set to NULL), the string from beginning or after the last position of a previous search with maximum length nMaxResultLen is returned. When both boundary search strings are omitted (sLeftBoundary and sRightBoundary are set to NULL), all data with maximum length is stored into sResult.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: The order of multiple calls to WebParseResponseData affects finding the parameters. The subsequent low-level web function will NOT return until the request has finished. Other requests started before may run in parallel. This parsing is optimized for speed. For more complex parsing you can use this function to retrieve the whole document and parse it yourself using the string functions.
注: If you want to parse a Web document, you must first call the WebParseResponseData function. Then you call the function which retrieves the document.
注: This function is obsolete. It can still be used, although it's recommended to use the WebParseDataBound function instead.

Include file

WebAPI.bdh

Syntax

WebParseResponseData( out sResult        : string,
                      in  nMaxResultLen  : number,
                      in  sLeftBoundary  : string optional,
                      in  sRightBoundary : string optional,
                      out nBytesParsed   : number optional ): boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
sResult | String variable that receives the string between the specified boundary strings.
nMaxResultLen | Maximum length of the string to return. This value must be less than or equal to the size of the string variable sResult.
sLeftBoundary | Left boundary string of the value to search for (optional). Passing a NULL value will store all the document data (like HTML) into sResult.
sRightBoundary | Right boundary string of the value to search for (optional). Passing a NULL value will store all the document data (like HTML) after the occurrence of sLeftBoundary into sResult.
nBytesParsed | Variable receiving the number of bytes actually parsed (optional).

Example

dcltrans
  transaction TWeb
  var
    sTitle           : string(100);
    sHiddenSessionID : string(100);
begin
    // Check for an error message set in the HTML title.
    // (Note: the HTTP response error should be set to a
    // value > 200!! See HTTP specifications)
    WebParseResponseData(sTitle, sizeof(sTitle),
                         "<title>", "</title>");

    // our session info has a fixed size of 11 characters
    WebParseResponseData(sHiddenSessionID, 11, "name=\"SessionID\""
                         "value=\"");
    WebUrl("http://standardhost/", 0.0);
    write(sTitle); writeln;
    write(sHiddenSessionID); writeln;
  end TWeb;

Sample scripts

WebFileUpload01.bdf, WebMultiIpAddresses01.bdf, WebRegularExpressions01.bdf, WebSecure02.bdf

親トピック: Parsing Functions
関連資料
WebParseDataBound Function


WebParseResponseHeader Function

Action

Parses the HTTP headers of a server response and stores the header value in sResult. When the search parameter is not specified (set to NULL), all HTTP headers are retrieved at once. The nResponseNo parameter specifies which response header is subject of interest. If this parameter is omitted, all response headers are checked (If a header is not found in the first response, Silk Performer looks for it in the next response). If the nResponseNo, the sHeaderName, and the nResponseNo parameters are omitted, the first call retrieves the first complete response header. All subsequent calls (with the last 3 parameters omitted) retrieve the subsequent response-headers. The subsequent low-level web function will not return until the request has finished. Other requests started before may run in parallel.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Note: If you want to parse a Web server response, you must first call the WebParseResponseHeader function. Then you send the request to the Web server.

Include file

WebAPI.bdh

Syntax

WebParseResponseHeader( out sResult       : string,
                        in  nMaxResultLen : number optional,
                        in  sHeaderName   : string optional,
                        in  nHeaderNo     : number optional,
                        in  nResponseNo   : number optional): boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
sResult | String variable that receives the value of the HTTP header or all HTTP headers (CRLF separated)
nMaxResultLen | Maximum length of the string to return (optional). If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
sHeaderName | Name of the header for which to retrieve the associated value (optional). Passing a NULL value will store all HTTP headers CRLF separated into sResult.
nHeaderNo | Index of the header value to be retrieved (optional). If this parameter is omitted, all values are concatenated (with commas as separators between the values).
nResponseNo | Index of the response header value that is to be retrieved or searched (optional). If this parameter is omitted, all response headers are searched; if the sHeaderName parameter is omitted as well, the order of the function calls specifies which response header to get. If this parameter is set to WEB_RESPONSE_LAST, the last response header is searched.

Example

dcltrans
  transaction TWeb
  var
    sHeader1 : string;
    sHeader2 : string;
    sServer1 : string;
    sServer2 : string;
  begin
    WebParseResponseHeader(sHeader1);
    WebParseResponseHeader(sHeader2, STRING_COMPLETE);
    WebParseResponseHeader(sServer1, STRING_COMPLETE, "server", 1, 2);
    WebUrl("http://standardhost/", 0.0);

    write(sHeader1); writeln;
    write(sHeader2); writeln;
    write(sServer1); writeln;
    write(sServer2); writeln;
  end TWeb;

Sample scripts

WebParseResponse01.bdf, WebParseResponseHeader01.bdf

親トピック: Parsing Functions


WebParseResponseRedirect Function

Action

Parses the URL of a redirection response for URL encoded parameters. This modifier is commonly used to get state information generated at server side at run time, like session IDs. When the search parameter is not specified (set to NULL), the complete redirect URL is retrieved.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: The order of multiple calls to WebParseResponseRedirect function affects finding the parameters. The subsequent low-level web function will NOT return until the request has finished. Other requests started before may run in parallel. If only NULL parameter values are specified, no parsing is performed. Instead, the server’s redirection status message will not generate an error message.
注: If you want to parse a Web server response, you must first call the WebParseResponseHeader function. Then you send the request to the Web server.

Include file

WebAPI.bdh

Syntax

WebParseResponseRedirect( out sResult       : string optional,
                          in  nMaxResultLen : number optional,
                          in  sSearchParam  : string optional ): boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
sResult | String variable that receives the value of the named parameter or the redirect URL (optional). May be NULL if no return value is needed.
nMaxResultLen | Maximum length of the string to return (optional). This value must be less than or equal to the size of the string variable sResult.
sSearchParam | Name of the parameter for which to retrieve the associated value (optional). Passing a NULL value causes the complete URL to be stored in sResult.

Example

dcltrans
  transaction TWeb
  var
    sParam1 : string(1000);
    sSession : string(200);
  begin
    WebParseResponseRedirect(sParam1, STRING_COMPLETE, "Param1");
    WebParseResponseRedirect(sSession, STRING_COMPLETE,"SessionID");
    WebUrl("http://localhost/SessionIdTest.asp", 0.0);
    write(sParam1); writeln;
    write(sSession); writeln;
  end TWeb;

Sample scripts

WebRegularExpressions01.bdf

親トピック: Parsing Functions


WebParseResponseStatus Function

Action

Parses the response header status line if a variable is specified as an out parameter. The subsequent low-level web function will NOT return until the request has finished. Other requests started before may run in parallel. This function might be used, for example, to avoid errors during an authentication handshake.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: This function avoids an error only once. After the specified error occurred, another WebParseResponseStatus function call is necessary.
注: If you want to parse a Web document, you must first call the WebParseResponseStatus function. Then you call the function which retrieves the document.
注: This function is obsolete. It can still be used, although it's recommended to use the WebIgnoreServerError function instead.

Include file

WebAPI.bdh

Syntax

WebParseResponseStatus(
in nIgnoreStatus : number,
out nStatusCode : number optional,
out sStatusMsg : string optional,
in nMaxStatusMsg : number optional): boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
nIgnoreStatus | Forces the subsequent request not to report an error for HTTP status code = nIgnoreStatus. Set this value to 0 to disable HTTP status code error reporting for all error codes.
nStatusCode | Parameter that receives the value of the HTTP header status code (optional). Omit this parameter if the status code is not needed for further processing.
sStatusMsg | String variable that receives the status message of the HTTP response header (optional).
nMaxStatusMsg | Maximum length of the string to write into sStatusMsg (optional). This value must be less than or equal to the size of the string variable sStatusMsg.

Example

dcltrans
  transaction TMyTransaction
  begin
    // ignore HTTP error code: 401 Authorization Required
    WebParseResponseStatus(401);
    WebUrl("http://www.mydomain.com/", 0.0);
    // now send the request, including user name and password
    WebUrl("http://username:userpass@www.mydomain.com/", 0.0);
  end TMyTransaction;

Sample scripts

WebAuth01.bdf, WebStatusCodes01.bdf

親トピック: Parsing Functions
関連資料
WebIgnoreServerError Function


WebParseResponseTag Function

Action

Parses the HTML response and stores the value of a specified attribute in a string variable. The attribute in question can be specified by a tag, an attribute-value pair (which must be part of the tag), the name of the frame, and the nth appearance of these conditions.

Finding the data is not affected by the order of multiple calls to WebParseResponseTag or by calls to other parsing functions (like WebParseResponseTagContent, WebParseResponseData, and so on). The subsequent low-level web function will not return until the request has finished. Other requests started before may run in parallel.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: If you want to parse a Web server response, you must first call the WebParseResponseHeader function. Then you send the request to the Web server.

Include file

WebAPI.bdh

Syntax

WebParseResponseTag( out sResult        : string,
                     in  nMaxResultLen  : number,
                     in  sTag           : string,
                     in  sAttribute     : string,
                     in  sCondAttribute : string optional,
                     in  sCondValue     : string optional,
                     in  nAppearance    : number optional,
                     in  sFrame         : string optional,
                     out nResultLen     : number optional ): boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
sResult | String variable that receives the value of the specified attribute.
nMaxResultLen | Maximum length of the string to return. This value must be less than or equal to the size of the string variable sResult.
sTag | Tag in which the attribute has to be found.
sAttribute | Attribute to search for.
sCondAttribute | Attribute of the conditional attribute-value pair that must be present in the tag (optional). If this parameter is omitted, no conditional attribute-value pair is checked.
sCondValue | Value of the conditional attribute-value pair that must be present in the result tag (optional).
nAppearance | This parameter specifies which instance of the appearance when all conditions are met is the one for which the result is set (optional). If this parameter is omitted the first appearance is taken.
sFrame | Frame name where to search (optional). If this parameter is omitted, the whole page is searched. An empty string specifies the top frame.
bBaseDocOnly | If this parameter is set to true, only the base document is searched. If sFrame specifies a frame set, the sub frames are not scanned (optional). If this parameter is omitted, all sub frames are searched also.
nResultLen | Variable that receives the number of bytes actually copied to sResult (optional).

Example

dcltrans
  transaction TMain
  var
    sResult, sLink, sFrame1, sFrame2: string;
  begin
    WebParseResponseTag(sResult, STRING_COMPLETE, "table", "height");
    WebPageUrl("http://mycompany.com/");
    Print(sResult);
    WebParseResponseTag(sLink, STRING_COMPLETE, "A", "href");
    WebParseResponseTag(sResult,
STRING_COMPLETE, "font", "face", "size", "5", 2);
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sLink);
    Print(sResult);

    // "", true ... search only in the base frame set
    WebParseResponseTag(sFrame1,
STRING_COMPLETE, "Frame", "Src", 0,
0, 1, "", true);
    WebParseResponseTag(sFrame2,
STRING_COMPLETE, "Frame", "Src", 0, 0, 2, "", true);
    WebPageUrl("http://mycompany.com/frame/frame.html");
    Print(sFrame1);
    Print(sFrame2);
  end TMain;
親トピック: Parsing Functions


WebParseResponseTagContent Function

Action

Parses the HTML response and stores the HTML content or the raw HTML code in a string variable. The data in question can be specified by a tag, an attribute-value pair (which must be part of the tag), the name of the frame, and the nth appearance of these conditions.

Finding the data is not affected by the order of multiple calls to WebParseResponseTagContent or by calls to other parsing functions (like WebParseResponseTag, WebParseResponseData, and so on). The subsequent low-level web function will not return until the request has finished. Other requests started before may run in parallel.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: If you want to parse a Web server response, you must first call the WebParseResponseHeader function. Then you send the request to the Web server.

Include file

WebAPI.bdh

Syntax

WebParseResponseTagContent( out sResult       : string,
                            in  nMaxResultLen  : number,
                            in  sTag           : string,
                            in  sCondAttribute : string optional,
                            in  sCondValue     : string optional,
                            in  nAppearance    : number optional,
                            in  sFrame         : string optional,
                            in  bBaseDocOnly   : boolean optional,
                            in  bGetCode       : boolean optional,
                            out nResultLen     : number optional ): boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
sResult | String variable that receives the value of the specified attribute.
nMaxResultLen | Maximum length of the string to return. This value must be less than or equal to the size of the string variable sResult.
sTag | Tag whose content (or code) has to be returned.
sCondAttribute | Attribute of the conditional attribute-value pair that must be present in the tag (optional). If this parameter is omitted, no conditional attribute-value pair is checked.
sCondValue | Value of the conditional attribute-value pair that must be present in the result tag (optional).
nAppearance | This parameter specifies which instance of the appearance when all conditions are met is the one for which the result is set (optional). If this parameter is omitted the first appearance is taken.
sFrame | Frame name where to search (optional). If this parameter is omitted, the whole page is searched. An empty string specifies the top frame.
bBaseDocOnly | If this parameter is set to TRUE, only the base document is searched. If sFrame specifies a frame set, the sub frames are not scanned (optional). If this parameter is omitted, all sub frames are searched also.
bGetCode | If this parameter is TRUE the raw data between begin and end tags is returned. If this parameter is omitted only the content (what you see at the browser) of the specified tag is returned.
nResultLen | Variable that receives the number of bytes actually copied to sResult (optional).

Example

dcltrans
  transaction TMain
  var
    sBody             : string(5000);
    sRawHead, sResult : string;
  begin
    WebParseResponseTagContent(sBody, STRING_COMPLETE, "body");
    WebPageUrl("http://mycompany.com/");
    WebParseResponseTagContent(sRawHead, STRING_COMPLETE, "head",
0, 0, 1, "", false, true);
    WebParseResponseTagContent(sResult,
STRING_COMPLETE, "font", "size", "5");
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sBody);
    Print(sRawHead);
    Print(sResult);
  end TMain;
親トピック: Parsing Functions


Response Verification Functions

  • WebVerifyHtml Function
    Parses the HTML response data and counts the appearance of the specified content with the provided string.
  • WebVerifyHtmlBound Function
    Parses the HTML response data and verifies the specified string within the boundaries.
  • WebVerifyHtmlBoundEx Function
    Parses the HTML response data and verifies the specified string within the boundaries.
  • WebVerifyHtmlDigest Function
  • WebVerifyHtmlTitle Function
    Parses the <TITLE> tag of the HTML response and compares its content with the provided string.
  • WebVerifyTable Function
    Parses HTML tables and compares its cell content with the provided string.
  • WebVerifyTableVLookup Function
    Parses HTML tables and compares its cell content with the provided string. If it does not match, an error is raised. In contrast to the function WebVerifyTable, the row number is determined dynamically through the content of a search column.
  • WebVerifyData Function
    Parses the server response data and counts the appearance of the specified content with the provided string.
  • WebVerifyDataBound Function
    Parses the server response data and verifies the specified string within the boundaries.
  • WebVerifyDataBoundEx function
    Parses the server response data and verifies the specified string within the boundaries.
  • WebVerifyDataDigest Function
    Checks whether the Internet traffic that Silk Performer receives differs from the traffic that the Recorder captured during an earlier recording session.
  • WebVerifyResponseData Function
    Checks whether the Internet traffic Silk Performer receives differs from the traffic the Recorder captured during a former recording session.
  • WebVerifyTitle Function
    Parses the <TITLE> tag of the HTML response and compares its content with the provided string.
  • WebVerifyContent Function
    Parses the HTML response and counts the appearance of the specified content with the provided string.
親トピック: Web Functions Reference


WebVerifyHtml Function

Action

Parses the HTML response data and counts the appearance of the specified content with the provided string. If the verification condition is not met, an error is raised. The severity of this error can be specified. The appearance count of the specified content can be retrieved by an optional out-parameter. A subsequent low-level web function will not return a value until the request has finished. A cache hit is not performed unless the WEB_FLAG_DONT_FORCE_LOAD option is set. The verification is done even if this option is set and the verified request or a certain part of a page is a cache hit.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings / Web / Verification / HTML / HTML verification).

注: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyHtml( in  sVerify     : string,
               in  nAppearance : number optional,
               in  nOptions    : number optional,
               in  sFrame      : string optional,
               in  nSeverity   : number optional := SEVERITY_ERROR,
               out nResult     : number optional );
Parameter | Description
sVerify | String to compare with the parsed HTML content.
nAppearance | Optional: Value to which the actual appearance of the specified content string is compared (see nOptions). If this parameter is omitted, the specified string must appear at least once to meet the verification rules.
nOptions Optional:
WEB_FLAG_EQUAL
The verification succeeds if the actual appearance is equal to nAppearance.
WEB_FLAG_GREATER (default)
The verification succeeds if the actual appearance is greater than nAppearance.
WEB_FLAG_SMALLER
The verification succeeds if the actual appearance is smaller than nAppearance.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for a subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
sFrame | Frame that gets searched for the content (optional). If this parameter is omitted the whole page is scanned.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nResult | Optional: If a variable is provided, it will receive the number of appearances of the specified content string.

Example

dcltrans
  transaction TMain
  var    nResult: number;
  begin
    WebVerifyHtml("Begin");
    WebPageUrl("http://mycompany.com/");
    WebVerifyHtml("Begin", 0, 0, NULL, SEVERITY_WARNING);
    WebVerifyHtml("Shop", 2, WEB_FLAG_EQUAL | WEB_FLAG_GREATER);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyHtml("Html", 3, WEB_FLAG_CASE_SENSITIVE |
WEB_FLAG_SMALLER, "Right", SEVERITY_ERROR, nResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    Print(string(nResult));
  end TMain;
親トピック: Response Verification Functions


WebVerifyHtmlBound Function

Action

Parses the HTML response data and verifies the specified string within the boundaries. If the verification condition is not met, an error is raised. The severity of this error can be specified. The result of the verification can be retrieved by an optional out-parameter. A subsequent low-level web function will not return a value until the request has finished. A cache hit is not performed unless the WEB_FLAG_DONT_FORCE_LOAD option is set. The verification is done even if this option is set and the verified request or a certain part of a page is a cache hit.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings / Web / Verification / HTML / HTML verification).

注: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyHtmlBound( in  sLeftBoundary  : string,
                    in  sRightBoundary : string,
                    in  sVerify        : string,
                    in  nOptions       : number optional,
                    in  sFrame         : string optional,
                    in  nSeverity      : number optional := SEVERITY_ERROR,
                    out bSuccess       : boolean optional );
Parameter | Description
sLeftBoundary | Left boundary of the HTML content to compare.
sRightBoundary | Right boundary of the HTML content to compare.
sVerify | String to compare with the parsed HTML content.
nOptions

(optional)

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
sFrame | Frame that gets searched for the content (optional). If this parameter is omitted the whole page is scanned.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bSuccess | If a variable is provided, it will receive the result of the verification (optional).

Example

dcltrans
  transaction TMain
  var
    bResult: boolean;
  begin
    WebVerifyHtmlBound("Begin", "X.X", "End ");
    WebPageUrl("http://mycompany.com/");
    WebVerifyHtmlBound("Begin", "X.X", "End ", 0, NULL,
SEVERITY_WARNING);
    WebVerifyHtmlBound("Shop", "City", "ing", WEB_FLAG_CASE_SENSITIVE);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyHtmlBound("Name:", "Age", "Smith",
WEB_FLAG_IGNORE_WHITE_SPACE, "Name", SEVERITY_ERROR, bResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    if not bResult then
      Print("Verification failed");
    end;
  end TMain;
親トピック: Response Verification Functions


WebVerifyHtmlBoundEx Function

Action

Parses the HTML response data and verifies the specified string within the boundaries. If the verification condition is not met, an error is raised. The severity of this error can be specified. The result of the verification can be retrieved by an optional out-parameter. A subsequent low-level web function will not return a value until the request has finished. A cache hit is not performed unless the WEB_FLAG_DONT_FORCE_LOAD option is set. The verification is done even if this option is set and the verified request or a certain part of a page is a cache hit.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings > Web > Verification > HTML > HTML verification).

注: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyHtmlBoundEx( in  sLeftBoundary   : string,
                      in  nLeftOccurrence : number,
                      in  sRightBoundary  : string,
                      in  sVerify         : string,
                      in  nOptions        : number optional,
                      in  sFrame          : string optional,
                      in  nSeverity       : number optional := SEVERITY_ERROR,
                      out bSuccess        : boolean optional );

Return value

  • none

Parameter | Description
sLeftBoundary | Left boundary of the HTML content to compare.
nLeftOccurrence | The sLeftBoundary has to be found nLeftOccurrence times, before the verification process starts and the right boundary is searched (optional). The default value is one. Provide WEB_OCCURENCE_LAST to specify the last occurrence.
sRightBoundary | Right boundary of the HTML content to compare.
sVerify | String to compare with the parsed HTML content.
nOptions

(optional)

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
重要: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function.
sFrame | Frame that gets searched for the content (optional). If this parameter is omitted the whole page is scanned.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bSuccess | If a variable is provided, it will receive the result of the verification (optional).

Example

dcltrans
  transaction TMain
  var
    bResult: boolean;
  begin
    WebVerifyHtmlBoundEx("Begin", 2, "X.X", "End ");
    WebPageUrl("http://mycompany.com/");
    WebVerifyHtmlBoundEx("Begin", 2, "X.X", "End ", 0, NULL,
SEVERITY_WARNING);
    WebVerifyHtmlBound("Shop", "City", "ing", WEB_FLAG_CASE_SENSITIVE);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyHtmlBound("Name:", "Age", "Smith",
WEB_FLAG_IGNORE_WHITE_SPACE, "Name", SEVERITY_ERROR, bResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    if not bResult then      Print("Verification failed");    end;  end TMain;
親トピック: Response Verification Functions


WebVerifyHtmlDigest Function

Action

Checks whether the HTML content that Silk Performer receives differs from a prior test. As TrueLog Explorer does, Silk Performer generates a digest, containing information about the occurrence of each character of the HTML content, and compares the results with the digest generated by TrueLog Explorer. When verifying HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify by specifying the sFrame parameter. By default the whole page is scanned. For a detailed explanation of the digest calculations see WebVerifyDataDigest.

Include file

WebAPI.bdh

Syntax

WebVerifyHtmlDigest( in  sDigest     : string,
                     in  nDigestLen  : number,
                     in  nDifference : number optional,
                     in  nOptions    : number optional,
                     in  sFrame      : string optional,
                     in  nSeverity   : number optional := SEVERITY_ERROR,
                     out nActDiff    : number optional ) : boolean;

Return value

  • true if the parsing modifier was created successfully.

  • false otherwise.

Parameter | Description
sDigest | Digest generated by TrueLog Explorer.
nDigestLen | Size of the digest generated by TrueLog Explorer. Specify STRING_COMPLETE for the complete digest.
nDifference | Upper tolerance level for the response verification (optional). For each digest entry, this function calculates the difference between the TrueLog Explorer and the Silk Performer digests. Finally, this function calculates the sum total of the differences of the TrueLog Explorer and the Silk Performer digests. If this sum total is greater than the tolerance level you specified, Silk Performer reports it as an error. If you want to ensure that both the TrueLog Explorer and the Silk Performer digests are compatible, you must specify a negative value (e.g.: -1). If you do not specify a value, or if you set it to zero, the default setting will be used instead.
nOptions

(optional)

WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for the subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
sFrame | Frame that gets scanned (optional). If this parameter is omitted the whole page is scanned.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nActDiff | The calculated difference between the digests generated by TrueLog Explorer and by Silk Performer at the actual run (optional).

Example

Const
  // generated by TrueLog Explorer
  HTML_DIGEST_1 :=
  "\h014100000000012000008AA2D9017AFBFD03000000000000000000000000000000004A03"
  "\h0101020401010408030201010606051904070A0405040910080F0C140502010101"; dcluser  user
    WebUser  transactions
    TWeb : 1;  dcltrans
  transaction TWeb
  begin
    WebVerifyHtmlDigest( HTML_DIGEST_1, STRING_COMPLETE, 0, 0, NULL, SEVERITY_ERROR);
    WebPageUrl("http://mycompany.com/");
  end TWeb;
親トピック: Response Verification Functions
関連資料
WebVerifyDataDigest Function


WebVerifyHtmlTitle Function

Action

Parses the <TITLE> tag of the HTML response and compares its content with the provided string. If it does not match, an error is raised. The severity of this error can be specified. The verification result can be retrieved by an optional out-parameter. A subsequent low-level web function will not return a value until the request has finished. If a page consists of more than one HTML document, the sub frames that are checked for the title can be specified with the nDocNum parameter.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (e.g. a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings / Web / Verification / HTML / Title verification).

注: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyHtmlTitle( in  sVerify   : string,
                    in  nOptions  : number optional,
                    in  nDocNum   : number optional,
                    in  nSeverity : number optional := SEVERITY_ERROR,
                    out bSuccess  : boolean optional );
Parameter | Description
sVerify | String to compare with the parsed title.
nOptions

(optional)

WEB_FLAG_CONTAINS
The actual parsed HTML title must contain the specified string. Otherwise the verification fails.
WEB_FLAG_CONTAINS_NOT
The actual parsed HTML title must not contain the specified string. Otherwise the verification fails.
WEB_FLAG_IS_DIFFERENT
The actual parsed HTML title must not be equal to the specified string. Otherwise the verification fails.
WEB_FLAG_EQUAL
The actual parsed HTML title must be equal to the specified string. Otherwise the verification fails. If none of the above 3 flags are specified, the WEB_FLAG_EQUAL flag is used.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
nDocNum | Specifies the document to check the title for (optional). The default (1) specifies the top document (e.g. a frameset).
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bSuccess | If a variable is provided, it will receive the result of the verification (optional).

Example

dcltrans
  transaction TMain
  var
    bResult: boolean;
  begin
    WebVerifyHtmlTitle("Silk Performer Test Site");
    WebPageUrl("http://mycompany.com/");
    WebVerifyHtmlTitle("ShopIt - Greeting",
WEB_FLAG_CASE_SENSITIVE, 1, SEVERITY_WARNING, bResult);
    WebUrl("http://mycompany.com/Shop/default.htm");
    if not bResult then
      print("Verification failed");
    end
    WebVerifyHtmlTitle("FrameA", 0, 1); // base frameset
verification
    WebVerifyHtmlTitle("Buy It", 0, 3); // second frame
    WebPageUrl("http://mycompany.com/frame/framea.html");
  end TMain;
親トピック: Response Verification Functions


WebVerifyTable Function

Action

Parses HTML tables and compares its cell content with the provided string. If it does not match, an error is raised. The severity of this error can be specified. The verification result can be retrieved by an optional out-parameter. A subsequent low-level function will not return a value until the request has finished.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings / Web / Verification / HTML / Table verification).

注: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyTable( in  nTableNum  : number,
                in  nRow       : number,
                in  nColumn    : number,
                in  sVerify    : string,
                in  nOptions   : number optional,
                in  sFrame     : string optional,
                in  nSeverity  : number optional := SEVERITY_ERROR,
                out bSuccess   : boolean optional );

Return value

  • none

Parameter | Description
nTableNum | The nTableNum th table is checked.
nRow | Specifies the row of the cell to verify.
nColumn | Specifies the column of the cell to verify.
sVerify | String to compare with the parsed cell.
nOptions

(optional)

WEB_FLAG_CONTAINS
The actual parsed table cell must contain the specified string. Otherwise the verification fails.
WEB_FLAG_CONTAINS_NOT
The actual parsed table cell must not contain the specified string. Otherwise the verification fails.
WEB_FLAG_IS_DIFFERENT
The actual parsed table cell must not be equal to the specified string. Otherwise the verification fails.
WEB_FLAG_EQUAL
The actual parsed table cell must be equal to the specified string. Otherwise the verification fails. If none of the above 3 flags are specified, the WEB_FLAG_EQUAL flag is used.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (that are loaded) of a page.
sFrame | Frame that gets searched for the specified table (optional). If this parameter is omitted the whole page is scanned.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bSuccess | If a variable is provided, it will receive the result of the verification (optional).

Example

dcltrans
  transaction TMain
  var
    bResult: boolean;
  begin
    WebVerifyTable(1, 3, 4, "1200");
    WebPageUrl("http://mycompany.com/");
    WebVerifyTable(2, 1, 1, "error",
WEB_FLAG_CONTAINS_NOT, "FrameRight", SEVERITY_WARNING, bResult);
    WebUrl("http://mycompany.com/Shop/default.htm");
    if not bResult then
      print("Verification failed");
    end;
    WebVerifyTable(2, 2, 2, "sum");
    WebVerifyTable(3, 2, 3, "1455");
    WebPageUrl("http://mycompany.com/frame/framea.html");
  end TMain;
親トピック: Response Verification Functions


WebVerifyTableVLookup Function

Action

Parses HTML tables and compares its cell content with the provided string. If it does not match, an error is raised. The severity of this error can be specified. In contrast to the function WebVerifyTable, the row number is determined dynamically through the content of a search column. The Verification result can be retrieved by an optional out-parameter. A subsequent low-level function will not return a value until the request has finished.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings / Web / Verification / HTML / Table verification).

Include file

WebAPI.bdh

Syntax

WebVerifyTableVLookup( in  nTableNum      : number,
                       in  nSearchColumn  : number,
                       in  sSearchText    : string,
                       in  nSearchOptions : number,
                       in  nResultColumn  : number,
                       in  sVerify        : string,
                       in  nResultOptions : number optional,
                       in  sFrame         : string optional,
                       in  nSeverity      : number optional := SEVERITY_ERROR,
                       out bSuccess       : boolean optional );

Return value

  • none

Parameter | Description
nTableNum | The nTableNum th table is checked.
nSearchColumn | Specifies, in which column to look for sSearchText.
sSearchText | The search text identifies the correct row. If multiple rows match the search text, the verification is performed for the first matching row.
nSearchOptions
WEB_FLAG_CONTAINS
The actual parsed table cell must contain the specified string. Otherwise the verification fails.
WEB_FLAG_CONTAINS_NOT
The actual parsed table cell must not contain the specified string. Otherwise the verification fails.
WEB_FLAG_IS_DIFFERENT
The actual parsed table cell must not be equal to the specified string. Otherwise the verification fails.
WEB_FLAG_EQUAL
The actual parsed table cell must be equal to the specified string. Otherwise the verification fails. If none of the above 3 flags are specified, the WEB_FLAG_EQUAL flag is used.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (that are loaded) of a page.
nResult Column | Specifies the column of the cell to verify.
sVerify | String to compare with the parsed cell.
nResultOptions

(optional)

WEB_FLAG_CONTAINS
The actual parsed table cell must contain the specified string. Otherwise the verification fails.
WEB_FLAG_CONTAINS_NOT
The actual parsed table cell must not contain the specified string. Otherwise the verification fails.
WEB_FLAG_IS_DIFFERENT
The actual parsed table cell must not be equal to the specified string. Otherwise the verification fails.
WEB_FLAG_EQUAL
The actual parsed table cell must be equal to the specified string. Otherwise the verification fails. If none of the above 3 flags are specified, the WEB_FLAG_EQUAL flag is used.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
sFrame | Frame that gets searched for the specified table (optional). If this parameter is omitted the whole page is scanned.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bSuccess | If a variable is provided, it will receive the result of the verification (optional).

Example

/* Table #3 on the page:
Number  Name                         Price
  1000  3 Person Dome Tent        $ 299.99
  1001  External Frame Backpack   $ 179.95
  1002  Glacier Sun Glasses        $ 67.99
  1003  Padded Socks               $ 19.99
  1004  Hiking Boots              $ 109.90
  1005  Back Country Shorts        $ 24.95
*/

  transaction TMain
  var
    bResult : boolean;
  begin
    WebVerifyTableVLookup(3, 1, "1003", WEB_FLAG_EQUAL, 2, "Padded Socks");
    WebPageUrl("http://demo.borland.com/gmopost/online-catalog.htm", "OnLine Catalog");

    WebVerifyTableVLookup(3, 1, "003", WEB_FLAG_CONTAINS, 2, "Padded Socks", WEB_FLAG_EQUAL, NULL, SEVERITY_ERROR, bResult);
    WebPageUrl("http://demo.borland.com/gmopost/online-catalog.htm", "OnLine Catalog");
    if not bResult then
      print("Verification failed");
    end;

    WebVerifyTableVLookup(3, 1, "1003", WEB_FLAG_EQUAL, 2, "wrong text", WEB_FLAG_CONTAINS_NOT, NULL, SEVERITY_ERROR, bResult);
    WebPageUrl("http://demo.borland.com/gmopost/online-catalog.htm", "OnLine Catalog");
    if not bResult then
      print("Verification failed");
    end;
  end TMain;
親トピック: Response Verification Functions


WebVerifyData Function

Action

Parses the server response data and counts the appearance of the specified content with the provided string. If the verification condition is not met, an error is raised. The severity of this error can be specified. The appearance count of the specified content can be retrieved by an optional out-parameter. A subsequent low-level web function will not return a value until the request has finished. A cache hit is not performed unless the WEB_FLAG_DONT_FORCE_LOAD option is set. The verification is done even if this option is set and the verified request or a certain part of a page is a cache hit.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (e.g. a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings / Web / Verification / Data / Data verification).

注: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyData( in  sVerify     : string,
               in  nAppearance : number optional,
               in  nOptions    : number optional,
               in  nDocNum     : number optional,
               in  nSeverity   : number optional := SEVERITY_ERROR,
               out nResult     : number optional ) ;
Parameter | Description
sVerify | String to compare with the parsed HTML content.
nAppearance | Value to which the actual appearance of the specified content string is compared (see nOptions)(optional). If this parameter is omitted, the specified string must appear at least once to meet the verification rules.
nOptions

(optional)

WEB_FLAG_EQUAL
The verification succeeds if the actual appearance is equal to nAppearance.
WEB_FLAG_GREATER (default)
The verification succeeds if the actual appearance is greater than nAppearance.
WEB_FLAG_SMALLER
The verification succeeds if the actual appearance is smaller than nAppearance.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent requests. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_ALL_RESPONSES
If this flag is specified all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY.
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
nDocNum | Specifies the document to verify (optional). Specify WEB_DOC_ALL if you want to verify all documents. If this parameter is omitted, the first document gets verified. (see the above definition of FLAG_INCLUDE_EMBEDDED)
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nResult | If a variable is provided, it will receive the number of appearances of the specified content string (optional).

Example

dcltrans
  transaction TMain
  var
    nResult: number;
  begin
    WebVerifyData("<a href=sun.gif");
    WebPageUrl("http://mycompany.com/");
    WebVerifyData("<b>Begin</b>", 0, 0, 0, SEVERITY_WARNING);
    WebVerifyData("Shop</a>", 2, WEB_FLAG_EQUAL | WEB_FLAG_GREATER);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyData("<Html>", 2, WEB_FLAG_CASE_SENSITIVE | WEB_FLAG_SMALLER, 2, SEVERITY_ERROR, nResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    Print(string(nResult));
  end TMain;
親トピック: Response Verification Functions


WebVerifyDataBound Function

Action

Parses the server response data and verifies the specified string within the boundaries if the string starts with the given parameter. If the verification condition is not met, an error is raised. The severity of this error can be specified. The result of the verification can be retrieved by an optional out-parameter. A subsequent low-level web function will not return a value until the request has finished. A cache hit is not performed unless the WEB_FLAG_DONT_FORCE_LOAD option is set. The verification is done even if this option is set and the verified request or a certain part of a page is a cache hit.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (for example, a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings / Web / Verification / Data / Data verification).

注: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyDataBound( in  sLeftBoundary  : string,
                    in  sRightBoundary : string,
                    in  sVerify        : string,
                    in  nOptions       : number optional,
                    in  nDocNum        : number optional,
                    in  nSeverity      : number optional := SEVERITY_ERROR,
                    out bSuccess       : boolean optional );
Parameter | Description
sLeftBoundary | Left boundary of the data to compare.
sRightBoundary | Right boundary of the data to compare.
sVerify | String to compare with the parsed data.
nOptions

(optional)

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_SYNCHRON
Verifications with this flag set, are done in a sequential way. The second verification is not executed before the boundaries of the first one have been found.
WEB_FLAG_ALL_RESPONSES
If this flag is specified, all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified every embedded object increases this counter, which assigns higher numbers to subsequent frames
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
nDocNum | Specifies the document to verify (optional). Specify WEB_DOC_ALL if you want to verify all documents. If this parameter is omitted, the first document gets verified. (see the above definition of FLAG_INCLUDE_EMBEDDED)
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bSuccess | If a variable is provided, it will receive result of the verification (optional).

Example

dcltrans
  transaction TMain
  var
    bResult: boolean;
  begin
    WebVerifyDataBound("<b>Begin", "X.X</b>", "End ");
    WebPageUrl("http://mycompany.com/");
    WebVerifyDataBound("<b>Begin","X.X</b>", "End ", 0, 0, SEVERITY_WARNING);
    WebVerifyDataBound("<html>","</html>", "no body", WEB_FLAG_CASE_SENSITIVE | WEB_FLAG_IGNORE_WHITE_SPACE);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyDataBound("Name:", "\r\n", "Smith",WEB_FLAG_IGNORE_WHITE_SPACE, 2, SEVERITY_Error, bResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    if not bResult then
       Print("Verification failed");
    end;
  end TMain;
親トピック: Response Verification Functions


WebVerifyDataBoundEx function

Action

Parses the server response data and verifies the specified string within the boundaries if the string starts with the given parameter. If the verification condition is not met, an error is raised. The severity of this error can be specified. The result of the verification can be retrieved by an optional out-parameter. If nLeftOccurrence is greater than 1 (default is one) the sLeftBoundary has to be found nLeftOccurrence times, before the verification process starts and the right boundary is searched. A subsequent low-level web function will not return a value until the request has finished. A cache hit is not performed unless the WEB_FLAG_DONT_FORCE_LOAD option is set. The verification is done even if this option is set and the verified request or a certain part of a page is a cache hit.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (e.g. a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

This verification feature can be enabled/disabled globally (Profile Settings > Web > Verification > Data > Data verification).

Note: This function can be added automatically to your script using the visual verification functionality of TrueLog Explorer.

Include file

WebAPI.bdh

Syntax

WebVerifyDataBoundEx( in sLeftBoundary    : string,
                      in  nLeftOccurrence : number,
                      in  sRightBoundary  : string,
                      in  sVerify         : string,
                      in  nOptions        : number optional,
                      in  nDocNum         : number optional,
                      in  nSeverity       : number optional := SEVERITY_ERROR,
                      out bSuccess        : boolean optional );

Parameter

Description

sLeftBoundary | Left boundary of the data to compare.
nLeftOccurrence | The sLeftBoundary has to be found nLeftOccurrence times, before the verification process starts and the right boundary is searched (optional). The default value is one. Provide WEB_OCCURENCE_LAST to specify the last occurrence.
sRightBoundary | Right boundary of the data to compare.
sVerify | String to compare with the parsed data.
nOptions

(optional)

WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all white spaces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_SYNCHRON
Verifications with this flag set, are done in a sequential way. The second verification is not executed before the boundaries of the first one have been found.
WEB_FLAG_ALL_RESPONSES
If this flag is specified, all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
重要: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function.
nDocNum

(optional)

Specifies the document to verify. Specify WEB_DOC_ALL if you want to verify all documents. If this parameter is omitted, the first document gets verified. (see the above definition of FLAG_INCLUDE_EMBEDDED)

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bSuccess

(optional)

If a variable is provided, it will receive the result of the verification.

Example

dcltrans
  transaction TMain
  var   bResult: boolean;
  begin WebVerifyDataBoundEx("<b>Begin",2,"X.X</b>", "End ");
    WebPageUrl("http://mycompany.com/");
    WebVerifyDataBoundEx("<b>Begin",2,"X.X</b>", "End ", 0, 0, SEVERITY_WARNING);
    WebVerifyDataBound("<html>","</html>", "no body", WEB_FLAG_CASE_SENSITIVE | WEB_FLAG_IGNORE_WHITE_SPACE);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyDataBound("Name:", "\r\n", "Smith",WEB_FLAG_IGNORE_WHITE_SPACE, 2, SEVERITY_Error, bResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    if not bResult then
      Print("Verification failed");
    end;
  end TMain;
親トピック: Response Verification Functions


WebVerifyDataDigest Function

Action

Checks whether the Internet traffic that Silk Performer receives differs from the traffic that the Recorder captured during an earlier recording session. As the Recorder does, Silk Performer generates a digest containing information about the occurrence of each character, and compares the results with the digest generated by the Recorder. Using this function, it is possible to check whether Silk Performer receives the same data as the client application did during recording.

When verifying/parsing an HTML page that consists of multiple frames (HTML documents), you can specify which frame document to verify/parse by specifying the nDocNum parameter. By default (1) the top document (e.g. a frameset) is scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

Include file

WebAPI.bdh

Syntax

WebVerifyDataDigest( in  sDigest     : string,
                     in  nDigestLen  : number optional,
                     in  nDifference : number optional,
                     in  nOptions    : number optional,
                     in  nDocNum     : number optional,
                     in  nSeverity   : number optional := SEVERITY_ERROR,
                     out nActDiff    : number optional) : boolean;

Return value

  • true if the parsing modifier was created successfully.

  • false otherwise.

Parameter | Description
sDigest | Digest generated by the Recorder. When the corresponding option in the Recorder Settings tab is enabled, the Internet Recorder generates a constant string called sDigest in the const section of the test script, which is suitable for this function.
nDigestLen | Size of the digest generated by the Recorder (optional, default = STRING_COMPLETE).
nDifference | Upper tolerance level for the response verification (optional). For each digest entry, this function calculates the difference between the Recorder and the Silk Performer digests. Finally, this function calculates the sum total of the differences of the Recorder and the Silk Performer digests. If this sum total is greater than the tolerance level you specified, Silk Performer reports it as an error. If you want to ensure that both the Recorder and the Silk Performer digests are compatible, you must specify a negative value (e.g.: -1). If you do not specify a value, or if you set it to zero, the default setting will be used instead.
nOptions (optional)
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent request. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_ALL_RESPONSES
If this flag is specified all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
nDocNum | Specifies the document to verify (optional). Specify WEB_DOC_ALL if you want to verify all documents. If this parameter is omitted, the first document gets verified. (see the above definition of FLAG_INCLUDE_EMBEDDED)
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nActDiff | The calculated difference between the Recorder and the Silk Performer digests.

Example

When capturing Internet traffic, the Recorder receives the following characters:

A A B B B C C C C E F F G G G

Therefore it generates the digest shown below.

A | B | C | D | E | F | G
2 | 3 | 4 | 0 | 1 | 2 | 3

When replaying the script, Silk Performer receives the following character stream from the server:

A A B A B C C C C E F F F F G

Silk Performer then generates the digest shown below.

A | B | C | D | E | F | G
3 | 2 | 4 | 0 | 1 | 4 | 1

The differences between the both digests are shown below.

A | B | C | D | E | F | G
1 | 1 | 0 | 0 | 0 | 2 | 2

In this case, the sum of differences is 6. Consequently, the first Web function call that follows the function call

WebVerifyDataDigest(sDigest, STRING_COMPLETE, 0);

reports an error. However, the first Web function call that follows the function call

WebVerifyDataDigest(sDigest, STRING_COMPLETE, 6);

does not report an error.

Example

const
  DATA_DIGEST_1 :=    "\h01420000000083F0AFF5FEF2FD01FEFBFF0300000000000000000000000000000000D201"

   "\h01009800010009003D00AC0009000500060003000100010002003C004B004C004B000200"

   "\h0500020001000A0002000400020001001200050003000400070009003A00050004000200"

   "\h02000200BB000E003C0049000F010700650036007100040038007900A700D600A3000100"

   "\h6800D000F200390005001A001C001B00";
dcltrans
  transaction TMain
  begin
    ...
    WebVerifyDataDigest(DATA_DIGEST_1, 160, 0, 0, 1, SEVERITY_ERROR);
    WebUrl("http://lab21/MSSoapSamples/State/Service/Rpc/IsapiVb/State.wsdl", 0.44);
    ...
  end TMain;
親トピック: Response Verification Functions


WebVerifyResponseData Function

Action

Checks whether the Internet traffic Silk Performer receives differs from the traffic the Recorder captured during a former recording session. As the Recorder does, Silk Performer generates a digest containing information about the occurrence of each character, and compares the results with the digest generated by the Recorder. Using this function, it is possible to check whether Silk Performer receives the same data as the client application did during recording.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: This function is obsolete. It can still be used, although it's recommended to use the WebVerifyDataDigest function instead.

Include file

WebAPI.bdh

Syntax

WebVerifyResponseData( in  sDigest     : string,
                       in  nDigestSize : number,
                       in  nDifference : number optional,
                       out nResult     : number optional ): boolean;

Return value

  • true if the parsing modifier was created successfully.

  • false otherwise.

Parameter | Description
sDigest | Digest generated by the Recorder. When the corresponding option in the Recorder Settings tab is enabled, the Internet Recorder generates in the const section of the test script a constant string called sDigest, suitable for this function.
nDigestSize | Size of the digest generated by the Recorder.
nDifference | Upper tolerance level for the response verification (optional). For each digest entry, this function calculates the difference between the Recorder and the Silk Performer digests; finally, this function calculates the sum total of the differences of the Recorder and the Silk Performer digests. If this sum total is greater than the tolerance level you specified, Silk Performer reports it as an error. If you want to ensure that both the Recorder and the Silk Performer digests are compatible, you must specify a negative value, for example, -1. If you do not specify this value, or if you set it to zero, the default setting will be used instead.
nResult | Variable that receives the sum total of the differences between the Recorder and the Silk Performer digests (optional). If you specify a variable here, the subsequent low-level web function call will not return until the request has finished.

Example

When capturing Internet traffic, the Recorder receives the following characters:

A A B B B C C C C E F F G G G

Therefore it generates the digest shown below.

A | B | C | D | E | F | G
2 | 3 | 4 | 0 | 1 | 2 | 3

When replaying the script, Silk Performer receives the following character stream from the server:

A A B A B C C C C E F F F F G

Silk Performer then generates the digest shown below.

A | B | C | D | E | F | G
3 | 2 | 4 | 0 | 1 | 4 | 1

The differences between the both digests are shown below.

A | B | C | D | E | F | G
1 | 1 | 0 | 0 | 0 | 2 | 2

In this case, the sum of differences is 6. Consequently, the first Web function call that follows the function call

WebVerifyResponseData(sDigest, sizeof(sDigest), 0);

reports an error. However, the first Web function call that follows the function call

WebVerifyResponseData(sDigest, sizeof(sDigest), 6);

does not report an error.

Sample scripts

WebVerification01.bdf

親トピック: Response Verification Functions
関連資料
WebVerifyDataDigest Function


WebVerifyTitle Function

Action

Parses the <TITLE> tag of the HTML response and compares its content with the provided string. If it does not match, an error is raised; the severity of this error can be specified. The parsed title can be retrieved by an optional out-parameter. If this parameter is provided, a subsequent low-level web function will not return until the request has finished. If it is omitted, a subsequent low-level web function will not wait for the completion of the request. If a page consists of more than one HTML document, additional calls of the WebVerifyTitle function check the title of the sub frames.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant. An exception to this rule is using WebParseDataBound and WebVerifyDataBound with the flag WEB_FLAG_SYNCHRON).

This verification feature can be disabled globally using the response title verification option in the verification category of the Web profile settings.

注: This function is obsolete. It can still be used, though it is recommended that you use the WebVerifyHtmlTitle function instead.

Include file

WebAPI.bdh

Syntax

WebVerifyTitle( in  sTitle        : string optional,
                in  nSeverity     : number optional := SEVERITY_ERROR,
                out sResult       : string optional,
                in  nMaxResultLen : number optional,
                in  nModeCompare  : number optional ): boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
sTitle | String to compare with the parsed title (optional). If this parameter is omitted, no error is raised (useful for pages with sub frames only).
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
sResult | If a variable is provided, it will receive the parsed title (optional).
nMaxResultLen | Maximum length of the string to return. This value must be less than or equal to the size of the string variable sResult (optional). If this parameter is omitted, the string length is unlimited.
nModeCompare | If this parameter is set to WEB_VER_FLAG_CASE_SENSITIVE, the compare operation is case sensitive (optional). If this parameter is omitted, the compare operation is not case sensitive.

Example

dcltrans
  transaction TMain
  var
    sResult: string;
  begin
    WebVerifyTitle("Silk Performer Test Site");
    WebPageUrl("http://mycompany.com/");
    WebVerifyTitle("ShopIt - Greeting", SEVERITY_WARNING,
                   sResult, STRING_COMPLETE, WEB_VER_FLAG_CASE_SENSITIVE);
    WebUrl("http://mycompany.com/Shop/default.htm");
    Print(sResult);
    WebVerifyTitle("FrameA"); // base frameset
    WebVerifyTitle(); // first frame - perform no verification
    WebVerifyTitle("Buy It"); // second frame
    WebPageUrl("http://mycompany.com/frame/framea.html");
  end TMain;
親トピック: Response Verification Functions
関連資料
WebVerifyContent Function
WebVerifyResponseData Function
WebParseResponseTagContent Function
WebVerifyHtmlTitle Function


WebVerifyContent Function

Action

Parses the HTML response and counts the appearance of the specified content with the provided string. If the verification condition is not met, an error is raised; the severity of this error can be specified. The appearance count of the specified content can be retrieved by an optional out-parameter. If this parameter is provided, a subsequent low-level web function will not return until the request has finished. If it is omitted, a subsequent low-level web function will not wait for the completion of the request. If the verified request is a cache hit or a conditional cache hit, the content is not verified, an informational message is displayed, and the optional out parameter retrieves a -1. If the bForceLoad parameter is set to true the page must not be found in the cache and has to be requested; the result is provided under all circumstances.

When verifying/parsing an HTML page that consists of multiple frames, you can specify which frame document to verify/parse by specifying the sFrame parameter. By default, all HTML documents of the HTML page are scanned. This applies to HTML pages that are retrieved through a page-level command like WebPageUrl or WebPageLink.

It is important to know that all parsing and verification functions must be specified before the Web API call for which the response data should be parsed/verified. You can specify multiple parse/verification functions before a Web API call. The order of the parse/verification functions is not relevant (Exception: WebParseDataBound and WebVerifyDataBound using the flag WEB_FLAG_SYNCHRON).

注: This function is obsolete. It can still be used, although it's recommended to use the WebVerifyHtml function instead.

Include file

WebAPI.bdh

Syntax

WebVerifyContent( in    sContent     : string,
                  in    nAppearance  : number optional,
                  in    sFrame       : string optional,
                  in    nModeCompare : number optional,
                  in    nSeverity    : number optional := SEVERITY_ERROR,
                  in    bForceLoad   : boolean optional,
                  inout nResult      : number optional ) : boolean;

Return value

  • true if the parsing modifier could be created successfully

  • false otherwise

Parameter | Description
sContent | String to compare with the parsed HTML content.
nAppearance | Value to which the actual appearance of the specified content string is compared (see nModeCompare)(optional). If this parameter is omitted, the specified string must appear at least once to fulfill the verification rules.
sFrame | Frame where the content string is to be searched for (optional). If this parameter is omitted the whole page is scanned.
nModeCompare

Specifies how the compare operation is performed. Can be a combination of the following values:

WEB_VER_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_VER_FLAG_CONTENT_EQUAL
The verification succeeds if the actual appearance is equal to nAppearance.
WEB_VER_FLAG_CONTENT_GREATER (default)
The verification succeeds if the actual appearance is greater than nAppearance.
WEB_VER_FLAG_CONTENT_SMALLER
The verification succeeds if the actual appearance is smaller than nAppearance.
nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
bForceLoad | If this parameter is true, the page has to be loaded (no cache hit possible).
nResult | If a variable is provided, it will receive the number of appearances of the specified content string (optional).

Example

dcltrans
  transaction TMain
  var
    nResult: number;
  begin
    WebVerifyContent("Begin");
    WebPageUrl("http://mycompany.com/");
    WebVerifyContent("Begin");
    WebVerifyContent("Shop", 2, 0, WEB_VER_FLAG_CONTENT_EQUAL);
    WebUrl("http://mycompany.com/Shop/default.htm");
    WebVerifyContent("Html", 3, "Right", WEB_VER_FLAG_CONTENT_SMALLER,
                     SEVERITY_ERROR, true, nResult);
    WebPageUrl("http://mycompany.com/frame/framea.html");
    Print(string(nResult));
  end TMain;
親トピック: Response Verification Functions
関連資料
WebVerifyTitle Function
WebVerifyResponseData Function
WebParseResponseTagContent Function
WebVerifyHtml Function


MMS Functions

  • WebPostMms Function
親トピック: Web Functions Reference


WebPostMms Function

Action

Posts the MMS to the specified MMSC by means of HTTP POST. The returned value only indicates whether or not the post operation was successful. To determine if the MMSC answered with a response status of OK, locate the response (WebParseDataBound), parse the MMS (MmsParseMms) and check its response status header (MmsGetHeader).

Include file

MmsLib.bdh

Syntax

WebPostMms( in sUrl : string,
            in hMms : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUrl | Complete URL to the MMSC.
hMms | Handle for the MMS returned by a call to MmsCreateMms.

Example

transaction TInit
  var
    hMms : number;
  begin
    MmsCreateMms(hMms);
    MmsSetHeader(hMms, MMS_HEADER_MsgType, MMS_M_SEND_REQ);
    MmsSetHeader(hMms, MMS_HEADER_MmsVersion, MMS_MSGVERSION_10);
    MmsSetHeader(hMms, MMS_HEADER_ContentType,
        WAP_CONTENT_ApplicationVndWapMultipartRelated);
    MmsSetHeaderString(hMms, MMS_HEADER_From, "31743678001");
    MmsSetHeaderString(hMms, MMS_HEADER_To, "31743689031");
    MmsSetHeaderString(hMms, MMS_HEADER_TransactionId, "17");
    MmsAddFile(hMms, "smile.gif", WAP_CONTENT_ImageGif,
        "smile.gif", "smile.gif");
    WebPostMms("http://10.5.8.12:8899/mmsc", hMms);
    MmsDeleteMms(hMms);
  end TInit;
親トピック: MMS Functions


XML Functions Reference

Silk Performer Web API provides functions for parsing/verifying node and attribute values of a Web response.

  • WebXmlGetDocument Function
    If the next web request returns an XML document, the document will be parsed by the XML dom parser and the handle to the document will be stored in hDocument.
  • WebXmlParseNodeAttribute Function
    Parses the response document with the defined content type (default: text/xml) and returns the XML attribute value of nodes attribute of the passed X-Path.
  • WebXmlParseNodeValue Function
    Parses the response document with the defined content type (default: text/xml) and returns the XML node value of the passed X-Path.
  • WebXmlVerifyNodeAttribute Function
    Verifies a nodes attribute value of the nOccurrence'd document matching the sContentType.
  • WebXmlVerifyNodeValue Function
    Verifies a nodes value of the nOccurrence'd document matching the sContentType.
親トピック: Internet Functions


WebXmlGetDocument Function

Action

If the next web request returns an XML document, the document will be parsed by the XML dom parser and the handle to the document will be stored in hDocument. If there is no document that can be parsed, the handle will be 0.

nOccurrence specifies that the nOccurrence'd document of the next request that matches the content type should be parsed. Default value is 1.

If sContentType is defined only documents of that content type will be parsed. Default value is "text/xml".

注: Use the XmlFreeHandle function in your script to free any open handles and to avoid increasing memory usage.

Include file

WebAPI.bdh

Syntax

WebXmlGetDocument( out hDocument    : number,
                   in  nOccurrence  : number optional,
                   in  sContentType : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hDocument | Will hold the handle to the parsed document after the next web request.
nOccurrence | (optional) If defined, the nOccurrence'd document that matches the content type will be parsed. Default value is 1.
sContentType | (optional) Default: text/xml Only documents of the passed content type will be parsed. If you pass a blank, all content types will be accepted.

Example

dcltrans
  transaction TMain
  var
    hObject, hDoc : number;
    sXML          : string;
  begin
    WebXmlGetDocument(hDoc);
    WebPageUrl("http://localhost/productsandbooks.xml");
    if(hDoc <> 0) then
      XmlGetXml(hDoc, sXML);
      writeln(sXML);
    end;
  end TMain;

XML Document for the sample above

<?xml version="1.0" ?>
<ProductsBooks>
<Products>
<Product name='Product1'>This is product1</Product>
<Product name='Product2'>This is product2</Product>
</Products>
<Books xmlns:bookns='http://book'>
<bookns:Book price='20.95'>Lord of the Rings</bookns:Book>
<bookns:Book price='18.70'>Star Wars - Episode I</bookns:Book>
</Books>
</ProductsBooks>
親トピック: XML Functions Reference


WebXmlParseNodeAttribute Function

Action

Parses the response document with the defined content type (default: text/xml) and returns the XML attribute value of nodes attribute of the passed X-Path. The response document has to be a valid XML document for the function to work properly. If the X-Path query string contains any elements with namespace prefixes, the namespaces have to be passed in sNamespaces. sBuffer will receive the parsed value.

Include file

WebAPI.bdh

Syntax

WebXmlParseNodeAttribute( out sBuffer      : string,
                          in  nBufferLen   : number,
                          in  sXPath       : string,
                          in  sAttribute   : string,
                          in  nOptions     : number optional,
                          in  sNamespaces  : string optional,
                          in  nOccurence   : number optional,
                          in  sContentType : string optional,
                          out nParsedBytes : number optional );
Parameter | Description
sBuffer | String variable that will receive the parsed XML attribute value
nBufferLen | Maximum length of the string to return. If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
sXPath | X-Path query that specifies which XML node to parse
sAttribute | Attribute of the resulting node of the X-Path query which value should be returned
nOptions | (optional) WEB_FLAG_DONT_FORCE_LOAD: Specify this option to enable caching for subsequent requests. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
sNamespaces | (optional) Namespaces that should be recognized by the XML parser. If the x-path query contains any namespace prefixes, these prefixes have to be defined in this namespace string in the way xmlns:prefix=namespace. Multiple namespaces can be defined by separating them with a blank: xmlns:ns1='http://www.MyCompany.com/ns1' xmlns:ns2='http://www.MyCompany.com/ns2'
nOccurence | (optional) If defined, the nOccurrence'd document that matches the content type will be parsed. Default value is 1.
sContentType | (optional) Default: text/xml Only documents of the passed content type will be parsed. If you pass a blank, all content types will be accepted.
nParsedBytes | (optional) Number of bytes parsed into sBuffer

Example

dcltrans
  transaction TMain
  var
    hObject : number;
    sParsedValue1, sParsedValue2 : string;
  begin
    WebXmlParseNodeAttribute(sParsedValue1, STRING_COMPLETE, "/ProductsBooks/Products/Product[2]",,"name");
    WebXmlParseNodeAttribute(sParsedValue2, STRING_COMPLETE, "/ProductsBooks/Books/ns1:Book", "price", WEB_FLAG_DONT_FORCE_LOAD, "xmlns:ns1='http://book'");
    WebPageUrl("http://localhost/productsandbooks.xml");
  end TMain;

XML Document for the sample above:

<?xml version="1.0" ?>
<ProductsBooks>
<Products>
<Product name='Product1'>This is product1</Product>
<Product name='Product2'>This is product2</Product>
</Products>
<Books xmlns:bookns='http://book'>
<bookns:Book price='20.95'>Lord of the Rings</bookns:Book>
<bookns:Book price='18.70'>Star Wars - Episode I</bookns:Book>
</Books>
</ProductsBooks>
親トピック: XML Functions Reference
関連資料
WebXmlParseNodeValue Function


WebXmlParseNodeValue Function

Action

Parses the response document with the defined content type (default: text/xml) and returns the XML node value of the passed X-Path. The response document has to be a valid XML document for the function to work properly. If the X-Path query string contains any elements with namespace prefixes, the namespaces have to be passed in sNamespaces. sBuffer will receive the parsed value.

Include file

WebAPI.bdh

Syntax

WebXmlParseNodeValue( out sBuffer      : string,
                      in  nBufferLen   : number,
                      in  sXPath       : string,
                      in  nOptions     : number optional,
                      in  sNamespaces  : string optional,
                      in  nOccurrence  : number optional,
                      in  sContentType : string optional,
                      out nParsedBytes : number optional);
Parameter | Description
sBuffer | String variable that will receive the parsed XML node value
nBufferLen | Maximum length of the string to return. If this parameter is omitted or set to STRING_COMPLETE all available data is stored in sResult.
sXPath | X-Path query that specifies which XML node to parse
nOptions | (optional) WEB_FLAG_DONT_FORCE_LOAD: Specify this option to enable caching for subsequent requests. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
sNamespaces | (optional) Namespaces that should be recognized by the XML parser. If the x-path query contains any namespace prefixes, these prefixes have to be defined in this namespace string in the way xmlns:prefix=namespace. Multiple namespaces can be defined by separating them with a blank: xmlns:ns1='http://www.MyCompany.com/ns1' xmlns:ns2='http://www.MyCompany.com/ns2'
nOccurrence | (optional) If defined, the nOccurrence'd document that matches the content type will be parsed. Default value is 1.
sContentType | (optional) Default: text/xml Only documents of the passed content type will be parsed. If you pass a blank, all content types will be accepted.
nParsedBytes | (optional) Number of bytes parsed into sBuffer

Example

dcltrans
  transaction TMain
  var
    hObject : number;
    sParsedValue1, sParsedValue2, sParsedValue3 : string;
  begin
    WebXmlParseNodeValue(sParsedValue1, STRING_COMPLETE,"/ProductsBooks/Products/Product [2]");
    WebXmlParseNodeValue(sParsedValue2, STRING_COMPLETE,"/ProductsBooks/Products/Product [@name='Product1']");
    WebXmlParseNodeValue(sParsedValue3, STRING_COMPLETE,"/ProductsBooks/Books/ns1:Book", WEB_FLAG_DONT_FORCE_LOAD, "xmlns:ns1='http://book'");
    WebPageUrl("http://localhost/productsandbooks.xml");
  end TMain;

XML Document for the sample above

<?xml version="1.0" ?>
<ProductsBooks>
<Products>
<Product name='Product1'>This is product1</Product>
<Product name='Product2'>This is product2</Product>
</Products>
<Books xmlns:bookns='http://book'>
<bookns:Book price='20.95'>Lord of the Rings</bookns:Book>
<bookns:Book price='18.70'>Star Wars - Episode I</bookns:Book>
</Books>
</ProductsBooks>
親トピック: XML Functions Reference
関連資料
WebXmlParseNodeAttribute Function


WebXmlVerifyNodeAttribute Function

Action

Verifies a nodes attribute value of the nOccurrence'd document matching the sContentType. Default sContentType is text/xml. The value of the resulting X-Path query node will be verified against the sValue parameter value. The response document has to be a valid XML document for the function to work properly. If the X-Path query string contains any elements with namespace prefixes, the namespaces have to be passed in sNamespaces.

Include file

WebAPI.bdh

Syntax

WebXmlVerifyNodeAttribute( in  sXPath       : string,
                           in  sAttribute   : string,
                           in  sValue       : string,
                           in  nAppearance  : number optional,
                           in  nOptions     : number optional,
                           in  sNamespaces  : string optional,
                           in  nOccurrence  : number optional,
                           in  sContentType : string optional,
                           in  nSeverity    : number optional := SEVERITY_ERROR,
                           out nResult      : number optional );
Parameter | Description
sXPath | X-Path query that specifies which XML node
sAttribute | Name of the attribute of the resulting XML node that will be verified
sValue | String to compare with the parsed node value
nAppearance (optional)

Value to which the actual appearance of the specified content string is compared (see nOptions)(optional). If this parameter is omitted, the specified string must appear at least once to meet the verification rules.

nOptions

(optional)

WEB_FLAG_EQUAL
The verification succeeds if the actual appearance is equal to nAppearance.
WEB_FLAG_GREATER (default)
The verification succeeds if the actual appearance is greater than nAppearance.
WEB_FLAG_SMALLER
The verification succeeds if the actual appearance is smaller than nAppearance.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all whites paces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent requests. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_ALL_RESPONSES
If this flag is specified all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
sNamespaces (optional)

Namespaces that should be recognized by the XML parser. If the x-path query contains any namespace prefixes, these prefixes have to be defined in this namespace string in the way xmlns:prefix=namespace. Multiple namespaces can be defined by separating them with a blank: xmlns:ns1= 'http://www.MyCompany.com/ns1' xmlns:ns2= 'http://www.MyCompany.com/ns2'

nOccurrence (optional)

If defined, the nOccurrence'd document that matches the content type will be parsed. Default value is 1.

sContentType (optional)

Default: text/xml

Only documents of the passed content type will be parsed. If you pass a blank, all content types will be accepted.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nResult (optional)

If a variable is provided, it will receive the number of appearances of the specified content string.

Example

dcltrans
  transaction TMain
  var
    hObject : number;
    sParsedValue1, sParsedValue2, sParsedValue3 : string;
  begin
    WebXmlVerifyNodeAttribute("/ProductsBooks/Products/Product[2]", "name", "Product2");
    WebXmlVerifyNodeAttribute("/ProductsBooks/Products/Product[@name= 'Product1']", "name","Product1");
    WebXmlVerifyNodeAttribute( "/ProductsBooks/Books/ns1:Book", "price", "20.95", 1,0, "xmlns:ns1='http://book'");
    WebPageUrl("http://localhost/productsandbooks.xml");
  end TMain;

XML Document for the sample above

<?xml version="1.0" ?>
<ProductsBooks>
<Products>
<Product name='Product1'>This is product1</Product>
<Product name='Product2'>This is product2</Product>
</Products>
<Books xmlns:bookns='http://book'>
<bookns:Book price='20.95'>Lord of the Rings</bookns:Book>
<bookns:Book price='18.70'>Star Wars - Episode I</bookns:Book>
</Books>
</ProductsBooks>
親トピック: XML Functions Reference
関連資料
WebXmlVerifyNodeValue Function


WebXmlVerifyNodeValue Function

Action

Verifies a node's value in the nOccurrence'd document that matches the sContentType. Default sContentType is text/xml.

The value of the resulting X-Path query node will be verified against the sValue parameter value.

The response document has to be a valid XML document for the function to work properly. If the X-Path query string contains any elements with namespace prefixes, the namespaces have to be passed in sNamespaces.

Include file

WebAPI.bdh

Syntax

WebXmlVerifyNodeValue( in  sXPath       : string,
                       in  sValue       : string,
                       in  nAppearance  : number optional,
                       in  nOptions     : number optional,
                       in  sNamespaces  : string optional,
                       in  nOccurrence  : number optional,
                       in  sContentType : string optional,
                       in  nSeverity    : number optional := SEVERITY_ERROR,
                       out nResult      : number optional );
Parameter | Description
sXPath | X-Path query that specifies which XML node to verify
sValue | String to compare with the parsed node value
nAppearance (optional)

Value to which the actual appearance of the specified content string is compared (see nOptions). If this parameter is omitted, the specified string must appear at least once to meet the verification rules.

nOptions

(optional)

WEB_FLAG_EQUAL
The verification succeeds if the actual appearance is equal to nAppearance.
WEB_FLAG_GREATER (default)
The verification succeeds if the actual appearance is greater than nAppearance.
WEB_FLAG_SMALLER
The verification succeeds if the actual appearance is smaller than nAppearance.
WEB_FLAG_CASE_SENSITIVE
If this flag is set the string compare operation is case sensitive.
WEB_FLAG_IGNORE_WHITE_SPACE
If this flag is set all whites paces are ignored.
WEB_FLAG_DONT_FORCE_LOAD
Specify this option to enable caching for subsequent requests. Note that this may lead to unpredictable behaviour, because the verification may only cover certain parts (which are loaded) of a page.
WEB_FLAG_ALL_RESPONSES
If this flag is specified all server responses are scanned (even redirection responses, which are normally not displayed by a browser).
WEB_FLAG_INCLUDE_EMBEDDED
If this flag is specified, even embedded documents can be specified by the nDocNum parameter. Normally the number of a document is defined by the occurrence of the source definition in an HTML document (src=...). If this flag is specified every embedded object increases this counter, which assigns higher numbers to subsequent frames.
WEB_FLAG_INCLUDE_HEADER
If this flag is specified the response header can also be verified.
WEB_FLAG_HEADER_ONLY
If this flag is specified only the response header is verified.
WEB_FLAG_RULE
Specify this flag to perform the verification on every subsequent web function. Verification functions with this flag are usually located in the TInit transaction. Call WebCancelAllRules() to disable all verification rules.
注: The option WEB_FLAG_RULE should only be used in the INIT transaction or in combination with the WebCancelAllRules function!
sNamespaces (optional)

Namespaces that should be recognized by the XML parser. If the x-path query contains any namespace prefixes, these prefixes have to be defined in this namespace string in the way xmlns:prefix=namespace. Multiple namespaces can be defined by separating them with a blank: xmlns:ns1= 'http://www.MyCompany.com/ns1' xmlns:ns2= 'http://www.MyCompany.com/ns2'

nOccurrence (optional)

If defined, the nOccurrence'd document that matches the content type will be parsed. Default value is 1.

sContentType (optional)

Default: text/xml

Only documents of the passed content type will be parsed. If you pass a blank, all content types will be accepted.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
nResult (optional)

If a variable is provided, it will receive the number of appearances of the specified content string.

Example

dcltrans
  transaction TMain
  var
    hObject       : number;
    sParsedValue1 : string;
    sParsedValue2 : string;
    sParsedValue3 : string;
  begin
    WebXmlVerifyNodeValue("/ProductsBooks/Products/Product[2]", "This is product2");
    WebXmlVerifyNodeValue("/ProductsBooks/Products/Product[@name='Product1']","This is product1");
    WebXmlVerifyNodeValue("/ProductsBooks/Books/ns1:Book", "Lord of the Rings", 1, 0, "xmlns:ns1='http://book'");
    WebPageUrl("http://localhost/productsandbooks.xml");
  end TMain;

XML Document for the sample above

<?xml version="1.0" ?>
<ProductsBooks>
<Products>
<Product name='Product1'>This is product1</Product>
<Product name='Product2'>This is product2</Product>
</Products>
<Books xmlns:bookns='http://book'>
<bookns:Book price='20.95'>Lord of the Rings</bookns:Book>
<bookns:Book price='18.70'>Star Wars - Episode I</bookns:Book>
</Books>
</ProductsBooks>
親トピック: XML Functions Reference
関連資料
WebXmlVerifyNodeAttribute Function


Java Framework Functions

As a powerful extension to Silk Performer’s Benchmark Description Language, the Java Framework enables you to implement user behavior in Java. When testing an existing Java application you do not need to spend much time creating test scripts. The only effort required is embedding existing Java source code into the framework.

To generate a benchmark executable and run a test with the help of the Java framework, two source files are normally required:

  • A Java class that implements the behavior of a virtual user

  • A Silk Performer test script that invokes Java method calls

Note: Both source files need to have the same name, with extensions indicating the file types (.bdf for the Silk Performer test script and .java for the Java source file).

With Silk Performer it is possible to call Java functions on any Java object from a BDL context with any number and type of parameter and return parameter. When a Java function returns a complex object, a handle for the Java object is returned in its place. The handle can be passed to other function calls as an input parameter, or public methods may be invoked on the object. There is also support for static methods, cast operations, and exception handling.

Silk Performer provides the following functions for invoking the methods of a Java class from within a test script:

  • JavaSetOption Function
    Sets options for the Java Virtual Machine.
  • JavaCreateJavaVM Function
    Initializes and starts the Java Virtual Machine (JVM).
  • JavaLoadObject Function
    Instantiates a Java object and returns a handle on it.
  • JavaLoadSilkPerformer Function
    Instantiates the Java object silk.performer.SilkPerformer and returns a handle on it.
  • JavaLoadString Function
    Instantiates a Java string object and returns a handle on it.
  • JavaCallMethod Function
    Invokes either a dynamic or a static Java method.
  • JavaFreeObject Function
    Frees a java object. Must be called on all objects instantiated with JavaLoadObject or retrieved with JavaGetObject.
  • JavaCastObject Function
    Casts an object to a type of your choice.
  • JavaClearParameterList Function
    When calling a Java method that takes parameters, the parameters are added one by one to a parameter list.
  • JavaGetBoolean Function
    Retrieves the boolean return value of the last call of JavaCallMethod on the specified object or class.
  • JavaGetByteArray Function
    Retrieves the byte array return value of the last call of JavaCallMethod on the specified object or class.
  • JavaGetChar Function
    Retrieves the ordinal number of the char return value of the last call of JavaCallMethod on the specified object or class.
  • JavaGetFloat Function
    Retrieves the float return value of the last call of JavaCallMethod on the specified object or class.
  • JavaGetNumber Function
    Retrieves the int return value of the last call of JavaCallMethod on the specified object or class.
  • JavaGetObject Function
    Retrieves a handle on the object returned by the last call of JavaCallMethod on the specified object or class.
  • JavaGetString Function
    Retrieves the string return value of the last call of JavaCallMethod on the specified object or class.
  • JavaGetUserObject Function
    Returns the handle on the JavaUser object loaded by JavaUserInit command.
  • JavaSetBoolean Function
    Sets a boolean parameter for the next function or constructor call.
  • JavaSetChar Function
    Sets a char parameter for the next function or constructor call.
  • JavaSetFloat Function
    Sets a float parameter for the next function or constructor call.
  • JavaSetLogOption Function
    Sets logging options for the Java Framework.
  • JavaSetNumber Function
    Sets a numeric parameter for the next function or constructor call.
  • JavaSetObject Function
    Sets an object parameter for the next function or constructor call.
  • JavaSetString function
    Sets a string parameter for the next function or constructor call.
  • JavaSetByteArray Function
    Convenience function derived from JavaSetString function.
  • JavaSetCharArray Function
    Convenience function derived from JavaSetString function.
  • JavaUserInit Function
    Calls the JavaUserInit method of the Java class that implements the behavior of the virtual user.
  • JavaUserRun Function
    Calls the JavaUserRun method of the Java class that implements the behavior of the virtual user.
  • JavaUserMethod Function
    Calls an additional method of the Java class that implements the behavior of the virtual user.
  • JavaUserShutdown Function
    Calls the JavaUserShutdown method of the Java class that implements the behavior of the virtual user.
  • JavaRegisterException Function
    Registers a Java exception string under a custom error number.
  • JavaUnregisterException Function
    Unregisters an exception message.
  • JavaUnregisterErrorNumber Function
    Unregisters exception messages.
  • JavaGetLastException Function
    Retrieves the last exception message.
  • JUnitCallMethod Function
    Invokes a JUnit conform method of a class derived from junit.framework.TestCase.
  • JUnitExecuteTest Function
    Starts a JUnit test execution.
  • JUnitLoadClass Function
    Instantiates a Java object and returns a handle of the runtime class.
  • Deprecated Java Framework Functions
    Lists the deprecated functions from the previous version of the Java Framework.
親トピック: Benchmark Description Language (BDL) Reference


JavaSetOption Function

Action

Sets options for the Java Virtual Machine. This function has to be called prior to the JavaCreateJavaVM or JoltInit functions.

Include file

javabase.bdh

Syntax

JavaSetOption( in nOption : number,
               in sValue  : string ): boolean;

Return value

  • true if successful

  • false otherwise

nOption

Determines the option to be set. This parameter is one of the following flags:

JAVA_VERSION. Specifies the version number of the Java Virtual Machine. This option is obligatory. Valid option(s) are:

  • JAVA_V11

  • JAVA_V12

  • JAVA_V13

  • JAVA_V14

  • JAVA_V15

  • JAVA_V16

  • JAVA_V17

  • JAVA_V18

JAVA_HOME. Specifies the installation directory of the Java Virtual Machine. This option enables the Java Virtual Machine to be loaded for a different path than specified in the PATH environment, so that it is possible to switch between various Java Virtual Machines without changing the system PATH environment.

JAVA_CLASSPATH. Specifies the class path for the Java Virtual Machine. By default the class path is set to the system class path.

JAVA_DLL. Specifies a Dynamic Link Library (.dll) that implements the Java Virtual Machine to be used.

JAVA_VERBOSE. Sets the verbose option of the Java Virtual Machine. By default this option is disabled.

JAVA_DISABLE_COMPILER. Disables the Just In Time (JIT) compiler of the Java Virtual Machine. By default the Just In Time compiler is enabled.

JAVA_CMDLINE_OPTIONS. Specifies any command line options to be passed to the Java Virtual Machine.

JAVA_USE_SYSTEM_CLASSPATH. Determines that the system class path is used. This option is enabled by default.

JAVA_DESTROY_JVM_ON_SHUTDOWN. If it is not set (default), the current thread is detached from the JVM at shutdown, but the JVM is not destroyed. If it is set, all java threads are killed and JVM is destroyed on shutdown; to use this, JVMDI has to be enabled by setting -Xdebug -Xnoagent -Djava.compiler=NONE as commandline options. For getting profiling information with -Xrunhprof this flag has to be enabled.

JAVA_SUPPRESS_EXCEPTIONS. If it is not set (default), java exception will raise a bdl error. If it is set, java exceptions must be checked manually with JavaGetLastException command.

JAVA_ARCHITECTURE_VERSION. Specifies Java architecture version. Use the value JAVA_ARCH_32BIT for 32-bit Java (default) or JAVA_ARCH_64BIT for 64-bit Java.

sValue Value of the option to be set.

Example

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V17);
    JavaSetOption(JAVA_HOME, "c:/Program Files/Java/jdk1.7.0");
    JavaSetOption(JAVA_CLASSPATH, "c:/myApplication/classes;c:/myTools/tools.zip");
    JavaSetOption(JAVA_DISABLE_COMPILER, YES);
    JavaSetOption(JAVA_CMDLINE_OPTIONS, "-ss8K -oss50K-DanyProperty=aValue");
    JavaSetOption(JAVA_ARCHITECTURE_VERSION, JAVA_ARCH_64BIT);
    JavaCreateJavaVM();
  end TInit;
親トピック: Java Framework Functions
関連資料
JoltInit Function
JavaCreateJavaVM Function


JavaCreateJavaVM Function

Action

Initializes and starts the Java Virtual Machine (JVM). Silk Performer requires the JVM from Sun Microsystems.

Include file

Java.bdh

Syntax

JavaCreateJavaVM( in nVersion   : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nVersion

Version number of the Java Virtual Machine (optional). This parameter can be one of the following:

  • JAVA_V1. Java 1 Platform (Java 1.1.x)

  • JAVA_V2. Java 2 Platform (Java 1.2.x and later versions)

By default, the VM version, specified by the profile settings, is used.

Note: The JavaSetOption function overrides the profile setting.

Example

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V17);
    JavaSetOption(JAVA_HOME, "c:/Program Files/Java/jdk1.7.0");
    JavaSetOption(JAVA_CLASSPATH, "c:/myApplication/classes;c:/myTools/tools.zip");
    JavaCreateJavaVM();
    JavaUserInit("SilkPerformerUser");
  end TInit;

  transaction TRun
  begin
    JavaUserRun();
  end TRun;

  transaction TMyTransaction
  begin
    JavaUserMethod("MyMethod");
  end TMyTransaction;

  transaction TShutdown
  begin
    JavaUserShutdown();
  end TShutdown;
親トピック: Java Framework Functions
関連資料
JavaSetOption Function


JavaLoadObject Function

Action

Instantiates a Java object and returns a handle on it. The Java object must be released by the JavaFreeObject command.

Include file

Java.bdh

Syntax

JavaLoadObject( in sClassSpecifier : string,
                in sTimerName      : string optional ): number;

Return value

  • Handle on the Java object.

Parameter | Description
sClassSpecifier | Fully qualified name of the class to instantiate. The class must be available via the classpath. The ‘/’ character has to be used as package separator. Example: java/lang/String.
sTimerName | (optional) Creates a custom time measure with the specified name for this function.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the java class
      hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction THello
  begin
    JavaCallMethod(hTestObj, "doHello");
  end THello;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaFreeObject Function


JavaLoadSilkPerformer Function

Action

Instantiates the Java object silk.performer.SilkPerformer and returns a handle on it. The Java object must be released by the JavaFreeObject function.

Include file

Java.bdh

Syntax

JavaLoadSilkPerformer(): number;

Return value

  • Handle on the Java object.

Example

var
  hPerf  : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the SilkPerformer java class
      hPerf := JavaLoadSilkPerformer();
  end TInit;

  transaction THello
  begin
    JavaSetString(hPerf, "Print with SilkPerformer object");
    JavaCallMethod(hPerf, "doHello");
  end THello;

  transaction TEnd
  begin
    JavaFreeObject(hPerf);
  end TEnd;
親トピック: Java Framework Functions


JavaLoadString Function

Action

Instantiates a Java string object and returns a handle on it. The Java string must be released by the JavaFreeObject() command.

Include file

Java.bdh

Syntax

JavaLoadString( in sInitValue : string,
                in sTimerName : string optional ): number;

Return value

Handle on the Java string.

Parameter | Description
sInitValue | Init value of the string to create.
sTimerName | (optional) Creates a custom time measure with the specified name for this function.

Example

  transaction TInit
  begin
    JavaCreateJavaVM();
    JavaUserInit("SilkPerformerUser");
  end TInit;

  transaction TMyJavaTrans
  var
    hObj     : number;
    hJKeyStr : number;
  begin
    hJKeyStr := JavaLoadString("hello");

    ThinkTime(0.2);
    JavaCallMethod(JavaGetUserObject(), "myComplexMethod");
    hObj := JavaGetObject(JavaGetUserObject());
  end TMyJavaTrans;
親トピック: Java Framework Functions


JavaCallMethod Function

Action

Invokes either a dynamic or a static Java method. If parameters have been set with the JavaSetXX methods, these parameters will be passed to the method. To invoke static methods, the JAVA_STATIC_METHOD constant is passed instead of an object handle to the function. The method call will fail if no method signature matching the passed parameters is found.

Include file

Java.bdh

Syntax

JavaCallMethod( in hObject : number,
                in sMethod : string,
                in sTimerName      : string optional ): boolean;

Return value

  • true if the method call succeeded

  • false otherwise

Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
sMethod | Name of the method to invoke for dynamic methods, or package/subpackage/class_name.static_method_name for static methods. Example: toString Example: java/lang/String.valueOf
sTimerName | (optional) Creates a custom time measure with the specified name for this function.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
        // Load and start the JVM.
        JavaCreateJavaVM();

        // instantiate the java class
        hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction THello
  begin
    JavaCallMethod(hTestObj, "doHello");
  end THello;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions


JavaFreeObject Function

Action

Frees a java object. Must be called on all objects instantiated with JavaLoadObject or retrieved with JavaGetObject.

Include file

Java.bdh

Syntax

JavaFreeObject( in hObject: number ): boolean;

Return value

  • true if the object could be released

  • false otherwise

Parameter | Description
hObject | Valid handle to a java object.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the java class
      hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction THello
  begin
    JavaCallMethod(hTestObj, "doHello");
  end THello;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaLoadObject Function
JavaGetObject Function


JavaCastObject Function

Action

Casts an object to a type of your choice. Class cast will be valid for all further JavaCallMethod or JavaSetObject calls.

Include file

Java.bdh

Syntax

JavaCastObject( in hObject         : number,
                in sClassSpecifier : string ): boolean;

Return value

  • True if successful

  • false otherwise

Parameter | Description
hObject | Valid handle to a java object.
sClassSpecifier | Fully qualified classname to cast to. Example: fw60sample/Account

Example

dcltrans
  transaction TInit
  begin
        // Load and start the JVM.
        JavaCreateJavaVM();

  end TInit;

  transaction TPureBdl
  var hJTable    : number;
      hJKeyStr   : number;
      hJValueStr : number;
      hJRetVal   : number;
      sBuffer    : string;
  begin
    // prepare the key/value pair
    // String jKeyStr = "hello";
    // String jValueStr = "world";
    hJKeyStr := JavaLoadString("hello");
    hJValueStr := JavaLoadString("world");

    // instantiate a Hashtable
    // Hashtable jTable = new Hashtable();
    hJTable := JavaLoadObject("java/util/Hashtable");

    // insert an Object into the Hashtable
    // jTable.put(jKeyStr, jValueStr);
    JavaCastObject(hJKeyStr, "java/lang/Object");
    JavaSetObject(hJTable, hJKeyStr);
    JavaSetObject(hJTable, hJValueStr, "java/lang/Object");
    JavaCallMethod(hJTable, "put");

    // retrieve an Object from the Hashtable
    // Object jRetVal = jTable.get(jKeyStr);
    JavaSetObject(hJTable, hJKeyStr);
    JavaCallMethod(hJTable, "get");
    hJRetVal := JavaGetObject(hJTable);

    // retrieve print out the java string object
    // System.out.println("Found value \""+jRetVal+"\" in Hashtable.");
    JavaCallMethod(hJRetVal, "toString");
    JavaGetString(hJRetVal, sBuffer);
    Print("Found value \""+sBuffer+"\" in Hashtable.");

    // Free all objects
    JavaFreeObject(hJTable);
    JavaFreeObject(hJKeyStr);
    JavaFreeObject(hJValueStr);
    JavaFreeObject(hJRetVal);
  end TPureBdl;

  transaction TEnd
  begin
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions


JavaClearParameterList Function

Action

When calling a Java method that takes parameters, the parameters are added one by one to a parameter list. There is a parameter list for each Java object, and a list for all static method or constructor calls. Parameter lists are automatically cleared when a method or constructor is invoked.

In some cases, for example when an event handler is used, the actual transaction may be over before the method or constructor is invoked, so the parameter list is not cleared. In such cases, the parameter list must be cleared by hand before new parameters are set for the next method or constructor call.

Include file

JavaBase.bdh

Syntax

JavaClearParameterList( in hObject: number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Valid handle to a Java object or JAVA_STATIC_METHOD.

Example

dcluser
  user
    JavaUser
  transactions
    TInit               : begin;
    TMyJavaTransBad     : 1;
    TMyJavaTransGood    : 1;
    TEnd                : end;

dclevent
  handler Handler1 <EVENT_RAISE_ERROR>
  var
    hStrGood, hStrBad :number;
    buffer            :string;
  begin
    if GetErrorCode(GetLastError()) = 9999 then
      Print("Here we are");
      // first the bad example
      hStrGood := JavaLoadObject("java/lang/String");
      Print("something messed us up here; we wanted to create an empty String, but will get something unexpected:");
      JavaCallMethod(hStrGood, "toString");
      JavaGetString(hStrGood, buffer);
      Print("buffer = '"+buffer+"'");
    else
    if GetErrorCode(GetLastError()) = 9998 then
      // then the good example
      JavaClearParameterList(JAVA_STATIC_METHOD);
      hStrGood := JavaLoadObject("java/lang/String");
      Print("there should be an empty String if JavaClearParameterList() worked");      JavaCallMethod(hStrGood, "toString");
      JavaGetString(hStrGood, buffer);
      Print("buffer = '"+buffer+"'");
    else
      throw;
    end;
  end;
  end Handler1;

// Java Framework Transactions Section
dcltrans
  transaction TInit
  var
    hPerf : number;
  begin
    JavaCreateJavaVM();
  end TInit;

  transaction TMyJavaTransBad
  var
    hSomeJavaObject : number;
  begin
    JavaSetString(JAVA_STATIC_METHOD, "some text");
    // let’s assume, code execution jumps to event handler from here
    RaiseError(9999, "just wanted to show event handler sample");
    // if no event is raised, execution continues here
    hSomeJavaObject := JavaLoadObject("java/lang/String");
    JavaFreeObject(hSomeJavaObject);
  end TMyJavaTransBad;

  transaction TMyJavaTransGood
  var
    hSomeJavaObject : number;
  begin
    JavaSetString(JAVA_STATIC_METHOD, "some text");
    // let’s assume, code execution jumps to event handler from here
    RaiseError(9998, "just wanted to show event handler sample");
    // if no event is raised, execution continues here
    hSomeJavaObject := JavaLoadObject("java/lang/String");
    JavaFreeObject(hSomeJavaObject);
  end TMyJavaTransGood;

  transaction TEnd
  begin
  end TEnd;
親トピック: Java Framework Functions


JavaGetBoolean Function

Action

Retrieves the boolean return value of the last call of JavaCallMethod on the specified object or class.

Include file

Java.bdh

Syntax

JavaGetBoolean( in hObject: number ): boolean;

Return value

  • Returns the result of the last call of JavaCallMethod.

Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the java class
      hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TPureBdl
  var hJTable    : number;
      hJKeyStr   : number;
      hJValueStr : number;
      hJRetVal   : number;
      sBuffer    : string;
      bHasNext   : boolean;
  begin
    // prepare the key/value pair
    // String jKeyStr = "hello";
    // String jValueStr = "world";
    hJKeyStr := JavaLoadString("hello");
    hJValueStr := JavaLoadString("world");

    // instantiate a Hashtable
    // Hashtable jTable = new Hashtable();
    hJTable := JavaLoadObject("java/util/Hashtable");

    // insert an Object into the Hashtable
    // jTable.put(jKeyStr, jValueStr);
    JavaCastObject(hJKeyStr, "java/lang/Object");
    JavaSetObject(hJTable, hJKeyStr);
    JavaSetObject(hJTable, hJValueStr, "java/lang/Object");
    JavaCallMethod(hJTable, "put");

    // retrieve an Object from the Hashtable
    // Object jRetVal = jTable.get(jKeyStr);
    JavaSetObject(hJTable, hJKeyStr);
    JavaCallMethod(hJTable, "get");
    hJRetVal := JavaGetObject(hJTable);

    JavaCallMethod(hJRetVal, "hasNext");
    bHasNext := JavaGetBoolean(hJRetVal);

    // Free all objects
    JavaFreeObject(hJTable);
    JavaFreeObject(hJKeyStr);
    JavaFreeObject(hJValueStr);
    JavaFreeObject(hJRetVal);
  end TPureBdl;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetBoolean Function


JavaGetByteArray Function

Action

Retrieves the byte array return value of the last call of JavaCallMethod on the specified object or class.

Include file

JavaBase.bdh

Syntax

JavaGetByteArray(
    in  hObject : number,
    out sBuffer : string,
    in nBufLen : number optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
sBuffer | String buffer that will receive the return value of the last call of JavaCallMethod.
nBufLen | Length of the buffer (optional).

Example

benchmark SampleDocu
use "Kernel.bdh"
use "Java.bdh"

// Workload Section
dcluser
  user
    JavaUser

  transactions
    TInit               : begin;
    TMyJavaTrans        : 1;

// Java Framework Transactions Section
dcltrans
  transaction TInit
  begin
    JavaCreateJavaVM();
  end TInit;

  transaction TMyJavaTrans
  var
    hStr    : number;
    sBuffer : string;
  begin

    // creating a Java string
    hStr := JavaLoadString("a sample string containing a currency symbol €");
    // getting bytes array
    JavaCallMethod(hStr, "getBytes");
    // storing byte array
    JavaGetByteArray(hStr, sBuffer);
    // print to virtual user output
    Print(sBuffer);
  end TMyJavaTrans;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetByteArray Function


JavaGetChar Function

Action

Retrieves the ordinal number of the char return value of the last call of JavaCallMethod on the specified object or class.

Include file

Java.bdh

Syntax

JavaGetChar( in hObject: number ): number;

Return value

  • Returns the result of the last call of JavaCallMethod.

Paremeter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.

Example

var
  hTestObj : number;

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();
    // instantiate the java class: java.lang.Character
    JavaSetChar(JAVA_STATIC_METHOD, ord('c'));
    hTestObj := JavaLoadObject("java/lang/Character");
  end TInit;

  transaction TMyJavaTrans
  var
    charNum : number;
  begin
    // calling charValue() method of java.lang.Character object
    JavaCallMethod(hTestObj, "charValue");
    charNum := JavaGetChar(hTestObj);
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetChar Function


JavaGetFloat Function

Action

Retrieves the float return value of the last call of JavaCallMethod on the specified object or class.

Include file

Java.bdh

Syntax

JavaGetFloat( in hObject: number ): float;

Return value

  • Returns the result of the last call of JavaCallMethod.

Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
        // Load and start the JVM.
        JavaCreateJavaVM();

        // instantiate the java class
        hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TMyJavaTrans
  var
    fValue : float;
  begin
    ThinkTime(0.2);
    // set the first parameter
    JavaSetString(hTestObj, "1");
    // set the second parameter
    JavaSetNumber(hTestObj, 1, JAVA_BYTE);
    // invoke the method    JavaCallMethod(hTestObj, "doFoo");
    // retrieve the result    fValue := JavaGetFloat(hTestObj);
    Print("doFoo returned "+String(fValue));
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetFloat Function


JavaGetNumber Function

Action

Retrieves the int return value of the last call of JavaCallMethod on the specified object or class.

Include file

Java.bdh

Syntax

JavaGetNumber( in hObject: number ): number;

Return value

  • Returns the result of the last call of JavaCallMethod.

Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the java class
      hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TStaticMethods
  var
    str    : string;
    nConv1 : number;
    nConv2 : number;
    hJStr  : number;
  begin
    str := "123";

    nConv1 := Number(str);

    JavaSetString(JAVA_STATIC_METHOD, str);
    JavaCallMethod(JAVA_STATIC_METHOD, "java/lang/Integer.parseInt");
    nConv2 := JavaGetNumber(JAVA_STATIC_METHOD);

    if nConv1 = nConv2 then
      Print("Both conversion delievered the same result! ("+String(nConv1)+" = "+String(nConv2)+")");
    end;
  end TStaticMethods;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetNumber Function


JavaGetObject Function

Action

Retrieves a handle on the object returned by the last call of JavaCallMethod on the specified object or class. The object retrieved may be reused for further calls of or JavaSetObject and must be released with JavaFreeObject.

Include file

Java.bdh

Syntax

JavaGetObject( in hObject : number ): number;

Return value

  • Returns a handle on the result of the last call of JavaCallMethod.

Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.

Example

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();

  end TInit;

  transaction TPureBdl
  var hJTable    : number;
    hJKeyStr   : number;
    hJValueStr : number;
    hJRetVal   : number;
    sBuffer    : string;
  begin
    // prepare the key/value pair
    // String jKeyStr = "hello";
    // String jValueStr = "world";
    hJKeyStr := JavaLoadString("hello");
    hJValueStr := JavaLoadString("world");

    // instantiate a Hashtable
    // Hashtable jTable = new Hashtable();
    hJTable := JavaLoadObject("java/util/Hashtable");

    // insert an Object into the Hashtable
    // jTable.put(jKeyStr, jValueStr);
    JavaCastObject(hJKeyStr, "java/lang/Object");
    JavaSetObject(hJTable, hJKeyStr);
    JavaSetObject(hJTable, hJValueStr, "java/lang/Object");
    JavaCallMethod(hJTable, "put");

    // retrieve an Object from the Hashtable
    // Object jRetVal = jTable.get(jKeyStr);
    JavaSetObject(hJTable, hJKeyStr);
    JavaCallMethod(hJTable, "get");
    hJRetVal := JavaGetObject(hJTable);

    // retrieve print out the java string object
    // System.out.println("Found value \""+jRetVal+"\" in Hashtable.");
    JavaCallMethod(hJRetVal, "toString");
    JavaGetString(hJRetVal, sBuffer);
    Print("Found value \""+sBuffer+"\" in Hashtable.");

    // Free all objects
    JavaFreeObject(hJTable);
    JavaFreeObject(hJKeyStr);
    JavaFreeObject(hJValueStr);
    JavaFreeObject(hJRetVal);
  end TPureBdl;

  transaction TEnd
  begin
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetObject Function


JavaGetString Function

Action

Retrieves the string return value of the last call of JavaCallMethod on the specified object or class.

Include file

Java.bdh

Syntax

JavaGetString( in  hObject : number,
               out sBuffer : string,
               in  nBufLen : number optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
sBuffer | String buffer that will receive the return value of the last call of JavaCallMethod.
nBufLen | Length of the buffer (optional).

Example

dcltrans
  transaction TInit
  begin
        // Load and start the JVM.
        JavaCreateJavaVM();

  end TInit;

  transaction TPureBdl
  var hJTable    : number;
      hJKeyStr   : number;
      hJValueStr : number;
      hJRetVal   : number;
      sBuffer    : string;
  begin
   // prepare the key/value pair
    // String jKeyStr = "hello";
    // String jValueStr = "world";
    hJKeyStr := JavaLoadString("hello");
    hJValueStr := JavaLoadString("world");

    // instantiate a Hashtable
    // Hashtable jTable = new Hashtable();
    hJTable := JavaLoadObject("java/util/Hashtable");

    // insert an Object into the Hashtable
    // jTable.put(jKeyStr, jValueStr);
    JavaCastObject(hJKeyStr, "java/lang/Object");
    JavaSetObject(hJTable, hJKeyStr);
    JavaSetObject(hJTable, hJValueStr, "java/lang/Object");
    JavaCallMethod(hJTable, "put");

    // retrieve an Object from the Hashtable
    // Object jRetVal = jTable.get(jKeyStr);
    JavaSetObject(hJTable, hJKeyStr);
    JavaCallMethod(hJTable, "get");
    hJRetVal := JavaGetObject(hJTable);

    // retrieve print out the java string object
    // System.out.println("Found value \""+jRetVal+"\" in Hashtable.");
    JavaCallMethod(hJRetVal, "toString");
    JavaGetString(hJRetVal, sBuffer);
    Print("Found value \""+sBuffer+"\" in Hashtable.");

    // Free all objects
    JavaFreeObject(hJTable);
    JavaFreeObject(hJKeyStr);
    JavaFreeObject(hJValueStr);
    JavaFreeObject(hJRetVal);
  end TPureBdl;

  transaction TEnd
  begin
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetObject Function


JavaGetUserObject Function

Action

Returns the handle on the JavaUser object loaded by JavaUserInit command. This handle can be used to exploit the new Java Framework functionality with the existing JavaUserFramework script of prior Silk Performer versions.

Include file

Java.bdh

Syntax

JavaGetUserObject( ): number;

Return value

Handle on the JavaUser object.

Example

  transaction  TInit
  begin
    JavaCreateJavaVM();
    JavaUserInit("SilkPerformerUser");
  end TInit;

  transaction TMyJavaTrans
  var
    hObj : number;
  begin
    ThinkTime(0.2);
    JavaCallMethod(JavaGetUserObject(), "myComplexMethod");
    hObj := JavaGetObject(JavaGetUserObject());
  end TMyJavaTrans;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function


JavaSetBoolean Function

Action

Sets a boolean parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and have to be in order.

Include file

Java.bdh

Syntax

JavaSetBoolean( in hObject : number,
                in bParam  : boolean );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
bParam | The boolean value to be set as parameter.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();
      // instantiate the java class
      hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TMyJavaTrans
  var
    fValue : float;
  begin
    ThinkTime(0.2);
    // set the first parameter
    JavaSetString(hTestObj, "1");
    // set the second parameter
    JavaSetBoolean(hTestObj, true);
    // invoke the method
    JavaCallMethod(hTestObj, "doFoo");
    // retrieve the result
    fValue := JavaGetFloat(hTestObj);
    Print("doFoo returned "+String(fValue));
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaGetBoolean Function


JavaSetChar Function

Action

Sets a char parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and be in order.

Include file

Java.bdh

Syntax

JavaSetChar( in hObject : number,
             in nParam  : number );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
nParam | The ordinal number of the char value to be set as parameter.

Example

var
  hTestObj : number;

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();
    // instantiate the java class: java.lang.Character
    JavaSetChar(JAVA_STATIC_METHOD, ord('c'));
    hTestObj := JavaLoadObject("java/lang/Character");
  end TInit;

  transaction TMyJavaTrans
  var
    charNum : number;
  begin
    // calling charValue() method of java.lang.Character object
    JavaCallMethod(hTestObj, "charValue");
    charNum := JavaGetChar(hTestObj);
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaGetChar Function


JavaSetFloat Function

Action

Sets a float parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and be in order. Use the third optional parameter to distinguish between the different float data types of the Java language.

Include file

Java.bdh

Syntax

JavaSetFloat( in hObject: number,
              in fParam : float,
              in sType  : string optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
fParam | The float value to be set as parameter.
sType

(optional)

Can be:

  • JAVA_FLOAT (default)

  • JAVA_DOUBLE

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();

    // instantiate the java class
    hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TMyJavaTrans
  var
    fValue : float;
  begin
    ThinkTime(0.2);
    // set the first parameter
    JavaSetString(hTestObj, "1");
    // set the second parameter
    JavaSetFloat(hTestObj, 1.1, JAVA_FLOAT);
    // invoke the method
    JavaCallMethod(hTestObj, "doFoo");
    // retrieve the result
    fValue := JavaGetFloat(hTestObj);
    Print("doFoo returned "+String(fValue));
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaGetFloat Function


JavaSetLogOption Function

Action

Sets logging options for the Java Framework. It can be used, for example, to completely suppress all logging. This is useful when a complete API is based on the Java framework (for example, Silk Performer's Jacada support.

Include file

Java.bdh

Syntax

JavaSetLogOption( in nOption : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nOption

Determines the logging option to be set. This parameter is one of the following flags:

  • JAVA_LOG_OPTION_DEFAULT. Logging is performed as configured via GUI or SetLogOption (default).

  • JAVA_LOG_OPTION_LOGFILE_ONLY. Suppresses any Java Framework output on the virtual user's output pane. However, log file writing is done as usual (if configured).

  • JAVA_LOG_OPTION_SILENT. Any Java Framework related logging is suppressed.

Example

dcltrans
  transaction TInit
  begin
    JavaSetLogOption(JAVA_LOG_OPTION_SILENT);
    JavaCreateJavaVM();
  end TInit;

Output

No output is generated.

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaGetLastException Function


JavaSetNumber Function

Action

Sets a numeric parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and be in order. Use the third optional parameter to distinguish between the different numeric data types of the Java language.

Include file

Java.bdh

Syntax

JavaSetNumber( in hObject : number,
               in nParam  : number,
               in sType   : string optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
nParam | The number to be set as parameter.
sType

(optional)

Can be:

  • JAVA_BYTE

  • JAVA_SHORT

  • JAVA_INT (default)

  • JAVA_LONG

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();
    // instantiate the java class
    hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TMyJavaTrans
  var
    fValue : float;
  begin
    ThinkTime(0.2);
    // set the first parameter
    JavaSetString(hTestObj, "1");
    // set the second parameter
    JavaSetNumber(hTestObj, 1, JAVA_BYTE);
    // invoke the method
    JavaCallMethod(hTestObj, "doFoo");
    // retrieve the result
    fValue := JavaGetFloat(hTestObj);
    Print("doFoo returned "+String(fValue));
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaGetNumber Function


JavaSetObject Function

Action

Sets an object parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and they must be in order. Use the third optional parameter to specify the formal data type of the parameter.

Include file

Java.bdh

Syntax

JavaSetObject( in hObject : number,
               in hParam  : number,
               in sType   : string optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
hParam | The object handle to be set as parameter.
sType | (Optional) The object will be treated as being of the type specified here for next method or constructor call. Syntax for the class signature must be package/subpackage/classname. Example: java/lang/String

Example

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();

  end TInit;

  transaction TPureBdl
  var hJTable    : number;
      hJKeyStr   : number;
      hJValueStr : number;
      hJRetVal   : number;
      sBuffer    : string;
  begin
    // prepare the key/value pair
    // String jKeyStr = "hello";
    // String jValueStr = "world";
    hJKeyStr := JavaLoadString("hello");
    hJValueStr := JavaLoadString("world");

    // instantiate a Hashtable
    // Hashtable jTable = new Hashtable();
    hJTable := JavaLoadObject("java/util/Hashtable");

    // insert an Object into the Hashtable
    // jTable.put(jKeyStr, jValueStr);
    JavaCastObject(hJKeyStr, "java/lang/Object");
    JavaSetObject(hJTable, hJKeyStr);
    JavaSetObject(hJTable, hJValueStr, "java/lang/Object");
    JavaCallMethod(hJTable, "put");

    // retrieve an Object from the Hashtable
    // Object jRetVal = jTable.get(jKeyStr);
    JavaSetObject(hJTable, hJKeyStr);
    JavaCallMethod(hJTable, "get");
    hJRetVal := JavaGetObject(hJTable);

    // retrieve print out the java string object
    // System.out.println("Found value \""+jRetVal+"\" in Hashtable.");
    JavaCallMethod(hJRetVal, "toString");
    JavaGetString(hJRetVal, sBuffer);
    Print("Found value \""+sBuffer+"\" in Hashtable.");

    // Free all objects
    JavaFreeObject(hJTable);
    JavaFreeObject(hJKeyStr);
    JavaFreeObject(hJValueStr);
    JavaFreeObject(hJRetVal);
  end TPureBdl;

  transaction TEnd
  begin
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaGetObject Function
JavaGetString Function


JavaSetString function

Action

Sets a string parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and have to be in order.

Include file

Java.bdh

Syntax

JavaSetString( in hObject : number,
               in sParam  : string allownull,
               in nLen    : number optional,
               in eType   : string optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
sParam | The string to be set as parameter.
nLen | The length of the string parameter (optional). Should be used if the string contains null bytes.
eType

(optional)

Can be:

  • JAVA_STRING (default)

  • JAVA_BYTE_ARRAY

  • JAVA_CHAR_ARRAY

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();

    // instantiate the java class
    hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TMyJavaTrans
  var
    fValue : float;
  begin
    ThinkTime(0.2);
    // set the first parameter
    JavaSetString(hTestObj, "1");
    // set the second parameter
    JavaSetNumber(hTestObj, 1, JAVA_BYTE);
     // invoke the method
    JavaCallMethod(hTestObj, "doFoo");
    // retrieve the result
    fValue := JavaGetFloat(hTestObj);
    Print("doFoo returned "+String(fValue));
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;

Sample scripts

JavaFrameworkBankSample.bdf

BankSample.java, Account.java, Customer.java, PremiumCustomer.java

親トピック: Java Framework Functions
関連資料
JavaCallMethod Function


JavaSetByteArray Function

Action

Convenience function derived from JavaSetString function. Sets a byte array parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and be in order.

Include file

Java.bdh

Syntax

JavaSetByteArray( in hObject : number,
                  in sParam  : string allownull,
                  in nLen    : number optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
sParam | The string to be set as parameter.
nLen | The length of the string parameter (optional). Should be used if the string contains null bytes.

Example

var
  hTestObj   : number;

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();

    // instantiate the java class
    hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TMyJavaTrans
    var
    str : string init "abc hello world äöü";
  begin
     // calling Java method doFoo(char[] chars)
    JavaSetByteArray(hTestObj, str, 19);

    JavaCallMethod(hTestObj, "doFoo");
    // calling Java method doFoo(char[] chars)
    JavaSetString(hTestObj, str, 19, JAVA_BYTE_ARRAY);
    JavaCallMethod(hTestObj, "doFoo");
  end TMyJavaTrans;

  transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaGetByteArray Function


JavaSetCharArray Function

Action

Convenience function derived from JavaSetString function. Sets a character array parameter for the next function or constructor call.

Note: Parameters must exactly match the method signature and be in order.

Include file

Java.bdh

Syntax

JavaSetCharArray( in hObject : number,
                  in sParam  : string allownull,
                  in nLen    : number optional );
Parameter | Description
hObject | Valid handle to a java object or JAVA_STATIC_METHOD.
sParam | The string to be set as parameter.
nLen | The length of the string parameter (optional). Should be used if the string contains null bytes.

Example

var  hTestObj   : number;

dcltrans
  transaction TInit
  begin
    // Load and start the JVM.
    JavaCreateJavaVM();

    // instantiate the java class
    hTestObj := JavaLoadObject("Test");
  end TInit;

  transaction TMyJavaTrans
  var
    str : string init "abc hello world äöü";
  begin
    // calling Java method doFoo(char[] chars)
    JavaSetCharArray(hTestObj, str, strlen(str));
    JavaCallMethod(hTestObj, "doFoo");
    // calling Java method doFoo(char[] chars)
    JavaSetString(hTestObj, str, 0, JAVA_CHAR_ARRAY);
    JavaCallMethod(hTestObj, "doFoo");
  end TMyJavaTrans;

   transaction TEnd
   begin
    JavaFreeObject(hTestObj);
  end TEnd;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function


JavaUserInit Function

Action

Calls the JavaUserInit method of the Java class that implements the behavior of the virtual user. This function must be called in the initialization transaction of your test script.

Include file

Java.bdh

Syntax

JavaUserInit( in sClassName: string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sClassName | The name of the Java class that implements the behavior of the virtual user.

Example

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/myApplication/classes;c:/myTools/tools.zip");
    JavaCreateJavaVM();
    JavaUserInit("SilkPerformerUser");
  end TInit;

  transaction TRun
  begin
    JavaUserRun();
  end TRun;

  transaction TMyTransaction
  begin
    JavaUserMethod("MyMethod");
  end TMyTransaction;

  transaction TShutdown
  begin
    JavaUserShutdown();
  end TShutdown;
親トピック: Java Framework Functions
関連資料
JavaUserMethod Function
JavaUserRun Function
JavaUserShutdown Function


JavaUserRun Function

Action

Calls the JavaUserRun method of the Java class that implements the behavior of the virtual user. This function must be called in the main transaction of your test script.

Include file

Java.bdh

Syntax

JavaUserRun(): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/myApplication/classes;c:/myTools/tools.zip");
    JavaCreateJavaVM();
    JavaUserInit("SilkPerformerUser");
  end TInit;

  transaction TRun
  begin
    JavaUserRun();
  end TRun;

  transaction TMyTransaction
  begin
    JavaUserMethod("MyMethod");
  end TMyTransaction;

  transaction TShutdown
  begin
    JavaUserShutdown();
  end TShutdown;
親トピック: Java Framework Functions
関連資料
JavaUserInit Function
JavaUserMethod Function
JavaUserShutdown Function


JavaUserMethod Function

Action

Calls an additional method of the Java class that implements the behavior of the virtual user. This function may be called in any additional transaction of your test script.

Include file

Java.bdh

Syntax

JavaUserMethod( in sName : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sName | Name of the method that is to be called.

Example

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/myApplication/classes;c:/myTools/tools.zip");
    JavaCreateJavaVM();
    JavaUserInit("SilkPerformerUser");
  end TInit;

  transaction TRun
  begin
    JavaUserRun();
  end TRun;

  transaction TMyTransaction
  begin
    JavaUserMethod("MyMethod");
  end TMyTransaction;

  transaction TShutdown
  begin
    JavaUserShutdown();
  end TShutdown;
親トピック: Java Framework Functions
関連資料
JavaUserInit Function
JavaUserRun Function
JavaUserShutdown Function


JavaUserShutdown Function

Action

Calls the JavaUserShutdown method of the Java class that implements the behavior of the virtual user. This function must be called in the shutdown transaction of your test script.

Include file

Java.bdh

Syntax

JavaUserShutdown(): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    JavaSetOption(JAVA_VERSION, JAVA_V11);
    JavaSetOption(JAVA_HOME, "c:/jdk1.1.7");
    JavaSetOption(JAVA_CLASSPATH, "c:/myApplication/classes;c:/myTools/tools.zip");
    JavaCreateJavaVM();
    JavaUserInit("SilkPerformerUser");
  end TInit;

  transaction TRun
  begin
    JavaUserRun();
  end TRun;

  transaction TMyTransaction
  begin
    JavaUserMethod("MyMethod");
  end TMyTransaction;

  transaction TShutdown
  begin
    JavaUserShutdown();
  end TShutdown;
親トピック: Java Framework Functions
関連資料
JavaUserInit Function
JavaUserMethod Function
JavaUserRun Function


JavaRegisterException Function

Action

Registers a Java exception string under a custom error number. This error number can later be used to specify a custom severity for the exception. See also ErrorAdd function.

Note It is possible to register several exception messages to one error number.

Include file

Java.bdh

Syntax

JavaRegisterException( in nErrNumber    : number,
                       in sExceptionMsg : string,
                       in nFlag         : number optional ): boolean;

Return value

  • true if exception message could be registered und the specified error number

  • false otherwise

Parameter | Description
nErrNumber | Error number of exception to register.
sExceptionMsg | Exception message to register.
nFlag

By passing one of the following parameters to the function, it is possible to determine when an exception raises an error:

  • JAVA_OPTION_MATCH_EXACT: The text of the raised exception must be equal to sExceptionMsg.

  • JAVA_OPTION_MATCH_SUBSTRING: The text of the raised exception must contain sExceptionMsg.

If no parameter is specified then the function is using JAVA_OPTION_MATCH_EXACT per default.

Example

var
  hTestObj    : number;

dcltrans
  transaction TInit
  begin
    JavaCreateJavaVM();
    hTestObj := JavaLoadObject("TestClass");
  end TInit;

  transaction TException
  var
    sBuffer : string;
    bRetVal : boolean;
  begin
    JavaRegisterException(500, "java.lang.RuntimeException");
    ErrorAdd(FACILITY_NATIVE_JAVA, 500, SEVERITY_INFORMATIONAL);
    bRetVal := JavaCallMethod(hTestObj, "doException");
    JavaGetLastException(hTestObj, sBuffer);

    if not bRetVal then
      Print(sBuffer);
    end;
  end TException;
親トピック: Java Framework Functions
関連資料
ErrorAdd Function
JavaUnregisterErrorNumber Function
JavaUnregisterException Function


JavaUnregisterException Function

Action

Unregisters an exception message.

Include file

Java.bdh

Syntax

JavaUnregisterException( in sExceptionMsg : string ): boolean;

Return value

  • true if the exception message specified by sExceptionMsg could be unregistered

  • false if there was no exception registered under the specified sExceptionMsg

Parameter | Description
sExceptionMsg | Exception message to unregister.

Example

dcltrans
  transaction TInit
  begin
    JavaCreateJavaVM();
  end TInit;

  transaction TException
  begin
    JavaRegisterException(500, "java.lang.RuntimeException");
    JavaUnregisterException("java.lang.RuntimeException");
  end TException;
親トピック: Java Framework Functions
関連資料
JavaUnregisterErrorNumber Function
JavaRegisterException Function


JavaUnregisterErrorNumber Function

Action

Unregisters exception messages.

Include file

Java.bdh

Syntax

JavaUnregisterErrorNumber( in nErrNumber : number ): boolean;

Return value

  • true if the exception messages of the specified error number could be unregistered

  • false if there was no exception registered under the specified error number

Parameter | Description
nErrNumber | Error number of exception to unregister.

Example

dcltrans
transaction TInit
  begin
    JavaCreateJavaVM();
  end TInit;

  transaction TException
  begin
    JavaRegisterException(500, "java.lang.RuntimeException");
    JavaUnregisterErrorNumber(500);
  end TException;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaRegisterException Function
JavaUnregisterException Function


JavaGetLastException Function

Action

Retrieves the last exception message.

Include file

Java.bdh

Syntax

JavaGetLastException( in  hHandle     : number,
                      out sBuffer     : string,
                      in  nBufferSize : number optional ): boolean;

Return value

  • true if the method call was successful, false otherwise

  • false otherwise

Parameter | Description
hHandle | Can be a handle to a java object or JAVA_STATIC_METHOD.
sBuffer | Buffer to retrieve the last exception message.
nBufferSize | (optional) Maximum number of bytes to retrieve.

Example

var
  hTestObj    : number;

dcltrans
  transaction TInit
  begin
    JavaCreateJavaVM();
    hTestObj := JavaLoadObject("TestClass");
  end TInit;

  transaction TException
  var
    sBuffer : string;
    bRetVal : boolean;
  begin
    JavaRegisterException(500, "java.lang.RuntimeException");
    ErrorAdd(FACILITY_NATIVE_JAVA, 500, SEVERITY_INFORMATIONAL);
    bRetVal := JavaCallMethod(hTestObj, "doException");
    JavaGetLastException(hTestObj, sBuffer);

    if not bRetVal then
      Print(sBuffer);
    end;
  end TException;
親トピック: Java Framework Functions
関連資料
JavaCallMethod Function
JavaSetLogOption Function


JUnitCallMethod Function

Action

Invokes a JUnit conform method of a class derived from junit.framework.TestCase. Prepares the method execution by invoking the setUp() method and finishes the test by invoking the tearDown() method.

Include file

Java.bdh

Syntax

JUnitCallMethod(
  in hObject    : number,
  in sName      : string,
  in sTimerName : string optional): boolean;

Return value

  • true if the method call succeeded

  • false otherwise

Parameter | Description
hObject | Valid handle to a java object derived from junit.framework.TestCase.
sName | Name of the method to invoke. JUnit comform methods always start with “test” prefix and do not have a return value.
sTimerName | Optional. Creates a custom time measure with the specified name for this function.

Example

var
  ghTestObj : number;

dcltrans
  transaction TInit
  var
    hPerf : number;
  begin
    JavaCreateJavaVM();
    JavaSetString(JAVA_STATIC_METHOD, "myString");
    ghTestObj := JavaLoadObject("JUTestClass");
  end TInit;

  transaction TMain
  begin
    JUnitCallMethod(ghTestObj, "testTestCase");
  end TMain;

  transaction TEnd
  begin
    JavaFreeObject(ghTestObj);
  end TEnd;
親トピック: Java Framework Functions


JUnitExecuteTest Function

Action

Starts a JUnit test execution.

Include file

Java.bdh

Syntax

JUnitExecuteTest( in hTestClass  : number;
                  in sMethodName : string;
                  in sTimerName  : string optional ): number;

Return value

  • true if successful
  • false otherwise
Parameter | Description
hTestClass | The handle of the runtime class.
sMethodName | The name of the test you want to execute. If omitted, the whole class is executed.
sTimerName | The name of the timer for the JUnitExecuteTest function.

Example

var
  hTestClass : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the java class
      hTestClass := JUnitLoadClass("com/microfocus/Test");
  end TInit;

  transaction THello
  begin
    JUnitExecuteTest(hTestClass, "doHello", "doHello_timer");
    JUnitExecuteTest(hTestClass, "", "Test_timer");
  end THello;

  transaction TEnd
  begin
    JavaFreeObject(hTestClass);
  end TEnd;
親トピック: Java Framework Functions


JUnitLoadClass Function

Action

Instantiates a Java object and returns a handle of the runtime class. The Java runtime class can be released by using the JavaFreeObject function.

Include file

Java.bdh

Syntax

JUnitLoadClass( in sClassSpecifier : string ): number;

Return value

  • Handle of the Java object class.
Parameter | Description
sClassSpecifier | Fully qualified name of the class to instantiate. The class must be available through the classpath. Use the / character as package separator. For example: java/lang/String

Example

var
  hTestClass : number;

dcltrans
  transaction TInit
  begin
      // Load and start the JVM.
      JavaCreateJavaVM();

      // instantiate the java class
      hTestClass := JUnitLoadClass("com/microfocus/Test");
  end TInit;

  transaction THello
  begin
    JUnitExecuteTest(hTestClass, "doHello", "doHello_timer");
  end THello;

  transaction TEnd
  begin
    JavaFreeObject(hTestClass);
  end TEnd;
親トピック: Java Framework Functions


Deprecated Java Framework Functions

The following functions from the previous version of the Java Framework have been deprecated, however they are still supported.

  • JavaUserInit: Calls the JavaUserInit method of the Java class that implements the behavior of the virtual user.

  • JavaUserRun: Calls the JavaUserRun method of the Java class that implements the behavior of the virtual user.

  • JavaUserMethod: Calls an additional method of the Java class that implements the behavior of the virtual user.

  • JavaUserShutdown: Calls the JavaUserShutdown method of the Java class that implements the behavior of the virtual user.

親トピック: Java Framework Functions


JMS Functions Reference

Silk Performer provides JMS API functions to write and run scripts for testing JMS applications and providers.

You can create a normal JMS project and a JMS project with a comprehensive example:
  • To create a normal JMS project: Click File in the menu, click New Project, select Java > Java Message Service (JMS) . This project includes a short example script.
  • To create a JMS project with a comprehensive example: Click File in the menu, click New Project, select Samples > JMS. This project includes a comprehensive example script. The examples are connected to demo.borland.com (ActiveMQ server) and require a .jar file, which is included in the project. However, for other servers the client requires a different .jar file.
Note the following when working with JMS functions:
  • The first call in the TInit must be the function JavaCreateJavaVM to set a JVM.
  • TInit must include only the function JmsStartUp or both the functions JmsSetJndiEnvironment and JmsInit. If you want to specify only the JNDI Naming Factory Initial, you can use JmsStartUp. Otherwise, set the JNDI parameters with JmsSetJndiEnvironment and init JMS with JmsInit.
  • TEnd must include the function JmsShutDown to shut down the connection to the messaging service.
  • (Optional) Clear the queue to make sure there are no messages left.
  • (Optional) Clear the message before you use it or reuse it.
  • (Optional) Use the constants that are defined in the Jms.bdh file for the message types and message header properties.
  • Initializing/Creating/Destroying Functions
  • Miscellaneous JMS Functions
親トピック: Benchmark Description Language (BDL) Reference


Initializing/Creating/Destroying Functions

The JmsStartUp function is equivalent to the functions JmsSetJndiEnvironment and JmsInit. However, in JmsStartUp you can specify only one Jndi environment property, the property sJndiNamingFactoryInitial.

The following functions are mandatory and must be used in TInit: JmsInit, JmsSetJndiEnvironment, JmsStartUp.
注: You must either use both the functions JmsInit and JmsSetJndiEnvironment or only the function JmsStartUp. You do not need all three functions.

The following function is mandatory and must be used in TEnd: JmsShutDown.

  • JmsInit Function
    Creates a JNDI context, looks up the connection factory, creates a connection and a session, and starts the session. Use this function in the TInit.
  • JmsSetJndiEnvironment Function
    Manually sets the JNDI environment. Another option is to set a jndi.property file in the classpath. Use this function in the TInit.
  • JmsStartUp Function
    Starts JMS. Use this function in the TInit.
  • JmsShutDown Function
    Closes the connection. Use this function in the TEnd.
親トピック: JMS Functions Reference


JmsInit Function

Action

Creates a JNDI context, looks up the connection factory, creates a connection and a session, and starts the session.

Include file

Jms.bdh

Syntax

JmsInit( in sJndiConnectionFactoryName : string );
Parameter | Description
sJndiConnectionFactoryName | The name of the JNDI connection factory

Example

JmsInit("ConnectionFactory");

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Initializing/Creating/Destroying Functions


JmsSetJndiEnvironment Function

Action

Manually sets the JNDI environment. Another option is to set a jndi.property file in the classpath. (mandatory).

Include file

Jms.bdh

Syntax

JmsSetJndiEnvironment( in sKey   : string,
                       in SValue : string);
Parameter | Description
sKey | The key of the JNDI environment
sValue | The value of the JNDI environment

Example

transaction TInit
  var hPerf : number;
  begin
    JavaCreateJavaVM();

    hPerf := JavaLoadObject("silk/performer/SilkPerformer");
    JavaSetObject(JAVA_STATIC_METHOD, hPerf);
    ghJmsSampleObj := JavaLoadObject("JmsSample");
    JavaFreeObject(hPerf);

    JmsSetJndiEnvironment(JNDI_NAMING_FACTORY_INITIAL_KEY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    JmsSetJndiEnvironment("java.naming.provider.url", "tcp://demo.borland.com:61616");

    JmsSetJndiEnvironment("queue.TestQueue", csQueue);

    JmsInit("ConnectionFactory");
  end TInit;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Initializing/Creating/Destroying Functions


JmsStartUp Function

Action

Starts JMS. Use this function in the TInit.

Include file

Jms.bdh

Syntax

JmsStartUp( in sJndiConnectinoFactoryName : string,
            in sJndiNamingFactoryInitial  : string optional);
Parameter | Description
sJndiConnectionFactoryName | The name of the JNDI Connection Factory
sJndiNamingFactoryInitial | (optional) The JNDI Naming Factory Initial Environment value

Example

transaction TInit
begin
  JavaCreateJavaVM();
  JmsStartUp("jms/ConnectionFactory", "com.sun.enterprise.naming.impl.SerialInitcontextFactory");
end TInit

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Initializing/Creating/Destroying Functions


JmsShutDown Function

Action

Closes the connection. Use this function in the TEnd.

Include file

Jms.bdh

Syntax

JmsShutDown();

Example

 transaction TEnd
  begin
    JmsShutDown();
    JavaFreeObject(ghJmsSampleObj);
  end TEnd;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Initializing/Creating/Destroying Functions


Miscellaneous JMS Functions

  • JmsClearMessage Function
    Clears out the header, body, and properties of the current message.
  • JmsClearMessageProperties Function
    Sets the header and the message properties of the current message.
  • JmsEmptyQueue Function
    Empties the given queue of a message.
  • JmsGetConsumerMessageListener Function
    Gets the listener of the given destination.
  • JmsGetMessageHandle Function
    Gets the handle of the received message.
  • JmsGetMessageObject Function
    Gets the object from the last received message.
  • JmsGetReceivedMessageProperty Function
    Gets the header and message properties of the current message.
  • JmsGetMessageSelector Function
    Gets the message selector of the consumer.
  • JmsGetMessageText Function
    Gets the message text from the last received message.
  • JmsReceiveMessage Function
    Receives the first message from the given destination and returns the message type.
  • JmsSendObjectMessage Function
    Sends an object message to the given destination.
  • JmsSendTextMessage Function
    Sends a text message to the given destination.
  • JmsSetConsumerMessageListener Function
    Attaches a listener for the given destination.
  • JmsSetMessageHandle Function
    Sets the message to be sent.
  • JmsSetMessageProperty Function
    Sets the header and the message properties for the current message.
  • JmsSetMessageSelector Function
    Sets the message selector for the consumer.
  • JmsVerifyMessageText Function
    Checks if the received text is the expected text. If not, returns an error.
親トピック: JMS Functions Reference


JmsClearMessage Function

Action

Clears the header, body, and properties of the current message.

Include file

Jms.bdh

Syntax

JmsClearMessage( in sMessageSelector : string );
Parameter | Description
sMessageSelector | Only messages with properties matching the message selector expression are delivered. A value of null or an empty string indicates that there is no message selector for the message consumer.

Example

transaction TExampleSendReceiveObjectMessage
  var hObject : number;
      hObjectReturned : number;
      sReturnType : number;
  begin
    JavaCallMethod(ghJmsSampleObj, "generateObject");
    hObject := JavaGetObject(ghJmsSampleObj);

    JmsClearMessage();

    JmsSendObjectMessage(hObject, csQueue);
    sReturnType := JmsReceiveMessage(csQueue, -1);

    if (sReturnType = JMS_MSG_TYPE_OBJECT) then
      hObjectReturned := JmsGetMessageObject();
      JavaCastObject(hObjectReturned, "java/lang/Object");
      JavaSetObject(ghJmsSampleObj, hObjectReturned);
      JavaCallMethod(ghJmsSampleObj, "handleObject");
    else
      RepMessage("ObjectMessage expected!", SEVERITY_ERROR);
    end;
  end TExampleSendReceiveObjectMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsClearMessageProperties Function

Action

This function clears the message properties.

Include file

Jms.bdh

Syntax

JmsClearMessageProperties;

Example

JmsClearMessageProperties();

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsEmptyQueue Function

Action

Empties the given queue of a message.

Include file

Jms.bdh

Syntax

JmsEmptyQueue( in sJndiDestinationName : string );
Parameter | Description
sJndiDestinationName | The Jndi destination name

Return value

Returns the given header or message property of the current message.

Example

transaction TExampleEmptyQueue
  begin
      JmsEmptyQueue(csQueue);
end TExampleEmptyQueue;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsGetConsumerMessageListener Function

Action

Gets the listener of the given destination.

Include file

Jms.bdh

Syntax

JmsGetConsumerMessageListener( in sJndiDestinationName : string ): number;
Parameter | Description
sJndiDestinationName | The destination for which we want to attach the listener

Return value

Returns the handle of the given destination's listener.

Example

  transaction TExampleGetMessageAsynchronously
  var hHandle : number;
  begin
    JavaCallMethod(ghJmsSampleObj, "getMessageListener");
    hHandle := JavaGetObject(ghJmsSampleObj);

    JmsSetConsumerMessageListener(csQueue, hHandle);
    JmsClearMessage();
    JmsSendTextMessage("Text message 1 for the message listener!", csQueue);
    JmsSendTextMessage("Text message 2 for the message listener!", csQueue);
    JmsSendTextMessage("Text message 3 for the message listener!", csQueue);
    if (JmsGetConsumerMessageListener(csQueue) = 0) then
      RepMessage("No message listener set for " + csQueue, SEVERITY_WARNING);
    else
      // We have to wait for the 3 messages to get to the listener
      Wait 5.0;
    end;
  end TExampleGetMessageAsynchronously;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsGetMessageHandle Function

Action

Gets the handle of the received message.

Include file

Jms.bdh

Syntax

JmsGetMessageHandle(): number;

Return value

Returns the handle of the received message.

Example

  transaction TExampleHandleUnknownMessage
  var ret : number;
      sMessage : string;
      hObj : number;
      hHandle:number;
  begin
    JmsSendTextMessage("Text message!", csQueue, "ExampleHandleUnknownMessage_Send");
    ret := JmsReceiveMessage(csQueue, -1, "ExampleHandleUnknownMessage_Receive");
    if ret = JMS_MSG_TYPE_TEXT then
       sMessage := JmsGetMessageText();
    elseif ret = JMS_MSG_TYPE_OBJECT then
       hObj := JmsGetMessageObject();
    elseif ret = JMS_TIMEOUT then
      RepMessage("Timeout", SEVERITY_INFORMATIONAL);
    elseif ret = JMS_UNKNOWN then
      RepMessage("Unknown return value!", SEVERITY_ERROR);
    else
      hHandle := JmsGetMessageHandle();
    end;
  end TExampleHandleUnknownMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsGetMessageObject Function

Action

Gets the object from the last received message.

Include file

Jms.bdh

Syntax

JmsGetMessageObject(): string;

Return value

Returns the handle of the object sent with the message.

Example

  transaction TExampleSendReceiveObjectMessage
  var hObject : number;
      hObjectReturned : number;
      sReturnType : number;
  begin
    JavaCallMethod(ghJmsSampleObj, "generateObject");
    hObject := JavaGetObject(ghJmsSampleObj);

    JmsClearMessage();

    JmsSendObjectMessage(hObject, csQueue);
    sReturnType := JmsReceiveMessage(csQueue, -1);

    if (sReturnType = JMS_MSG_TYPE_OBJECT) then
      hObjectReturned := JmsGetMessageObject();
      JavaCastObject(hObjectReturned, "java/lang/Object");
      JavaSetObject(ghJmsSampleObj, hObjectReturned);
      JavaCallMethod(ghJmsSampleObj, "handleObject");
    else
      RepMessage("ObjectMessage expected!", SEVERITY_ERROR);
    end;
  end TExampleSendReceiveObjectMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsGetReceivedMessageProperty Function

Action

Gets the header and message properties of the current message.

Include file

Jms.bdh

Syntax

JmsGetReceivedMessageProperty( sKey  : string,
                       iType : number optional ): string;
Parameter | Description
sKey The name of the property. Can be a string or one of the following values:
  • JMS_MSG_HDR_CORRELATIONID: JMSCorrelationID
  • JMS_MSG_HDR_DELIVERYMODE: JMSDeliveryMode
  • JMS_MSG_HDR_EXPIRATION: JMSExpiration
  • JMS_MSG_HDR_MESSAGEID: JMSMessageID
  • JMS_MSG_HDR_PRIORITY: JMSPriority
  • JMS_MSG_HDR_REDELIVERED: JMSRedelivered
  • JMS_MSG_HDR_TIMESTAMP: JMSTimestamp
  • JMS_MSG_HDR_TYPE: JMSType
iType | (Optional) The property type. Default is string.

Return value

Returns the given header or message property of the current message.

Example

  transaction TExampleUsingSelector
  var sMessage : string;
      sMessageId : string;
      sMessageSelector : string;
      sReturnType : number;
      hHandle : number;
  begin
    JmsSetMessageSelector("MESSAGEID = '12345'", csQueue);

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome1!", csQueue);
    JmsReceiveMessage(csQueue, 5000);
    sMessage := JmsGetMessageText();
    if (Strlen(sMessage) = 0) then
      RepMessage("ERR: Should have receive the message!", SEVERITY_ERROR);
    end;

    JmsClearMessage();
    JmsSendTextMessage("Welcome2!", csQueue);
    sReturnType := JmsReceiveMessage(csQueue, 5000);
    if sReturnType <> JMS_TIMEOUT then
      sMessage := JmsGetMessageText();
      sMessageId := JmsGetReceivedMessageProperty("MESSAGEID");
      sMessageSelector := JmsGetMessageSelector(csQueue);
      Print("Return type: " + string(sReturnType) + "; message text: " + sMessage + "; messageid: " + sMessageId + "; messageSelector: " + sMessageSelector);
      RepMessage("ERR: Should have not receive the message!", SEVERITY_ERROR);
    end;

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome3!", csQueue);
    JmsReceiveMessage(csQueue, -1);
    JmsVerifyMessageText("Welcome3!");
  end TExampleUsingSelector;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsGetMessageSelector Function

Action

Gets the message selector of the consumer.

Include file

Jms.bdh

Syntax

JmsGetMessageSelector( in sJndiDestinationName : string ): string;
Parameter | Description
sJndiDestinationName | The Jndi destination name

Return value

Returns the message selector of the given destination's consumer.

Example

transaction TExampleUsingSelector
  var sMessage : string;
      sMessageId : string;
      sMessageSelector : string;
      sReturnType : number;
      hHandle : number;
  begin
    JmsSetMessageSelector("MESSAGEID = '12345'", csQueue);

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome1!", csQueue);
    JmsReceiveMessage(csQueue, 5000);
    sMessage := JmsGetMessageText();
    if (Strlen(sMessage) = 0) then
      RepMessage("ERR: Should have receive the message!", SEVERITY_ERROR);
    end;

    JmsClearMessage();
    JmsSendTextMessage("Welcome2!", csQueue);
    sReturnType := JmsReceiveMessage(csQueue, 5000);
    if sReturnType <> JMS_TIMEOUT then
      sMessage := JmsGetMessageText();
      sMessageId := JmsGetMessageProperty("MESSAGEID");
      sMessageSelector := JmsGetMessageSelector(csQueue);
      Print("Return type: " + string(sReturnType) + "; message text: " + sMessage + "; messageid: " + sMessageId + "; messageSelector: " + sMessageSelector);
      RepMessage("ERR: Should have not receive the message!", SEVERITY_ERROR);
    end;

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome3!", csQueue);
    JmsReceiveMessage(csQueue, -1);
    JmsVerifyMessageText("Welcome3!");
  end TExampleUsingSelector;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsGetMessageText Function

Action

Gets the message text from the last received message.

Include file

Jms.bdh

Syntax

JmsGetMessageText(): string;

Return value

Returns the text sent with the message.

Example

transaction TExampleSendReceiveTextMessage
  var sRet : number;
      sMessage : string;
  begin
    JmsSendTextMessage("Welcome1!", csQueue);
    sRet := JmsReceiveMessage(csQueue, -1);
    if (sRet = JMS_MSG_TYPE_TEXT) then
      sMessage := JmsGetMessageText();
    else
      RepMessage("TextMessage expected!", SEVERITY_ERROR);
    end;
  end TExampleSendReceiveTextMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsReceiveMessage Function

Action

Receives the first message from the given destination and returns the message type.

Include file

Jms.bdh

Syntax

JmsReceiveMessage( sJndiDestinationName :  string,
                   lTimeout             :  number,
                   sMeasureName         :  string optional ): number;
Parameter | Description
sJndiDestinationName | The source of the message
ITimeout | The timeout value (in milliseconds). < 0 - wait forever, 0 - do not wait, > 0 - wait specified milliseconds
sMeasureName | (optional) The name of this measure. Default is the method name.

Return value

Returns the message type
  • JMS_MSG_TYPE_TEXT := 0;
  • JMS_MSG_TYPE_BYTES := 1;
  • JMS_MSG_TYPE_MAP := 2;
  • JMS_MSG_TYPE_OBJECT := 3;
  • JMS_MSG_TYPE_STREAM := 4;
  • JMS_TIMEOUT := 5;
  • JMS_UNKNOWN := 6;

Example

transaction TExampleSendReceiveTextMessage
  var sRet : number;
      sMessage : string;
  begin
    JmsSendTextMessage("Welcome1!", csQueue);
    sRet := JmsReceiveMessage(csQueue, -1);
    if (sRet = JMS_MSG_TYPE_TEXT) then
      sMessage := JmsGetMessageText();
    else
      RepMessage("TextMessage expected!", SEVERITY_ERROR);
    end;
  end TExampleSendReceiveTextMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsSendObjectMessage Function

Action

Sends an object message to the given destination.

Include file

Jms.bdh

Syntax

JmsSendObjectMessage( in objMessage           : number,
                      in sJndiDestinationName : string,
                      in sMeasureName         : string optional );
Parameter | Description
objMessage | The handler of the object to send
sJndiDestinationName | The destination to send this message to
sMeasureName | (optional) The name of this measure. Default is the method name.

Example

transaction TExampleSendReceiveObjectMessage
  var hObject : number;
      hObjectReturned : number;
      sReturnType : number;
  begin
    JavaCallMethod(ghJmsSampleObj, "generateObject");
    hObject := JavaGetObject(ghJmsSampleObj);

    JmsClearMessage();

    JmsSendObjectMessage(hObject, csQueue);
    sReturnType := JmsReceiveMessage(csQueue, -1);

    if (sReturnType = JMS_MSG_TYPE_OBJECT) then
      hObjectReturned := JmsGetMessageObject();
      JavaCastObject(hObjectReturned, "java/lang/Object");
      JavaSetObject(ghJmsSampleObj, hObjectReturned);
      JavaCallMethod(ghJmsSampleObj, "handleObject");
    else
      RepMessage("ObjectMessage expected!", SEVERITY_ERROR);
    end;
  end TExampleSendReceiveObjectMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsSendTextMessage Function

Action

Sends a text message to the given destination.

Include file

Jms.bdh

Syntax

JmsSendTextMessage( in sMessage             : string,
                    in sJndiDestinationName : string,
                    in sMeasure             : string optional );
Parameter | Description
sMessage | The text to send
sJndiDestinationName | The destination of the message
sMeasurename | (optional) The name of this measure. Default is the method name.

Example

transaction TExampleSendReceiveTextMessage
  var sRet : number;
      sMessage : string;
  begin
    JmsSendTextMessage("Welcome1!", csQueue);
    sRet := JmsReceiveMessage(csQueue, -1);
    if (sRet = JMS_MSG_TYPE_TEXT) then
      sMessage := JmsGetMessageText();
    else
      RepMessage("TextMessage expected!", SEVERITY_ERROR);
    end;
  end TExampleSendReceiveTextMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsSetConsumerMessageListener Function

Action

Attaches a listener for the given destination.

Include file

Jms.bdh

Syntax

JmsSetConsumerMessgaeListener( in sJndiDestinationName : string,
                                  hHandle              : number );
Parameter | Description
sJndiDestinationName | The destination for which you want to attach the listener
hHandle | The handle of the listener

Example

  transaction TExampleGetMessageAsynchronously
  var hHandle : number;
  begin
    JavaCallMethod(ghJmsSampleObj, "getMessageListener");
    hHandle := JavaGetObject(ghJmsSampleObj);

    JmsSetConsumerMessageListener(csQueue, hHandle);
    JmsClearMessage();
    JmsSendTextMessage("Text message 1 for the message listener!", csQueue);
    JmsSendTextMessage("Text message 2 for the message listener!", csQueue);
    JmsSendTextMessage("Text message 3 for the message listener!", csQueue);
    if (JmsGetConsumerMessageListener(csQueue) = 0) then
      RepMessage("No message listener set for " + csQueue, SEVERITY_WARNING);
    else
      // We have to wait for the 3 messages to get to the listener
      Wait 5.0;
    end;
  end TExampleGetMessageAsynchronously;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsSetMessageHandle Function

Action

Sets the message to be sent.

Include file

Jms.bdh

Syntax

JmsSetMessageHandle( in hHandle : number );
Parameter | Description
hHandle | The handle of the message to be sent

Example

transaction TExampleGetSetHandleMessage
  var hHandle : number;
  begin
    hHandle := JmsGetMessageHandle();
    JmsSetMessageHandle(hHandle);
  end TExampleGetSetHandleMessage;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsSetMessageProperty Function

Action

Sets the header and the properties for the current message.

Include file

Jms.bdh

Syntax

JmsSetMessageProperty( sKey   : string,
                       sValue : string,
                       iType  : number optional );
Parameter | Description
sKey The name of the property. Can be a string or one of the following values:
  • JMS_MSG_HDR_CORRELATIONID: JMSCorrelationID
  • JMS_MSG_HDR_DELIVERYMODE: JMSDeliveryMode
  • JMS_MSG_HDR_EXPIRATION: JMSExpiration
  • JMS_MSG_HDR_MESSAGEID: JMSMessageID
  • JMS_MSG_HDR_PRIORITY: JMSPriority
  • JMS_MSG_HDR_REDELIVERED: JMSRedelivered
  • JMS_MSG_HDR_TIMESTAMP: JMSTimestamp
  • JMS_MSG_HDR_TYPE: JMSType
sValue | The value of the property
iType | (Optional) The type of the property. Default is String

Example

transaction TExampleUsingSelector
  var sMessage : string;
      sMessageId : string;
      sMessageSelector : string;
      sReturnType : number;
      hHandle : number;
  begin
    JmsSetMessageSelector("MESSAGEID = '12345'", csQueue);

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome1!", csQueue);
    JmsReceiveMessage(csQueue, 5000);
    sMessage := JmsGetMessageText();
    if (Strlen(sMessage) = 0) then
      RepMessage("ERR: Should have receive the message!", SEVERITY_ERROR);
    end;

    JmsClearMessage();
    JmsSendTextMessage("Welcome2!", csQueue);
    sReturnType := JmsReceiveMessage(csQueue, 5000);
    if sReturnType <> JMS_TIMEOUT then
      sMessage := JmsGetMessageText();
      sMessageId := JmsGetMessageProperty("MESSAGEID");
      sMessageSelector := JmsGetMessageSelector(csQueue);
      Print("Return type: " + string(sReturnType) + "; message text: " + sMessage + "; messageid: " + sMessageId + "; messageSelector: " + sMessageSelector);
      RepMessage("ERR: Should have not receive the message!", SEVERITY_ERROR);
    end;

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome3!", csQueue);
    JmsReceiveMessage(csQueue, -1);
    JmsVerifyMessageText("Welcome3!");
  end TExampleUsingSelector;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsSetMessageSelector Function

Action

Sets the message selector for the consumer.

Include file

Jms.bdh

Syntax

JmsSetMessageSelector( in sMessageSelector : string );
Parameter | Description
sMessageSelector | Only messages with properties matching the message selector expression are delivered. A value of null or an empty string indicates that there is no message selector for the message consumer.

Example

transaction TExampleUsingSelector
  var sMessage : string;
      sMessageId : string;
      sMessageSelector : string;
      sReturnType : number;
      hHandle : number;
  begin
    JmsSetMessageSelector("MESSAGEID = '12345'", csQueue);

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome1!", csQueue);
    JmsReceiveMessage(csQueue, 5000);
    sMessage := JmsGetMessageText();
    if (Strlen(sMessage) = 0) then
      RepMessage("ERR: Should have receive the message!", SEVERITY_ERROR);
    end;

    JmsClearMessage();
    JmsSendTextMessage("Welcome2!", csQueue);
    sReturnType := JmsReceiveMessage(csQueue, 5000);
    if sReturnType <> JMS_TIMEOUT then
      sMessage := JmsGetMessageText();
      sMessageId := JmsGetMessageProperty("MESSAGEID");
      sMessageSelector := JmsGetMessageSelector(csQueue);
      Print("Return type: " + string(sReturnType) + "; message text: " + sMessage + "; messageid: " + sMessageId + "; messageSelector: " + sMessageSelector);
      RepMessage("ERR: Should have not receive the message!", SEVERITY_ERROR);
    end;

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome3!", csQueue);
    JmsReceiveMessage(csQueue, -1);
    JmsVerifyMessageText("Welcome3!");
  end TExampleUsingSelector;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


JmsVerifyMessageText Function

Action

Checks if the received text is the expected text. If not, returns an error.

Include file

Jms.bdh

Syntax

JmsVerifyMessageText( in sExpectedMessage : string );
Parameter | Description
sExpectedMessage | The expected message

Example

  transaction TExampleUsingSelector
  var sMessage : string;
      sMessageId : string;
      sMessageSelector : string;
      sReturnType : number;
      hHandle : number;
  begin
    JmsSetMessageSelector("MESSAGEID = '12345'", csQueue);

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome1!", csQueue);
    JmsReceiveMessage(csQueue, 5000);
    sMessage := JmsGetMessageText();
    if (Strlen(sMessage) = 0) then
      RepMessage("ERR: Should have receive the message!", SEVERITY_ERROR);
    end;

    JmsClearMessage();
    JmsSendTextMessage("Welcome2!", csQueue);
    sReturnType := JmsReceiveMessage(csQueue, 5000);
    if sReturnType <> JMS_TIMEOUT then
      sMessage := JmsGetMessageText();
      sMessageId := JmsGetMessageProperty("MESSAGEID");
      sMessageSelector := JmsGetMessageSelector(csQueue);
      Print("Return type: " + string(sReturnType) + "; message text: " + sMessage + "; messageid: " + sMessageId + "; messageSelector: " + sMessageSelector);
      RepMessage("ERR: Should have not receive the message!", SEVERITY_ERROR);
    end;

    JmsSetMessageProperty("MESSAGEID","12345");
    JmsSendTextMessage("Welcome3!", csQueue);
    JmsReceiveMessage(csQueue, -1);
    JmsVerifyMessageText("Welcome3!");
  end TExampleUsingSelector;

Sample scripts

JmsSample.bdf, JmsSample.java

親トピック: Miscellaneous JMS Functions


Monitoring Functions

  • PDCE Functions Overview
    The PDCE (Performance Data Collection Engine) is an internal engine of Performance Explorer used for online monitoring. Its interface can also be used in the BDL of Silk Performer for monitoring PDCE data sources.
  • Performance Monitor Functions Overview
    Windows NT Performance Monitor counters collect and present information about the system performance.
  • SNMP Functions
    Lists functions for monitoring SNMP connections.
親トピック: Benchmark Description Language (BDL) Reference


PDCE Functions Overview

The PDCE (Performance Data Collection Engine) is an internal engine of Performance Explorer used for online monitoring. Its interface can also be used in the BDL of Silk Performer for monitoring PDCE data sources.

Therefore all measures that Performance Explorer is able to monitor in real-time can also be used the same way with the BDL of Performance Explorer. After the execution of some registering functions you are able to get the data out of the PDCE through the provided polling functions. These functions provide data, status information, and a description for the measures (if available).

Terminology

Client | Any source that is registered in the Performance Data Collection Engine for collecting measure data (Silk Performance Manager, Silk Performer, Performance Explorer, TSD Writer).
Measure | A measure is the data object that stores the collected data of the queries with corresponding statistic data (sum, min, max, avg, stdev,...). It provides access to this data, and additional information about the measure itself (measure type, description, status,...).
Measure Group | Measure groups are a collection of all measures that are of the same measure type and have the same update interval. Such a group has all the logic to perform the necessary queries for measure updates and to provide this data to the clients.
Interval Manager | The Interval Manager adds new subscribed measures to the correct measure group. Additionally, it contains a scheduler that initiates the queries for measure updates for every Measure Group.
Performance Data Collection Engine | A library, that allows multiple clients to register different types of measures (NT System Data, SNMP Data, Silk Performer data,...) for data collection. This data is either provided to the clients for real time monitoring or for writing to a Timeseries Data file (TSD Writer).

Example

//-------------------------------------------------------
// Performance monitoring script uses polling functions of PDCE interface
// for monitoring all supported performance data source of the PDCE.
//-------------------------------------------------------
//-------------------------------------------------------
benchmark SilkPerformer Pdce
use "pdce.bdh"

const
    STRING_SIZE := 1024;
    NUMBER_OF_MEASURES := 7;

    // sample measure strings for different data sources
    RSTAT_SAMPLE_MEASURE := "RStat:Total Cpu@localhost";
    SNMP_SAMPLE_MEASURE := "SNMP:1.3.6.1.4.1.3068.1.7.3.16.0@localhost";
    PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";
    REXEC_SAMPLE_MEASURE := "REXEC:VMSTAT:0\\9@localhost";
    WEBSPHERE_SAMPLE_MEASURE := "WS35:localhost.Default Server.runtime.resources.memFree@localhost:900";
    PMI_SAMPLE_MEASURE := "PMI:localhost\\Default Server\\jvmRuntimeModule\\1@localhost:900";
    PERFSERVLET_MEASURE := "PERFSERVLET:vangelis\Default Server\jvmRuntimeModule\totalMemory\@vangelis:80?/wasPerfTool/servlet/perfservlet"

// Definition of global variables: string, number, float, boolean, array
var
    pClient      :number;
    pMeasure     :array[NUMBER_OF_MEASURES] of number;
    sMeasureName :array[NUMBER_OF_MEASURES] of string;

    fMeasureLastValue :float;
    fMeasureSum   :float;
    fMeasureMin   :float;
    fMeasureMax   :float;
    fMeasureAvg   :float;
    fMeasureStDev :float;

    uiMeasureTimeStamp :number;
    uiMeasureStatus    :number;

    sDescription :string(STRING_SIZE);
    sErrorText   :string(STRING_SIZE);
    sMeasureKey  :string;
    uiErrorCode  :number;

    uiPdceInternalQueryInterval : number init 5000;  //msec
    fPdceInitInterval           : float init 5.0;  //sec
    fMonitoringInterval         : float init 3.0;  //sec
    uiTimeStamp                 : number;
    uiNewPdceInternalQueryInterval : number init 10000; //msec

// Workload Section
dcluser
    user
      VPdceMonitor
    transactions
      TInit        : begin; // Initialization
      TPdceMonitor : 10; // Transactions
      TEnd         : end; // Termination

// Transactions Section -------------------
dcltrans
    transaction TInit
    begin
      // Insert here the initial statements
      PdceStartup();
      PdceClientRegister(pClient, uiPdceInternalQueryInterval);

      sMeasureKey := PERFMON_SAMPLE_MEASURE;
      sMeasureName[1] := "PerfmonMeasure1";
          PdceAddMeasure(pClient, sMeasureName[1], sMeasureKey, pMeasure[1]);

// samples for other datasources, different handle "pMeasure" needed for every measure
/*
      sMeasureKey     := RSTAT_SAMPLE_MEASURE;
      sMeasureName[2] := "RstatMeasure1";
      PdceAddMeasure(pClient,sMeasureName[2],sMeasureKey,pMeasure[2]);

      sMeasureKey    := SNMP_SAMPLE_MEASURE;
      sMeasureName[3] := "SnmpMeasure1";
      PdceAddMeasure(pClient,sMeasureName[3],sMeasureKey,pMeasure[3]);

      sMeasureKey     := REXEC_SAMPLE_MEASURE;
      sMeasureName[4] := "RexecMeasure1";
      PdceAddMeasure(pClient,sMeasureName[4],sMeasureKey,pMeasure[4]);
      sMeasureKey    := WEBSPHERE_SAMPLE_MEASURE;
      sMeasureName[5] := "WebSphereMeasure1";
      PdceAddMeasure(pClient, sMeasureName[5], sMeasureKey, pMeasure[5]);

      sMeasureKey     := PMI_SAMPLE_MEASURE;
      sMeasureName[6] := "PmiMeasure1";
      PdceAddMeasure(pClient, sMeasureName[6], sMeasureKey, pMeasure[6]);

      sMeasureKey     := PERFSERVLET_SAMPLE;    sMeasureName[7] := "PerfServletMeasure1";
      PdceAddMeasure(pClient, sMeasureName[7], sMeasureKey, pMeasure[7]);
*/

      wait(fPdceInitInterval);

      // get time stamp
      PdceGetStartTickCount(uiTimeStamp);
      write("Timestamp:");
      write(uiTimeStamp, 10);

      // change interval
      PdceClientInterval(pClient, uiNewPdceInternalQueryInterval);

      // get description of measures and write to output file
      // ... do for every measure of which you want a detailed description
      PdceMeasureQueryInfo(pMeasure[1], sDescription, STRING_SIZE);
      write(sMeasureName[1]);    write(":  ");
      writeln(sDescription);
      writeln;
    end TInit;

//------------------------------------------
    transaction TPdceMonitor
    begin
      // get actual status of measure
      PdceMeasureQueryStatus(pMeasure[1], uiErrorCode, sErrorText, STRING_SIZE);

      // get actual values of measure
      PdceMeasureQueryValue(pMeasure[1], fMeasureLastValue, fMeasureSum, fMeasureMin, fMeasureMax,      fMeasureAvg, fMeasureStDev, uiMeasureTimeStamp, uiMeasureStatus);

      // write to output file
      write(sMeasureName[1]);
      write(": Timestamp:");
      write(uiMeasureTimeStamp, 10);
      write(" Value: ");
      write(fMeasureLastValue, 8, 2);
      write(" Sum: ");
      write(fMeasureSum, 10, 2);
      write(" Min: ");
      write(fMeasureMin, 8, 2);
      write(" Max: ");
      write(fMeasureMax, 8, 2);
      write(" Avg: ");
      write(fMeasureAvg, 8, 2);
      write(" StDev: ");
      write(fMeasureStDev, 8, 2);
      write(" Status: ");
      writeln(sErrorText);

      wait(fMonitoringInterval);
    end TPdceMonitor;

//------------------------------------------

transaction TEnd
    begin
      // every measure has to be unsubscribed;
      PdceMeasureUnSubscribe(pMeasure[1]);
      PdceClientUnRegister(pClient);
      PdceCleanup();
    end TEnd;
  • Monitoring BEA Weblogic Application Servers
    This section briefly explains how BEA WebLogic servers can be monitored using Silk Performance Explorer and some important WebLogic performance measures.
  • Monitoring IBM WebSphere Application Servers
    This section briefly explains how IBM WebSphere application servers can be monitored using Performance Explorer and specific performance measures.
  • Monitoring Oracle Forms Application Servers
  • PdceStartup Function
    This function initializes the PDCE and increases the reference counter.
  • PdceCleanup Function
    This function decreases the reference counter.
  • PdceGetStartTickCount Function
    This function returns the timestamp of the interval manager creation.
  • PdceRegisterClient Function
    This function registers any client to the data collection engine.
  • PdceClientRegister Function
    This function registers any client to the data collection engine.
  • PdceClientUnRegister Function
    This function unregisters a client from the data collection engine.
  • PdceClientInterval Function
    This function changes the interval in which the PDCE collects data for a registered client.
  • PdceAddMeasure Function
    This function adds a new measure to a client.
  • PdceMeasureSubscribe Function
    This function adds a new measure to a client. At every interval, the data for the added measure is collected from the client.
  • PdceMeasureUnSubscribe Function
    This function removes a registered measure from a client.
  • PdceMeasureQueryInfo Function
    This function returns an information string for a given measure if the measure provides such a string.
  • PdceMeasureQueryStatus Function
    This function provides the status for a given measure for the last collection cycle.
  • PdceMeasureQueryValue Function
    This function provides the actual values for a given measure.
  • PdceGetMeasureValue Function
    This function provides the last queried values for a given measure.
親トピック: Monitoring Functions


Monitoring BEA Weblogic Application Servers

This section briefly explains how BEA WebLogic servers can be monitored using Performance Explorer and some important WebLogic performance measures.

By default, the WebLogic SNMP agent is inactive. SNMP support can be enabled using the WebLogic Administration Console. With a Web browser you can launch the console by visiting http://weblogichost:port/console. In the left-hand menu tree, select the SNMP node. This brings up the SNMP configuration page. Using this page, verify that the SNMP agent is enabled. You must restart WebLogic to enable SNMP support.

  1. From Performance Explorer select, Monitor > Add Data Source . The Data Source Wizard dialog opens.
  2. Check Select from predefined Data Sources and click Next.
  3. This displays a selection of available monitoring data sources.
  4. From Application Server, select the preconfigured BEA WebLogic option and click Next.
  5. Specify the host and port where BEA WebLogic is running and click Next.
  6. This brings up a dialog that offers browsing for SNMP measures published by BEA WebLogic. This dialog only shows SNMP measures that are relevant for monitoring and ensure the reliability and performance of BEA WebLogic server environments.
親トピック: PDCE Functions Overview


Monitoring IBM WebSphere Application Servers

With Silk Performer the following IBM WebSphere Application Servers can be monitored:

  • IBM WebSphere Application Server Advanced Edition 3.5

  • IBM WebSphere Application Server Advanced Edition 4.0

  • IBM WebSphere Application Server 4.x via Performance Servlet

  • IBM WebSphere Application Server 5.0 via Performance Servlet

Monitoring IBM WebSphere Application Servers 3.5 has been tested under NT, Win2000 and Ret Hat Linux platforms. Monitoring IBM WebSphere Application Servers 4.0 has been tested under NT and Win2000.

親トピック: PDCE Functions Overview

To Monitor IBM WebSphere Application Server 3.5

  1. Start Performance Explorer and click the Monitor Server button in the workflow bar. Select the Select from predefined Data Sources radio button. Do not use the Have Data Sources detected radio button as the Data Source detection module does not detect IBM WebSphere Application Servers.
  2. Select Application Servers/IBM WebSphere Application Server/IBM WebSphere Application Server 3.5 and connect to the host running the Application Server. Performance Explorer connects to a daemon or service named IBM WS AdminServer. This service is runs by default unless the Standard Edition of IBM WebSphere Application Server 3.5 is used.
Once the connection to the server is established (this may take 3 to 5 seconds), the dialog shows the root nodes of the WebSphere Administrative domain. Such a domain administers several hosts where each host may run as many applications as needed. Select performance counters and click the Add button to add them to the monitoring template.

Typical performance measures for WebSphere Application Servers 3.5:

  • Runtime Module: Contains performance counters related to the Java Virtual Machine

  • Thread Pool: Answers questions like how many threads are currently active or how many threads were created, this includes idle and active threads.

  • Bean Data: Specific performance information about deployed EJBs. For example how many beans were created or the response time of method invocations.

  • Transaction Data: Contains everything about transactions like how many transactions are currently in progress or the average time it takes to execute one transaction.

  • Connection Manager:Contains performance counters for JDBC connections.

  • Servlet Engine: Contains performance counters giving an idea how deployed servlets and JSPs perform.

To Monitor IBM WebSphere Application Server 4.0

  1. Start Performance Explorer and click the Monitor Server button on the workflow bar. Select theSelect from predefined Data Sources radio button. Do not use the Have Data Sources detected radio button as the Data Source detection module does not detect IBM WebSphere Application Servers.
  2. Select Application Servers/IBM WebSphere Application Servers/IBM WebSphere Application Server 4.0 and connect to the host where the application server is running. Once the connection to the server is established the dialog shows the root nodes of the WebSphere Administrative domain. Such a domain administers several hosts where each host may be running as many applications as needed. Select performance counters and click the Add button to add them to the monitoring template.
Performance Explorer connects to a daemon or service named IBM AdminService. This service runs by default unless the Standard Edition of IBM WebSphere Application Server 4.0 is used.

To Monitor IBM WebSphere Application Server 4.x via Performance Servlet

  1. Open the WebSphere Administrative Console.
  2. Expand and right-click the Enterprise Applications node.
  3. Select Install Enterprise Application from the context menu.
  4. A dialog displays. Browse to the perfservlet application that is delivered by default with the WebSphere package. The application to be installed is named perfServletApp.ear and is usually located under WebSphere\AppServer\installableApps\perfServletApp.ear. Browse to the package and open it.
  5. Click Next repeatedly until you can select the host. Select default_host and Click Next.
  6. Select the server the perfservlet application is to be installed (for example, Default Server(yourhost)) and click Finish. Now the package is deployed. If everything has been set up correct, a message box will appears, confirming a successful installation.
  7. Right click the installed perfservlet application and select Start from the context menu.
  8. By default monitoring is turned off for WebSphere application servers. You may enable and change the granularity of performance measures to be retrieved from your WebSphere installation. To do this open the IBM Resource Analyzer tool.
  9. Expand the root node and select the server where the perfservlet application is installed. Right-click the node and select Monitoring Settings from the context menu.
  10. You may select from the following granularity options: Maximum, High, Medium, Low, and None.
  11. To double check whether the perfservlet application is returning valid performance information, open an XML compatible Internet browser and verify the following URL: http://yourhost/wasPerfTool/servlet/perfservlet.
  12. Now that your WebSphere installation is configured for monitoring, start Performance Explorer and click the Monitor Server button on the workflow bar. Select the Select from predefined Data Sources radio button. Do not use the Have Data Sources detected radio button as the Data Source detection module does not detect IBM WebSphere Application Servers.
  13. Select Application Servers/IBM WebSphere Application Servers/IBM WebSphere Application Server 4.x (PerfServlet) and connect to the host that is running the application server.

Typical performance measures for WebSphere Application Servers 4.x:

  • BeanModule: Specific data about deployed EJBs. For example how many beans were created.

  • ConnectionPoolModule:This module contains performance counters about JDBC connections like how many JDBC connetions are currently in the pool.

  • JvmRuntimeModule:Java Virtual Machine specific performance counters.

  • ServletSessionModule: This module contains performance counters about servlet sessions. For example how many sessions are active or the average session live time.

  • TransactionModule: This module contains performance counters giving information how many transactions are in progress or the average time it takes to execute one transaction.

  • WebApplicationModule: Provides information about deployed servlets and JSPs. For example the average time it takes the servlet to process requests.

To Monitor IBM WebSphere Application Server 5.0 via Performance Servlet

  1. Open the Administrative Console.
  2. Expand Applications and click Install New Application.
  3. Install the perfservlet application. To do this, click the browse button and search for a file called PerfServletApp.ear. It is usually under WebSphere\AppServer\installableApps\PerfServletApp.ear. Press Next.
  4. The wizard guides you through the installation. Check the Generate Default Binding check box. Type in the virtual host name (for example default_host). Click Next.
  5. The next step is called AppDeployment Options. Accept the settings and click Next.
  6. Map virtual hosts for web modules: Check the WebModule and perfservlet checkboxes. Select the virtual host (or example, default_host) and click Next.
  7. Map modules to application servers: Check the Module and perfservlet checkboxes. Click Next.
  8. Map security roles to users/groups: Allow all roles by checking all check boxes. Click Next.
  9. Summary: Click Finish.
  10. The perfservlet application is now deployed, but it is not yet running. Click the Save to Master configuration link and save your settings.
  11. Expand the Applications node and click Enterprise Applications. From the list, check the perfservlet application and click Start.
  12. Monitoring is disabled by default with WebSphere 5.0. To enable monitoring expand the Servers node and select Application Servers.
  13. Click the server where monitoring has to be enabled (for example, server1). Under Additional Properties click the Performance Monitoring Service link. Check the Startup checkbox so that monitoring will always enabled on startup. Also specify the specification level (the granularity of performance measures to be retrieved).
  14. Click OK and save your settings to the master configuration.
  15. To verify that the perfservlet application was successfully deployed, open an XML-compatible Internet browser and type in the following URL http://yourHost[:port]/wasPerfTool/servlet/perfservlet.
  16. Assuming that everything has been successfully deployed, open Performance Explorer.
  17. Click the Monitor Server button on the workflow bar. Select the Select from predefined Data Sources radio button. Do not use the Have Data Sources detected radio button as the Data Source detection module does not detect IBM WebSphere Application Servers.
  18. Select Application Servers/IBM WebSphere Application Servers/IBM WebSphere Application Server 5.0 (PerfServlet) and connect to the host that is running the application server.

Typical performance measures for WebSphere Application Servers 5.0:

  • BeanModule: Specific data about deployed EJBs. For example how many beans were created.

  • ConnectionPoolModule: This module contains performance counters about JDBC connections like how many JDBC connetions are currently in the pool.

  • JvmRuntimeModule: Java Virtual Machine specific performance counters.

  • ServletSessionModule: This module contains performance counters about servlet sessions. For example how many sessions are active or the average session live time.

  • TransactionModule: This module contains performance counters giving information how many transactions are in progress or the average time it takes to execute one transaction.

WebApplicationModule: Provides information about deployed servlets and JSPs. For example the average time it takes the servlet to process requests


Monitoring Oracle Forms Application Servers

親トピック: PDCE Functions Overview


PdceStartup Function

Action

This function initializes the PDCE and increases the reference counter. An interval manager is created on the first call to PdceStartup(). It should be called in a TInit transaction before all other PDCE function calls.

Include file

Pdce.bdh

Syntax

PdceStartup( ): boolean;

Return value

  • true if successful

  • false otherwise

Example

Const
  STRING_SIZE            := 1024;
  PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";

dcltrans
  transaction TInit
  var
    sMeasureKey        : string;
    sMeasureName       : array[10] of string;
    sDescription       : string;

begin
    // Insert here the initial statements
    PdceStartup();
    PdceClientRegister(pClient, uiPdceInternalQueryInterval);
    sMeasureKey := PERFMON_SAMPLE_MEASURE;
    sMeasureName[1] := "PerfmonMeasure1";
    PdceAddMeasure(pClient, sMeasureName[1], sMeasureKey, pMeasure[1]);

    PdceMeasureQueryInfo(pMeasure[1], sDescription, STRING_SIZE);
    write(sMeasureName[1]);
    write(": ");
    writeln(sDescription);
    writeln;
end TInit;
親トピック: PDCE Functions Overview


PdceCleanup Function

Action

This function decreases the reference counter. If the reference counter reaches 0 it deletes the interval manager. For every PdceStartup() function that gets called in a script there should be a PdceCleanup() function call in the TEnd transaction.

Include file

Pdce.bdh

Syntax

PdceCleanup( ): boolean;

Return value

  • true if successful

  • false otherwise

Example

dcltrans
    transaction TEnd
    begin
      // every measure has to be unsubscribed;
      PdceMeasureUnSubscribe(pMeasure[1]);
      PdceClientUnRegister(pClient);
      PdceCleanup();
  end TEnd;
親トピック: PDCE Functions Overview


PdceGetStartTickCount Function

Action

This function returns the timestamp of the interval manager creation. The interval manager of the PDCE manages all clients and initiates the data collection to the different intervals of any registered client.

Include file

Pdce.bdh

Syntax

PdceGetStartTickCount( out nTick : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nTick | Specifies the timestamp value of the interval manager creation.

Example

const
  STRING_SIZE            := 1024;
  PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";

dcltrans
  transaction TInit
  var
    sMeasureKey       : string;
    sMeasureName      : array[10] of string;
    sDescription      : string;    fPdceInitInterval : float;
    uiTimeStamp       : number;
begin
    PdceStartup();
    PdceClientRegister(pClient, uiPdceInternalQueryInterval);
    sMeasureKey     := PERFMON_SAMPLE_MEASURE;
    sMeasureName[1] := "PerfmonMeasure1";
    PdceAddMeasure(pClient, sMeasureName[1], sMeasureKey, pMeasure[1]);
    wait(fPdceInitInterval);
    // get time stamp
    PdceGetStartTickCount(uiTimeStamp);
    write("Timestamp:");
    write(uiTimeStamp, 10);
    PdceMeasureQueryInfo(pMeasure[1], sDescription,  STRING_SIZE);
    write(sMeasureName[1]);
    write(": ");
    writeln(sDescription);
    writeln;
  end TInit;
親トピック: PDCE Functions Overview


PdceRegisterClient Function

Action

This function registers any client to the data collection engine.

The first parameter returns a handle that is needed for further PDCE functions.

The second parameter returns the interval in seconds, in which the PDCE collects data for the client. The default update interval for collecting the monitor data is 60 seconds, but you can adjust the monitoring interval by opening the Project Attribute Dialog (Project > Project Attributes) and changing the attribute value of the attribute MeasureCollectionInterval. This interval can also be changed any time by the PdceClientInterval() function.

注: Collecting data in a smaller interval than 1 second is not allowed and results in an error.

Include file

Pdce.bdh

Syntax

PdceRegisterClient( inout hClient   : number,
                      out   nInterval : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hClient | Specifies the client's handle.
nInterval | Specifies a number for the determined query interval (in seconds).

Example

benchmark Collect
use "pdce.bdh"

const
  MEASURE_NAME01 := "PE_% Processor Time(0)@LAB35";
  MEASURE_KEY01  := "PERFMON:\\Processor(0)\\% Processor Time@LAB35";

var
  nInterval  : number;
  hClient01  : number;
  hMeasure01 : number;

dcluser
  user
    Collect
  transactions
    NoTRT_TStartup : begin;
    NoTRT_TCollect : 5;
    NoTRT_TEnd     : end;

dcltrans
  transaction NoTRT_TStartup
  begin
   PdceStartUp();
   PdceRegisterClient(hClient01, nInterval);
   PdceAddMeasure(hClient01, MEASURE_NAME01, MEASURE_KEY01, hMeasure01);
   Wait(float(2*nInterval));
 end NoTRT_TStartup;

  transaction NoTRT_TCollect
  begin
   PdceGetMeasureValue(hMeasure01, MEASURE_NAME01);
   if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
     Wait(float(nInterval));
   end;
 end NoTRT_TCollect;

  transaction NoTRT_TEnd  begin
   PdceMeasureUnSubscribe(hMeasure01);
   PdceClientUnRegister(hClient01);
   PdceCleanUp();
 end NoTRT_TEnd;
親トピック: PDCE Functions Overview


PdceClientRegister Function

Action

This function registers any client to the data collection engine. The first parameter returns a handle that is needed for further PDCE functions. The second parameter specifies the interval in milliseconds, in which the PDCE collects data for the client. This interval can be changed any time by the PdceClientInterval() function. Usually, it makes sense to register your clients in the TInit transaction after the PdceStartup(). The last three parameters have to be NULL, as they are used for callback functionality. Note that callbacks are not supported in Silk Performer scripts.

注: If you collect data in a smaller interval than 1000 milliseconds, your result measures may have wrong values.

Include file

Pdce.bdh

Syntax

PdceClientRegister( out hPdce     : number,
                    in  uInterval : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hPdce | Specifies the client's handle.
uInterval | Specifies an unsigned integer for the query interval.

Example

const
  STRING_SIZE            := 1024;
  PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";

dcltrans
  transaction TInit
  var
    sMeasureKey       : string;
    sMeasureName      : array[10] of string;
    sDescription      : string;
    fPdceInitInterval : float;
  begin
    // Insert here the initial statements
    PdceStartup();    PdceClientRegister(pClient, uiPdceInternalQueryInterval);
    sMeasureKey     := PERFMON_SAMPLE_MEASURE;
    sMeasureName[1] := "PerfmonMeasure1";
    PdceAddMeasure(pClient, sMeasureName[1], sMeasureKey, pMeasure[1]);
    wait(fPdceInitInterval);
    PdceMeasureQueryInfo(pMeasure[1], sDescription, STRING_SIZE);
    write(sMeasureName[1]);
    write(": ");
    writeln(sDescription);
    writeln;
  end TInit;
親トピック: PDCE Functions Overview


PdceClientUnRegister Function

Action

This function unregisters a client from the data collection engine. It should be called when no further client data is needed. Usually, this can be done for all clients in the TEnd transaction before the PdceCleanup().

Include file

Pdce.bdh

Syntax

PdceClientUnRegister( in hPdce : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hPdce | Specifies the client's handle, from the PdceClientRegister or PdceRegisterClient function.

Example

dcltrans
  transaction TEnd
  begin
    // every measure has to be unsubscribed;
    PdceMeasureUnSubscribe(pMeasure[1]);
    PdceClientUnRegister(pClient);
    PdceCleanup();
  end TEnd;
親トピック: PDCE Functions Overview


PdceClientInterval Function

Action

This function changes the interval in which the PDCE collects data for a registered client. The interval must be provided in milliseconds.

注: If you collect data in a smaller interval than 1000 milliseconds, your result measures may have incorrect values.

Include file

Pdce.bdh

Syntax

PdceClientInterval( in hPdce     :number,
                    in nInterval : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hPdce | Specifies the client's handle, from the PdceClientRegister or PdceRegisterClient function.
nInterval | Specifies an unsigned integer new for the query interval.

Example

const
  STRING_SIZE            := 1024;
  PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";

dcltrans
  transaction TInit
  var
    sMeasureKey       : string;
    sMeasureName      : array[10] of string;
    sDescription      : string;
    fPdceInitInterval : float;
  begin
    PdceStartup();
    PdceClientRegister(pClient, uiPdceInternalQueryInterval);
    sMeasureKey     := PERFMON_SAMPLE_MEASURE;
    sMeasureName[1] := "PerfmonMeasure1";
    PdceAddMeasure(pClient, sMeasureName[1], sMeasureKey, pMeasure[1]);
    wait(fPdceInitInterval);

    // change interval
    PdceClientInterval(pClient, uiNewPdceInternalQueryInterval);
    PdceMeasureQueryInfo(pMeasure[1], sDescription, STRING_SIZE);

    write(sMeasureName[1]);
    write(": ");
    writeln(sDescription);
    writeln;
end TInit;
親トピック: PDCE Functions Overview


PdceAddMeasure Function

Action

This function adds a new measure to a client. It is a wrapper for PdceMeasureSubscribe that hides unused parameters.

At every interval, the data for the added measure is collected from the client. The interval can be changed any time by the PdceClientInterval() function. The query functions of the PDCE enable you to retrieve the values and statuses of the last collection cycle from the client. After subscribing a measure, you should wait for one interval length before querying data from the measure. This is done to give the PDCE time for initializing the new measure with the first value. The subscription of your measures can also be done in the TInit transaction after you have registered your client.

Include file

Pdce.bdh

Syntax

PdceAddMeasure( in    hClient      : number,
                inout sMeasureName : string,
                inout sMeasureKey  : string,
                inout hMeasure     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hClient | Specifies the client's handle, from the PdceRegisterClient or PdceClientRegister function.
sMeasureName | Specifies the name for the measure.
sMeasureKey | Specifies the string that defines the measure.
hMeasure | Specifies the measure's handle (needed for other measure functions).

Example

benchmark Collect
use "pdce.bdh"

const
  MEASURE_NAME01 := "PE_% Processor Time(0)@LAB35";
  MEASURE_KEY01  := "PERFMON:\\Processor(0)\\% Processor Time@LAB35";

var
  nInterval  : number;
  hClient01  : number;
  hMeasure01 : number;

dcluser
  user
    Collect
  transactions
    NoTRT_TStartup  : begin;
    NoTRT_TCollect  : 5;
    NoTRT_TEnd      : end;

dcltrans
  transaction NoTRT_TStartup
  begin
    PdceStartUp();
    PdceRegisterClient(hClient01, nInterval);
    PdceAddMeasure(hClient01, MEASURE_NAME01, MEASURE_KEY01, hMeasure01);

    Wait(float(2*nInterval));
  end NoTRT_TStartup;

  transaction NoTRT_TCollect
  begin
    PdceGetMeasureValue(hMeasure01, MEASURE_NAME01);

    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure01);
    PdceClientUnRegister(hClient01);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: PDCE Functions Overview


PdceMeasureSubscribe Function

Action

This function adds a new measure to a client. At every interval, the data for the added measure is collected from the client. The interval can be changed any time by the PdceClientInterval() function. The query functions of the PDCE enable you to retrieve the values and statuses of the last collection cycle from the client. After subscribing a measure, you should wait for one interval length before querying data from the measure. This is done to give the PDCE time for initializing the new measure with the first value. The subscription of your measures can also be done in the TInit transaction after you have registered your client.

Include file

Pdce.bdh

Syntax

PdceMeasureSubscribe( in  hPdce        : number,
                      in  NULL         : number,
                      in  sMeasurename : string,
                      in  sKeyId       : string,
                      in  nOption      : number,
                      out hMeasure     : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hPdce | Specifies the client's handle, from the PdceClientRegister or PdceRegisterClient function.
NULL | Unused measure context handle.
sMeasurename | Specifies the name for the measure.
sKeyId | Specifies the string, that defines the measure.
nOption | Specifies an unsigned integer (not used by now = 0).
hMeasure | Specifies the measure's handle (needed for other measure functions).

Example

const
  STRING_SIZE            := 1024;
  PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";

 dcltrans
  transaction TInit
  var
    sMeasureKey        : string;
    sMeasureName       : array[10] of string;
    sDescription       : string;

  begin
    // Insert here the initial statements
    PdceStartup();
    PdceClientRegister(pClient, uiPdceInternalQueryInterval);
    sMeasureKey := PERFMON_SAMPLE_MEASURE;
    sMeasureName[1] := "PerfmonMeasure1";
    PdceMeasureSubscribe(pClient, NULL, sMeasureName[1], sMeasureKey, 0, pMeasure[1]);

    PdceMeasureQueryInfo(pMeasure[1], sDescription, STRING_SIZE);

    write(sMeasureName[1]);
    write(": ");
    writeln(sDescription);
    writeln;
  end TInit;
親トピック: PDCE Functions Overview


PdceMeasureUnSubscribe Function

Action

This function removes a registered measure from a client. The client stops collecting data for the removed measure. This can also be done in the TEnd transaction before un-registering the client.

Include file

Pdce.bdh

Syntax

PdceMeasureUnSubscribe( in hMeasure : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMeasure | Specifies the measure's handle, from the PdceMeasureSubscribe or PdceAddMeasure function.

Example

dcltrans
  transaction TEnd
  begin
    // every measure has to be unsubscribed;
    PdceMeasureUnSubscribe(pMeasure[1]);
    PdceClientUnRegister(pClient);
    PdceCleanup();
  end TEnd;
親トピック: PDCE Functions Overview


PdceMeasureQueryInfo Function

Action

This function returns an information string for a given measure if the measure provides such a string (for example, the description of NT performance counters).

Include file

Pdce.bdh

Syntax

PdceMeasureQueryInfo( in  hMeasure     : number,
                      out sDescription : string,
                      in  uSize        :number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMeasure | Specifies the measure's handle, from the PdceMeasureSubscribe or PdceAddMeasure function.
sDescription | Specifies the buffer to receive the measure's description.
uSize | Specifies an unsigned integer providing the size of the buffer (optional).

Example

Const
    STRING_SIZE            := 1024;
    PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";

dcltrans
    transaction TInit
    var
      sMeasureKey       : string;
      sMeasureName      : array[10] of string;
      sDescription      : string;
      fPdceInitInterval : float;
      uiTimeStamp       : number;
    begin
      // Insert here the initial statements
      PdceStartup();
      PdceClientRegister(pClient, uiPdceInternalQueryInterval);
      sMeasureKey     := PERFMON_SAMPLE_MEASURE;
      sMeasureName[1] := "PerfmonMeasure1";
      PdceAddMeasure(pClient, sMeasureName[1], sMeasureKey, pMeasure[1]);
      wait(fPdceInitInterval);
      PdceMeasureQueryInfo(pMeasure[1], sDescription);
      write(sMeasureName[1]);
      write(": ");
      writeln(sDescription);
      writeln;
    end TInit;
親トピック: PDCE Functions Overview


PdceMeasureQueryStatus Function

Action

This function provides the status for a given measure for the last collection cycle.

Include file

Pdce.bdh

Syntax

PdceMeasureQueryStatus( in  hMeasure   : number,
                        out uErrorCode : number,
                        out sErrorText : string,
                        in  uSize      : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMeasure | Specifies the measure's handle, from the PdceMeasureSubscribe or PdceAddMeasure function.
uErrorCode | Specifies an unsigned integer to receive the error code.
sErrorText | Specifies the buffer to receive the measure's error text.
uSize | Specifies an unsigned integer providing the size of the buffer (optional).

Example

dcltrans
  transaction TPdceMonitor
  var
      sMeasureKey        : string;
      sMeasureName       : array[10] of string;
      sDescription       : string;
      fMeasureLastValue  : float;
      fMeasureSum        : float;
      fMeasureMin        : float;
      fMeasureMax        : float;
      fMeasureAvg        : float;
      fMeasureStDev      : float;
      uiMeasureTimeStamp : number;
      uiMeasureStatus    : number;
      uiErrorCode        : number;
      sErrorText         : string;
  begin
    // get actual status of measure
    PdceMeasureQueryStatus(pMeasure[1], uiErrorCode, sErrorText);
    // get actual values of measure
    PdceMeasureQueryValue(pMeasure[1], fMeasureLastValue, fMeasureSum, fMeasureMin, fMeasureMax,
    fMeasureAvg, fMeasureStDev, uiMeasureTimeStamp, uiMeasureStatus);
    // write to output file
    write(sMeasureName[1]);
    write(": Timestamp:");
    write(uiMeasureTimeStamp,10);
    write(" Value: ");
    write(fMeasureLastValue,8,2);
    write(" Sum: ");
    write(fMeasureSum,10,2);
    write(" Min: ");
    write(fMeasureMin,8,2);
    write(" Max: ");
    write(fMeasureMax,8,2);
    write(" Avg: ");
    write(fMeasureAvg,8,2);
    write(" StDev: ");
    write(fMeasureStDev,8,2);
    write(" Status: ");
    writeln(sErrorText);
  end TPdceMonitor;
親トピック: PDCE Functions Overview


PdceMeasureQueryValue Function

Action

This function provides the actual values for a given measure. If it gets called more than once for one interval of the registered client, it will return always the same values.

Include file

Pdce.bdh

Syntax

PdceMeasureQueryValue( in  hMeasure          : number,
                       out fMeasureLastValue : float,
                       out fMeasureSum       : float,
                       out fMeasureMin       : float,
                       out fMeasureMax       : float,
                       out fMeasureAvg       : float,
                       out fMeasureStDev     : float,
                       out nMeasureTimeStamp : number,
                       out nMeasureStatus    : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMeasure | Specifies the measure's handle, from the PdceMeasureSubscribe or PdceAddMeasure function.
fMeasureLastValue | Specifies a floating point to receive the last queried value.
fMeasureSum | Specifies a floating point to receive the sum of all queried values.
fMeasureMin | Specifies a floating point to receive the minimum of all queried values.
fMeasureMax | Specifies a floating point to receive the maximum of all queried values.
fMeasureAvg | Specifies a floating point to receive the average of all queried values.
fMeasureStDev | Specifies a floating point to receive the standard deviation of all queried values.
uMeasureTimeStamp | Specifies an unsigned integer to receive the timestamp of the last queried value.
uMeasureStatus | Specifies an unsigned integer to receive the status of the last queried value.

Example

const
  STRING_SIZE            := 1024;
  PERFMON_SAMPLE_MEASURE := "PERFMON:\\Processor(_Total)\\% Processor Time@localhost";

 dcltrans
  transaction TPdceMonitor
  var
    sMeasureKey        : string;
    sMeasureName       : array[10] of string;
    sDescription       : string;
    fMeasureLastValue  : float;
    fMeasureSum        : float;
    fMeasureMin        : float;
    fMeasureMax        : float;
    fMeasureAvg        : float;
    fMeasureStDev      : float;
    uiMeasureTimeStamp : number;
    uiMeasureStatus    : number;
    uiErrorCode        : number;
    sErrorText         : string;
  begin
    // get actual status of measure
    PdceMeasureQueryStatus(pMeasure[1], uiErrorCode, sErrorText, STRING_SIZE);
    // get actual values of measure
    PdceMeasureQueryValue(pMeasure[1], fMeasureLastValue, fMeasureSum, fMeasureMin, fMeasureMax,
    fMeasureAvg, fMeasureStDev, uiMeasureTimeStamp, uiMeasureStatus);
    // write to output file
    write(sMeasureName[1]);
    write(": Timestamp:");
    write(uiMeasureTimeStamp,10);
    write(" Value: ");
    write(fMeasureLastValue,8,2);
    write(" Sum: ");
    write(fMeasureSum,10,2);    write(" Min: ");    write(fMeasureMin,8,2);    write(" Max: ");    write(fMeasureMax,8,2);
    write(" Avg: ");    write(fMeasureAvg,8,2);    write(" StDev: ");    write(fMeasureStDev,8,2);    write(" Status: ");    writeln(sErrorText);
  end TPdceMonitor;
親トピック: PDCE Functions Overview


PdceGetMeasureValue Function

Action

This function provides the last queried values for a given measure. The last queried value is stored in a custom counter with the name specified by the second parameter.

Include file

Pdce.bdh

Syntax

PdceGetMeasureValue( in  hMeasure     : number,
                     in  sMeasureName : string,
                     in  nScaleFactor : number optional,
                     out fValue       : float optional ): boolean

Return value

  • true if successful

  • false otherwise

Parameter | Description
hMeasure | Specifies the measure's handle, from the PdceMeasureSubscribe or PdceAddMeasure function.
sMeasureName | Specifies the name for the custom counter where the last queried value is stored in.
nScaleFactor | Optional scale factor by which the retrieved value is divided.
fValue | Optional floating point value which is set to the current value.

Example

benchmark Collect
use "pdce.bdh"

const
    MEASURE_NAME01 := "PE_% Processor Time(0)@LAB35";
    MEASURE_KEY01  := "PERFMON:\\Processor(0)\\% Processor Time@LAB35";

var
    nInterval  : number;
    hClient01  : number;
    hMeasure01 : number;

dcluser
    user
      Collect
    transactions
      NoTRT_TStartup : begin;
      NoTRT_TCollect : 5;
      NoTRT_TEnd     : end;

dcltrans
      transaction NoTRT_TStartup
      begin
    PdceStartUp();
    PdceRegisterClient(hClient01, nInterval);
    PdceAddMeasure(hClient01, MEASURE_NAME01, MEASURE_KEY01, hMeasure01);
    Wait(float(2*nInterval));
end NoTRT_TStartup;

      transaction NoTRT_TCollect
      begin
    PdceGetMeasureValue(hMeasure01, MEASURE_NAME01);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;
end NoTRT_TCollect;

      transaction NoTRT_TEnd
      begin
     PdceMeasureUnSubscribe(hMeasure01);
     PdceClientUnRegister(hClient01);
     PdceCleanUp();
end NoTRT_TEnd;
親トピック: PDCE Functions Overview


Performance Monitor Functions Overview

Windows NT Performance Monitor counters collect and present information about the system performance. The counters are useful for identifying performance problems or bottlenecks that affect the operating system or installed applications.

Silk Performer provides the following functions to retrieve the values of Performance Monitor counters and write these values to report and time series data files: PerfMonAdd, PerfMonGet, and PerfMonClose.

  • PerfMonAdd Function
    Opens a Windows NT performance counter and returns a handle to the counter.
  • PerfMonGet Function
    Retrieves the value of a Windows NT Performance Monitor counter and writes the value to both report and time series data files.
  • PerfMonClose Function
    Closes a handle to a Windows NT Performance Monitor counter.
親トピック: Monitoring Functions


PerfMonAdd Function

Action

Opens a Windows NT performance counter and returns a handle to the counter.

Include file

Kernel.bdh

Syntax

PerfMonAdd( out hPerf     : number,
            in  sComputer : string,
            in  sObject   : string,
            in  sCounter  : string,
            in  sInstance : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hPerf | Variable receiving the handle to the specified Performance Monitor counter.
sComputer | Name of the computer you want to monitor.
sObject | Name of the performance object. An object defines the set of counters that monitor the behavior of a specific hardware or software component, such as a processor or a thread.
sCounter | Counter type. The counter type determines how the counter data is calculated and averaged.
sInstance | Specifies an instance of the Performance Monitor counter to monitor (optional).

Example

var
  hCounter: array [3] of number;

dcltrans
  transaction TInit
  begin
    PerfMonAdd(hCounter[1], "localhost", "System",
               "% Total Processor Time");
    PerfMonAdd(hCounter[2], "localhost", "Processor",
               "% Processor Time", "0");
    PerfMonAdd(hCounter[3], "localhost", "Memory",
               "Committed Bytes");
  end TInit;
親トピック: Performance Monitor Functions Overview


PerfMonGet Function

Action

Retrieves the value of a Windows NT Performance Monitor counter and writes the value to both report and time series data files.

Include file

Kernel.bdh

Syntax

PerfMonGet( in  hPerf     :number,
            in  nScale    : number optional,
            out sName     : string optional,
            in  sNameSize : number optional ): float;

Return value

The current value of the specified Performance Monitor counter.

Parameter | Description
hPerf | Handle to a Performance Monitor counter that was created with PerfMonAdd.
nScale | Scale for the counter (optional). For example, set this parameter to 1024 to retrieve the amount of data in KB instead of in bytes.
sName | String receiving the name of the custom counter that is used for writing the counter to report and time series data files (optional). The name is required to retrieve the counter value with the MeasureGet function as well.
nNameSize | Size of the string that receives the name of the custom counter (optional).

Example

var  hCounter: array [3] of number;

dcltrans
  transaction TInit
  begin
    PerfMonAdd(hCounter[1], "localhost", "System",
               "% Total Processor Time");
    PerfMonAdd(hCounter[2], "localhost", "Processor",
               "% Processor Time", "0");
    PerfMonAdd(hCounter[3], "localhost", "Memory",
               "Committed Bytes");
  end TInit;

  transaction TMain
  var
    i: number;
  begin
    ThinkTime(1.0);
    for i := 1 to 3 do PerfMonGet(hCounter[i]) end;
  end TMain;
親トピック: Performance Monitor Functions Overview


PerfMonClose Function

Action

Closes a handle to a Windows NT Performance Monitor counter.

Include file

Kernel.bdh

Syntax

PerfMonClose( in hPerf : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hPerf | Handle to a Performance Monitor counter that was created with PerfMonAdd.

Example

var
  hCounter: array [3] of number;

dcltrans
  transaction TInit
  begin
    PerfMonAdd(hCounter[1], "localhost", "System",
               "% Total Processor Time");
    PerfMonAdd(hCounter[2], "localhost", "Processor",
               "% Processor Time", "0");
    PerfMonAdd(hCounter[3], "localhost", "Memory",
               "Committed Bytes");
  end TInit;

transaction TShutdown
  var
    i: number;
  begin
    for i := 1 to 3 do PerfMonClose(hCounter[i]) end;
  end TShutdown;
親トピック: Performance Monitor Functions Overview


SNMP Functions

  • SnmpOpenConnection Function
    This function opens a new connection to a target machine with access to SNMP data for the provided MIB.
  • SnmpOpenConnectionEx Function
    This function opens a new connection to a target machine with access to SNMP data for the provided MIB. It supports both SNMPv1/2c and SNMP3.
  • SnmpCreatePdceKey Function
    This function returns a valid PDCE key.
  • SnmpCreatePdceKeyEx Function
    This function returns a valid PDCE key.
  • SnmpCloseConnection Function
    This function closes the connection established by a call of SnmpOpenConnection().
  • SnmpGetNextInstanceOid Function
    Subsequent calls of this function return the next existing instance after a successful SnmpGetFirstInstanceOid() on target machine. If no instance was found the function fails.
  • SnmpGetMibOid Function
    For each SNMP node, this function returns the corresponding OID in dotted notation from the MIB.
  • SnmpGetValue Function
    This function returns for a provided OID the actual value.
  • SnmpGetValueOid Function
    This function uses a provided SNMP node and searches all instances of it until its value matches the desired value.
親トピック: Monitoring Functions


SnmpOpenConnection Function

Action

This function opens a new connection to a target machine with access to SNMP data for the provided MIB. It returns a handle required by all other BDL SNMP extension functions. This function only supports SNMP version 1/2c.

Include file

Snmp.bdh

Syntax

SnmpOpenConnection( in sMachine   : string,
                    in sMib       : string,
                    in sCommunity : string,
                    in sVersion   : string ): number;

Return value

Handle for open connection ( 0 on failure )

Parameter | Description
sMachine | Specifies target machine and port on which the smnp server is listening.
sMib | Specifies the name of the MIB.
sCommunity | Specifies the community of the SNMP data.
sVersion | Specifies the version of the SNMP data.

Example

benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

const
  MEASURE_COMMUNITY   := "public";
  MEASURE_VERSION     := "V1";
  MEASURE_NAME        := "System/Services";
  MEASURE_MACHINE     := "machineName:161";
  MEASURE_MIB         := "RFC1213-MIB";
  MEASURE_OID_NAME    := "system.sysServices";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
    sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey : string;
                          sMachine : string;
                          sMib : string;
                          sCommunity : string;
                          sVersion : string;
                          sOidName : string;
                          nInstance : number optional) : boolean

  var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid           : string(1024);
    hSnmp          : number;        // SNMP connection handle
  begin

    hSnmp := SnmpOpenConnection(sMachine, sMib, sCommunity, sVersion);

    if ( hSnmp <> 0 ) then
      SnmpGetMibOid(hSnmp, sOidName, sMibOid);

      Print("OID for " + sOidName + " : " + sMibOid);

      SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);
      sOid := sMibOid + "." + sInstanceOid;

      Print("OID with first instance: " + sOid);

      if SnmpGetValue(hSnmp, sOid, sValue) then
        Print("Value: " + sValue);
      end;

      sKey :=  "SNMP:" + sOid +"@" + MEASURE_MACHINE + "?" + SNMP_COMMUNITY_PUBLIC + "&" + SNMP_VERSION_1;
      PdceGetSnmpKey := true;

      SnmpCloseConnection( hSnmp )
    end;

    PdceGetSnmpKey := false;
  end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin

      PdceGetSnmpKey( sKey1, MEASURE_Machine, MEASURE_MIB, MEASURE_COMMUNITY, MEASURE_VERSION, MEASURE_OID_NAME);

      PdceStartUp();
      PdceRegisterClient(hClient1, nInterval);
      PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);

      Wait(float(2*nInterval));
    end NoTRT_TStartup;

    transaction NoTRT_TCollect
    var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
  begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

    if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: SNMP Functions


SnmpOpenConnectionEx Function

Action

This function opens a new connection to a target machine with access to SNMP data for the provided MIB. It returns a handle required by all other BDL SNMP extension functions. It supports both SNMPv1/2c and SNMP3.

Include file

Snmp.bdh

Syntax

SnmpOpenConnectionEx( in sMachine         : string,
                      in sMib             : string,
                      in sVersion         : string,
                      in sCommunity       : string optional,
                      in sAuthProtocol    : string optional,
                      in sPrivProtocol    : string optional,
                      in sAuthPassword    : string optional,
                      in sPrivPassword    : string optional,
                      in sSecurityName    : string optional,
                      in sSecurityLevel   : string optional,
                      in sSecurityModel   : string optional,
                      in sContextName     : string optional,
                      in sContextEngineID : string optional ): number;

Return value

Handle for open connection (0 on failure)

Parameter | Description
sMachine | Specifies target machine and port on which the smnp server is listening.
sMib | Specifies the name of the MIB.
sVersion | Specifies the version of the SNMP data.
sCommunity | Specifies the community of the SNMP data.
sAuthProtocol | Specifies the Authentication protocol of the SNMP data. (Version 3)
sPrivProtocol | Specifies the Privacy Protocol of the SNMP data. (Version 3)
sAuthPassword | Specifies the Authentication Password of the SNMP data. (Version 3)
sPrivPassword | Specifies the Privacy Password of the SNMP data. (Version 3)
sSecurityName | Specifies the Security Name of the SNMP data. (Version 3)
sSecurityLevel | Specifies the Security Level of the SNMP data. (Version 3)
sSecurityModel | Specifies the Security Model of the SNMP data. (Version 3)
sContextName | Specifies the Context Name of the SNMP data. (Version 3)
sContextEngineID | Specifies the Context Engine ID of the SNMP data. (Version 3)

Example

benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

var
  measureMachine : string;
  measureMachineServer : string;
  measureMachinePort : string;

const
  MEASURE_VERSION             := "V3";
  MEASURE_NAME                := "System/Services";
  MEASURE_MIB                 := "SNMPv2-MIB";
  MEASURE_OID_NAME            := "system.sysServices";
  MEASURE_PRIVPWD             := "pwd12345678";
  MEASURE_AUTHPWD             := "pwd12345678";
  MEASURE_SECURITY_LEVEL      := "3";
  MEASURE_SECURITY_MODEL      := "3";
  MEASURE_SECURITY_NAME       := "testuser";
  MEASURE_CONTEXT_NAME        := "";
  MEASURE_CONTEXT_ENGINE_ID   := "";
  MEASURE_AUTH_PROTOCOL       := "MD5";
  MEASURE_PRIV_PROTOCOL       := "DES";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey : string;
                          sMachine : string;
                          sMib : string;
                          sAuthProtocol : string;
                          sPrivProtocol : string;
                          sAuthPassword : string;
                          sPrivPassword : string;
                          sSecurityName : string;
                          sSecurityLevel : string;
                          sSecurityModel : string;
                          sContextName : string;
                          sContextEngineID : string;
                          sVersion : string;
                          sOidName : string;
                          nInstance : number optional) : boolean
  var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid,sOid_old  : string(1024);
    hSnmp          : number;        // SNMP connection handle
    sKey_old       : string(1024);
  begin
    hSnmp := SnmpOpenConnectionEx(sMachine, sMib, sVersion, "",
                                sAuthProtocol, sPrivProtocol,
                                sAuthPassword, sPrivPassword,
                                sSecurityName, sSecurityLevel, sSecurityModel,
                                sContextName, sContextEngineID);
    if ( hSnmp <> 0 ) then
      if not SnmpGetMibOid(hSnmp, sOidName, sMibOid) then
        RepMessage("SnmpGetMibOid failed: "+sMibOid,SEVERITY_ERROR);
      end;

      Print("OID for " + sOidName + " : " + sMibOid);
      SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);

      //old version
      Print("InstanceOid: " + sInstanceOid);
      sOid_old := sMibOid + "." + sInstanceOid;
      Print("Old Oid: " + sOid_old);
      sOid := SnmpGetValueOid(hSnmp, MEASURE_OID_NAME, "72", MEASURE_OID_NAME);
      Print("OID with first instance: " + sOid);
      if Stricmp(sOid,sOid_old) <> 0 then
        RepMessage("SnmpGetValueOid failed: "+sOid,SEVERITY_ERROR);
      end;
      if SnmpGetValue(hSnmp, sOid, sValue) then
        Print("Value: " + sValue);
      end;

      sKey := SnmpCreatePdceKeyEx(sOid, measureMachine, sVersion, "",
                                sAuthProtocol, sPrivProtocol,
                                sAuthPassword, sPrivPassword,
                                sSecurityName, sSecurityLevel, sSecurityModel,
                                sContextName, sContextEngineID);
      print(sKey);

//      manually added - no next interface available
      if SnmpGetNextInstanceOid(hSnmp, sInstanceOid) then
        print(sInstanceOid);
      else
        RepMessage("SnmpGetNextInstanceOid didn't find a next instance. "+sInstanceOid,SEVERITY_WARNING);
      end;

      PdceGetSnmpKey := true;
      SnmpCloseConnection( hSnmp )
    end;
    PdceGetSnmpKey := false;
  end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin
    AttributeGetString("SNMPTestServer", measureMachineServer);
    AttributeGetString("SNMPTestServerPort", measureMachinePort);
    measureMachine := measureMachineServer+":"+measureMachinePort;
    print(measureMachine);
    PdceGetSnmpKey( sKey1, measureMachine, MEASURE_MIB, MEASURE_AUTH_PROTOCOL, MEASURE_PRIV_PROTOCOL,
                                MEASURE_AUTHPWD, MEASURE_PRIVPWD,
                                MEASURE_SECURITY_NAME, MEASURE_SECURITY_LEVEL, MEASURE_SECURITY_MODEL,
                                MEASURE_CONTEXT_NAME, MEASURE_CONTEXT_ENGINE_ID, MEASURE_VERSION, MEASURE_OID_NAME);
    PdceStartUp();
    PdceRegisterClient(hClient1, nInterval);
    PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);
    Wait(float(2*nInterval));
  end NoTRT_TStartup;

  transaction NoTRT_TCollect
  var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
  begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

    if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: SNMP Functions


SnmpCreatePdceKey Function

Action

This function returns a valid PDCE key. The provided OID (snmp node in dotted notation), the target machine, the required community and the snmp protocol version are used to generate a key string, that can directly be used in the PdceAddMeasure() or PdceMeasureSubscribe() functions. For this function, sCommunity and sVersion have to be encoded in Base64.

Include file

Snmp.bdh

Syntax

SnmpCreatePdceKey( in sOid       : string,
                   in sMachine   : string,
                   in sCommunity : string,
                   in sVersion   : string ) : string;

Return value

A valid key string generated from provided data which can be used in further PDCE function calls.

Parameter | Description
sOid | Specifies SNMP OID in dotted notation.
sMachine | Specifies target machine and port on which the smnp server is listening.
sCommunity | Specifies the community of the SNMP data.
sVersion | Specifies the version of the SNMP data.

Example

benchmark Collect

 use "pdce.bdh"
 use "snmp.bdh"

const
  MEASURE_COMMUNITY   := "public";
  MEASURE_VERSION     := "V1";
  MEASURE_NAME        := "System/Services";
  MEASURE_MACHINE     := "machineName:161";
  MEASURE_MIB         := "RFC1213-MIB";
  MEASURE_OID_NAME    := "system.sysServices";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey       : string;
                          sMachine   : string;
                          sMib       : string;
                          sCommunity : string;
                          sVersion   : string;
                          sOidName   : string;
                          nInstance  : number optional) : boolean

var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid           : string(1024);
    hSnmp          : number;        // SNMP connection handle
begin

    hSnmp := SnmpOpenConnection(sMachine, sMib, sCommunity, sVersion);

    if ( hSnmp <> 0 ) then
                  SnmpGetMibOid(hSnmp, sOidName, sMibOid);

                  Print("OID for " + sOidName + " : " + sMibOid);

                  SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);
                  while SnmpGetNextInstanceOid(hSnmp, sInstanceOid) do
                     sOid := sMibOid + "." + sInstanceOid;
                  end;

                  Print("OID with first instance: " + sOid);

                  if SnmpGetValue(hSnmp, sOid, sValue) then
                    Print("Value: " + sValue);
                  end;

                  sKey := SnmpCreatePdceKey(sOid, MEASURE_MACHINE, SNMP_COMMUNITY_PUBLIC, SNMP_VERSION_1);
                  PdceGetSnmpKey := true;

                  SnmpCloseConnection( hSnmp )
           end;

             PdceGetSnmpKey := false;

end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin
       PdceGetSnmpKey( sKey1, MEASURE_Machine, MEASURE_MIB, MEASURE_COMMUNITY, MEASURE_VERSION, MEASURE_OID_NAME);
       PdceStartUp();
       PdceRegisterClient(hClient1, nInterval);
       PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);

      Wait(float(2*nInterval));
  end NoTRT_TStartup;

 transaction NoTRT_TCollect
  var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
 begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
 end;

  if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
  end;
end NoTRT_TCollect;

transaction NoTRT_TEnd
begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
end NoTRT_TEnd;

親トピック: SNMP Functions


SnmpCreatePdceKeyEx Function

Action

This function returns a valid PDCE key. The provided OID (snmp node in dotted notation), the target machine, the snmp protocol version, and the required community (if version 1/2c) or the authentication details in terms of authentication protocol, privacy protocol, authentication password, privacy password, the security name, the securtiy level, teh security model, the context name, the context engine ID (if version 3) are used to generate a key s tring, that can directly be used in the PdceAddMeasure() or PdceMeasureSubscribe() functions. This function requires raw strings, not Base64-encoded strings.

Include file

Snmp.bdh

Syntax

SnmpCreatePdceKeyEx( in sOid             : string,
                     in sMachine         : string,
                     in sVersion         : string,
                     in sCommunity       : string,
                     in sAuthProtocol    : string,
                     in sPrivProtocol    : string,
                     in sAuthPassword    : string,
                     in sPrivPassword    : string,
                     in sSecurityName    : string,
                     in sSecurityLevel   : string,
                     in sSecurityModel   : string,
                     in sContextName     : string,
                     in sContextEngineID : string ) : string;

Return value

A valid key string generated from provided data which can be used in further PDCE function calls.

Parameter | Description
sOid | Specifies SNMP OID in dotted notation.
sMachine | Specifies target machine and port on which the smnp server is listening.
sVersion | Specifies the version of the SNMP data.
sCommunity | Specifies the community of the SNMP data. (version 1/2c)
sAuthProtocol | Specifies the authentication protocol of the SNMP data. (version 3)
sPrivProtocol | Specifies the privacy protocol of the SNMP data. (version 3)
sAuthPassword | Specifies the authentication protocol of the SNMP data. (version 3)
sPrivPassword | Specifies the privacy password of the SNMP data. (version 3)
sSecurityName | Specifies the security name of the SNMP data. (version 3)
sSecurityLevel | Specifies the securtiy level of the SNMP data. (version 3)
sSecurityModel | Specifies the security model of the SNMP data. (version 3)
sContextName | Specifies the context name of the SNMP data. (version 3)
sContextEngineID | Specifies the context engine ID of the SNMP data. (verison 3)

Example

benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

var
  measureMachine : string;
  measureMachineServer : string;
  measureMachinePort : string;

const
  MEASURE_VERSION             := "V3";
  MEASURE_NAME                := "System/Services";
  MEASURE_MIB                 := "SNMPv2-MIB";
  MEASURE_OID_NAME            := "system.sysServices";
  MEASURE_PRIVPWD             := "pwd12345678";
  MEASURE_AUTHPWD             := "pwd12345678";
  MEASURE_SECURITY_LEVEL      := "3";
  MEASURE_SECURITY_MODEL      := "3";
  MEASURE_SECURITY_NAME       := "testuser";
  MEASURE_CONTEXT_NAME        := "";
  MEASURE_CONTEXT_ENGINE_ID   := "";
  MEASURE_AUTH_PROTOCOL       := "MD5";
  MEASURE_PRIV_PROTOCOL       := "DES";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey : string;
                          sMachine : string;
                          sMib : string;
                          sAuthProtocol : string;
                          sPrivProtocol : string;
                          sAuthPassword : string;
                          sPrivPassword : string;
                          sSecurityName : string;
                          sSecurityLevel : string;
                          sSecurityModel : string;
                          sContextName : string;
                          sContextEngineID : string;
                          sVersion : string;
                          sOidName : string;
                          nInstance : number optional) : boolean
  var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid,sOid_old  : string(1024);
    hSnmp          : number;        // SNMP connection handle
    sKey_old       : string(1024);
  begin
    hSnmp := SnmpOpenConnectionEx(sMachine, sMib, sVersion, "",
                                sAuthProtocol, sPrivProtocol,
                                sAuthPassword, sPrivPassword,
                                sSecurityName, sSecurityLevel, sSecurityModel,
                                sContextName, sContextEngineID);
    if ( hSnmp <> 0 ) then
      if not SnmpGetMibOid(hSnmp, sOidName, sMibOid) then
        RepMessage("SnmpGetMibOid failed: "+sMibOid,SEVERITY_ERROR);
      end;

      Print("OID for " + sOidName + " : " + sMibOid);
      SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);

      //old version
      Print("InstanceOid: " + sInstanceOid);
      sOid_old := sMibOid + "." + sInstanceOid;
      Print("Old Oid: " + sOid_old);
      sOid := SnmpGetValueOid(hSnmp, MEASURE_OID_NAME, "72", MEASURE_OID_NAME);
      Print("OID with first instance: " + sOid);
      if Stricmp(sOid,sOid_old) <> 0 then
        RepMessage("SnmpGetValueOid failed: "+sOid,SEVERITY_ERROR);
      end;
      if SnmpGetValue(hSnmp, sOid, sValue) then
        Print("Value: " + sValue);
      end;

      sKey := SnmpCreatePdceKeyEx(sOid, measureMachine, sVersion, "",
                                sAuthProtocol, sPrivProtocol,
                                sAuthPassword, sPrivPassword,
                                sSecurityName, sSecurityLevel, sSecurityModel,
                                sContextName, sContextEngineID);
      print(sKey);

//      manually added - no next interface available
      if SnmpGetNextInstanceOid(hSnmp, sInstanceOid) then
        print(sInstanceOid);
      else
        RepMessage("SnmpGetNextInstanceOid didn't find a next instance. "+sInstanceOid,SEVERITY_WARNING);
      end;

      PdceGetSnmpKey := true;
      SnmpCloseConnection( hSnmp )
    end;
    PdceGetSnmpKey := false;
  end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin
    AttributeGetString("SNMPTestServer", measureMachineServer);
    AttributeGetString("SNMPTestServerPort", measureMachinePort);
    measureMachine := measureMachineServer+":"+measureMachinePort;
    print(measureMachine);
    PdceGetSnmpKey( sKey1, measureMachine, MEASURE_MIB, MEASURE_AUTH_PROTOCOL, MEASURE_PRIV_PROTOCOL,
                                MEASURE_AUTHPWD, MEASURE_PRIVPWD,
                                MEASURE_SECURITY_NAME, MEASURE_SECURITY_LEVEL, MEASURE_SECURITY_MODEL,
                                MEASURE_CONTEXT_NAME, MEASURE_CONTEXT_ENGINE_ID, MEASURE_VERSION, MEASURE_OID_NAME);
    PdceStartUp();
    PdceRegisterClient(hClient1, nInterval);
    PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);
    Wait(float(2*nInterval));
  end NoTRT_TStartup;

  transaction NoTRT_TCollect
  var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
  begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

    if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
  end NoTRT_TEnd;

親トピック: SNMP Functions


SnmpCloseConnection Function

Action

This function closes the connection established by a call of SnmpOpenConnection().

Include file

Snmp.bdh

Syntax

SnmpCloseConnection( in hSnmp : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSnmp | Handle from SnmpOpenConnection().

Example

benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

const
  MEASURE_COMMUNITY   := "public";
  MEASURE_VERSION     := "V1";
  MEASURE_NAME        := "System/Services";
  MEASURE_MACHINE     := "machineName:161";
  MEASURE_MIB         := "RFC1213-MIB";
  MEASURE_OID_NAME    := "system.sysServices";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey : string;
                          sMachine : string;
                          sMib : string;
                          sCommunity : string;
                            sVersion : string;
                          sOidName : string;
                          nInstance : number optional) : boolean

var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid           : string(1024);
    hSnmp          : number;        // SNMP connection handle
begin

            hSnmp := SnmpOpenConnection(sMachine, sMib, sCommunity, sVersion);

            if ( hSnmp <> 0 ) then
                  SnmpGetMibOid(hSnmp, sOidName, sMibOid);

                  Print("OID for " + sOidName + " : " + sMibOid);

                  SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);
                  sOid := sMibOid + "." + sInstanceOid;

                  Print("OID with first instance: " + sOid);

                  if SnmpGetValue(hSnmp, sOid, sValue) then
                    Print("Value: " + sValue);
                  end;

               sKey :=  "SNMP:" + sOid +"@" + MEASURE_MACHINE + "?" + SNMP_COMMUNITY_PUBLIC + "&" + SNMP_VERSION_1;
               PdceGetSnmpKey := true;

               SnmpCloseConnection( hSnmp )
            end;

              PdceGetSnmpKey := false;
            end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin

           PdceGetSnmpKey( sKey1, MEASURE_Machine, MEASURE_MIB, MEASURE_COMMUNITY, MEASURE_VERSION, MEASURE_OID_NAME);

           PdceStartUp();
           PdceRegisterClient(hClient1, nInterval);
           PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);

           Wait(float(2*nInterval));
  end NoTRT_TStartup;

  transaction NoTRT_TCollect
      var    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
  begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

     if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
       Print("Query value: " + String(fLastValue) );
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: SNMP Functions


SnmpGetNextInstanceOid Function

Action

Subsequent calls of this function return the next existing instance after a successful SnmpGetFirstInstanceOid() on target machine. If no instance was found the function fails.

Include file

Snmp.bdh

Syntax

SnmpGetNextInstanceOid( in  hSnmp        : number,
                        out sInstanceOid : string,
                        in  nInstOidSize : number optional ): boolean;

Return value

  • true if successful and instance was found

  • false otherwise

Parameter | Description
hSnmp | Handle from SnmpOpenConnection().
sInstanceOid | Returns the next instance.
nInstOidSize | Size of the buffer sInstanceOid (optional).

Example

  benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

const
  MEASURE_COMMUNITY   := "public";
  MEASURE_VERSION     := "V1";
  MEASURE_NAME        := "System/Services";
  MEASURE_MACHINE     := "machineName:161";
  MEASURE_MIB         := "RFC1213-MIB";
  MEASURE_OID_NAME    := "system.sysServices";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey : string;
                          sMachine : string;
                          sMib : string;
                          sCommunity : string;
                          sVersion : string;
                          sOidName : string;
                          nInstance : number optional) : boolean

var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid           : string(1024);
    hSnmp          : number;        // SNMP connection handle
begin

    hSnmp := SnmpOpenConnection(sMachine, sMib, sCommunity, sVersion);

    if ( hSnmp <> 0 ) then
      SnmpGetMibOid(hSnmp, sOidName, sMibOid);

      Print("OID for " + sOidName + " : " + sMibOid);

      SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);
      while SnmpGetNextInstanceOid(hSnmp, sInstanceOid) do
      sOid := sMibOid + "." + sInstanceOid;
      end;

      Print("OID with first instance: " + sOid);

      if SnmpGetValue(hSnmp, sOid, sValue) then
        Print("Value: " + sValue);
      end;

      sKey :=  "SNMP:" + sOid +"@" + MEASURE_MACHINE + "?" + SNMP_COMMUNITY_PUBLIC + "&" + SNMP_VERSION_1;
      PdceGetSnmpKey := true;

      SnmpCloseConnection( hSnmp )
    end;

    PdceGetSnmpKey := false;
  end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin

    PdceGetSnmpKey( sKey1, MEASURE_Machine, MEASURE_MIB, MEASURE_COMMUNITY, MEASURE_VERSION, MEASURE_OID_NAME);

    PdceStartUp();
    PdceRegisterClient(hClient1, nInterval);
    PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);

    Wait(float(2*nInterval));
  end NoTRT_TStartup;

   transaction NoTRT_TCollect
   var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
  begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

    if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: SNMP Functions


SnmpGetMibOid Function

Action

For each SNMP node, this function returns the corresponding OID in dotted notation from the MIB.

Include file

Snmp.bdh

Syntax

SnmpGetMibOid( in  hSnmp       : number,
               in  sOidName    : string,
               out sMibOid     : string,
               in  nMibOidSize : number optional ): boolean;

  • true if successful

  • false otherwise

Parameter | Description
hSnmp | Handle from SnmpOpenConnection().
sOidName | Name of the SNMP node in dotted notation.
sMibOid | Returns the OID in dotted notation.
nMibOidSize | Size of the buffer sMibOid (optional).

Example

benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

const
  MEASURE_COMMUNITY   := "public";
  MEASURE_VERSION     := "V1";
  MEASURE_NAME        := "System/Services";
  MEASURE_MACHINE     := "machineName:161";
  MEASURE_MIB         := "RFC1213-MIB";
  MEASURE_OID_NAME    := "system.sysServices";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey       : string;
                          sMachine   : string;
                          sMib       : string;
                          sCommunity : string;
                          sVersion   : string;
                          sOidName   : string;
                          nInstance  : number optional) : boolean

var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid           : string(1024);
    hSnmp          : number;        // SNMP connection handle
begin

    hSnmp := SnmpOpenConnection(sMachine, sMib, sCommunity, sVersion);

    if ( hSnmp <> 0 ) then
      SnmpGetMibOid(hSnmp, sOidName, sMibOid);

      Print("OID for " + sOidName + " : " + sMibOid);

      SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);
      sOid := sMibOid + "." + sInstanceOid;

      Print("OID with first instance: " + sOid);

      if SnmpGetValue(hSnmp, sOid, sValue) then
        Print("Value: " + sValue);
      end;

      sKey :=  "SNMP:" + sOid +"@" + MEASURE_MACHINE + "?" + SNMP_COMMUNITY_PUBLIC + "&" + SNMP_VERSION_1;
      PdceGetSnmpKey := true;

      SnmpCloseConnection( hSnmp )
    end;

    PdceGetSnmpKey := false;

  end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin

    PdceGetSnmpKey( sKey1, MEASURE_Machine, MEASURE_MIB, MEASURE_COMMUNITY, MEASURE_VERSION, MEASURE_OID_NAME);
    PdceStartUp();
    PdceRegisterClient(hClient1, nInterval);
    PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);

    Wait(float(2*nInterval));
  end NoTRT_TStartup;

  transaction NoTRT_TCollect
  var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
  begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

    if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: SNMP Functions


SnmpGetValue Function

Action

This function returns for a provided OID the actual value.

Include file

Snmp.bdh

Syntax

SnmpGetValue( in  hSnmp      : number,
              in  sOid       : string,
              out sValue     : string,
              in  nValueSize : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hSnmp | Handle from SnmpOpenConnection().
sOid | OID in dotted notation.
sValue | Returns actual value.
nValueSize | Size of the buffer sValue (optional).

Example

  benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

const
  MEASURE_COMMUNITY   := "public";
  MEASURE_VERSION     := "V1";
  MEASURE_NAME        := "System/Services";
  MEASURE_MACHINE     := "machineName:161";
  MEASURE_MIB         := "RFC1213-MIB";
  MEASURE_OID_NAME    := "system.sysServices";

var
  nInterval         : number;
  hClient1          : number;
  hMeasure1         : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey       : string;
                          sMachine   : string;
                          sMib       : string;
                          sCommunity : string;
                          sVersion   : string;
                          sOidName   : string;
                          nInstance  : number optional) : boolean

  var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid           : string(1024);
    hSnmp          : number;         // SNMP connection handle
  begin

    hSnmp := SnmpOpenConnection(sMachine, sMib, sCommunity, sVersion);

    if ( hSnmp <> 0 ) then
      SnmpGetMibOid(hSnmp, sOidName, sMibOid);

      Print("OID for " + sOidName + " : " + sMibOid);

      SnmpGetFirstInstanceOid(hSnmp, sMibOid, sInstanceOid);
      while SnmpGetNextInstanceOid(hSnmp, sInstanceOid) do
        sOid := sMibOid + "." + sInstanceOid;
      end;

      Print("OID with first instance: " + sOid);

      if SnmpGetValue(hSnmp, sOid, sValue) then
        Print("Value: " + sValue);
      end;

      sKey :=  "SNMP:" + sOid +"@" + MEASURE_MACHINE + "?" + SNMP_COMMUNITY_PUBLIC + "&" + SNMP_VERSION_1;
      PdceGetSnmpKey := true;

      SnmpCloseConnection( hSnmp )
    end;

    PdceGetSnmpKey := false;

  end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin

      PdceGetSnmpKey( sKey1, MEASURE_Machine, MEASURE_MIB, MEASURE_COMMUNITY, MEASURE_VERSION, MEASURE_OID_NAME);

      PdceStartUp();
      PdceRegisterClient(hClient1, nInterval);
      PdceAddMeasure(hClient1, MEASURE_NAME, sKey1, hMeasure1);

      Wait(float(2*nInterval));
  end NoTRT_TStartup;

transaction NoTRT_TCollect
var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus  : number;
  begin
    PdceGetMeasureValue(hMeasure1, MEASURE_NAME);
    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

    if PdceMeasureQueryValue(hMeasure1, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
    end;
  end NoTRT_TCollect;

  transaction NoTRT_TEnd
  begin
    PdceMeasureUnSubscribe(hMeasure1);
    PdceClientUnRegister(hClient1);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: SNMP Functions


SnmpGetValueOid Function

Action

This function uses a provided SNMP node and searches all instances of it until its value matches the desired value. Then this instance is used for the second SNMP node query and the valid OID (in dotted notation) for this node is returned. If some error occurs or no match is found an empty string is returned.

Include file

Snmp.bdh

Syntax

SnmpGetValueOid( in hSnmp          : number,
                 in sKeyOidName    : string,
                 in sKeyMatchValue : string,
                 in sParamName     : string ): string;

Return value

SNMP OID including instance for provided SNMP node in sValueOidName. Values for all instances for sKeyOidName are compared with provided sKeyMatchValue, and if a match is found, that instance is added to the OID of sValueOidName and returned. Otherwise an empty string is returned.

Parameter | Description
hSnmp | Handle from SnmpOpenConnection().
sKeyOidName | Name of SNMP node in dotted notation.
sKeyMatchValue | String that is used for comparison with values for instances of sKeyOidNames.
sParamName | Name of SNMP node in dotted notation.

Example

benchmark Collect

use "pdce.bdh"
use "snmp.bdh"

const
  MEASURE_MACHINE   := "machinename:161";    // machine + port
  MEASURE_COMMUNITY := "public";
  MEASURE_VERSION   := "V1";
  MEASURE_MIB       := "BEA-WEBLOGIC-MIB";
  MEASURE_OID_NAME1 := "bea.wls.webServerTable.webServerEntry.webServerLogFileFlushSecs";
  MEASURE_NAME01    := "webServer/LogFileFlushSeconds";
  MEASURE_OID_NAME2 := "bea.wls.webServerTable.webServerEntry.webServerName";
  MEASURE_OID_VALUE2:= "PIA";

var
  nInterval         : number;
  hClient01         : number;
  hMeasure01        : number;
  sKey1             : string(1024);

dcluser
user
  Collect
transactions
  NoTRT_TStartup : begin;
  NoTRT_TCollect : 5;
  NoTRT_TEnd     : end;

dclfunc
  function PdceGetSnmpKey(sKey       : string;
                          sMachine   : string;
                          sMib       : string;
                          sCommunity : string;
                          sVersion   : string;
                          sOidName   : string;
                          nInstance  : number optional) : boolean

  var
    sMibOid        : string(1024);
    sInstanceOid   : string(1024);
    sValue         : string(1024);
    sOid           : string(1024);
    bFoundInstance : boolean;
    hSnmp          : number;

   begin
    hSnmp := SnmpOpenConnection(sMachine, sMib, sCommunity, sVersion);

    if ( hSnmp <> 0 ) then
      SnmpGetMibOid(hSnmp, sOidName, sMibOid, sizeof(sMibOid));

      sOid := SnmpGetValueOid(hSnmp, MEASURE_OID_NAME2, MEASURE_OID_VALUE2, MEASURE_OID_NAME1);

      if SnmpGetValue(hSnmp, sOid, sValue, sizeof(sValue)) then
        Print("Test Value : " + sValue);
      end;

       sKey := SnmpCreatePdceKey(sOid, sMachine, sCommunity, sVersion);

       PdceGetSnmpKey := true;
       SnmpCloseConnection( hSnmp );

     end;

     PdceGetSnmpKey := false;

   end PdceGetSnmpKey;

dcltrans
  transaction NoTRT_TStartup
  begin
    PdceGetSnmpKey( sKey1, MEASURE_Machine, MEASURE_MIB, MEASURE_COMMUNITY, MEASURE_VERSION, MEASURE_OID_NAME1);

     PdceStartUp();
     PdceRegisterClient(hClient01, nInterval);
     PdceAddMeasure(hClient01, MEASURE_NAME01, sKey1, hMeasure01);

     Wait(float(2*nInterval));
  end NoTRT_TStartup;

   transaction NoTRT_TCollect
  var
    fLastValue, fSum, fMin, fMax, fAvg, fStDev : float;
    uTimeStamp, uStatus                        : number;
  begin
    PdceGetMeasureValue(hMeasure01, MEASURE_NAME01);

    if (GetWorkloadModel() <> WORKLOAD_MONITORING) then
      Wait(float(nInterval));
    end;

     if PdceMeasureQueryValue(hMeasure01, fLastValue, fSum, fMin, fMax, fAvg, fStDev, uTimeStamp, uStatus) then
      Print("Query value: " + String(fLastValue) );
    end;

   end NoTRT_TCollect;

   transaction NoTRT_TEnd
   begin
    PdceMeasureUnSubscribe(hMeasure01);
    PdceClientUnRegister(hClient01);
    PdceCleanUp();
  end NoTRT_TEnd;
親トピック: SNMP Functions


.NET Framework Functions

Silk Performer provides the following functions for interaction with .NET objects:

  • DotNetLoadObject Function
    Loads a .NET Assembly and creates an instance of a .NET type.
  • DotNetFreeObject Function
    Releases the object handle, so that the garbage collector will free the object.
  • DotNetSetObject Function
    Sets an object as parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetGetObject Function
    Gets the handle to the object returned by the last DotNetCallMethod call.
  • DotNetSetBool Function
    Sets a boolean parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetGetBool Function
    Gets the boolean return value of the last DotNetCallMethod call in bReturn.
  • DotNetSetInt Function
    Sets an integer parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetGetInt Function
    Gets the integer return value of the last DotNetCallMethod call in nReturn.
  • DotNetSetFloat Function
    Sets a float parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetGetFloat Function
    Gets the float return value of the last DotNetCallMethod call in fReturn.
  • DotNetSetString Function
    Sets a string parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetGetString Function
    Gets the string return value of the last DotNetCallMethod call in sReturn.
  • DotNetUnitTestCallMethod Function
    Calls a test method on a valid unit test object.
  • DotNetUnitTestFreeObject Function
    Releases the object handle, so that the garbage collector will free the object.
  • DotNetUnitTestLoadObject Function
    Loads a .NET Assembly and creates an instance of a .NET type.
  • DotNetCallMethod Function
    Calls a public method on the .NET object or a static method of a .NET type.
親トピック: Benchmark Description Language (BDL) Reference


DotNetLoadObject Function

Action

Loads a .NET Assembly and creates an instance of a .NET type. A handle to this created object will be returned. When creating the object, the default constructor will be called. If you want to call a constructor that takes parameters you have to set these parameters with the DotNetSetXX functions prior to the call to DotNetLoadObject.

Include file

DotNetAPI.bdh

Syntax

DotNetLoadObject( in sAssemblyFile : string,
                  in sTypeName     : string,
                  in sTimer        : string optional ): number;

Return value

  • object handle if successful

  • 0 otherwise

Parameter | Description
sAssemblyFile | Path to the assembly file that contains the specified type. The path can be either absolute or relative. If the path is relative, it is either relative to the project or the data directory.
sTypeName | Full qualified type name (Namespace + TypeName) of the type that should be instantiated.
sTimer | (optional) If defined – a custom timer will be generated to measure the creation time of the object.

Example

dcltrans
  transaction TMain
  var
    hObject : number;
begin
  hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
  DotNetCallMethod(hObject,"TestMethod");
  DotNetFreeObject(hObject);
end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetCallMethod Function
DotNetFreeObject Function


DotNetFreeObject Function

Action

Releases the object handle, so that the garbage collector will free the object.

Include file

DotNetAPI.bdh

Syntax

DotNetFreeObject( in hObject : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object that will be released

Example

dcltrans
  transaction TMain
  var
    hObject : number;
begin
  hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
  DotNetCallMethod(hObject,"TestMethod");
  DotNetFreeObject(hObject);
end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetCallMethod Function
DotNetLoadObject Function


DotNetSetObject Function

Action

Sets an object as parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array. The parameters will be passed in the order they have been set to the internal array. After calling DotNetCallMethod or DotNetLoadObject the internal parameter array will be cleared.

Include file

DotNetAPI.bdh

Syntax

DotNetSetObject( in hObject : number,
                 in hParam  : number );
Parameter | Description
hObject | Handle to a .NET Object to set the parameter for the next DotNetCallMethod call or DOTNET_CONSTRUCTOR to set the parameter for the next DotNetLoadObject call.
hParam | .NET Object handle that should be passed as parameter to the next DotNetCallMethod on the passed .NET Object

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    sReturnValue      : string;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetString(hObject, sReturnValue);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetGetObject Function


DotNetGetObject Function

Action

Gets the handle to the object returned by the last DotNetCallMethod call. The returned object handle has to be freed with DotNetFreeObject.

Include file

DotNetAPI.bdh

Syntax

DotNetGetObject( in hObject  : number,
                 in nParamIx : number optional ): number;

Return value

  • object handle if successful

  • 0 otherwise

Parameter | Description
hObject | Handle to a .NET Object
nParamIx | Optional: If specified, gets the parameter index, else gets the last return value.

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    hReturn           : number;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");

    hReturn := DotNetGetObject(hObject);

    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
    DotNetFreeObject(hReturn);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetSetObject Function


DotNetSetBool Function

Action

Sets a boolean parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array. The parameters will be passed in the order they have been set to the internal array. After calling DotNetCallMethod or DotNetLoadObject the internal parameter array will be cleared.

Include file

DotNetAPI.bdh

Syntax

DotNetSetBool( in hObject : number,
               in bParam  : boolean );
Parameter | Description
hObject | Handle to a .NET Object to set the parameter for the next DotNetCallMethod call or DOTNET_CONSTRUCTOR to set the parameter for the next DotNetLoadObject call.
bParam | Boolean value that should be passed as parameter to the next DotNetCallMethod on the passed .NET Object

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    sReturnValue      : string;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetString(hObject, sReturnValue);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetGetBool Function


DotNetGetBool Function

Action

Gets the boolean return value of the last DotNetCallMethod call in bReturn.

Include file

DotNetAPI.bdh

Syntax

DotNetGetBool( in    hObject : number,
               inout bReturn : boolean ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object
bReturn | Boolean variable that will receive the return value of the last DotNetCallMethod call

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    bReturn           : boolean;
  begin
    DotNetSetString(hObject, "ConstrValue1");
    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetBool(hObject, bReturn);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetSetBool Function


DotNetSetInt Function

Action

Sets an integer parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array. The parameters will be passed in the order they have been set to the internal array. After calling DotNetCallMethod or DotNetLoadObject the internal parameter array will be cleared.

Include file

DotNetAPI.bdh

Syntax

DotNetSetInt( in hObject : number,
              in nParam  : number );
Parameter | Description
hObject | Handle to a .NET Object to set the parameter for the next DotNetCallMethod call or DOTNET_CONSTRUCTOR to set the parameter for the next DotNetLoadObject call.
nParam | Integer value that should be passed as parameter to the next DotNetCallMethod on the passed .NET Object

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    sReturnValue      : string;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetString(hObject, sReturnValue);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetGetInt Function


DotNetGetInt Function

Action

Gets the integer return value of the last DotNetCallMethod call in nReturn.

Include file

DotNetAPI.bdh

Syntax

DotNetGetInt( in    hObject : number,
              inout nReturn : number ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object
nReturn | Integer variable that will receive the return value of the last DotNetCallMethod call

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    nReturn           : number;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetInt(hObject, nReturn);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetSetInt Function


DotNetSetFloat Function

Action

Sets a float parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array. The parameters will be passed in the order they have been set to the internal array. After calling DotNetCallMethod or DotNetLoadObject the internal parameter array will be cleared.

Include file

DotNetAPI.bdh

Syntax

DotNetSetFloat( in hObject : number,
                in fParam  : float );
Parameter | Description
hObject | Handle to a .NET Object to set the parameter for the next DotNetCallMethod call or DOTNET_CONSTRUCTOR to set the parameter for the next DotNetLoadObject call.
fParam | Float value that should be passed as parameter to the next DotNetCallMethod on the passed .NET Object

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    sReturnValue      : string;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetString(hObject, sReturnValue);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetGetFloat Function


DotNetGetFloat Function

Action

Gets the float return value of the last DotNetCallMethod call in fReturn.

Include file

DotNetAPI.bdh

Syntax

DotNetGetFloat( in    hObject : number,
                inout fReturn : float ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object
fReturn | Float variable that will receive the return value of the last DotNetCallMethod call

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    fReturn : float;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetFloat(hObject, fReturn);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetSetFloat Function


DotNetSetString Function

Action

Sets a string parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array. The parameters will be passed in the order they have been set to the internal array. After calling DotNetCallMethod or DotNetLoadObject the internal parameter array will be cleared.

Include file

DotNetAPI.bdh

Syntax

DotNetSetString( in hObject : number,
                 in sParam  : string );
Parameter | Description
hObject | Handle to a .NET Object to set the parameter for the next DotNetCallMethod call or DOTNET_CONSTRUCTOR to set the parameter for the next DotNetLoadObject call.
sParam | String value that should be passed as parameter to the next DotNetCallMethod on the passed .NET Object

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    sReturnValue      : string;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetString(hObject, sReturnValue);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetGetString Function


DotNetGetString Function

Action

Gets the string return value of the last DotNetCallMethod call in sReturn. Parameter sRetLen defines the size of the sReturn string buffer.

Include file

DotNetAPI.bdh

Syntax

DotNetGetString( in    hObject : number,
                 inout sReturn : string,
                 in    nRetLen : number optional ) :boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object.
sReturn | String buffer that will receive the return value of the last DotNetCallMethod call.
nRetLen | Size of the string buffer passed in sReturn (optional).

Example

dcltrans
  transaction TMain
  var
    hObject, hObject2 : number;
    sReturnValue : string;
  begin
    DotNetSetString(hObject, "ConstrValue1");

    hObject := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    hObject2 := DotNetLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.ParamClass");
    DotNetSetFloat(hObject, 1.23);
    DotNetSetInt(hObject, 123);
    DotNetSetBool(hObject, false);
    DotNetSetObject(hObject, hObject2);
    DotNetCallMethod(hObject,"TestMethod");
    DotNetGetString(hObject, sReturnValue);
    DotNetFreeObject(hObject);
    DotNetFreeObject(hObject2);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetSetString Function


DotNetUnitTestCallMethod Function

Action

This method can be used to call a test method on a valid unit test object. The object needs to be loaded with DotNetUnitTestLoadObject in order to perform all actions that the execution engine of a unit testing framework. DotNetUnitTestLoadObject gathers all information about special Initialize(SetUp) and Cleanup (TearDown) methods that will be called right before and right after the test method.

The supported unit testing frameworks are:

  • Silk Performer .NET Framework

  • NUnit Test Framework

  • Microsoft's unit testing framework (Microsoft Visual Studio 2013、2015、2017)

All frameworks offer the functionality of those Initialize and Cleanup methods that will be called by this method call if they exist. Furthermore - Ignore and Expected Exception attriutes will also be handled.

Exceptions that will be catched - either expected or not - will be logged to the TrueLog and to the output log file. If Console redirection is enabled - the standard and error console output will also be logged to the TrueLog and respectivly to the .wrt and .err file.

Methods with the Ignore attribute will not be called. DotNetUnitTestCallMethod will raise an error with severity warning.

DotNetUnitTestCallMethod will raise an error if a method throws an unexpected exceptions.

Include file

DotNetAPI.bdh

Syntax

DotNetUnitTestCallMethod( in    hObject     : number,
                          inout sMethodName : string,
                          in    sTimer      : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object
sMethodName | Method that should be called
sTimer | (optional) If defined – a custom timer will be generated to measure the creation time of the object. If the Unit Test class defines a SetUp and/or TearDown method, additional measures will be generated for these additional method calls. The measure name will be {sTimer}_SetUp and {sTimer}_TearDown.

Example

dcltrans
  transaction TMain
  var
    hObject : number;
  begin
    DotNetSetOption(DOTNET_OPT_REDIRECT_CONSOLE, 1);
    hObject := DotNetUnitTestLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    DotNetUnitTestCallMethod(hObject,"TestMethod");
    DotNetUnitTestFreeObject(hObject);
  end TMain;
親トピック: .NET Framework Functions
関連資料
DotNetUnitTestFreeObject Function
DotNetUnitTestLoadObject Function


DotNetUnitTestFreeObject Function

Action

Releases the object handle, so that the garbage collector will free the object. The object should be loaded with DotNetUnitTestLoadObject in order to work correctly.

Before the object is freed it is possible that a global CleanUp method will be called. Following unit testing frameworks support a unit-test wide CleanUp method:

  • Silk Performer .NET Framework

  • NUnit Test Framework

  • Microsoft's unit testing framework (Microsoft Visual Studio 2013、2015、2017)

During DotNetUnitTestLoadObject the information about such a method is gathered. If such a method exists, it will be called right before the object is freed.

Include file

DotNetAPI.bdh

Syntax

DotNetUnitTestFreeObject( in hObject: number,
                          in sTimer : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject | Handle to a .NET Object that will be released.
sTimer | (optional) If the Unit Test class defines a global TearDown method an additional measure will be generated for this additional method call. The measure name will be {sTimer}_GlobalTearDown.

Example

dcltrans
  transaction TMain
  var
    hObject : number;
  begin
    DotNetSetOption(DOTNET_OPT_REDIRECT_CONSOLE, 1);
    hObject := DotNetUnitTestLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    DotNetUnitTestCallMethod(hObject,"TestMethod");
    DotNetUnitTestFreeObject(hObject);
  end TMain;
親トピック: .NET Framework Functions
関連資料
DotNetUnitTestCallMethod Function
DotNetUnitTestLoadObject Function


DotNetUnitTestLoadObject Function

Action

Loads a .NET Assembly and creates an instance of a .NET type. A handle to this created object will be returned.

When creating the object, the default constructor will be called. If you want to call a constructor that takes parameters you have to set these parameters with the DotNetSetXX functions prior to the call to DotNetLoadObject.

The difference to DotNetLoadObject is that this method checks whether the instantiated type is unit test conform. Currently - 3 unit testing frameworks are supported:

  • Silk Performer .NET Framework

  • NUnit Test Framework

  • Microsoft's unit testing framework (Microsoft Visual Studio 2013、2015、2017)

The method inspects the type for the custom attributes of the above mentioned test frameworks. If the class defines a method that should be called once the class is loaded - the method will be called right after it is instantiated. If there is a corresponding cleanup method - the cleanup method will be called when the object is unloaded with DotNetUnitTestFreeObject.

Initialize (SetUp) and CleanUp (TearDown) methods will be called by DotNetUnitTestCallMethod.

It is recommended to redirect the console output to Silk Performer logfile's. This should be done because above mentioned test framework do it as well. Redirection can be enabled by the new option DOTNET_OPT_REDIRECT_CONSOLE which can be set with DotNetSetOption.

Include file

DotNetAPI.bdh

Syntax

DotNetUnitTestLoadObject( inout sAssemblyFile : string,
                          inout sTypeName     : string,
                          in    sTimer        : string optional ): number;

Return value

  • object handle if successful

  • 0 otherwise

Parameter | Description
sAssemblyFile | Path to the assembly file that contains the specified type. The path can be either absolute or relative. If the path is relative, it is either relative to the project or the data directory.
sTypeName | Full qualified type name (Namespace + TypeName) of the type that should be instantiated.
sTimer | (optional) If defined – a custom timer will be generated to measure the creation time of the object. If the Unit Test class defines a global SetUp method an additional measure will be generated for this additional method call. The measure name will be {sTimer}_GlobalSetUp.

Example

dcltrans
  transaction TMain
  var
    hObject : number;
  begin
    DotNetSetOption(DOTNET_OPT_REDIRECT_CONSOLE, 1);
    hObject := DotNetUnitTestLoadObject("bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    DotNetUnitTestCallMethod(hObject,"TestMethod");
    DotNetUnitTestFreeObject(hObject);
  end TMain;
親トピック: .NET Framework Functions
関連資料
DotNetUnitTestCallMethod Function
DotNetUnitTestFreeObject Function


DotNetCallMethod Function

Action

Calls a public method on the .NET object or a static method of a .NET type. If parameters have been set with the DotNetSetXX methods, these parameters will be passed in the order of the DotNetSetXX calls. If you want to call a static method you have to use the constant DOTNET_STATIC_METHOD as object handle for the DotNetCallMethod and the DotNetSetXX methods. Another way to pass parameters to and from the method is to use the AttributeXX functions. The .NET Method can use the perfDotNetFW.dll to call into the Silk Performer runtime to get/set attributes (Bdl.AttributeGet, Bdl.AttributeSet).

If the function returns a value, this value can be retrieved with the DotNetGetXX methods. Again - if calling a static method - use DOTNET_STATIC_METHOD as object handle.

Include file

DotNetAPI.bdh

Syntax

DotNetCallMethod( in hObject     : number,
                  in sMethodName : string,
                  in sTypeName   : string optional,
                  in sAssembly   : string optional,
                  in sTimer      : string optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
hObject

Handle to a .NET Object

or

DOTNET_STATIC_METHOD if you want to call a static method. In this case you have to at least specify the name of the .NET type (class) you want to call the method.

sMethodName | Method that should be called
sTypeName

(optional)

If you want to call a static method this parameter specifies the .NET type (class) of the method.
sAssembly

(optional)

If you want to call a static method and this parameter is omitted the type specified in sTypeName is searched in the currently loaded assemblies.

If you haven't loaded the assembly where sTypeName is implemented you can specify the assembly file here and it will be loaded. Assemblies are normally loaded during DotNetLoadObject.

The basic .NET assembly (mscorlib) is always loaded - so you can access all static methods of the basic classes.
sTimer

(optional)

If defined – a custom timer will be generated to measure the execution time of the method call.

Example

dcltrans
  transaction TMain
  var
    hObject, nValue : number;
  begin
    // load an object and call a method on this instance
    hObject := DotNetLoadObject("C:\\MyDotNet\\Bin\\Release\\MyDotNet.dll", "MyDotNet.TestClass");
    DotNetCallMethod(hObject,"TestMethod");
    DotNetFreeObject(hObject);
    // call a static method - no additional assembly needs to be loaded because DateTime is defined in mscorlib
    DotNetSetInt(DOTNET_STATIC_METHOD, 2003);
    DotNetSetInt(DOTNET_STATIC_METHOD, 2);
    DotNetCallMethod(DOTNET_STATIC_METHOD, "DaysInMonth", "System.DateTime");
    DotNetGetInt(DOTNET_STATIC_METHOD, nValue);
  end TMain;
親トピック: .NET Framework Functions
親トピック: Available BDL Functions for .NET Interoperability
関連資料
DotNetLoadObject Function
DotNetFreeObject Function


GUI-Level Testing Functions

  • Silk Test Automation Functions Overview
    Via its own session manager, Silk Performer uses Silk Test, Micro Focus’s functional testing tool, to communicate with and control sessions (Silk Test likewise communicates with Silk Performer via the session manager).
  • UFT Developer (Silk4J) Functions Overview
    Via its own session manager, Silk Performer uses UFT Developer (Silk4J) to test JUnit tests.
  • Silk4NET Functions Overview
    Via its own session manager, Silk Performer uses UFT Developer (Silk4NET) to test MSTest unit tests.
  • Silk Keyword-driven Testing Functions Overview
親トピック: Benchmark Description Language (BDL) Reference


Silk Test Automation Functions Overview

Silk Performer supports load testing of fat-client applications. To load test these applications, Silk Performer uses Windows Terminal Services to connect to and open client sessions on agent computers. Via its own session manager, Silk Performer uses Silk Test, Micro Focus’s functional testing tool, to communicate with and control sessions (Silk Test likewise communicates with Silk Performer via the session manager). Silk Test launches clients, runs GUI-level tests, and communicates results back to Silk Performer via the session manager. Silk Performer ultimately collects the results and makes them available to end-users.

  • StExecuteTestcase Function
    Starts an execution in Silk Test and collects the results of the execution.
  • StInit Function
    The StInit function starts Silk Test.
  • StInitSession Function
    Connects to a Windows Terminal Server session and opens a remote desktop user session.
  • StLoadProject Function
    Instructs Silk Test to load a Silk Test package file.
  • StLogoffSession Function
    Closes Silk Test and disconnects from the Windows Terminal Server session.
  • StResetSilkTest Function
    Closes Silk Test and then restarts it.
  • StSetConnectionTimeOut Function
    Sets a timeout for connection to a Windows Terminal Server session.
  • StSetExecutionTimeOut Function
    Sets the timeout for the execution of a testcase.
  • StSetOption Function
    Sets Silk Test-specific options.
親トピック: GUI-Level Testing Functions
関連概念
GUI レベルのテストのサポート


StExecuteTestcase Function

Action

StExecuteTestcase starts an execution in Silk Test and collects the results of the execution. The script file can be provided with an absolute path if no project has been loaded. When a package is loaded by Silk Test, the relative path of the script within the package must be used.

Include file

StAutomation.bdh

Syntax

StExecuteTestcase(
      in sScript   : string,
      in sTestCase : string,
      in sTestData : string,
      in sTimer    : string ): boolean;

Return value

  • true if the execution was successful

  • false otherwise

Parameter | Description
sScript | The script name of the Silk Test script. If a package has been loaded, the relative path (within the package) of the script must be provided. If no package has been loaded, the script should be added to the data files and only the name of the script must be provided.
sTestCase | The name of the testcase you want to execute.
sTestData | The test data that must be passed to the testcase. Strings that are passed must begin and end with an \".
sTimer | The name of the timer for the StExecuteTestcase function. The timer starts when Silk Test gets the information to execute a testcase and stops when Silk Test finishes the execution.

Example

transaction TMain
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  if(StInitSession(sUser, sPassword)) then
    StLoadProject("package.stp");
    StSetOption(ST_OPTION_TRUELOG_OPTIONS,ST_TRUELOG_ALL);
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();
  end;
end TMain;
親トピック: Silk Test Automation Functions Overview


StInit Function

Action

The StInit function starts Silk Test. It is used only for web application testing (but not for mobile) and does not start a new session. Therefore, you need to enable Use particular user account in the system settings: Click Settings > System > Agents > Advanced and enable the option. All started virtual users are using the same Silk Test process within the current session.
注: Browser type settings defined using this function override profile settings that were configured in the profile settings: Profile settings > GUI-Level Testing > Execution > Browser type setting. When the optional uBrowserType parameter is omitted, the profile settings are used. The default browser type is the one that was specified during the import of the test.

Include file

StAutomation.bdh

Syntax

StInit( uBrowserType : in number optional := BROWSER_TYPE_DEFAULT ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
uBrowserType Optional: Sets the browser type. Possible values are:
  • BROWSER_TYPE_DEFAULT := 0;
  • BROWSER_TYPE_CHROME := 1;
  • BROWSER_TYPE_FIREFOX := 2;
  • BROWSER_TYPE_PHANTOMJS := 3;

Example

dcltrans
  transaction TInit
  begin
    StInit();
  end TInit;

  transaction TTest
  begin
    StLoadProject("package.stp");
    StSetOption(ST_OPTION_TRUELOG_OPTIONS,ST_TRUELOG_ALL);
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();

  end TTest;
親トピック: Silk Test Automation Functions Overview


StInitSession Function

Action

The StInitSession function connects to a Windows Terminal Server session and opens a remote desktop user session. When the connection is established, Silk Test is started in the session. If no username or password are provided, the function uses the user name and password that are saved in the profile settings. If you want to run the test on your local console, do not set user credentials in the profile settings or the script.
注: Color depth settings defined using this function override profile settings configured via Silk Performer at Profile settings > GUI-Level Testing > General > Session settings. When the optional uColorDepth parameter is omitted, profile settings are used. The default color-depth setting is 16 bit.

The server may limit maximum color depth. The client can not force a color depth setting that is higher than is supported by the server. Please see Terminal Services Configuration documentation for details about your server version's color-depth limitations.

By default StInitSession raises an error with the severity SEVERITY_PROCESS_EXIT if the function fails to start a valid session. The severity of that error can be adjusted by a custom event handler function (see "Event Handler Section"). When an error with SEVERITY_PROCESS_EXIT occurs the rest of the script is ignored and no unsaved results data or measurements will be saved.

Include file

StAutomation.bdh

Syntax

StInitSession( sUser          : in string optional,
               sPassword      : in string optional,
               uColorDepth    : in number optional,
               uDesktopWidth  : in number optional,
               uDesktopHeight : in number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUser | Optional: The username of the remote desktop user. If no username or password are provided, the function uses the user name and password that are saved in the profile settings.
sPassword | Optional: The password of the remote desktop user. If no username or password are provided, the function uses the user name and password that are saved in the profile settings.
uColorDepth Optional: The remote session's color depth setting. The default color-depth setting is 16 bit. Possible values are one of following constants of StAutomation.bdh:
ST_COLOR_256     := 8;
  ST_COLOR_15bit   := 15;
  ST_COLOR_16bit   := 16;
  ST_COLOR_24bit   := 24;
  ST_COLOR_32bit   := 32;
uDesktopWidth | Optional: The remote session's screen width resolution size in pixels. Default is 1024.
uDesktopHeight | Optional: The remote session's screen height resolution size in pixels. Default is 768.

Example

transaction TMain
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  if (StInitSession(sUser, sPassword, ST_COLOR_16bit, 1600, 1200)) then
    StLoadProject("package.stp");
    StSetOption(ST_OPTION_TRUELOG_OPTIONS,ST_TRUELOG_ALL);
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();
  end;
end TMain;
親トピック: Silk Test Automation Functions Overview
関連タスク
GUI レベル テスト オプションを設定する
関連資料
Event Handler Section


StLoadProject Function

Action

The StLoadProject function instructs Silk Test to load a Silk Test package file. Only packages can be loaded. When a package is being added to Silk Performer data files, you do not have to use an absolute path. In addition to loading the package, some basic Silk Test settings are set with this function.

Include file

StAutomation.bdh

Syntax

StLoadProject( in sProject : string): boolean;

Return value

  • true if all settings have been set successfully and the package can be loaded by Silk Test

  • false otherwise

Parameter | Description
sProject | The path to the Silk Test package file. An absolute or a relative path can be provided. However, if the path is relative, the package must be added to the data files.

Example

transaction TMain
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  if (StInitSession(sUser, sPassword)) then
    StLoadProject("package.stp");
    StSetOption(ST_OPTION_TRUELOG_OPTIONS,ST_TRUELOG_ALL);
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();
  end;
end TMain;
親トピック: Silk Test Automation Functions Overview


StLogoffSession Function

Action

The StLogoffSession closes Silk Test and disconnects from the Windows Terminal Server session.

Include file

StAutomation.bdh

Syntax

StLogoffSession()

Example

transaction TMain
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  if (StInitSession(sUser, sPassword)) then
    StLoadProject("package.stp");
    StSetOption(ST_OPTION_TRUELOG_OPTIONS, ST_TRUELOG_ALL);
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();
  end;
end TMain;
親トピック: Silk Test Automation Functions Overview


StResetSilkTest Function

Action

StResetSilkTest closes Silk Test and then restarts it. In addition to resetting Silk Test, it is also possible to reset the session.

Include file

StAutomation.bdh

Syntax

StResetSilkTest( in bResetConnection : boolean optional ): boolean;

Return value

  • true if reset worked

  • false otherwise

Parameter | Description
bResetConnection | If bResetConnection is set to true, the session will be closed and reopened using the same settings. Optionally, only Silk Test can be reset.

Example

transaction TInit
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  StInitSession(sUser, sPassword);
end TInit;

transaction TMain
begin
  StLoadProject("package.stp");
  StSetOption(ST_OPTION_TRUELOG_OPTIONS, ST_TRUELOG_ALL);
  StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
  StResetSilkTest(true);
end TMain;
親トピック: Silk Test Automation Functions Overview


StSetConnectionTimeOut Function

Action

Sets a timeout for connection to a Windows Terminal Server session.

Include file

StAutomation.bdh

Syntax

StSetConnectionTimeOut( in nTimeOut : number );
Parameter | Description
nTimeOut | Connection timeout in seconds. Null means unlimited timeout.

Example

transaction TMain
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  StSetConnectionTimeOut(60000);
  if (StInitSession(sUser, sPassword)) then
    StLoadProject("package.stp");
    StSetOption(ST_OPTION_TRUELOG_OPTIONS, ST_TRUELOG_ALL);
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();
  end;
end TMain;
親トピック: Silk Test Automation Functions Overview


StSetExecutionTimeOut Function

Action

Sets the timeout for the execution of a testcase.

Include file

StAutomation.bdh

Syntax

StSetExecutionTimeOut( in nTimeOut : number );

Return value

  • true if successful

  • false otherwise

Parameter | Description
nTimeOut | Execution timeout in seconds. Null means unlimited timeout.

Example

transaction TMain
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  if (StInitSession(sUser, sPassword)) then
    StLoadProject("package.stp");
    StSetExecutionTimeOut(50000);
    StSetOption(ST_OPTION_TRUELOG_OPTIONS, ST_TRUELOG_ALL);
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();
  end;
end TMain;
親トピック: Silk Test Automation Functions Overview


StSetOption Function

Action

With the StSetOption function, it is possible to set Silk Test-specific options. Most of the options that are necessary for StLoadProject are already set. To change them you have to call StSetOption after the StLoadProject call.

Include file

StAutomation.bdh

Syntax

StSetOption( in sOption : string,
             in sValue  : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sOption The option name you want to set. The following constants can be set:
  • ST_OPTION_OPENFILE: Opens any file in a Silk Test child window.
  • ST_OPTION_OPTIONSET: Opens an option set file.
  • ST_OPTION_WORKDIR: Sets the Silk Test working directory.
  • ST_OPTION_SETHOSTNAME: Sets the remote host name for TCP/IP networks.
  • ST_OPTION_TRUELOG_OPTIONS: Sets Truelog options for the writing of TrueLogs. Use the option ST_TRUELOG_ALL to log everything. Otherwise, create your own option string. For detailed information, go to: Truelog option strings.
    注: This option only supports the Classic Agent of Silk Test. If you run tests with the Open Agent, this setting has no impact.
sValue | The value of the option.

Truelog option strings

The syntax of a Truelog option string is:

OptionString  = "<name pair>{,<name pair>{,<name pair>{...}}}"
Name Pair = <sub-option name>=<option value>
Sub-option Name | Option Value | Description
RecordingLevel | Error | Warning | All | Result file recording level for prompts and warnings.
BitMapsOnError | TRUE | FALSE | Record bit maps when errors occur.
BitMaps | TRUE | FALSE | Record bit maps for all selected controls, etc.
DeskTopBitMap | TRUE | FALSE | Record a bitmap of the desktop.
CallStackTrace | TRUE | FALSE | Record call stack.
AgentRecord | TRUE | FALSE | Enable recording of selected controls.
SetText | NONE | BEFORE | AFTER | BOTH | Record the SetText method.
SetMultiText | NONE | BEFORE | AFTER | BOTH | Record the SetMultiText method.
Select | NONE | BEFORE | AFTER | BOTH | Record the Select method.
PickMenu | NONE | BEFORE | AFTER | BOTH | Record the MenuPick method.
TypeKeys | NONE | BEFORE | AFTER | BOTH | Record the TypeKeys method.
MouseClick | NONE | BEFORE | AFTER | BOTH | Record the MouseClick method.
PresRelKeys | NONE | BEFORE | AFTER | BOTH | Record the Press or Release Keys method.
PresRelMouse | NONE | BEFORE | AFTER | BOTH | Record the Press or Release Mouse method.
SetActive | NONE | BEFORE | AFTER | BOTH | Record the SetActive method.
DoubleClick | NONE | BEFORE | AFTER | BOTH | Record the DoubleClíck method.
DoubleSelect | NONE | BEFORE | AFTER | BOTH | Record the DoubleSelect method.
CreateWindow | NONE | BEFORE | AFTER | BOTH | Record the CreateWindow method
CloseWindow | NONE | BEFORE | AFTER | BOTH | Record the CloseWindow method.
LowLevelEnable | TRUE | FALSE | Enable low level action recording.
RecordObjects | TRUE | FALSE | Record Control Objects.
RecordStaticText | TRUE | FALSE | Record Static Text (mostly browsers)
TrackObjects | TRUE | FALSE | Record Object Tracking (add / delete)
BrowserDownLoad | TRUE | FALSE | Record DOM download events.
BrowserNavigate | TRUE | FALSE | Record DOM navigate events.
BrowserTerminate | TRUE | FALSE | Record DOM terminate events.
BrowserNewWindow | TRUE | FALSE | Record DOM new window events.
BrowserRecStat | TRUE | FALSE | Record DOM Rec Stat events.
BrowserJavaScript | TRUE | FALSE | Record Java events
WindowDelay | INT Value | Windows delay for Java
Example:
"BitMaps=TRUE,AgentRecord=TRUE,SetText=AFTER"

Example

transaction TMain
var
  sUser     : string;
  sPassword : string;
begin
  AttributeGetString("Username", sUser);
  AttributeGetString("Password", sPassword);
  if (StInitSession(sUser, sPassword)) then
    StLoadProject("package.stp");
    StSetOption(ST_OPTION_TRUELOG_OPTIONS, ST_TRUELOG_ALL);
    StSetOption(ST_OPTION_WORKDIR,"<path>");
    StExecuteTestcase("scriptFile.t", "testcase", "\" testdata\",10", "MyTimer1");
    StLogoffSession();
  end;
end TMain;
親トピック: Silk Test Automation Functions Overview


UFT Developer (Silk4J) Functions Overview

Silk Performer supports load testing of fat-client applications. To load test these applications, Silk Performer uses Microsoft Windows Terminal Services to connect to and open client sessions on agent computers. Via its own session manager, Silk Performer uses UFT Developer (Silk4J), Micro Focus's functional testing tool, to test JUnit tests. UFT Developer (Silk4J) runs GUI-level tests and communicates results back to Silk Performer via the session manager. Silk Performer ultimately collects the results and makes them available to end-users.

GUI-level testing runs on supported Microsoft Windows Server platforms.

  • Silk4JExecuteTestcase Function
    Starts an execution using UFT Developer (Silk4J) and collects the results of the execution.
  • Silk4JInit Function
    The Silk4JInit function loads the JVM and UFT Developer (Silk4J) is set up.
  • Silk4JInitSession Function
    Connects to a Windows Terminal Server session and opens a remote desktop user session.
親トピック: GUI-Level Testing Functions


Silk4JExecuteTestcase Function

Action

Silk4JExecuteTestcase starts an execution using UFT Developer (Silk4J) and collects the results of the execution.

Include file

SilkTest.bdh

Syntax

Silk4JExecuteTestcase( in sClass    : string,
                       in sTestCase : string,
                       in sTimer    : string ): boolean;

Parameter | Description
sClass | The JUnit test class name
sTestCase | The name of the testcase you want to execute
sTimer | The name of the timer for the Silk4JExecuteTestcase function

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    AttributeGetString("GLTusername",username);
    AttributeGetString("GLTpassword",password);
    Silk4JInitSession(username,password);
  end TInit;

  transaction TTest
  begin
    Silk4JExecuteTestcase("com.borland.silk4j.TestClass","testMethod","method testcase");
  endTTest;
親トピック: UFT Developer (Silk4J) Functions Overview


Silk4JInit Function

Action

The Silk4JInit function loads the JVM and UFT Developer (Silk4J) is set up. This function is used only for web application testing (but not for mobile) and does not start a new session. Therefore, you need to enable Use particular user account in the system settings: Click Settings > System > Agents > Advanced and enable the option. All started virtual users are using the same Silk Test process within the current session.
注: Browser type settings defined using this function override profile settings that were configured in the profile settings: Profile settings > GUI-Level Testing > Execution > Browser type setting. When the optional uBrowserType parameter is omitted, the profile settings are used. The default browser type is the one that was specified during the import of the test.

Include file

SilkTest.bdh

Syntax

Silk4JInit( uBrowserType : in number optional := BROWSER_TYPE_DEFAULT ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
uBrowserType Optional: Sets the browser type. Possible values are:
  • BROWSER_TYPE_DEFAULT := 0;
  • BROWSER_TYPE_CHROME := 1;
  • BROWSER_TYPE_FIREFOX := 2;
  • BROWSER_TYPE_PHANTOMJS := 3;

Example

dcltrans
  transaction TInit
  begin
    Silk4JInit();
  end TInit;

  transaction TTest
  begin
    Silk4JExecuteTestcase("com.borland.silk4j.TestClass", "testMethod", "method testcase");
  end TTest;
親トピック: UFT Developer (Silk4J) Functions Overview


Silk4JInitSession Function

Action

The Silk4JInitSession function connects to a Windows Terminal Server session and opens a remote desktop user session. When the connection is established, JVM is loaded and UFT Developer (Silk4J) is set up. If no user name or password are provided, the function uses the user name and password that are saved in the profile settings. If you run the test on your local console, do not set user credentials in the profile settings or the script.

注: Color depth settings using this function override profile settings that were configured in Silk Performer at Profile settings > GUI-Level Testing > General > Session settings. When the optional uColorDepth parameter is omitted, the profile settings are used. The default color-depth setting is 16 bit.

The server may limit maximum color depth. The client can not force a color depth setting that is higher than is supported by the server. See the Terminal Services Configuration documentation for details about the color-depth limitations f your server.

By default, Silk4JInitSession raises an error with the severity SEVERITY_PROCESS_EXIT if the function fails to start a valid session. You can adjust this severity by a custom event handler function. If an error with SEVERITY_PROCESS_EXIT occurs, the rest of the script is ignored and no unsaved results data or measurements will be saved.

Include file

SilkTest.bdh

Syntax

Silk4JInitSession( in sUser          : string optional,
                   in sPassword      : string optional,
                   in uColorDepth    : number optional,
                   in uDesktopWidth  : number optional,
                   in uDesktopHeight : number optional ): boolean;
Parameter | Description
sUser | Optional: The user name of the remote desktop user. If no user name or password are provided, the function uses the user name and password that are saved in the profile settings.
sPassword | Optional: The password of the remote desktop user. If no user name or password are provided, the function uses the user name and password that are saved in the profile settings.
uColorDepth Optional: The remote session's color depth setting. The default color-depth setting is 16 bit. Possible values are one of following constants of StAutomation.bdh.
  • ST_COLOR_256 := 8;
  • ST_COLOR_15bit := 15;
  • ST_COLOR_16bit := 16;
  • ST_COLOR_24bit := 24;
  • ST_COLOR_32bit := 32;
uDesktopWidth | Optional: The remote session's screen width resolution size in pixels. Default is 1024.
uDesktopHeight | Optional: The remote session's screen height resolution size in pixels. Default is 768.

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    AttributeGetString("GLTusername", username);
    AttributeGetString("GLTpassword", password);
    Silk4JInitSession(username, password);
  end TInit;

  transaction TTest
  begin
    Silk4JExecuteTestcase("com.borland.silk4j.TestClass", "testMethod", "method testcase");
  end TTest;
親トピック: UFT Developer (Silk4J) Functions Overview


Silk4NET Functions Overview

Silk Performer supports load testing of fat-client applications. To load test these applications, Silk Performer uses Microsoft Windows Terminal Services to connect to and open client sessions on agent computers. Via its own session manager, Silk Performer uses UFT Developer (Silk4NET), Micro Focus's functional testing tool, to test MSTest unit tests. UFT Developer (Silk4NET) runs GUI-level tests and communicates results back to Silk Performer via the session manager. Silk Performer ultimately collects the results and makes them available to end-users.

GUI-level testing runs on supported Microsoft Windows Server platforms.

  • Silk4NETExecuteTestcase Function
    Starts an execution using UFT Developer (Silk4NET) and collects the results.
  • Silk4NETInit Function
    The Silk4NETInit function sets up UFT Developer (Silk4NET).
  • Silk4NETInitSession Function
    Connects to a Windows Terminal Server session and opens a remote desktop user session.
親トピック: GUI-Level Testing Functions


Silk4NETExecuteTestcase Function

Action

Starts an execution using UFT Developer (Silk4NET) and collects the results of the execution.

Include file

SilkTest.bdh

Syntax

Silk4NETExecuteTestcase( in sClass         : string,
                         in sTestCase      : string,
                         in sTimer         : string,
                         in uMSTestVersion : number optional ): boolean;
Parameter | Description
sClass | The MSTest unit test class name.
sTestCase | The name of the test case you want to execute.
sTimer | The name of the timer for the Silk4NETExecuteTestcase function. The timer starts when UFT Developer (Silk4NET) gets the information to execute a test case and stops when UFT Developer (Silk4NET) finishes the execution.
uMSTestVersion The version of MSTest or the Visual Studio version that was used to build the test (the .dll file). When this parameter is omitted, the latest version is automatically detected and used. You can use one of the following constants. These constants are also listed in the SilkTest.bdh file.
  • VISUAL_STUDIO_2017_ID := 150
  • VISUAL_STUDIO_2015_ID := 140
  • VISUAL_STUDIO_2013_ID := 120
  • VISUAL_STUDIO_2012_ID := 110
  • VISUAL_STUDIO_2011_ID := 100

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    AttributeGetString("GLTusername",username);
    AttributeGetString("GLTpassword",password);
    Silk4NETInitSession(username,password);
  end TInit;

  transaction TTest
  begin
    Silk4NETExecuteTestcase("Silk4NETTest_v12.UnitTest_Notepad_v12","TestMethod_ShortTest",
                            "Timer_TestMethod_ShortTest", VISUAL_STUDIO_2012_ID);
  end TTest;
親トピック: Silk4NET Functions Overview


Silk4NETInit Function

Action

The Silk4NETInit function sets up UFT Developer (Silk4NET). This function is used only for web application testing (but not for mobile) and does not start a new session. Therefore, you need to enable Use particular user account in the system settings: Click Settings > System > Agents > Advanced and enable the option. All started virtual users are using the same Silk Test process within the current session.
注: Browser type settings defined using this function override profile settings that were configured in the profile settings: Profile settings > GUI-Level Testing > Execution > Browser type setting. When the optional uBrowserType parameter is omitted, the profile settings are used. The default browser type is the one that was specified during the import of the test.

Include file

SilkTest.bdh

Syntax

Silk4NETInit( uBrowserType : in number optional := BROWSER_TYPE_DEFAULT ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
uBrowserType Optional: Sets the browser type. Possible values are:
  • BROWSER_TYPE_DEFAULT := 0;
  • BROWSER_TYPE_CHROME := 1;
  • BROWSER_TYPE_FIREFOX := 2;
  • BROWSER_TYPE_PHANTOMJS := 3;

Example

dcltrans
  transaction TInit
  begin
    Silk4NETInit();
  end TInit;

  transaction TTest
  begin
    Silk4NETExecuteTestcase("Silk4NETTest_v12.UnitTest_Notepad_v12","TestMethod_ShortTest","Timer_TestMethod_ShortTest");

  end TTest;
親トピック: Silk4NET Functions Overview


Silk4NETInitSession Function

Action

The Silk4NETInitSession function connects to a Windows Terminal Server session and opens a remote desktop user session. If no user name or password is provided, the function uses the user name and password that are saved in the profile settings. If you want to run the test on your local console, do not set user credentials in the profile settings or the script.

注: Color depth settings defined using this function override profile settings configured in Silk Performer in the profile settings: Profile settings > GUI-Level Testing > General > Session settings. When the optional uColorDepth parameter is omitted, profile settings are used. The default color-depth setting is 16 bit.

The server may limit maximum color depth. The client cannot force a color depth setting that is higher than is supported by the server. See the Terminal Services Configuration documentation for details about the color-depth limitations of your server version.

By default Silk4NETInitSession raises an error with the severity SEVERITY_PROCESS_EXIT if the function fails to start a valid session. The severity of that error can be adjusted by a custom event handler function. When an error with SEVERITY_PROCESS_EXIT occurs, the rest of the script is ignored and no unsaved results data or measurements will be saved.

Include file

SilkTest.bdh

Syntax

Silk4NETInitSession( in sUser          : string optional,
                     in sPassword      : string optional,
                     in uColorDepth    : number optional,
                     in uDesktopWidth  : number optional,
                     in uDesktopHeight : number optional ): boolean;
Parameter | Description
sUser | Optional: The user name of the remote desktop user. If no user name or password is provide,d the function uses the user name and password that are saved in the profile settings.
sPassword | Optional: The password of the remote desktop user. If no user name or password is provided, the function uses the suer name and password that are saved in the profile settings.
uColorDepth Optional: The color depth setting of the remote session. The default color-depth setting is 16 bit. Possible values are one of the following constants of the SilkTest.bdh:
  • ST_COLOR_256 := 8;
  • ST_COLOR_15bit := 15;
  • ST_COLOR_16bit := 16;
  • ST_COLOR_24bit := 24;
  • ST_COLOR_32bit := 32;
uDesktopWidth | Optional: The width resolution of the remote session screen in pixels. Default is 1024.
uDesktopHeight | Optional: The height resolution of th e remote session screen in pixels. Default is 768.

Return value

  • true if successful

  • false otherwise

Example

dcltrans
  transaction TInit
  begin
    AttributeGetString("GLTusername",username);
    AttributeGetString("GLTpassword",password);
    Silk4NETInitSession(username,password);
  end TInit;

  transaction TTest
  begin
    Silk4NETExecuteTestcase("Silk4NETTest_v12.UnitTest_Notepad_v12","TestMethod_ShortTest","Timer_TestMethod_ShortTest");
  end TTest;
親トピック: Silk4NET Functions Overview


Silk Keyword-driven Testing Functions Overview

  • SilkKDTInit Function
    The SilkKDTInit function loads the JVM and the keyword-driven test is set up.
  • SilkKDTInitSession Function
    The SilkKDTInitSession function connects to a Windows Terminal Server session and opens a remote desktop user session. When the connection is established, the JVM is loaded and the keyword-driven test is set up.
  • SilkKDTExecuteTest Function
    The SilkKDTExecuteTest function starts an execution using UFT Developer (Silk4J) and UFT Developer (Silk4NET) and collects the results of the execution.
  • SilkKDTSetThinkTime Function
    The SilkKDTSetThinkTime function sets the think times used between the keyword executions.
親トピック: GUI-Level Testing Functions


SilkKDTInit Function

Action

The SilkKDTInit function loads the JVM and the keyword-driven test is set up. This function is used only for web application testing (but not for mobile) and does not start a new session. Therefore, you need to enable Use particular user account in the system settings: Click Settings > System > Agents > Advanced and enable the option. All started virtual users are using the same Silk Test process within the current session.
注: Browser type settings defined using this function override profile settings that were configured in the profile settings: Profile settings > GUI-Level Testing > Execution > Browser type setting. When the optional uBrowserType parameter is omitted, the profile settings are used. The default browser type is the one that was specified during the import of the test.

Include file

SilkTest.bdh

Syntax

SilkKDTInit( uBrowserType : in number optional := BROWSER_TYPE_DEFAULT ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
uBrowserType Optional: Sets the browser type. Possible values are:
  • BROWSER_TYPE_DEFAULT := 0;
  • BROWSER_TYPE_CHROME := 1;
  • BROWSER_TYPE_FIREFOX := 2;
  • BROWSER_TYPE_PHANTOMJS := 3;

Example

dcltrans
  transaction TInit
  begin
    SilkKDTInit();
    SilkTestSetTinkTime(5.0);
  end TInit;
  transaction TTest
  var
    dataset : list of string;
  begin
    SilkKDTExecuteTest("library.zip", "KDTTest", dataset, "KDTTest_Timer");
  end TTest;
親トピック: Silk Keyword-driven Testing Functions Overview


SilkKDTInitSession Function

Action

The SilkKDTInitSession function connects to a Windows Terminal Server session and opens a remote desktop user session. When the connection is established, the JVM is loaded and the keyword-driven test is set up. If no user name or password are provided, the function uses the user name and password that are saved in the profile settings. If you run the test on your local console, do not set user credentials in the profile settings or the script.
注: Color depth settings defined using this function override profile settings that were configured in the profile settings: Profile settings > GUI-Level Testing > General > Session settings. When the optional uColorDepth parameter is omitted, the profile settings are used. The default color depth setting is 16 bit.

The server may limit maximum color depth. The client cannot force a color depth setting that is higher than is supported by the server. See the Terminal Services Configuration documentation for details about the color depth limitations of your server.

By default SilkKDTInitSession raises an error with the severity SEVERITY_PROCESS_EXIT if the function fails to start a valid session. The severity of that error can be adjusted by a custom event handler function (see "Event Handler Section"). When an error with SEVERITY_PROCESS_EXIT occurs the rest of the script is ignored and no unsaved results data or measurements will be saved.

Include file

SilkTest.bdh

Syntax

SilkKDTInitSession( in sUser          : string optional,
                    in sPassword      : string optional,
                    in uColorDepth    : number optional,
                    in uDesktopWidth  : number optional,
                    in uDesktopHeight : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sUser | Optional: The user name of the remote desktop user. If no user name or password are provided, the function uses the user name and password that are saved in the profile settings.
sPassword | Optional: The password of the remote desktop user. If no username or password are provided, the function uses the user name and password that are saved in the profile settings.
uColorDepth Optional: The remote session's color depth setting. The default color-depth setting is 16 bit. Possible values are one of following constants of StAutomation.bdh:
ST_COLOR_256     := 8;
  ST_COLOR_15bit   := 15;
  ST_COLOR_16bit   := 16;
  ST_COLOR_24bit   := 24;
  ST_COLOR_32bit   := 32;
uDesktopWidth | Optional: The remote session's screen width resolution size in pixels. Default is 1024.
uDesktopHeight | Optional: The remote session's screen height resolution size in pixels. Default is 768.

Example

dcltrans
  transaction TInit
  begin
    AttributeGetString("GLTusername", username);
    AttributeGetString("GLTpassword", password);
    SilkKDTInitSession(username, password);
    SilkTestSetTinkTime(5.0);
  end TInit;

  transaction Ttest
  var
    dataset : list of string;
  begin
    SilkKDTExecuteTest("library.zip", "KDTTest", dataset, "KDTTest_Timer");
  end TTest;
親トピック: Silk Keyword-driven Testing Functions Overview


SilkKDTExecuteTest Function

Action

The SilkKDTExecuteTest function starts an execution using UFT Developer (Silk4J) and UFT Developer (Silk4NET) and collects the results of the execution.

Include file

SilkTest.bdh

Syntax

SilkKDTExecuteTest( sKdtLibrary : in string,
                    sTestCase   : in string,
                    lDataset    : in list,
                    sTimer      : in string): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sKdtLibrary | The keyword-driven test library name.
sTestCase | The name of the test case you want to execute.
lDataset | The list of strings containing the global variables of the test.
sTimer | The name of the timer for the SilkKDTExecuteTest function.

Example

dcltrans
  transaction TInit
  begin
    AttributeGetString("GLTusername", username);
    AttributeGetString("GLTpassword", password);
    SilkKDTInitSession(username, password);
    SilkTestSetTinkTime(5.0);
    FileCSVLoadGlobal(hsub1t11, "library.csv", ";");
  end TInit;

  transaction Ttest
  var
    dataset : list of string;
  begin
    FileGetRndRow(hsub1t11);
    pssub1t11User := FileGetCol(hsub1t11, 1);
    ListAdd(dataset, "user=" + pssub1t11User);
    pssub1t11Password := FileGetCol(hsub1t11, 2);
    ListAdd(dataset, "password=" + pssub1t11Password);
    SilkKDTExecuteTest("library.zip", "KDTTest", dataset, "KDTTest_Timer");
  end TTest;
親トピック: Silk Keyword-driven Testing Functions Overview


SilkKDTSetThinkTime Function

Action

The SilkKDTSetThinkTime function sets the think times used between the keyword executions.

Include file

SilkTest.bdh

Syntax

SilkKDTSetThinkTime( sTime : in double ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sTime | The think time used between keyword executions.

Example

dcltrans
  transaction TInit
  begin
    SilkKDTInit();
    SilkTestSetTinkTime(5.0);
  end TInit;
  transaction TTest
  var
    dataset : list of string;
  begin
    SilkKDTExecuteTest("library.zip", "KDTTest", dataset, "KDTTest_Timer");
  end TTest;
親トピック: Silk Keyword-driven Testing Functions Overview


Terminal Services Functions

  • Citrix Functions Overview
    Details how Citrix facilitates real-time access to shared applications over networks and the Internet and provides a list of all the Citrix functions.
親トピック: Benchmark Description Language (BDL) Reference


Citrix Functions Overview

Citrix facilitates real-time access to shared applications over networks and the Internet. Citrix Server enables multiple users to run shared applications simultaneously. Communication between Citrix clients and servers consists of exchange of user inputs (keyboard/mouse) and screen shots.

Silk Performer offers an API for load testing applications that are hosted via Citrix server terminal services.

The API is divided into 6 different subsections:

  • Connection Functions
    Lists the Citrix connection functions.
  • Mouse Functions
    Lists the Citrix mouse functions.
  • Keyboard Functions
    Lists the Citrix keyboard functions.
  • Window Functions
    Lists the Citrix window functions.
  • Synchronization Functions
    Lists the Citrix synchronization functions.
  • General Functions
    Lists the Citrix general functions.
親トピック: Terminal Services Functions


Connection Functions

  • CitrixConnect Function
    Establishes a connection to a Citrix server, or server farm, using standard login credentials.
  • CitrixConnectIcaData Function
    Establishes a connection to a Citrix server, or server farm, using ICA file content provided in a string parameter.
  • CitrixConnectIcaFile Function
    Establishes a connection to a Citrix server, or server farm, using an ICA file.
  • CitrixLogoff Function
    Logs off an established ICA session.
  • CitrixDisconnect Function
    Disconnects an established ICA session.
  • CitrixInit Function
    Initializes a Citrix client. Must be called once to enable Citrix replay.
  • CitrixSetApplication Function
    When a connection to a published application is to be established, SetApplication must be called before CitrixConnect.
  • CitrixRunPublishedApplication Function
    Launches a published application within a connected session.
親トピック: Citrix Functions Overview


CitrixConnect Function

Action

Establishes a connection to a Citrix MetaFrame server, or server farm, using standard login credentials. If the connection targets a published application, CitrixSetApplication should be called before CitrixConnect.

Include file

CitrixAPI.bdh

Syntax

CitrixConnect( in sServer   : string,
               in sUser     : string optional,
               in sPassword : string optional,
               in sDomain   : string optional,
               in nColor    : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sServer | Name of the target server.
sUser | Username for login (optional)
sPassword | Password for login (optional)
sDomain | Domain for login (optional)
nColor

Color depth of the remote session. When scripts contain a screen synchronization function (CitrixWaitForScreen), it is necessary that replay color depth be identical to that used during recording. Specify one of the following values:

  • COLOR_16: 16 colors

  • COLOR_256: 256 colors

  • COLOR_16bit: 65536 colors

  • COLOR_24bit: 24 bit color value (16M)

  • COLOR_32bit: 32 bit color value (4G)

Example:

dcltrans
  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("server1", "username", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0,390, 223);
    CitrixWaitForWindow(hWnd5, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(31.50);
    CitrixMouseClick(217, 192, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5, EVENT_Destroy);
    CitrixDisconnect();
end TMain;
親トピック: Connection Functions
関連資料
CitrixConnectIcaData Function
CitrixConnectIcaFile Function
CitrixLogoff Function
CitrixDisconnect Function
CitrixInit Function
CitrixSetApplication Function
CitrixRunPublishedApplication Function


CitrixConnectIcaData Function

Action

Establishes a connection to a Citrix MetaFrame server, or server farm, using ICA file content provided in a string parameter. This is especially useful when an ICA file is downloaded via a Web function. This function is scripted automatically when recording an NFuse connection establishment.

Include file

CitrixAPI.bdh

Syntax

CitrixConnectIcaData( in sData : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sData | Content of an ICA file.

Example:

benchmark KDTBenchmarkName

use "webAPI.bdh"
use "CitrixAPI.bdh"

dcluser
  user
    VUser
  transactions
    TInit           : begin;
    TMain           : 1;

var

dclrand

dcltrans
  transaction TInit
  begin
    WebSetBrowser(WEB_BROWSER_MSIE6);
    WebModifyHttpHeader("Accept-Language", "en-us");
    //WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    //WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;

  transaction TMain
  var
    gsICAData : string;
    hWnd5 : number;
  begin
    //Redirecting -> (redir) http://citserver/Citrix/MetaFrame/Citrix/NFuse151/ASP/login.htm
    WebPageUrl("http://citserver/", "Citrix NFuse");

    ThinkTime(4.9);
    WebPageSubmit("Login", LOGIN001, "applist_nfuse.asp"); // Form 1

    WebParseDataBoundEx(gsICAData);
    ThinkTime(4.0);
    WebPageLink("Excel", "launch.asp", 1, "nfusemain"); // Link 3
    CitrixInit(800, 600);
    CitrixConnectICAData(gsICAData);
    CitrixWaitForLogon();
    hWnd5 := CitrixWaitForWindowCreation("Microsoft Excel - Book1", MATCH_Exact,0x14CF0000, 11, 26, 643, 492);
    ThinkTime(3.17);
    CitrixMouseClick(627, 9, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5, EVENT_Destroy);
    ThinkTime(2.73);
    CitrixDisconnect();
  end TMain;

dclform
  LOGIN001:
    "CTX_Application"           := "Citrix.MPS.App.LinzFarm.MSExcel",
    "CTX_Token"                 := "CFEDA5A27579A0CC59737833F192DAF9",
    "LaunchId"                  := "1380105291129";
親トピック: Connection Functions
関連資料
CitrixConnect Function
CitrixConnectIcaFile Function
CitrixLogoff Function
CitrixDisconnect Function
CitrixInit Function
CitrixSetApplication Function
CitrixRunPublishedApplication Function


CitrixConnectIcaFile Function

Action

Establishes a connection to a Citrix MetaFrame server, or server farm, using an ICA file. Note that the Recorder (when an ICA file is used) scripts the absolute path to the ICA file. Therefore, to enable the script to run on remote agents, the ICA file must be manually added to the data files.

Include file

CitrixAPI.bdh

Syntax

CitrixConnectIcaFile( in sFile : string ) : boolean

Return value

  • true if successful

  • false otherwise

Parameter | Description
sFile | Path to an ICA file. If the ICA file has been added to the data files no directory is required.

Example:

dcltrans
  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnectICAFile("C:\\Citrix\\launch.ica");
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd5, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(31.50);
    CitrixMouseClick(217, 192, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5,EVENT_Destroy);
    CitrixDisconnect();
end TMain;
親トピック: Connection Functions
関連資料
CitrixConnect Function
CitrixConnectIcaData Function
CitrixLogoff Function
CitrixDisconnect Function
CitrixInit Function
CitrixSetApplication Function
CitrixRunPublishedApplication Function


CitrixLogoff Function

Action

Logs off an established ICA session.

Include file

CitrixAPI.bdh

Syntax

CitrixLogoff( ) : boolean;

Return value

  • true if successful

  • false otherwise

Example:

dcltrans
  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("server1", "username", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0,390, 223);
    CitrixWaitForWindow(hWnd5,EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(31.50);
    CitrixMouseClick(217, 192, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5,EVENT_Destroy);
    CitrixLogoff();
end TMain;
親トピック: Connection Functions
関連資料
CitrixConnect Function
CitrixConnectIcaData Function
CitrixConnectIcaFile Function
CitrixDisconnect Function
CitrixInit Function
CitrixSetApplication Function
CitrixRunPublishedApplication Function


CitrixDisconnect Function

Action

Disconnects an established ICA session. When the Gracefully disconnect session option is enabled, a log-off is first attempted, followed by a disconnect if needed, to help ensure that the session is gracefully terminated on the Citrix server.

Include file

CitrixAPI.bdh

Syntax

CitrixDisconnect( ) : boolean;

Return value

  • true if successful

  • false otherwise

Example:

dcltrans
  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("server1", "username", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0,390, 223);
    CitrixWaitForWindow(hWnd5,EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(31.50);
    CitrixMouseClick(217, 192, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5,EVENT_Destroy);
    CitrixDisconnect();
end TMain;
親トピック: Connection Functions
関連資料
CitrixConnect Function
CitrixConnectIcaData Function
CitrixConnectIcaFile Function
CitrixLogoff Function
CitrixInit Function
CitrixSetApplication Function
CitrixRunPublishedApplication Function


CitrixInit Function

Action

Initializes a Citrix client. Must be called once to enable Citrix replay (should be called from the TInit transaction). When a Try Script is run with the “Visual Citrix Client” option enabled, this function also launches the CitrixPlayer.

Include file

CitrixAPI.bdh

Syntax

CitrixInit( in nHRes : number,
            in nVRes : number,
            in nMode : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nHRes | Horizontal screen resolution of the Citrix client.
nVRes | Vertical resolution of the Citrix client.
nMode

Specify one of the following values (optional):

  • Mode_Normal (Default)

  • Mode_Fast Use this mode to disable the Citrix client’s rendering functionality. This mode requires fewer resources, but disables screenshot functionality—meaning that there won’t be any images in the TrueLog and screen synchronization (WaitForScreen) will not be possible.

  • Mode_Gui Use this mode to make each Citrix client show its user interface.

Example:

dcltrans
  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("server1", "username", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd5,EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(31.50);
    CitrixMouseClick(217, 192, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5,EVENT_Destroy);
    CitrixDisconnect();
end TMain;
親トピック: Connection Functions
関連資料
CitrixConnect Function
CitrixConnectIcaData Function
CitrixConnectIcaFile Function
CitrixLogoff Function
CitrixDisconnect Function
CitrixSetApplication Function
CitrixRunPublishedApplication Function


CitrixSetApplication Function

Action

When a connection to a published application is to be established, SetApplication must be called before CitrixConnect.

Include file

CitrixAPI.bdh

Syntax

CitrixSetApplication( in sApplication : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sApplication | Name of the published application.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel – Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    ThinkTime(2.63);
    CitrixDisconnect();
  end TMain;
親トピック: Connection Functions
関連資料
CitrixConnect Function
CitrixConnectIcaData Function
CitrixConnectIcaFile Function
CitrixLogoff Function
CitrixDisconnect Function
CitrixInit Function
CitrixRunPublishedApplication Function


CitrixRunPublishedApplication Function

Action

Launches a published application within a connected session. Use this function to test session sharing by driving multiple published applications inside one session.

Include file

CitrixAPI.bdh

Syntax

CitrixRunPublishedApplication(
    in sApp    : string,
    in sParams : string optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sApp | Name of the published application to launch
sParams | Arguments of the published application (optional)

Example

dcltrans
  transaction TMain
  var
    hWnd4 : number;
    hWnd6 : number;
    hWnd7 : number;
  begin
    CitrixInit(800,600); // do not change the resolution
    CitrixSetApplication("notepad");
    CitrixConnect("citrix", "admin", Decrypt("8VX"), "MyDom", COLOR_32bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Untitled - Notepad", MATCH_Exact, 0x15CF0000, -4, -4, 808, 608);
    CitrixWaitForWindow(hWnd4, EVENT_Activate);
    CitrixKeyString("Hello");
    CitrixRunPublishedApplication("excel");

    hWnd6 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x14CF0000, -4, -4, 808, 580);
    CitrixMouseClick(791, 14, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixWaitForWindow(hWnd4, EVENT_Activate);
    CitrixMouseClick(795, 16, hWnd4, MOUSE_ButtonLeft);
    hWnd7 := CitrixWaitForWindowCreation("Notepad", MATCH_Exact, 0x94C801C5, 267, 258, 272, 126);
    CitrixWaitForWindow(hWnd7, EVENT_Activate);
    CitrixMouseClick(141, 99, hWnd7, MOUSE_ButtonLeft);
    CitrixWaitForDisconnect();
end TMain;
親トピック: Connection Functions
関連資料
CitrixConnect Function
CitrixConnectIcaData Function
CitrixConnectIcaFile Function
CitrixLogoff Function
CitrixDisconnect Function
CitrixInit Function
CitrixSetApplication Function


Mouse Functions

  • CitrixMouseButtonDown Function
    Moves the mouse to a specified position and selects a specified button. To release the button, call CitrixMouseButtonUp.
  • CitrixMouseButtonUp Function
    Moves the mouse to a specified position and releases a button that was pressed by a prior CitrixMouseButtonDown call.
  • CitrixMouseClick Function
    Moves the mouse to a specified position and presses a specified button.
  • CitrixMouseDblClick Function
    Moves the mouse to a specified position and performs a double-click.
  • CitrixMouseMove Function
    Moves the mouse to a specified position.
親トピック: Citrix Functions Overview


CitrixMouseButtonDown Function

Action

Moves the mouse to a specified position and selects a specified button. To release the button, call CitrixMouseButtonUp. Key modifiers (such as Ctrl and Alt) can be provided. Mouse speed can be specified in profile settings (Citrix / Simulation / Mouse) or by an appropriate call to the CitrixSetOption function. The coordinates can be specified absolutely or relatively to a window (by providing a window handle). The top left corner (of the screen or window) has the coordinates 0 / 0.

Include file

CitrixAPI.bdh

Syntax

CitrixMouseButtonDown( in nX        : number,
                       in nY        : number,
                       in nWindow   : number optional,
                       in nButton   : number optional,
                       in nModifier : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nX | X coordinate of the position where the button is to be pressed.
nY | Y coordinate of the position where the button is to be pressed.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation (optional). When this parameter is omitted or DESKTOP is specified, the provided coordinates must be relative to the desktop. When a window handle is specified, the nX and nY parameters state a position relative to the top left corner of the window (wherever the window is on the desktop).
nButton

Specify one of the following values (optional):

  • MOUSE_ButtonLeft (default): Left mouse button

  • MOUSE_ButtonRight: Right mouse button

  • MOUSE_ButtonMiddle: Middle mouse button

nModifier

Specify one of the following values (optional):

  • MOD_None (default): No modifier

  • MOD_Shift: Shift key pressed in combination with the mouse button

  • MOD_Ctrl: Ctrl key pressed in combination with the mouse button

  • MOD_Alt: Alt key pressed in combination with the mouse button

Example:

transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(211, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6,EVENT_Destroy);
    CitrixMouseDblClick(41, 23, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 171, 98, 328, 235);
    CitrixWaitForWindow(hWnd8,EVENT_Activate);
    CitrixMouseButtonDown(82, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixMouseButtonUp(367, 44, false, DESKTOP, MOUSE_ButtonLeft);
    CitrixWaitForWindowPos(hWnd8,285, 31);
    ThinkTime(5.41);
    CitrixMouseClick(317, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Mouse Functions
関連資料
CitrixMouseButtonUp Function
CitrixMouseClick Function
CitrixMouseDblClick Function
CitrixMouseMove Function


CitrixMouseButtonUp Function

Action

Moves the mouse to a specified position and releases a button that was pressed by a prior CitrixMouseButtonDown call. If the specified button has not been pressed, an error will be raised. Key modifiers (such as Ctrl and Alt) can be provided. Mouse speed can be specified by profile settings (Citrix / Simulation / Mouse) or an appropriate call to the CitrixSetOption function. The position can be specified absolutely, relative to a window (by providing a window handle) or relative to the last mouse position (by setting the bRelative parameter to true).

The top left corner (of the screen or window) has the coordinates 0 / 0.

Include file

CitrixAPI.bdh

Syntax

CitrixMouseButtonUp( in nX        : number,
                     in nY        : number,
                     in bRelative : boolean optional,
                     in nWindow   : number optional,
                     in nButton   : number optional,
                     in nModifier : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nX | X coordinate of the new mouse position (relative to the provided window or the entire desktop). When the bRelative parameter is set to true, the new mouse position is calculated by adding the specified X value to the current mouse position.
nY | Y coordinate of the new mouse position (relative to the provided window or the entire desktop). When the bRelative parameter is set to true, the new mouse position is calculated by adding the specified Y value to the current mouse position.
bRelative | Specify this parameter to calculate the new mouse position by adding the provided vector (nX, nY) to the current mouse position (optional). When this parameter is omitted, the nWindow parameter dictates how the new mouse position is calculated.
nWindow Window handle returned by a call to CitrixWaitForWindowCreation (optional). When this parameter is omitted or DESKTOP is specified, the provided coordinates must be relative to the desktop. When a window handle is specified, the nX and nY parameters state a position relative to the top left corner of the window (wherever the window is on the desktop).

When the bRelative parameter is set to true, this parameter is ignored.

nButton

Specify one of the following values (optional):

  • MOUSE_ButtonLeft (default): Left mouse button

  • MOUSE_ButtonRight: Right mouse button

  • MOUSE_ButtonMiddle: Middle mouse button

nModifier

Specify one of the following values (optional):

  • MOD_None (default): No modifier

  • MOD_Shift: Shift key pressed in combination with the mouse button

  • MOD_Ctrl: Ctrl key pressed in combination with the mouse button

  • MOD_Alt: Alt key pressed in combination with the mouse button

Example:

transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(211, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(41, 23, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 171, 98, 328, 235);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixMouseButtonDown(82, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixMouseButtonUp(367, 44, false, DESKTOP, MOUSE_ButtonLeft);
    CitrixWaitForWindowPos(hWnd8, 285, 31);
    ThinkTime(5.41);
    CitrixMouseClick(317, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Mouse Functions
関連資料
CitrixMouseButtonDown Function
CitrixMouseClick Function
CitrixMouseDblClick Function
CitrixMouseMove Function


CitrixMouseClick Function

Action

Moves the mouse to a specified position and presses a specified button. Optionally, the mouse can be specified to move while the button is pressed. Key modifiers (such as Ctrl and Alt) can be provided. Timing parameters (such as mouse speed and key-down time) can be specified in profile settings (Citrix / Simulation / Mouse) or by an appropriate call to the CitrixSetOption function. Coordinates can be specified absolutely or relatively to a window (by providing a window handle).

The top left corner (of the screen or window) has the coordinates 0 / 0.

Include file

CitrixAPI.bdh

Syntax

CitrixMouseClick( in nX        : number,
                  in nY        : number,
                  in nWindow   : number optional,
                  in nButton   : number optional,
                  in nModifier : number optional,
                  in nDX       : number optional,
                  in nDY       : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nX | X coordinate of the click position.
nY | Y coordinate of the click position.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation (optional). When this parameter is omitted or DESKTOP is specified, the provided coordinates must be relative to the desktop. When a window handle is specified, the nX and nY parameters state a position relative to the top left corner of the window (wherever the window is on the desktop).
nButton

Specify one of the following values (optional):

  • MOUSE_ButtonLeft (default): Left mouse button

  • MOUSE_ButtonRight: Right mouse button

  • MOUSE_ButtonMiddle: Middle mouse button

nModifier

Specify one of the following values (optional):

  • MOD_None (default): No modifier

  • MOD_Shift: Shift key pressed in combination with the mouse button

  • MOD_Ctrl: Ctrl key pressed in combination with the mouse button

  • MOD_Alt: Alt key pressed in combination with the mouse button

nDX | Specifies how far the mouse moves on the X axis when the button is pressed (drag operation) (optional). When this parameter is omitted the mouse does not move after the button is pressed.
nDY | Specifies how far the mouse moves on the Y axis when the button is pressed (drag operation) (optional). When this parameter is omitted the mouse does not move after the button is pressed.

Example:

transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(211, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(41, 23, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 171, 98, 328, 235);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixMouseButtonDown(82, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixMouseButtonUp(367, 44, false, DESKTOP, MOUSE_ButtonLeft);
    CitrixWaitForWindowPos(hWnd8, 285, 31);
    ThinkTime(5.41);
    CitrixMouseClick(317, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Mouse Functions
関連資料
CitrixMouseButtonDown Function
CitrixMouseButtonUp Function
CitrixMouseDblClick Function
CitrixMouseMove Function


CitrixMouseDblClick Function

Action

Moves the mouse to a specified position and performs a double-click. Key modifiers (such as Ctrl and Alt) can be provided. Timing parameters (such as mouse speed, key-down time and double-click delay) can be specified by profile settings (Citrix / Simulation / Mouse) or an appropriate call to the CitrixSetOption function. The coordinates can be specified absolutely or relatively to a window (by providing a window handle).

The top left corner (of the screen or window) has the coordinates 0 / 0.

Include file

CitrixAPI.bdh

Syntax

CitrixMouseDblClick( in nX        : number,
                     in nY        : number,
                     in nWindow   : number optional,
                     in nButton   : number optional,
                     in nModifier : number optional ) : boolean

Return value

  • true if successful

  • false otherwise

Parameter | Description
nX | X coordinate of the click position.
nY | Y coordinate of the click position.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation (optional). When this parameter is omitted or DESKTOP is specified, the provided coordinates must be relative to the desktop. When a window handle is specified, the nX and nY parameters state a position relative to the top left corner of the window (wherever the window is on the desktop).
nButton

Specify one of the following values (optional):

  • MOUSE_ButtonLeft (default): Left mouse button

  • MOUSE_ButtonRight: Right mouse button

  • MOUSE_ButtonMiddle: Middle mouse button

nModifier

Specify one of the following values (optional):

  • MOD_None (default): No modifier

  • MOD_Shift: Shift key pressed in combination with the mouse button

  • MOD_Ctrl: Ctrl key pressed in combination with the mouse button

  • MOD_Alt: Alt key pressed in combination with the mouse button

Example:

transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(211, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(41, 23, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 171, 98, 328, 235);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixMouseButtonDown(82, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixMouseButtonUp(367, 44, false, DESKTOP, MOUSE_ButtonLeft);
    CitrixWaitForWindowPos(hWnd8, 285, 31);
    ThinkTime(5.41);
    CitrixMouseClick(317, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Mouse Functions
関連資料
CitrixMouseButtonDown Function
CitrixMouseButtonUp Function
CitrixMouseClick Function
CitrixMouseMove Function


CitrixMouseMove Function

Action

Moves the mouse to a specified position. This function does not change the button state. Therefore it can be used to move the mouse between a call to CitrixMouseButtonDown or CitrixMouseButtonUp. Key modifiers (such as Ctrl and Alt) can be provided. Mouse speed can be specified by profile settings (Citrix / Simulation / Mouse) or by an appropriate call to the CitrixSetOption function. The position can be specified absolutely, or relatively to a window (by providing a window handle) or the last mouse position (by setting the bRelative parameter to true).

The top left corner (of the screen or window) has the coordinates 0 / 0.

Include file

CitrixAPI.bdh

Syntax

CitrixMouseMove( in nX        : number,
                 in nY        : number,
                 in bRelative : boolean optional,
                 in nWindow   : number optional,
                 in nModifier : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nX | X coordinate of the new mouse position (relative to the provided window or the entire desktop). When the bRelative parameter is set to true, the new mouse position is calculated by adding the specified X value to the current mouse position.
nY | Y coordinate of the new mouse position (relative to the provided window or the entire desktop). When the bRelative parameter is set to true, the new mouse position is calculated by adding the specified Y value to the current mouse position.
bRelative | Specify this parameter to calculate the new mouse position by adding the provided vector (nX, nY) to the current mouse position (optional). When this parameter is omitted, the nWindow parameter dictates how the new mouse position is calculated.
nWindow Window handle returned by a call to CitrixWaitForWindowCreation (optional). When this parameter is omitted or DESKTOP is specified, the provided coordinates must be relative to the desktop. When a window handle is specified, the nX and nY parameters state a position relative to the top left corner of the window (wherever the window is on the desktop).

When the bRelative parameter is set to true, this parameter is ignored.

nModifier

Specify one of the following values (optional):

  • MOD_None (default): No modifier

  • MOD_Shift: Shift key pressed in combination with the mouse button

  • MOD_Ctrl: Ctrl key pressed in combination with the mouse button

  • MOD_Alt: Alt key pressed in combination with the mouse button

Example:

transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(211, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(4.48);
    CitrixMouseClick(41, 13, hWnd4, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 193, 163, 263);
    CitrixMouseMove(76, 117, false, hWnd8);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 171, 98, 328, 235);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixMouseButtonDown(82, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixMouseButtonUp(367, 44, false, DESKTOP, MOUSE_ButtonLeft);
    CitrixWaitForWindowPos(hWnd8, 285, 31);
    ThinkTime(5.41);
    CitrixMouseClick(317, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Mouse Functions
関連資料
CitrixMouseButtonDown Function
CitrixMouseButtonUp Function
CitrixMouseClick Function
CitrixMouseDblClick Function


Keyboard Functions

  • CitrixKey Function
    Types a specified key.
  • CitrixKeyDown Function
    Presses a specified key.
  • CitrixKeyString Function
    Types the specified string into the window that has keyboard focus.
  • CitrixKeyUp Function
    Releases a specified key that was pressed by a prior CitrixKeyDown call.
親トピック: Citrix Functions Overview


CitrixKey Function

Action

Types a specified key. The window that has keyboard focus receives the key-stroke event. Key modifiers (such as Shift and Alt) can be provided. The third parameter specifies how often the key is to be pressed. Timing parameters (such as key down-time and repeat-delay) can be specified in profile settings (Citrix / Simulation / Keyboard) or by an appropriate call to the CitrixSetOption function.

Include file

CitrixAPI.bdh

Syntax

CitrixKey( in nKey      : number,
           in nModifier : number optional,
           in nRepeat   : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nKey

The key to type. Use a key number (ASCII code) or one of these predefined values:

  • KEY_Backspace

  • KEY_Tab

  • KEY_Enter

  • KEY_Shift

  • KEY_Ctrl

  • KEY_Alt

  • KEY_PageUp

  • KEY_PageDown

  • KEY_End

  • KEY_Home

  • KEY_LeftArrow

  • KEY_UpArrow

  • KEY_RightArrow

  • KEY_DownArrow

  • KEY_Insert

  • KEY_Delete

  • KEY_NumLock

See the CitrixApi.bdh for additional predefined values.

nModifier

Specify one of the following values (optional):

  • MOD_None (default): No modifier

  • MOD_Shift: Shift key pressed in combination with the mouse button

  • MOD_Ctrl: Ctrl key pressed in combination with the mouse button

  • MOD_Alt: Alt key pressed in combination with the mouse button

To use more than one key modifier, combine the modifiers with the "|" symbol, For example, to type the key "Ctrl-Shift-X", use the following syntax:

CitrixKey(88, MOD_Ctrl | MOD_Shift);
nRepeat | Repeat count of key strokes (optional). When this parameter is omitted the key is pressed once.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(8.25);
    CitrixMouseClick(219, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(113, 20, DESKTOP, MOUSE_ButtonLeft);
    hWnd10 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x15CF0000, -4, -4, 648, 460);
    CitrixWaitForWindow(hWnd10, EVENT_Activate);
    CitrixWaitForWindow(hWnd10, EVENT_CaptionChange, "Microsoft Excel - Book1", MATCH_Exact);
    CitrixKeyString("field1");
    CitrixKey(KEY_Enter);
    CitrixKeyString("field2");
    CitrixKey(KEY_Enter, MOD_None, 3);
    CitrixKeyString("a");
    CitrixKey(KEY_Enter);
    CitrixKey(65, MOD_Ctrl); // 'a'
    CitrixMouseClick(630, 13, hWnd10, MOUSE_ButtonLeft);
    hWnd11 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x94C801C5, 149, 206, 350, 108);
    CitrixWaitForWindow(hWnd11, EVENT_Activate);
    CitrixMouseClick(186, 85, hWnd11, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd11, EVENT_Destroy);
    CitrixWaitForWindow(hWnd10, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;

親トピック: Keyboard Functions
関連資料
CitrixKeyDown Function
CitrixKeyString Function
CitrixKeyUp Function


CitrixKeyDown Function

Action

Presses a specified key. To release the key, call the CitrixKeyUp function. The window that has keyboard focus receives the key event.

Include file

CitrixAPI.bdh

Syntax

CitrixKeyDown( in nKey : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nKey

The key to type. Use a key number (ASCII code) or one of these predefined values:

  • KEY_Backspace

  • KEY_Tab

  • KEY_Enter

  • KEY_Shift

  • KEY_Ctrl

  • KEY_Alt

  • KEY_PageUp

  • KEY_PageDown

  • KEY_End

  • KEY_Home

  • KEY_LeftArrow

  • KEY_UpArrow

  • KEY_RightArrow

  • KEY_DownArrow

  • KEY_Insert

  • KEY_Delete

  • KEY_NumLock

See the CitrixApi.bdh for additional predefined values.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(8.25);
    CitrixMouseClick(219, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(113, 20, DESKTOP, MOUSE_ButtonLeft);
    hWnd10 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x15CF0000, -4, -4, 648, 460);
    CitrixWaitForWindow(hWnd10, EVENT_Activate);
    CitrixKeyDown(KEY_Enter);
    CitrixMouseClick(208, 268, hWnd10, MOUSE_ButtonLeft);
    CitrixKeyUp(KEY_Enter);
    CitrixMouseClick(630, 13, hWnd10, MOUSE_ButtonLeft);
    hWnd11 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x94C801C5, 149, 206, 350, 108);
    CitrixWaitForWindow(hWnd11, EVENT_Activate);
    CitrixMouseClick(186, 85, hWnd11, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd11, EVENT_Destroy);
    CitrixWaitForWindow(hWnd10, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Keyboard Functions
関連資料
CitrixKey Function
CitrixKeyString Function
CitrixKeyUp Function


CitrixKeyString Function

Action

Types the specified string into the window that has keyboard focus.

Include file

CitrixAPI.bdh

Syntax

CitrixKeyString( in sInput : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sInput | String to type.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(8.25);
    CitrixMouseClick(219, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(113, 20, DESKTOP, MOUSE_ButtonLeft);
    hWnd10 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x15CF0000, -4, -4, 648, 460);
    CitrixWaitForWindow(hWnd10, EVENT_Activate);
    CitrixWaitForWindow(hWnd10, EVENT_CaptionChange, "Microsoft Excel - Book1", MATCH_Exact);
    CitrixKeyString("field1");
    CitrixKey(KEY_Enter);
    CitrixKeyString("field2");
    CitrixKey(KEY_Enter, MOD_None, 3);
    CitrixKeyString("a");
    CitrixKey(KEY_Enter);
    CitrixKey(65, MOD_Ctrl); // 'a'
    CitrixMouseClick(630, 13, hWnd10, MOUSE_ButtonLeft);
    hWnd11 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x94C801C5, 149, 206, 350, 108);
    CitrixWaitForWindow(hWnd11, EVENT_Activate);
    CitrixMouseClick(186, 85, hWnd11, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd11, EVENT_Destroy);
    CitrixWaitForWindow(hWnd10, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Keyboard Functions
関連資料
CitrixKey Function
CitrixKeyDown Function
CitrixKeyUp Function


CitrixKeyUp Function

Action

Releases a specified key that was pressed by a prior CitrixKeyDown call. If the key has not been pressed, an error will be raised.

Include file

CitrixAPI.bdh

Syntax

CitrixKeyUp( in nKey :  number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter Description
nKey

The key to type. Use a key number (ASCII code) or one of these predefined values:

  • KEY_Backspace

  • KEY_Tab

  • KEY_Enter

  • KEY_Shift

  • KEY_Ctrl

  • KEY_Alt

  • KEY_PageUp

  • KEY_PageDown

  • KEY_End

  • KEY_Home

  • KEY_LeftArrow

  • KEY_UpArrow

  • KEY_RightArrow

  • KEY_DownArrow

  • KEY_Insert

  • KEY_Delete

  • KEY_NumLock

See the CitrixApi.bdh for additional predefined values.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(8.25);
    CitrixMouseClick(219, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(113, 20, DESKTOP, MOUSE_ButtonLeft);
    hWnd10 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x15CF0000, -4, -4, 648, 460);
    CitrixWaitForWindow(hWnd10, EVENT_Activate);
    CitrixKeyDown(KEY_Enter);
    CitrixMouseClick(208, 268, hWnd10, MOUSE_ButtonLeft);
    CitrixKeyUp(KEY_Enter);
    CitrixMouseClick(630, 13, hWnd10, MOUSE_ButtonLeft);
    hWnd11 := CitrixWaitForWindowCreation("Microsoft Excel", MATCH_Exact, 0x94C801C5, 149, 206, 350, 108);
    CitrixWaitForWindow(hWnd11, EVENT_Activate);
    CitrixMouseClick(186, 85, hWnd11, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd11, EVENT_Destroy);
    CitrixWaitForWindow(hWnd10, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Keyboard Functions
関連資料
CitrixKey Function
CitrixKeyDown Function
CitrixKeyString Function


Window Functions

  • CitrixGetWindow Function
    Returns the specified window of the currently tracked window stack.
  • CitrixGetWindowCaption Function
    Returns the caption of the specified window.
  • CitrixGetWindowId Function
    Returns the window-id (MS Windows) of the specified window.
  • CitrixGetWindowParentId Function
    Returns the window-id (MS Windows) of the parent window of the specified window.
  • CitrixGetWindowPos Function
    Returns the position of the specified window.
  • CitrixGetWindowSize Function
    Returns the size of the specified window.
  • CitrixGetWindowStyle Function
    Returns the style and the extended style of the specified window.
  • CitrixWindowBringToTop Function
    Brings the specified window to the top-most position.
  • CitrixWindowMove function
    Moves the specified window.
  • CitrixWindowResize Function
    Resizes the specified window.
  • CitrixSearchWindow Function
    Searches all tracked windows for a suitable window. The opposite of the CitrixWaitForWindowCreation function, this function does not wait until a specified window appears.
  • CitrixSearchWindowById Function
    Uses window-id (MS Windows) to search for a window.
親トピック: Citrix Functions Overview


CitrixGetWindow Function

Action

This function returns the specified window of the currently tracked window stack. The nOrder parameter specifies which window is to be returned. If the function succeeds, a window handle that can be used as the nWindow parameter in Citrix functions is returned.

Include file

CitrixAPI.bdh

Syntax

CitrixGetWindow( in nOrder : number ): number;

Return value

  • > 0 if the function succeeds

  • 0 otherwise

Parameter Description
nOrder

Specifies one of the following values:

  • 0 For the top-most window.

  • >0 Specifies the position of the window in relation to the top-most window (e.g., “2” is the 3rd position).

  • -1 Specifies the active window (the top-most window may be a different window).

  • -2 Specifies the bottom-most window.

Example:

  transaction TMain
  var
    sWindowCaption : string;
    nWindowHandle  : number;
    i              : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowCaption(nWindowHandle, sWindowCaption);
      print("window " + string(nWindowHandle) + ": " + sWindowCaption);
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixGetWindowCaption Function

Action

Returns the caption of the specified window.

Include file

CitrixAPI.bdh

Syntax

CitrixGetWindowCaption( in  nWindow  : number,
                        out sCaption : string ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
sCaption | Retrieves the caption of the specified window.

Example:

  transaction TMain
  var
    sWindowCaption : string;
    nWindowHandle  : number;
    i              : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowCaption(nWindowHandle, sWindowCaption);
      print("window " + string(nWindowHandle) + ": " + sWindowCaption);
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixGetWindowId Function

Action

Returns the window-id (MS Windows) of the specified window.

Include file

CitrixAPI.bdh

Syntax

CitrixGetWindowId( in  nWindow   : number,
                   out ParamName : number ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
nId | Retrieves the window-id of the specified window.

Example:

  transaction TMain
  var
    sWindowCaption : string;
    nWindowHandle  : number;
    nWindowID      : number;
    nWindowParentID: number;
    i              : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowId(nWindowHandle, nWindowID);
      CitrixGetWindowParentId(nWindowHandle, nWindowParentID);
      CitrixGetWindowCaption(nWindowHandle, sWindowCaption);
      print("window " + string(nWindowHandle)
                      + "; id: " + string(nWindowID)
                      + "; parentid: "
                      + string(nWindowHandle) + "; name: "
                      + sWindowCaption);
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixGetWindowParentId Function

Action

Returns the window-id (MS Windows) of the parent window of the specified window.

Include file

CitrixAPI.bdh

Syntax

CitrixGetWindowParentId( in  nWindow : number,
                         out nId     : number ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
nId | Retrieves the window-id of the parent window of the specified window.

Example:

  transaction TMain
  var
    sWindowCaption : string;
    nWindowHandle  : number;
    nWindowID      : number;
    nWindowParentID: number;
    i              : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowId(nWindowHandle, nWindowID);
      CitrixGetWindowParentId(nWindowHandle, nWindowParentID);
      CitrixGetWindowCaption(nWindowHandle, sWindowCaption);
      print("window " + string(nWindowHandle)
                      + "; id: " + string(nWindowID)
                      + "; parentid: "
                      + string(nWindowHandle) + "; name: "
                      + sWindowCaption);
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixGetWindowPos Function

Action

Returns the position of the specified window.

Include file

CitrixAPI.bdh

Syntax

CitrixGetWindowPos( in  nWindow : number,
                    out nX      : number allownull,
                    out nY      : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
nX | Retrieves the X-coordinate of the top-left corner of the specified window. When only the Y-coordinate is of interest, null may be specified.
nY | Retrieves the Y-coordinate of the top-left corner of the specified window (optional).

Example:

  transaction TMain
  var
    nWindowHandle  : number;
    i              : number;
    iWindowPosX    : number;
    iWindowPosY    : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowPos(nWIndowHandle, iWindowPosX, iWindowPosY);
      print("window " + string(nWindowHandle)
                      + "; pos x: " + string(iWindowPosX)
                      + "; pos y: " + string(iWindowPosY));
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixGetWindowSize Function

Action

Returns the size of the specified window.

Include file

CitrixAPI.bdh

Syntax

CitrixGetWindowSize( in  nWindow : number,
                     out nWidth  : number allownull,
                     out nHeight : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
nWidth | Retrieves the width of the specified window. When only the height is of interest, null may be specified.
nHeight | Retrieves the height of the specified window (optional).

Example:

  transaction TMain
  var
    nWindowHandle  : number;
    i              : number;
    iWindowWidth   : number;
    iWindowHeight  : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowSize(nWIndowHandle, iWindowWidth, iWindowHeight);
      print("window " + string(nWindowHandle)
                      + "; width: " + string(iWindowWidth)
                      + "; height: " + string(iWindowHeight));
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixGetWindowStyle Function

Action

Returns the style and the extended style of the specified window.

Include file

CitrixAPI.bdh

Syntax

CitrixGetWindowStyle( in  nWindow   : number,
                      out nStyle    : number allownull,
                      out nExtStyle : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
nStyle | Retrieves the style of the specified window. When only the extended style is of interest, null may be specified.
nExtStyle | Retrieves the extended style of the specified window (optional).

Example:

  transaction TMain
  var
    nWindowHandle  : number;
    i              : number;
    iStyle         : number;
    iExtStyle      : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowStyle(nWIndowHandle, iStyle, iExtStyle);
      print("window " + string(nWindowHandle)
                      + "; style: " + string(iStyle)
                      + "; ext style: " + string(iExtStyle));
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixWindowBringToTop Function

Action

Brings the specified window to the top-most position. Note that a normal application window may not appear in front of the task-bar while the “Always on top” setting is enabled.

Include file

CitrixAPI.bdh

Syntax

CitrixWindowBringToTop( in nWindow : number ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.

Example:

  transaction Tmain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd5, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(212, 194, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5, EVENT_Destroy);
    ThinkTime(3.86);
    CitrixMouseDblClick(34, 21, DESKTOP, MOUSE_ButtonLeft);
    hWnd7 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 200, 100);
    CitrixWaitForWindow(hWnd7, EVENT_Activate);
    CitrixMouseDblClick(112, 20, DESKTOP, MOUSE_ButtonLeft);
    hWnd9 := CitrixWaitForWindowCreation("Microsoft Excel – Book4", MATCH_Exact, 0x15CF0000, -4, -4, 648, 460);
    CitrixMouseClick(179, 16, hWnd4, MOUSE_ButtonLeft);
    hWnd10 := CitrixWaitForWindowCreation("UltraEdit-32 – [Edit1]", MATCH_Exact, 0x15CF8000, -4, -4, 648, 460);
    CitrixWindowBringToTop(hWnd7); // bring "My Documents" to top
    wait 2.0;
    CitrixMouseClick(633, 15, hWnd10, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd10, EVENT_Destroy);
    CitrixMouseClick(633, 12, hWnd9, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd9, EVENT_Destroy);
    CitrixMouseClick(189, 9, hWnd7, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd7, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixWindowMove function

Action

Moves the specified window. The target position can either be specified absolutely or relative to the current position.

Include file

CitrixAPI.bdh

Syntax

CitrixWindowMove( in nWindow   : number,
            in nX        : number,
            in nY        : number,
            in bRelative : boolean optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
nX | When bRelative is omitted or set to false, the left margin of the window is moved to this X-coordinate. When bRelative is set to true, the window is moved horizontally nX pixels (may be a negative value).
nY | When bRelative is omitted or set to false, the top margin of the window is moved to this Y-coordinate. When bRelative is set to true, the window is moved vertically nY pixels (may be a negative value).
bRelative | Specifies whether the nX and nY parameters are interpreted as absolute coordinates or as a move vector (optional).

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixWindowMove(hWnd8, 10, 10, true);
    wait
            1.0;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowResize Function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixWindowResize Function

Action

Resizes the specified window.

Include file

CitrixAPI.bdh

Syntax

CitrixWindowResize( in nWindow : number,
                    in nWidth  : number,
                    in nHeight : number ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation or the SearchWindow functions.
nWidth | Specifies the new width of the window.
nHeight | Specifies the new height of the window.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixWindowResize(hWnd8, 200, 100);
    wait 3.0;
    CitrixMouseClick(190, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixSearchWindow Function
CitrixSearchWindowById Function


CitrixSearchWindow Function

Action

The opposite of the CitrixWaitForWindowCreation function, this function does not wait until a specified window appears; this function searches all tracked windows for a suitable window. A window may be specified by its caption, whereas five different search options may be provided with the nMatch parameter. If the function succeeds it returns a window handle that can be used as the nWindow parameter in Citrix functions.

Include file

CitrixAPI.bdh

Syntax

CitrixSearchWindow( in sCaption : string,
                    in nMatch   : number optional ): number;

Return value

  • >0 if the function succeeds

  • 0 otherwise

Parameter | Description
sCaption | Caption of the window to search for.
nMatch

Specify one of the following values (optional):

  • MATCH_Exact (default): Case-sensitive comparison.
  • MATCH_ExactNoCase: Case-insensitive comparison.
  • MATCH_Wildcard: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case sensitively.
  • MATCH_WildcardNoCase: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case insensitively.
  • MATCH_RegExp: The search string is a regular expression. See the regular expression chapter for a description of Silk Performer's regular expression capability.

Example:

  transaction TMain
  var
    nWindowSearchHandle : number;
    sWindowName         : string;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    nWindowSearchHandle := CitrixSearchWindow("My D*", MATCH_Wildcard);
    CitrixGetWindowCaption(nWindowSearchHandle, sWindowName);
    print("window " + string(nWindowSearchHandle)
                      + "; name: " + sWindowName);
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindowById Function


CitrixSearchWindowById Function

Action

This function uses window-id (MS Windows) to search for a window. If the function succeeds it returns a window handle that can be used as the nWindow parameter in Citrix functions.

Include file

CitrixAPI.bdh

Syntax

CitrixSearchWindowById( in nId : number ): number;

Return value

  • >0 if the function succeeds

  • 0 otherwise

Parameter | Description
nId | Retrieves the window-id of the specified window.

Example:

  transaction TMain
  var
    nWindowHandle       : number;
    nWindowSearchHandle : number;
    nWindowID           : number;
    i                   : number;
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    i := 0;
    nWindowHandle := CitrixGetWindow(i);
    while (nWindowHandle > 0) do
      CitrixGetWindowId(nWindowHandle, nWindowID);
      nWindowSearchHandle := CitrixSearchWIndowById(nWindowID);
      print("window " + string(nWindowHandle)
                      + "; ID: " + string(nWindowID)
                      + "; found handle ID:" + string(nWindowSearchHandle));
      i := i + 1;
      nWindowHandle := CitrixGetWindow(i);
    end;
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Window Functions
関連資料
CitrixGetWindow Function
CitrixGetWindowCaption Function
CitrixGetWindowId Function
CitrixGetWindowParentId Function
CitrixGetWindowPos Function
CitrixGetWindowSize Function
CitrixGetWindowStyle Function
CitrixWindowBringToTop Function
CitrixWindowMove function
CitrixWindowResize Function
CitrixSearchWindow Function


Synchronization Functions

  • CitrixWaitForDisconnect Function
    Waits for the Citrix client to be disconnected from the Citrix server.
  • CitrixWaitForLogon Function
    Waits until a Citrix client logs on successfully or a specified timeout period expires.
  • CitrixWaitForScreen Function
    Uses screen appearance to synchronize subsequent user actions.
  • CitrixWaitForText Function
    Uses optical character recognition (OCR) to synchronize subsequent user actions.
  • CitrixWaitForTextFuzzy Function
    Uses optical character recognition (OCR) to synchronize subsequent user actions. CitrixWaitForTextFuzzy performs OCR more exactly than CitrixWaitForText but requires more resources.
  • CitrixWaitForWindow Function
    Waits until a specified window event (specified with the nEvent parameter) occurs.
  • CitrixWaitForWindowCreation Function
    Waits until a specified window appears or a specified timeout period expires.
  • CitrixWaitForWindowPos Function
    Waits until a window has a specified position.
  • CitrixWaitForWindowRestore Function
    Waits until a window is restored (having previously been maximized).
  • CitrixWaitForWindowSize Function
    Waits until a window has a specified size.
親トピック: Citrix Functions Overview


CitrixWaitForDisconnect Function

Action

Waits for the ICA client to be disconnected from the Citrix server. This function must be used when a simulated user ends a session with a mouse click or key stroke (e.g. by closing a published application or selecting Log Off from the Start menu). When a session is to be actively closed (e.g. by closing the Citrix client), CitrixDisconnect must be called.

CitrixWaitForDisconnect waits until the disconnection takes place or the specified timeout period expires. In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForDisconnect( in nTimeout : number optional,
                         in bNoError : boolean optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nTimeout | Specifies the time in milliseconds to wait for the disconnection (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd5, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(3.33);
    CitrixMouseClick(208, 193, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5, EVENT_Destroy);
    ThinkTime(2.45);
    CitrixMouseClick(41, 7, hWnd4, MOUSE_ButtonLeft);
    hWnd7 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 193, 163, 263);
    CitrixMouseClick(48, 250, hWnd7, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd7, EVENT_Destroy);
    hWnd9 := CitrixWaitForWindowCreation("Shut Down Windows", MATCH_Exact, 0x94C808CC, 111, 96, 417, 192);
    CitrixWaitForWindow(hWnd9, EVENT_Activate);
    CitrixMouseClick(184, 165, hWnd9, MOUSE_ButtonLeft);
    CitrixWaitForDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForLogon Function

Action

This function waits until a Citrix client logs on successfully or a specified timeout period expires.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForLogon( in nTimeout  : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nTimeout | Specifies the time in milliseconds to wait for the Citrix client to log on (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.

Example:

dcltrans
  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("server1", "username", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd5, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(31.50);
    CitrixMouseClick(217, 192, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForScreen Function

Action

This function uses screen appearance to synchronize subsequent user actions. Based on provided parameters, this function waits until the image in the specified screen region changes, matches the captured hash value(s), or does not match the hash value(s). To compare the actual screen region with the provided hash value(s), it is necessary that the color depth used during recording be identical to that used during replay.

The screen region can be specified absolutely or relatively to a window (by specifying a window handle). When only a window handle, and no position or size, is provided, the region specified by the window outline is used.

注: Screen synchronization is only possible in Normal Mode (see CitrixInit). When used in Fast Mode this function waits a specified period of time (configurable through a call to CitrixSetOption). In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForScreen( in nWindow  : number,
                     in nX       : number,
                     in nY       : number,
                     in nWidth   : number,
                     in nHeight  : number,
                     in sHash    : string optional,
                     in bUnequal : boolean optional,
                     in nTimeout : number optional,
                     in bNoError : boolean optional,
                     in nPolling : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the screen region.
nY | Y coordinate of the top margin of the screen region.
nWidth | Width of the region.
nHeight | Height of the region.
sHash | Captured hash value, to which the specified region should be compared (optional). This can also be a list of hash values separated by one of the following characters: , ; | / Omit this parameter to synchronize on any change in the region.
bUnequal | Set this parameter to true to wait for the specified region to mismatch the provided hash value.
nTimeout | Specify the time in milliseconds to wait for the screen region to reach the correct appearance (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.
nPolling | Specify the polling period in milliseconds that the Citrix Replay engine will wait to poll a screen for an update (0 means no polling). If omitted, the parameter is set to 1000. This parameter needs to be set to wait for any change in the specified region, rather than waiting for a specific change as defined by the sHash parameter. This setting overrides the CitrixSetOption(CITRIX_OPT_ScreenTextPolling) polling interval.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("citserver", "user", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(3.31);
    CitrixMouseClick(214, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(112, 16, DESKTOP, MOUSE_ButtonLeft);
    hWnd9 := CitrixWaitForWindowCreation("Microsoft Excel – Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 460);
    CitrixWaitForScreen(hWnd9, 172, 137, 250, 148, "f100c8b71521fd895c23825b7f73a3a5|56a4337ff1aaf9ea477f0c5a2073dd2d", false);
    CitrixMouseClick(634, 9, hWnd9, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd9, EVENT_Destroy);
    ThinkTime(3.02);
    CitrixDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForText Function

Action

This function uses optical character recognition (OCR) to synchronize subsequent user actions. Based on provided parameters, this function waits until the provided text pattern appears on the specified location.

Use TrueLog Explorer to insert this synchronization call.

The screen region can be specified absolutely or relatively to a window (by specifying a window handle). When only a window handle, and no position or size, is provided, the region specified by the window outline is used.

注: Text synchronization is only possible in Normal Mode (see CitrixInit). When used in Fast Mode this function waits a specified period of time (configurable through a call to CitrixSetOption).

When optional font parameters are present, the pattern file is checked to see if the selected font is available. When font parameters are omitted font checking is not performed.

For successful text conversion it is necessary to use the perfOcrFonts.dat and perfOcrPattern.pat configuration files, which contain used fonts in the correct size and format. These files must be added to the Data Files section of the project (both files are located at <public user documents>\Silk Performer 21.0\Data). If the files are not available, or do not contain the correct specifications, they can be generated or updated using the OCR dialog in the Citrix System Settings.

In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Return value

  • true if successful

  • false otherwise

Syntax

CitrixWaitForText(  in  sText        : string,
                    in  nWindow      : number,
                    in  nX           : number,
                    in  nY           : number,
                    in  nWidth       : number,
                    in  nHeight      : number,
                    in  nMatch       : number,
                    in  sFont        : string  optional,
                    in  nFontSize    : number  optional,
                    in  nFontFlags   : number  optional,
                    in  nTimeout     : number  optional,
                    in  bNoError     : boolean optional,
                    out sResult      : string  optional,
                    in  nPolling     : number  optional ): boolean;
Parameter | Description
sText | String or string pattern to wait for.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the screen region.
nY | Y coordinate of the top margin of the screen region.
nWidth | Width of the region.
nHeight | Height of the region.
nMatch

Specify one of the following values (optional):

  • MATCH_Exact (default): Case-sensitive comparison.
  • MATCH_ExactNoCase: Case-insensitive comparison.
  • MATCH_Wildcard: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case sensitively.
  • MATCH_WildcardNoCase: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case insensitively.
  • MATCH_RegExp: The search string is a regular expression. See the regular expression chapter for a description of Silk Performer's regular expression capability.

In the optional flag MATCH_IfDifferent is added to the value the function waits until the OCR result does not match the provided string or string pattern any more.

sFont | Font that should be checked for on the system and in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If a specified font is not on the operating system, then it must be installed. If the provided configuration files do not contain the font, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted font checking is not performed.
nFontSize | The font size that should be checked for in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If the provided configuration files do not contain the font size, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted, font-size checking is not performed.
nFontFlags

Specifies the font shape (bold, italic, or underlined) that should be checked for in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If the provided configuration files do not contain the specified font shapes, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted, font-shape checking is not performed.

Specify any combination of the following values:
  • FONT_FLAG_Italic
  • FONT_FLAG_Bold
  • FONT_FLAG_Underlined
nTimeout | Specify the time in milliseconds to wait for the screen region to reach the correct appearance (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.
sResult | Retrieves the result of the OCR conversion.
nPolling | Specify the polling period in milliseconds that the Citrix Replay engine will wait to poll a screen for an update (0 means no polling). If omitted, the parameter is set to 1000. This setting overrides the CitrixSetOption(CITRIX_OPT_ScreenTextPolling) polling interval.

Example:

transaction TMain
var
  sResult  : string;
begin
  CitrixInit(800,600); // do not change the resolution
  CitrixConnect("server","John",Decrypt("8V6F"),"",COLOR_256);
  CitrixWaitForLogon();
  CitrixWaitForText("St*",DESKTOP,20,579,35,16,MATCH_Wildcard,null,0,0,0,false,sResult);
  print(sResult);
  CitrixDisconnect();
end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForTextFuzzy Function

Action

This function uses optical character recognition (OCR) to synchronize subsequent user actions. Based on provided parameters, this function waits until the provided text pattern appears on the specified location.

Use TrueLog Explorer to insert this synchronization call.

The screen region can be specified absolutely or relatively to a window (by specifying a window handle). When only a window handle, and no position or size, is provided, the region specified by the window outline is used.

注: Text synchronization is only possible in Normal Mode (see CitrixInit). When used in Fast Mode this function waits a specified period of time (configurable through a call to CitrixSetOption).

In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

CitrixWaitForTextFuzzy performs OCR more exactly than CitrixWaitForText but requires more resources.

Include file

CitrixAPI.bdh

Return value

  • true if successful

  • false otherwise

Syntax

CitrixWaitForTextFuzzy( in  sText        : string,
                        in  nWindow      : number,
                        in  nX           : number,
                        in  nY           : number,
                        in  nWidth       : number,
                        in  nHeight      : number,
                        in  sLanguage    : string,
                        in  nMatch       : number,
                        in  nTimeout     : number  optional,
                        in  bNoError     : boolean optional,
                        out sResult      : string  optional,
                        in  nPolling     : number  optional ): boolean;
Parameter | Description
sText | String or string pattern to wait for.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the screen region.
nY | Y coordinate of the top margin of the screen region.
nWidth | Width of the region.
nHeight | Height of the region.
sLanguage | The language of the text to be verified. Possible language codes are chi_sim, dan, deu, eng, fin, fra, ita, jpn, nld, nor, pol, spa and swe.
nMatch

Specify one of the following values (optional):

  • MATCH_Exact (default): Case-sensitive comparison.
  • MATCH_ExactNoCase: Case-insensitive comparison.
  • MATCH_Wildcard: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case sensitively.
  • MATCH_WildcardNoCase: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case insensitively.
  • MATCH_RegExp: The search string is a regular expression. See the regular expression chapter for a description of Silk Performer's regular expression capability.

In the optional flag MATCH_IfDifferent is added to the value the function waits until the OCR result does not match the provided string or string pattern any more.

nTimeout | Specify the time in milliseconds to wait for the screen region to reach the correct appearance (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.
sResult | Retrieves the result of the OCR conversion.
nPolling | Specify the polling period in milliseconds that the Citrix Replay engine will wait to poll a screen for an update (0 means no polling). If omitted, the parameter is set to 1000. This setting overrides the CitrixSetOption(CITRIX_OPT_ScreenTextPolling) polling interval.

Example:

transaction TMain
var
  sResult  : string;
begin
  CitrixInit(800,600); // do not change the resolution
  CitrixConnect("server","John",Decrypt("8V6F"),"",COLOR_256);
  CitrixWaitForLogon();
  CitrixWaitForTextFuzzy("St*",DESKTOP,20,579,35,16,MATCH_Wildcard, "eng",0,false,sResult);
  print(sResult);
  CitrixDisconnect();
end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForWindow Function

Action

This function waits until a specified window event (specified with the nEvent parameter) occurs. Such events may be an activation, destruction or caption change of a specified window. If a selected event is a caption change, any caption change of the specified window will satisfy the function. Additionally a caption can be specified explicitly using the sCaption and nMatch parameters. See CitrixWaitForWindowCreation for a detailed description of these two parameters.

In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForWindow( in nWindow  : number,
                     in nEvent   : number optional,
                     in sCaption : number optional,
                     in nMatch   : number optional,
                     in nTimeout : number optional,
                     in bNoError : boolean optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nEvent

Specify one of the following values (optional):

  • EVENT_Activate (default): Waits for the activation of the specified window.

  • EVENT_Destroy: Waits for the destruction (close) of the specified window.

  • EVENT_CaptionChange: Waits for the caption change of the specified window. When this option is specified, the next two parameters can be used to explicitly specify a caption.

sCaption | Window caption to wait for. When the nEvent parameter is not EVENT_CaptionChange, this parameter is ignored. When this parameter is omitted (or “” is used), this function waits for the next caption change of the window.
nMatch

When the nEvent parameter is not EVENT_CaptionChange, this parameter is ignored (optional).Specify one of the following values:

  • MATCH_Exact (default): Case-sensitive comparison.
  • MATCH_ExactNoCase: Case-insensitive comparison.
  • MATCH_Wildcard: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case sensitively.
  • MATCH_WildcardNoCase: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case insensitively.
  • MATCH_RegExp: The search string is a regular expression. See the regular expression chapter for a description of Silk Performer's regular expression capability.
nTimeout | Specifies the time in milliseconds to wait for the specified event (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd5, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(3.33);
    CitrixMouseClick(208, 193, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5, EVENT_Destroy);
    ThinkTime(2.45);
    CitrixMouseClick(41, 7, hWnd4, MOUSE_ButtonLeft);
    hWnd7 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 193, 163, 263);
    CitrixMouseClick(48, 250, hWnd7, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd7, EVENT_Destroy);
    hWnd9 := CitrixWaitForWindowCreation("Shut Down Windows", MATCH_Exact, 0x94C808CC, 111, 96, 417, 192);
    CitrixWaitForWindow(hWnd9, EVENT_Activate);
    CitrixMouseClick(184, 165, hWnd9, MOUSE_ButtonLeft);
    CitrixWaitForDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForWindowCreation Function

Action

This function waits until a specified window appears or a specified timeout period expires. A window can be specified by its caption, whereas five different search options can be provided by the nMatch parameter. When the window to wait for does not have a caption, the style of the window is used to identify the correct window (nStyle).

When this function succeeds, it returns a (positive) window handle that must be used as the nWindow parameter throughout the Citrix functions.

When the newly created window has a different size than is specified by the nWidth and nHeight parameters (size of the window during recording), the window is resized to the specified size (otherwise recorded user actions wouldn’t work). When the position of the newly created window is different than that specified by the nX and nY parameters (position of the window during recording) and the bForcePos parameter is set to true, the window is moved to the correct position. When the bForcePos parameter is omitted or set to false, profile settings (Citrix / General/ Force window position) specify whether or not the window is moved.

This function is not only triggered by the creation of a window, but also by a (matching) caption change of an existing window.

In the case of a timeout error, reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForWindowCreation( in sCaption  : string,
                             in nMatch    : number optional,
                             in nStyle    : number optional,
                             in nX        : number optional,
                             in nY        : number optional,
                             in nWidth    : number optional,
                             in nHeight   : number optional,
                             in bForcePos : boolean optional,
                             in nTimeout  : number optional,
                             in bNoError  : boolean optional ) : number;

Return value

  • >= 0 if the function succeeds (0 for the desktop)

  • < 0 otherwise

Parameter | Description
sCaption | Caption of the window to wait for. It does not matter if the caption appears due to the creation of a new window or because of a caption change of an existing window.
nMatch

Specify one of the following values (optional):

  • MATCH_Exact (default): Case-sensitive comparison.
  • MATCH_ExactNoCase: Case-insensitive comparison.
  • MATCH_Wildcard: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case sensitively.
  • MATCH_WildcardNoCase: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case insensitively.
  • MATCH_RegExp: The search string is a regular expression. See the regular expression chapter for a description of Silk Performer's regular expression capability.
nStyle | When a window doesn’t have a caption, the style parameter is used to identify the correct window (optional).
nX | X coordinate of the left margin of the window at recording (optional). When this parameter is provided and either the bForcePos parameter or the global setting (profile setting / Citrix / General/ Force window position) is set to true, the window is moved to this position.
nY | Y coordinate of the top margin of the window at recording (optional). When this parameter is provided and either the bForcePos parameter or the global setting (profile setting / Citrix / General/ Force window position) is set to true, the window is moved to this position
nWidth | The width of the window at recording (optional). When this parameter is provided, the window is resized to this width.
nHeight | The height of the window at recording (optional). When this parameter is provided, the window is resized to this height.
bForcePos | See description of nX / nY.
nTimeout | Specifies the time in milliseconds to wait for the appearance of the window (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 452, 644, 30);
    hWnd5 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd5, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(3.33);
    CitrixMouseClick(208, 193, hWnd5, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd5, EVENT_Destroy);
    ThinkTime(2.45);
    CitrixMouseClick(41, 7, hWnd4, MOUSE_ButtonLeft);
    hWnd7 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 193, 163, 263);
    CitrixMouseClick(48, 250, hWnd7, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd7, EVENT_Destroy);
    hWnd9 := CitrixWaitForWindowCreation("Shut Down Windows", MATCH_Exact, 0x94C808CC, 111, 96, 417, 192);
    CitrixWaitForWindow(hWnd9, EVENT_Activate);
    CitrixMouseClick(184, 165, hWnd9, MOUSE_ButtonLeft);
    CitrixWaitForDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForWindowPos Function

Action

This function waits until a window has a specified position. This function is used to synchronize subsequent user input after a window has been moved through a user action (e.g. a mouse drag).

In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForWindowPos( in nWindow  : number,
                        in nX       : number,
                        in nY       : number,
                        in nTimeout : number optional,
                        in bNoError : boolean optional ) : boolean

Return value

  • true if successful

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate to which the left margin of the window must be moved to satisfy the function.
nY | Y coordinate to which the left top margin of the window must be moved to satisfy the function.
nTimeout | Specifies the time in milliseconds to wait for the window to move to the correct position (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseButtonDown(163, 12, hWnd6, MOUSE_ButtonLeft);
    CitrixMouseButtonUp(289, 54, false, DESKTOP, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6,EVENT_Activate);
    CitrixWaitForWindowPos(hWnd6, 126, 42);
    CitrixMouseClick(187, 203, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.63);
    CitrixDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowRestore Function
CitrixWaitForWindowSize Function


CitrixWaitForWindowRestore Function

Action

This function waits until a window is restored (having previously been maximized). This function is used to synchronize subsequent user input after a window is restored through a user action (e.g. a mouse click).

When a restored window has a different size than is specified by the nWidth and nHeight parameters (size of the window during recording) the window is resized to the specified size (otherwise recorded user actions wouldn’t work). When the position of the newly created window is different than that specified by the nX and nY parameters (position of the window during recording) and the bForcePos parameter is set to true, the window is moved to the correct position. When the bForcePos parameter is omitted or set to false, profile settings (Citrix / General/ Force window position) dictate whether or not the window is moved.

In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForWindowRestore( in nWindow   : number,
                            in nX        : number optional,
                            in nY        : number optional,
                            in nWidth    : number optional,
                            in nHeight   : number optional,
                            in bForcePos : boolean optional,
                            in nTimeout  : number optional,
                            in bNoError  : boolean optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the window at recording (optional). When this parameter is provided and either the bForcePos parameter or the global setting (profile setting / Citrix / General/ Force window position) is set to true, the window is moved to this position.
nY | Y coordinate of the top margin of the window at recording (optional). When this parameter is provided and either the bForcePos parameter or the global setting (profile setting / Citrix / General/ Force window position) is set to true, the window is moved to this position.
nWidth | The width of the window at recording (optional). When this parameter is provided the window is resized to this width.
nHeight | The height of the window at recording (optional). When this parameter is provided, the window is resized to this height.
bForcePos | See description of nX / nY (optional).
nTimeout | Specifies the time in milliseconds to wait for the window to move to the correct position (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixMouseClick(234, 11, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindowPos(hWnd8, -4, -4);
    CitrixWaitForWindowSize(hWnd8, 648, 460);
    CitrixMouseClick(614, 12, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindowRestore(hWnd8, -4, -4, 648, 460);
    CitrixWaitForWindowPos(hWnd8, 285, 31);
    CitrixWaitForWindowSize(hWnd8, 268, 205);
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowSize Function


CitrixWaitForWindowSize Function

Action

This function waits until a window has a specified size. This function is used to synchronize subsequent user input after a window has been resized through a user action (e.g. a mouse drag). In the case of a timeout, error reporting can be prohibited with the bNoError parameter.

Include file

CitrixAPI.bdh

Syntax

CitrixWaitForWindowSize( in nWindow  : number,
                         in nWidth   : number,
                         in nHeight  : number,
                         in nTimeout : number optional,
                         in bNoError : boolean optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nWidth | The window must have this width to satisfy the function.
nHeight | The window must have this height to satisfy the function.
nTimeout | Specifies the time in milliseconds to wait for the window to reach the correct size (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.
bNoError | Set this parameter to true to prevent a timeout from raising an error. This is especially useful for controlling variable user reactions.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(182, 195, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    ThinkTime(2.78);
    CitrixMouseDblClick(38, 22, DESKTOP, MOUSE_ButtonLeft);
    hWnd8 := CitrixWaitForWindowCreation("My Documents", MATCH_Exact, 0x16CF0000, 285, 31, 268, 205);
    CitrixWaitForWindow(hWnd8, EVENT_Activate);
    CitrixMouseClick(234, 11, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindowPos(hWnd8, -4, -4);
    CitrixWaitForWindowSize(hWnd8, 648, 460);
    CitrixMouseClick(614, 12, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindowRestore(hWnd8, -4, -4, 648, 460);
    CitrixWaitForWindowPos(hWnd8, 285, 31);
    CitrixWaitForWindowSize(hWnd8, 268, 205);
    CitrixMouseClick(258, 13, hWnd8, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd8, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;
親トピック: Synchronization Functions
関連資料
CitrixWaitForDisconnect Function
CitrixWaitForLogon Function
CitrixWaitForScreen Function
CitrixWaitForText Function
CitrixWaitForTextFuzzy Function
CitrixWaitForWindow Function
CitrixWaitForWindowCreation Function
CitrixWaitForWindowPos Function
CitrixWaitForWindowRestore Function


General Functions

  • CitrixSetClientName Function
    When a Citrix client connects to a Citrix server it uses a name to identify itself.
  • CitrixSetOption Function
    Sets a particular option.
  • CitrixPing Function
    Sends a ping synchronization request to the currently connected Citrix server, with sPingData as payload.
  • CitrixSetProperty Function
    Sets a property of a Citrix client.
  • CitrixSetRamDisk Function
    Specifies a directory that is to be used for the temporary storage of images.
  • CitrixSetSocksProxy Function
    Specifies a socks proxy to be used for Citrix replay.
  • CitrixGetSessionString Function
    Returns the session string of the current ICA session from the server.
  • CitrixAddInterrupt Function
    Adds an interrupt specification.
  • CitrixGetActInterrupt Function
    To be used only within an event handler.
  • CitrixRemoveInterrupt Function
    Removes the interrupt specification that is added by a call to CitrixAddInterrupt.
  • CitrixGetMeasures Function
    Retrieves measures collected by a Citrix client for an actual session.
  • CitrixGetScreen Function
    Takes a screenshot of the selected region and writes the screenshot to a file in the result directory.
  • CitrixGetScreenHash Function
    Retrieves the hash value of the selected screen.
  • CitrixParseText Function
    Performs optical character recognition (OCR) on a selected screen region and stores the result in a sResult parameter.
  • CitrixParseTextFuzzy Function
    Performs optical character recognition (OCR) on a selected screen region and stores the result in a sResult parameter. CitrixParseTextFuzzy performs OCR more exactly than CitrixParseText but requires more resources.
  • CitrixVerifyText Function
    Performs optical character recognition (OCR) on a selected screen region and compares the result with a provided string.
  • CitrixVerifyTextFuzzy Function
    Performs optical character recognition (OCR) on a selected screen region and compares the result with a provided string. CitrixVerifyTextFuzzy performs OCR more exactly than CitrixVerifyText but requires more resources.
親トピック: Citrix Functions Overview


CitrixSetClientName Function

Action

When a Citrix client connects to a MetaFrame server it uses a name to identify itself. This name is automatically generated during replay. The name looks like “SP_User_x,” where x numerates the virtual users. Call this function when a custom name is to be used.

Include file

CitrixAPI.bdh

Syntax

CitrixSetClientName( in sClientName : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sClientName | Custom client name.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixSetClientName("MyClient");
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel – Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    ThinkTime(2.63);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixSetOption Function

Action

Sets a particular option.

Include file

CitrixAPI.bdh

Syntax

CitrixSetOption( in nOption : number,
                 in nValue  : number ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nOption

Specify one of the following values:

  • CITRIX_OPT_UseHttp:

    Set to 1 to use TCP/IP + HTTP as network protocols.

    Set to 0 to use only TCP/IP.

  • CITRIX_OPT_SpeedScreenLatRed:

    Speed Screen Latency Reduction.

    0 .. Off.

    1 .. On

  • CITRIX_OPT_EncryptLevel:

    Use one of the following values:

    0 .. Server Default.

    1 .. Basic encryption.

    2 .. RC5 128 bit encryption for login only.

    3 .. RC5 40 bit encryption.

    4 .. RC5 56 bit encryption.

    5 .. RC5 128 bit encryption

  • CITRIX_OPT_Compress:

    Select this option to compress all transferred data. Reduces the size of data, but requires additional processor resources.

    0 .. Off.

    1 .. On

  • CITRIX_OPT_ImgCache:

    Select this option to store commonly -used graphical objects, such as bitmaps, in a local disk cache.

    0 .. Off.

    1 .. On

  • CITRIX_OPT_QueueMouse:

    Select this option to queue mouse updates. Reduces the number of network packets sent from the Citrix client to the Citrix server. Specify the time to queue input in milliseconds.

  • CITRIX_OPT_QueueKeyboard:

    Select this option to queue keyboard updates. Reduces the number of network packets sent from the Citrix client to the Citrix server. Specify the time to queue input in milliseconds.

  • CITRIX_OPT_DisconnectOnTransEnd:

    Select this option to disconnect the Citrix client at the end of each transaction (this includes the TInit transaction).

    0 .. Off.

    1 .. On

  • CITRIX_OPT_SyncTimeout:

    Specify the default synchronization timeout (in milliseconds) to be used by all CitrixWaitForXXX functions, that do not specify a timeout value.

  • CITRIX_OPT_PostActionThinkTime:

    Specify the time (in milliseconds) that the virtual user is to remain inactive between actions.

  • CITRIX_OPT_PostSyncThinkTime:

    Specify the time (in milliseconds) that the virtual user is to remain inactive after passing a successful synchronization point (CitrixWaitForXXX).

  • CITRIX_OPT_LogBmpOnUserAction:

    When TrueLog is enabled a screenshot is made and written to the TrueLog at the end of each synchronization function. Select this option to additionally capture and write a screenshot at the beginning of each user -action.

    0 .. Off.

    1 .. On

  • CITRIX_OPT_DumpRgnOnSyncFailure:

    The CitrixWaitForScreen function captures a screen region and checks it against a specified condition (normally it is compared against a hash value that’s captured at recording). If the function call fails (the condition does not match and the timeout period expires) when this option is selected, the caught screen region is dumped to a file in the result directory. The file can then be examined or compared to what was written during recording for root cause analysis.

    0 .. Off.

    1 .. On

  • CITRIX_OPT_ForcePos:

    Select this option to have calls to CitrixWaitForWindowCreation and CitrixWaitForWindowRestore move the window to the coordinates that were captured during recording. When this box is not checked, both functions provide a parameter (bForcePos) that enables this option for each individual call.

    0 .. Off.

    1 .. On

  • CITRIX_OPT_MouseTimeDown:

    Specify the length of time that the virtual user is to hold the mouse button in the pressed state. Used for CitrixMouseClick and CitrixMouseDblClick.

  • CITRIX_OPT_MouseDblClickDelay:

    Specify the length of time that is to pass between the two clicks of a double click. Used for CitrixMouseDblClick.

  • CITRIX_OPT_MouseSpeed:

    Specify the speed at which the mouse is to move across the screen (pixels per second).

  • CITRIX_OPT_KeyTimeDown:

    Specify the length of time that the virtual user is to hold a keyboard key in the down state. Used for CitrixKey and CitrixKeyString.

  • CITRIX_OPT_KeyTimeIdle:

    Specify the length of time that is to pass between the individual key-strokes specified by the CitrixKeyString function.

  • CITRIX_OPT_KeyTimeRepeat:

    Specify the time required for a complete key stroke when simulating repeat functionality (a value of 50 means 20 keys per second).

  • CITRIX_OPT_ScreenTextPolling

    Specify the polling period in milliseconds that the Citrix Replay engine will wait to poll a screen for an update (0 means no polling). If omitted, the parameter is set to 1000.
nValue | Value of the selected option.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixSetOption(CITRIX_OPT_SyncTimeout, 60000); // sync timeout = 60 sec.
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel – Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    ThinkTime(2.63);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixPing Function

Action

Sends a ping synchronization request to the currently connected Citrix server, with sPingData as payload. This function waits until either the server responds or the timeout expires.

Include file

CitrixAPI.bdh

Syntax

CitrixPing( in  sPingData : string,
            out nRTT      : number,
            in  nTimeout  : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
sPingData | Payload sent to the server.
nRTT | Retrieves the round-trip time of the sent ping request.
nTimeout | Specifies the time to wait for the server to respond (optional). When this parameter is omitted or set to 0, the default timeout is used. The default value can be adjusted by profile settings ( Settings > Active Profile > Citrix > General > Synchronization timeout ) or an appropriate call to the CitrixSetOption function.

Example:

  transaction TMain
  var
    nRTT : number;
  begin
    CitrixInit(640, 480);
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixKeyString("test");
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    ThinkTime(2.63);
    CitrixMouseClick(306, 289, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    CitrixPing("payload", nRTT);
    print("CitrixPing round trip time: " + string(nRTT));
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixSetProperty Function

Action

Sets a property of a Citrix client. See Citrix client documentation for possible property/value pairs.

Include file

CitrixAPI.bdh

Syntax

CitrixSetProperty( in sProp  : string,
                   in sValue : string ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sProp | Property name.
sValue | Property value

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixSetApplication("Excel");
    CitrixSetProperty("Border", "20");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixKeyString("test");
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    ThinkTime(2.63);
    CitrixMouseClick(306, 289, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    ThinkTime(2.63);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixSetRamDisk Function

Action

Specifies a directory that is to be used for the temporary storage of images. TrueLog-generation performance improves when the specified drive is a RAM disk. Used for both record and replay.

Include file

CitrixAPI.bdh

Syntax

CitrixSetRamDisk( in sPath : string ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
sPath | Path of a directory that is to be used for the temporary storage of images for TrueLog generation.

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixSetRamDisk("z:"); //use ramdisk drive "z:"
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixKeyString("test");
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    ThinkTime(2.63);
    CitrixMouseClick(306, 289, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    ThinkTime(2.63);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixSetSocksProxy Function

Action

Specifies a socks proxy to be used for Citrix replay.

Include file

CitrixAPI.bdh

Syntax

CitrixSetSocksProxy( in sProxy : string,
                     in nPort : number,
                     in nVersion : number ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
sProxy | Host name or IP address of the socks proxy to be used for Citrix replay.
nPort | Port of the socks proxy.
nVersion | Socks protocol version to be used (v4 or v5).

Example:

  transaction TMain
  var
  begin
    CitrixSetSocksProxy("lab13", 1080, 5);
    CitrixInit(640, 480);
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixKeyString("test");
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    ThinkTime(2.63);
    CitrixMouseClick(306, 289, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    CitrixDisconnect();
  end TMain;

親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixGetSessionString Function

Action

Returns the session string of the current ICA session from the server. The string that is returned is specified by the nIndex value.

Include file

CitrixAPI.bdh

Syntax

CitrixGetSessionString( in  nIndex  : number,
                        out sString : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nIndex

Specifies one of the following values:

  • 0: Returns the server name.

  • 1: Returns the user name

  • 2: Returns the domain
sString | Retrieves the specified value.

Example:

  transaction TMain
  var
    sSession   : string;
  begin
    CitrixInit(640, 480);
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixKeyString("test");
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    ThinkTime(2.63);
    CitrixMouseClick(306, 289, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    CitrixGetSessionString(0, sSession);
    print("Citrix host name: " + sSession);
    CitrixGetSessionString(1, sSession);
    print("Citrix user name: " + sSession);
    CitrixGetSessionString(2, sSession);
    print("Citrix domain: " + sSession);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixAddInterrupt Function

Action

Adds an interrupt specification. On certain window events (creations, activations, destructions, and caption changes) all stored interrupt specifications are checked; when an interrupt specification matches an occurred event, then an interrupt is thrown. Interrupts may be handled by a Citrix event handler. For further information see the event-handler section.

Include file

CitrixAPI.bdh

Syntax

CitrixAddInterrupt( in nReason  : number,
                    in sCaption : string allownull,
                    in nMatch   : number,
                    in nWindow  : number optional): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nReason

  • INTERRUPT_WindowCreate: An interrupt is triggered if a created window matches the specified conditions.

  • INTERRUPT_WindowActivate: An interrupt is triggered if an activated window matches the specified conditions.

  • INTERRUPT_WindowDestroy: An interrupt is triggered if a destroyed window matches the specified conditions.

  • INTERRUPT_CaptionChange: An interrupt is triggered if a changed window caption matches the specified window caption (specified in the nMatch parameter) or the window with the nWindow ID changes its caption.

sCaption | The caption that triggers an interrupt if it matches the window caption (which is specified in the nMatch parameter). If this parameter is provided (and not null or “”) then the nWindow parameter will be ignored.
nMatch

Specifies one of the following values:

  • MATCH_Exact (default): Case-sensitive comparison.
  • MATCH_ExactNoCase: Case-insensitive comparison.
  • MATCH_Wildcard: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case sensitively.
  • MATCH_WildcardNoCase: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case insensitively.
  • MATCH_RegExp: The search string is a regular expression. See the regular expression chapter for a description of Silk Performer's regular expression capability.
nWindow | If the sCaption parameter is not provided, then windows will be examined by comparing their ID’s against the nWindow parameter (optional).

Example

transaction TMain
  var
  begin
    CitrixInit(800, 600);
    CitrixAddInterrupt(INTERRUPT_WindowCreate, "ICA Seamless Host Agent", MATCH_Exact);
    CitrixConnect("lab74", "labadmin", "labpass", "testlab1", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 572, 804, 30);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(36, 17, hWnd4, MOUSE_ButtonLeft, MOD_None, -1, 0);
    hWnd11 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 313, 163, 263);
    CitrixMouseClick(62, 247, hWnd11, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd11, EVENT_Destroy);
    hWnd12 := CitrixWaitForWindowCreation("Shut Down Windows", MATCH_Exact, 0x94C808CC, 191, 136, 417, 192);
    CitrixWaitForWindow(hWnd12, EVENT_Activate);
    CitrixMouseClick(203, 170, hWnd12, MOUSE_ButtonLeft);
    CitrixWaitForDisconnect();
  end TMain;
dclevent
  handler Handler1 <EVENT_CITRIXINTERRUPT>
  var
    nInterrupt, nWindow : number;
    nStyle              : number;
  begin
    CitrixGetActInterrupt(nInterrupt, nWindow);

    ErrorAdd(FACILITY_CITRIXENGINE, 47, SEVERITY_INFORMATIONAL);
    print(string(nWindow));
    if CitrixGetWindowStyle(nWindow, nStyle) and (nStyle <> 0xB4000000) then
      CitrixWaitForWindow(nWindow, EVENT_Activate);
      CitrixMouseClick(201, 202, nWindow, MOUSE_ButtonLeft);
      CitrixWaitForWindow(nWindow, EVENT_Destroy);
    end;
    ErrorRemove(FACILITY_CITRIXENGINE, 47);

  end Handler1;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixGetActInterrupt Function

Action

To be used only within an event handler. This function returns the actual Citrix interrupt reason as well as the window that triggered it.

Include file

CitrixAPI.bdh

Syntax

CitrixGetActInterrupt( out nReason : number allownull ,
                       out nWindow : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nReason

Returns one of the following values:

  • INTERRUPT_WindowCreate

  • INTERRUPT_WindowActivate

  • INTERRUPT_WindowDestroy

  • INTERRUPT_CaptionChange
nWindow | Retrieves the window handle that triggered the interrupt.

Example

transaction TMain
  var
  begin
    CitrixInit(800, 600);
    CitrixAddInterrupt(INTERRUPT_WindowCreate, "ICA Seamless Host Agent", MATCH_Exact);
    CitrixConnect("lab74", "labadmin", "labpass", "testlab1", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 572, 804, 30);
    CitrixWaitForWindowCreation("Program Manager");
    CitrixMouseClick(36, 17, hWnd4, MOUSE_ButtonLeft, MOD_None, -1, 0);
    hWnd11 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 313, 163, 263);
    CitrixMouseClick(62, 247, hWnd11, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd11, EVENT_Destroy);
    hWnd12 := CitrixWaitForWindowCreation("Shut Down Windows", MATCH_Exact, 0x94C808CC, 191, 136, 417, 192);
    CitrixWaitForWindow(hWnd12, EVENT_Activate);
    CitrixMouseClick(203, 170, hWnd12, MOUSE_ButtonLeft);
    CitrixWaitForDisconnect();
  end TMain;
dclevent
  handler Handler1 <EVENT_CITRIXINTERRUPT>
  var
    nInterrupt, nWindow : number;
    nStyle              : number;
  begin
    CitrixGetActInterrupt(nInterrupt, nWindow);

    ErrorAdd(FACILITY_CITRIXENGINE, 47, SEVERITY_INFORMATIONAL);
    print(string(nWindow));
    if CitrixGetWindowStyle(nWindow, nStyle) and (nStyle <> 0xB4000000) then
      CitrixWaitForWindow(nWindow, EVENT_Activate);
      CitrixMouseClick(201, 202, nWindow, MOUSE_ButtonLeft);
      CitrixWaitForWindow(nWindow, EVENT_Destroy);
    end;
    ErrorRemove(FACILITY_CITRIXENGINE, 47);

  end Handler1;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixRemoveInterrupt Function

Action

Removes the interrupt specification that is added by a call to CitrixAddInterrupt. Specifies exactly the same parameters that are provided by the call to CitrixAddInterrupt.

Include file

CitrixAPI.bdh

Syntax

CitrixRemoveInterrupt( in nReason  : number,
                       in sCaption : string allownull,
                       in nMatch   : number,
                       in nWindow  : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
nReason

  • INTERRUPT_WindowCreate: An interrupt is triggered if a created window matches the specified conditions.

  • INTERRUPT_WindowActivate: An interrupt is triggered if an activated window matches the specified conditions.

  • INTERRUPT_WindowDestroy: An interrupt is triggered if a destroyed window matches the specified conditions.

  • INTERRUPT_CaptionChange: An interrupt is triggered if a changed window caption matches the specified window caption (specified in the nMatch parameter) or the window with the nWindow ID changes its caption.

sCaption | The caption that triggers an interrupt if it matches the window caption (which is specified in the nMatch parameter). If this parameter is provided (and not null or “”) then the nWindow parameter will be ignored.
nMatch

Specify one of the following values (optional):

  • MATCH_Exact (default): Case-sensitive comparison.
  • MATCH_ExactNoCase: Case-insensitive comparison.
  • MATCH_Wildcard: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case sensitively.
  • MATCH_WildcardNoCase: The search string must either begin or end with a '*' character, which matches everything. The rest of the string is compared case insensitively.
  • MATCH_RegExp: The search string is a regular expression. See the regular expression chapter for a description of Silk Performer's regular expression capability.
nWindow | If the sCaption parameter is not provided, then windows will be examined by comparing their ID’s against the nWindow parameter.

親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixGetMeasures Function

Action

Retrieves measures collected by a Citrix client for an actual session. Null may be specified for measures that are not of interest.

Include file

CitrixAPI.bdh

Syntax

CitrixGetMeasures( out nBytesIn   : number optional,
                   out nBytesOut  : number optional,
                   out nFramesIn  : number optional,
                   out nFramesOut : number optional,
                   out nErrorsIn  : number optional,
                   out nErrorsOut : number optional,
                   out nLastLat   : number optional,
                   out nAvgLat    : number optional,
                   out nLatDev    : number optional ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
nBytesIn | Received bytes
nBytesOut | Sent bytes
nFramesIn | Received frames
nFramesOut | Sent frames
nErrorsIn | Received errors
nErrorsOut | Sent errors
nLastLat | Last latency
nAvgLat | Average latency
nLatDev | Current latency deviation

Example:

  transaction TMain
  var
    nBytesIn   : number;
    nBytesOut  : number;
    nFramesIn  : number;
    nFramesOut : number;
    nErrorsIn  : number;
    nErrorsOut : number;
    nLastLat   : number;
    nAvgLat    : number;
    nLatDev    : number;
  begin
    CitrixInit(640, 480);
    CitrixSetApplication("Excel");
    CitrixConnect("myserver", "myusername", "mypass", "mydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd4 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 488);
    CitrixKeyString("test");
    CitrixMouseClick(636, 14, hWnd4, MOUSE_ButtonLeft);
    ThinkTime(2.63);
    CitrixMouseClick(306, 289, hWnd4, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd4, EVENT_Destroy);
    CitrixGetMeasures(nBytesIn, nBytesOut, nFramesIn, nFramesOut, nErrorsIn, nErrorsOut, nLastLat, nAvgLat, nLatDev);
    print("Citrix measures: ");
    print(" bytes in: " + string(nBytesIn));
    print(" bytes out: " + string(nBytesOut));
    print(" frames in: " + string(nFramesIn));
    print(" frames out: " + string(nFramesOut));
    print(" errors in: " + string(nErrorsIn));
    print(" errors out: " + string(nErrorsOut));
    print(" last latency: " + string(nLastLat));
    print("  avg. latency:" + string(nAvgLat));
    print(" current latency deviation: " + string(nLatDev));
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixGetScreen Function

Action

Takes a screenshot of the selected region and writes the screenshot to a file in the result directory. The file name can be provided by the first parameter. If the file name is omitted, it will be automatically generated by the user ID and hash value of the image. Use the optional sOutFile parameter to get the generated file name.

The screen region can be specified absolutely or relatively to a window (by specifying a window handle). When only a window handle and no position or size is provided, the region specified by the window outline is used. CitrixGetScreen without any parameter takes a screenshot of the entire screen and saves it to a file that’s name is a concatenation of the calling user and the hash value of the current screen.

注: CitrixGetScreen can only be called in Normal Mode (see CitrixInit). If used in Fast Mode, an error will be raised.

Include file

CitrixAPI.bdh

Syntax

CitrixGetScreen( in  sFile    : string optional,
                 in  nWindow  : number optional,
                 in  nX       : number optional,
                 in  nY       : number optional,
                 in  nWidth   : number optional,
                 in  nHeight  : number optional,
                 out sOutFile : string optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sFile | Name of the file, which is stored in the result directory (optional). When this parameter is omitted the filename is generated automatically using the hash value of the image.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP or omit this parameter to specify a region relative to the desktop (or the entire desktop).
nX | X coordinate of the left margin of the screen region (optional).
nY | Y coordinate of the top margin of the screen region (optional).
nWidth | Width of the region (optional). Omit this parameter to take a screen shot of the entire window.
nHeight | Height of the region (optional). Omit this parameter to take a screenshot of the entire window.
sOutFile | Returns the name of the written file (optional).

Example:

  transaction TMain
  var
  begin
    CitrixInit(640, 480);
    CitrixConnect("citserver", "user", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(3.31);
    CitrixMouseClick(214, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(112, 16, DESKTOP, MOUSE_ButtonLeft);
    hWnd9 := CitrixWaitForWindowCreation("Microsoft Excel – Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 460);
    CitrixGetScreen("screenshot01.bmp", hWnd9, 10, 20, 100, 100);
    CitrixMouseClick(634, 9, hWnd9, MOUSE_ButtonLeft);    CitrixWaitForWindow(hWnd9, EVENT_Destroy);
    ThinkTime(3.02);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixGetScreenHash Function

Action

Retrieves the hash value of the selected screen.

The screen region can be specified absolutely or relatively to a window (by specifying a window handle). When a window handle is provided without position or size, the region specified by the window outline is used.

注: CitrixGetScreenHash can only be called in Normal Mode (see CitrixInit). If used in Fast Mode, an error will be raised.

Include file

CitrixAPI.bdh

Syntax

CitrixGetScreenHash( out sHash   : string,
                     in  nWindow : number optional,
                     in  nX      : number optional,
                     in  nY      : number optional,
                     in  nWidth  : number optional,
                     in  nHeight : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sHash | Hash value of the selected screen region.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP or omit this parameter to specify a region relative to the desktop (or the entire desktop).
nX | X coordinate of the left margin of the screen region (optional).
nY | Y coordinate of the top margin of the screen region (optional).
nWidth | Width of the region (optional). Omit this parameter to get a screenshot of the entire window.
nHeight | Height of the region (optional). Omit this parameter to get a screenshot of the entire window.

Example:

  transaction TMain
  var
    sHash : string;
  begin
    CitrixInit(640, 480);
    CitrixConnect("citserver", "user", "password", "companydomain", COLOR_16bit);
    CitrixWaitForLogon();
    hWnd6 := CitrixWaitForWindowCreation("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4, 0, 0, 390, 223);
    CitrixWaitForWindow(hWnd6, EVENT_Activate);
    CitrixWaitForWindowCreation("Program Manager");
    ThinkTime(3.31);
    CitrixMouseClick(214, 197, hWnd6, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd6, EVENT_Destroy);
    CitrixMouseDblClick(112, 16, DESKTOP, MOUSE_ButtonLeft);
    hWnd9 := CitrixWaitForWindowCreation("Microsoft Excel - Book*", MATCH_Wildcard, 0x15CF0000, -4, -4, 648, 460);
    CitrixGetScreenHash(sHash, hWnd9, 10, 20, 100, 100);
    print(sHash);
    CitrixMouseClick(634, 9, hWnd9, MOUSE_ButtonLeft);
    CitrixWaitForWindow(hWnd9, EVENT_Destroy);
    ThinkTime(3.02);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixParseText Function

Action

This function performs optical character recognition (OCR) on a selected screen region and stores the result in a sResult parameter. Screen regions can be specified absolutely or relative to a window (by specifying a window handle).

注: OCR operations are only possible in Normal Mode (see CitrixInit). This function fails when used in Fast Mode. When the optional font parameters are present, the pattern file is checked for the used font’s availability. When the parameters are omitted font checking is not performed.

For successful text conversion it is necessary to use the perfOcrFonts.dat and perfOcrPattern.pat configuration files, which contain the used fonts in the correct size and format. These two files must be added to the Data Files section of the project (both files are located at <public user documents>\Silk Performer 21.0\Data). If the files do not exist, or they do not contain the right specifications, they can be generated or updated using the OCR dialog in the Citrix System Settings.

Include file

CitrixAPI.bdh

Syntax

CitrixParseText( out sResult    : string,
                 in  nWindow    : number,
                 in  nX         : number,
                 in  nY         : number,
                 in  nWidth     : number,
                 in  nHeight    : number,
                 in  sFont      : string optional,
                 in  nFontSize  : number optional,
                 in  nFontFlags : number optional ) : boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sResult | String variable that receives the converted text.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the screen region.
nY | Y coordinate of the top margin of the screen region.
nWidth | Width of the region.
nHeight | Height of the region
sFont | Font that should be checked for on the system and in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. When a specified font is not on the operating system, it must be installed. If the provided configuration files do not contain the font, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted font checking is not performed.
nFontSize | The font size that should be checked for in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If the provided configuration files do not contain the font-size, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted font-size checking is not performed.
nFontFlags

Specifies the font shape (bold, italic, or underlined) that should be checked for in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If the provided configuration files do not contain the specified font shapes, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted font-shape checking is not performed.

Specify any combination of the following values:

  • FONT_FLAG_Italic

  • FONT_FLAG_Bold

  • FONT_FLAG_Underlined

Example

  transaction TMain
  var
    sParam1 : string;
  begin
    CitrixInit(640, 480); // do not change the resolution
    CitrixConnect("lab1", "user", "password", "domain", COLOR_16bit);
    CitrixWaitForLogon();
    CitrixParseText(sParam1, DESKTOP, 73, 109, 74, 23, "Tahoma", 8);
    Print("sParam1: " + sParam1);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixParseTextFuzzy Function

Action

This function performs optical character recognition (OCR) on a selected screen region and stores the result in a sResult parameter. Screen regions can be specified absolutely or relative to a window (by specifying a window handle).

注: OCR operations are only possible in Normal Mode (see CitrixInit). This function fails when used in Fast Mode. When the optional font parameters are present, the pattern file is checked for the used font’s availability. When the parameters are omitted font checking is not performed.

CitrixParseTextFuzzy performs OCR more exactly than CitrixParseText but requires more resources.

Include file

CitrixAPI.bdh

Syntax

CitrixParseTextFuzzy( out sResult    : string,
                      in  nWindow    : number,
                      in  nX         : number,
                      in  nY         : number,
                      in  nWidth     : number,
                      in  nHeight    : number,
                      in  sLanguage  : string ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sResult | String variable that receives the converted text.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the screen region.
nY | Y coordinate of the top margin of the screen region.
nWidth | Width of the region.
nHeight | Height of the region
sLanguage | The language of the text to be verified. Possible language codes are chi_sim, dan, deu, eng, fin, fra, it, jpn, nld, nor, pol, spa and swe.

Example

  transaction TMain
  var
    sParam1 : string;
  begin
    CitrixInit(640, 480); // do not change the resolution
    CitrixConnect("lab1", "user", "password", "domain", COLOR_16bit);
    CitrixWaitForLogon();
    CitrixParseTextFuzzy(sParam1, DESKTOP, 73, 109, 74, 23, "eng");
    Print("sParam1: " + sParam1);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixVerifyText Function
CitrixVerifyTextFuzzy Function


CitrixVerifyText Function

Action

This function performs optical character recognition (OCR) on a selected screen region and compares the result with a provided string. When the verification condition is not met, an error is raised. You can specify the severity of the error. Screen regions can be specified absolutely or relative to a window (by specifying a window handle).

注: OCR operations are only possible in Normal Mode (see CitrixInit). This function will fail when used in Fast Mode.

When optional font parameters are present, the pattern file is checked to see if the selected font is available. When font parameters are omitted font checking is not performed.

For successful text conversion it is necessary to use the perfOcrFonts.dat and perfOcrPattern.pat configuration files, which contain used fonts in the correct size and format. These files must be added to the Data Files section of the project (both files are located at <public user documents>\Silk Performer 21.0\Data). If the files are not available, or do not contain the correct specifications, they can be generated or updated using the OCR dialog in the Citrix System Settings.

Include file

CitrixAPI.bdh

Syntax

CitrixVerifyText( in sVerify    : string,
                  in nWindow    : number,
                  in nX         : number,
                  in nY         : number,
                  in nWidth     : number,
                  in nHeight    : number,
                  in nOptions   : number optional,
                  in nSeverity  : number optional := SEVERITY_ERROR,
                  in sFont      : string optional,
                  in nFontSize  : number optional,
                  in nFontFlags : number optional ): boolean;

Return value

  • true if the function succeeds

  • false otherwise

Parameter | Description
sVerify | String to compare with the parsed data.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the screen region.
nY | Y coordinate of the top margin of the screen region.
nWidth | Width of the region.
nHeight | Height of the region
nOptions

Specify any combination of the following flags (optional):

  • CITRIX_FLAG_Equal When this flag is set the verification succeeds if the comparison succeeds (default).

  • CITRIX_FLAG_NotEqual When this flag is set the verification succeeds if the comparison fails.

  • CITRIX_FLAG_CaseSensitive When this flag is set the string compare operation is case sensitive.

  • CITRIX_FLAG_IgnoreWhitespace When this flag is set all white spaces are ignored.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)
sFont | Font that should be checked for on the system and in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If a specified font is not on the operating system, then it must be installed. If the provided configuration files do not contain the font, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted font checking is not performed.
nFontSize | The font size that should be checked for in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If the provided configuration files do not contain the font size, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted, font-size checking is not performed.
nFontFlags

Specifies the font shape (bold, italic, or underlined) that should be checked for in the provided configuration files (optional). This parameter does not affect the conversion; it enables rapid fault detection when using remote agents and moving projects to different hosts. If the provided configuration files do not contain the specified font shapes, use the OCR configuration dialog (System Settings / Citrix) to adjust them. When this parameter is omitted, font-shape checking is not performed.

Specify any combination of the following values:

  • FONT_FLAG_Italic

  • FONT_FLAG_Bold

  • FONT_FLAG_Underlined

Example

  transaction TMain
  begin
    CitrixInit(640, 480); // do not change the resolution
    CitrixConnect("lab1", "user", "password", "domain", COLOR_16bit);
    CitrixWaitForLogon();
    CitrixVerifyText("Joe", DESKTOP, 73, 109, 74, 23, CITRIX_FLAG_IgnoreWhitespace, SEVERITY_WARNING,"Tahoma", 8);
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyTextFuzzy Function


CitrixVerifyTextFuzzy Function

Action

This function performs optical character recognition (OCR) on a selected screen region and compares the result with a provided string. When the verification condition is not met, an error is raised. You can specify the severity of the error. Screen regions can be specified absolutely or relative to a window (by specifying a window handle).

注: OCR operations are only possible in Normal Mode (see CitrixInit). This function will fail when used in Fast Mode.

CitrixVerifyTextFuzzy performs OCR more exactly than CitrixVerifyText but requires more resources.

Include file

CitrixAPI.bdh

Syntax

CitrixVerifyTextFuzzy( in sVerify    : string,
                       in nWindow    : number,
                       in nX         : number,
                       in nY         : number,
                       in nWidth     : number,
                       in nHeight    : number,
                       in sLanguage  : string,
                       in nOptions   : number optional,
                       in nSeverity  : number optional := SEVERITY_ERROR ): boolean;

Return value

  • true if successful

  • false otherwise

Parameter | Description
sVerify | String to compare with the parsed data.
nWindow | Window handle returned by a call to CitrixWaitForWindowCreation. Use DESKTOP to specify a region relative to the desktop.
nX | X coordinate of the left margin of the screen region.
nY | Y coordinate of the top margin of the screen region.
nWidth | Width of the region.
nHeight | Height of the region
sLanguage | The language of the text to be verified. Possible language codes are chi_sim, dan, deu, eng, fin, fra, ita, jpn, nld, nor, pol, spa and swe.
nOptions

Specify any combination of the following flags (optional):

  • CITRIX_FLAG_Equal When this flag is set the verification succeeds if the comparison succeeds (default).

  • CITRIX_FLAG_NotEqual When this flag is set the verification succeeds if the comparison fails.

  • CITRIX_FLAG_CaseSensitive When this flag is set the string compare operation is case sensitive.

  • CITRIX_FLAG_IgnoreWhitespace When this flag is set all white spaces are ignored.

nSeverity Optional: Severity of the error that is raised if the verification fails. Can be one of the following values:
  • SEVERITY_SUCCESS: Success; no error (numerical value: 0)
  • SEVERITY_INFORMATIONAL: Informational; no error (numerical value: 1)
  • SEVERITY_WARNING: Warning; no error (numerical value: 2)
  • SEVERITY_ERROR: (Default) Error; simulation continues (numerical value: 3)
  • SEVERITY_TRANS_EXIT: Error; the active transaction is aborted (numerical value: 4)
  • SEVERITY_PROCESS_EXIT: Error; the simulation is aborted (numerical value: 5)

Example

  transaction TMain
  begin
    CitrixInit(640, 480); // do not change the resolution
    CitrixConnect("lab1", "user", "password", "domain", COLOR_16bit);
    CitrixWaitForLogon();
    CitrixVerifyTextFuzzy("Joe", DESKTOP, 73, 109, 74, 23, CITRIX_FLAG_IgnoreWhitespace, SEVERITY_WARNING, "eng");
    CitrixDisconnect();
  end TMain;
親トピック: General Functions
関連資料
CitrixSetClientName Function
CitrixSetOption Function
CitrixPing Function
CitrixSetProperty Function
CitrixSetRamDisk Function
CitrixSetSocksProxy Function
CitrixGetSessionString Function
CitrixAddInterrupt Function
CitrixGetActInterrupt Function
CitrixRemoveInterrupt Function
CitrixGetMeasures Function
CitrixGetScreen Function
CitrixGetScreenHash Function
CitrixParseText Function
CitrixParseTextFuzzy Function
CitrixVerifyText Function


.NET テストのサポート

このセクションでは、Silk Performer .NET Framework と .NET Explorer を使用して Microsoft .NET をテストする詳細な手順を説明します。

  • .NET Explorer ヘルプ
    .NET Explorer を使用して Microsoft .NET をテストする詳細な手順を説明します。
  • .NET Framework Developer Guide
    Silk Performer .NET Framework を使用して Microsoft .NET をテストする詳細な手順を説明します。
  • .NET 用の SOAP Web サービスをテストする
    SOAP ベース Web サービスの基本および .NET でのテスト方法についての詳細を説明します。


.NET Explorer ヘルプ

  • Tools and Samples
    Explains the tools, sample applications and test projects that Silk Performer provides for testing Java and .NET.
  • Silk Performer .NET Framework
    Silk Performer の .NET Framework では、開発者と QA 担当者はそれぞれ完全に特化した環境で作業することができ、開発とテストにかける労力を調整することができます。
  • Tour of the UI
    Introduces the main elements of the .NET Explorer interface, including the Loaded Components, Method Call, and Test Scenario panes, and the workflow bar.
  • Setting Up .NET Explorer Projects
    Explains how to set up projects and define tests with .NET Explorer.
  • Setting Up Tests
    Includes an introduction to .NET Explorer GUI elements, customization of input parameters, definition of output value verifications, and generation of random variables. The section concludes with an explanation of how to use .NET Explorer to test .NET Remoting.
  • Animated Runs
    Explains that animated runs execute the test methods that are assigned to your test cases. Several output logs and reports are available.
  • Analyzing Results
    Lists the four file types that are available for analyzing Web Service and .NET Remoting test results.
  • Configuring Option Settings
    Explains the application setting options that are available in .NET Explorer.
  • Exporting Projects
    Explains that .NET Explorer enables you to export projects to Silk Performer and Visual Studio .NET.
  • Command Line Execution
    For automated execution of .NET Explorer test cases, use the command line interface.
親トピック: .NET テストのサポート


Tools and Samples

Explains the tools, sample applications and test projects that Silk Performer provides for testing Java and .NET.
  • Introduction
    Serves as a high-level overview of the different test approaches and tools, including Java Explorer, Java Framework, .NET Explorer, and .NET Framework, that are offered by Silk Performer Service Oriented Architecture (SOA) Edition.
  • Provided Tools
    Offers an overview of each of the tools provided with Silk Performer for testing Java and .NET.
  • Sample Applications for testing Java and .NET
    Explains that the sample applications provided with Silk Performer enable you to experiment with Silk Performer's component-testing functionality.
  • Sample Test Projects
    Explains the sample projects that are included with Silk Performer.
親トピック: .NET Explorer ヘルプ
親トピック: .NET Framework Developer Guide
親トピック: Java Explorer のヘルプ
親トピック: Java Framework Developer Guide


Introduction

This introduction serves as a high-level overview of the different test approaches and tools, including Java Explorer, Java Framework, .NET Explorer, and .NET Framework, that are offered by Silk Performer Service Oriented Architecture (SOA) Edition.

Silk Performer SOA Edition Licensing

Each Silk Performer installation offers the functionality required to test .NET and Java components. Access to Java and .NET component testing functionality is however only enabled through Silk Performer licensing options. A Silk Performer SOA Edition license is required to enable access to component testing functionality. Users may or may not additionally have a full Silk Performer license.

What You Can Test With Silk Performer SOA Edition

With Silk Performer SOA Edition you can thoroughly test various remote component models, including:

  • Web Services
  • .NET Remoting Objects
  • Enterprise JavaBeans (EJB)
  • Java RMI Objects
  • General GUI-less Java and .NET components

Unlike standard unit testing tools, which can only evaluate the functionality of a remote component when a single user accesses it, Silk Performer SOA Edition can test components under concurrent access by up to five virtual users, thereby emulating realistic server conditions. With a full Silk Performer license, the number of virtual users can be scaled even higher. In addition to testing the functionality of remote components, Silk Performer SOA Edition also verifies the performance and interoperability of components.

Silk Performer SOA Edition assists you in automating your remote components by:

  • Facilitating the development of test drivers for your remote components
  • Supporting the automated execution of test drivers under various conditions, including functional test scenarios and concurrency test scenarios
  • Delivering quality and performance measures for tested components

Silk Performer offers the following approaches to creating test clients for remote components:

  • Visually, without programming, through Java Explorer and .NET Explorer
  • Using an IDE (Microsoft Visual Studio)
  • Writing Java code
  • Recording an existing client
  • Importing JUnit or NUnit testing frameworks
  • Importing Java classes
  • Importing .NET classes
親トピック: Tools and Samples


Provided Tools

Offers an overview of each of the tools provided with Silk Performer for testing Java and .NET.
  • Silk Performer .NET Explorer
    Enables you to test Web Services, .NET Remoting objects, and other GUI-less .NET objects.
  • Silk Performer Visual Studio Extension
    Allows you to implement test drivers in Microsoft Visual Studio that are compatible with Silk Performer.
  • Silk Performer Java Explorer
    Enables you to test Web Services, Enterprise JavaBeans (EJB), RMI objects, and other GUI-less Java objects.
  • Silk Performer Workbench
    Explains that remote component tests that are developed and executed using Java Explorer or .NET Explorer can be executed within Silk Performer Workbench.
親トピック: Tools and Samples


Silk Performer .NET Explorer

Silk Performer .NET Explorer, which was developed using .NET, enables you to test Web Services, .NET Remoting objects, and other GUI-less .NET objects. .NET Explorer allows you to define and execute complete test scenarios with different test cases without requiring manual programming; everything is done visually through point and click operations. Test scripts are visual and easy to understand, even for staff members who are not familiar with .NET programming languages.

Test scenarios created with .NET Explorer can be exported to Silk Performer for immediate reuse in concurrency and load testing, and to Microsoft Visual Studio for further customization.

親トピック: Provided Tools


Silk Performer Visual Studio Extension

The Silk Performer Visual Studio extension allows you to implement test drivers in Microsoft Visual Studio that are compatible with Silk Performer. Such test drivers can be augmented with Silk Performer features that facilitate test organization, verification, performance measurement, test data generation, and reporting.

Tests created with the extension can be run either within Microsoft Visual Studio, with full access to Silk Performer's functionality, or within Silk Performer, for concurrency and load testing scenarios.

The extension offers the following features:
  • Writing test code in any of the main .NET languages (C# or VB.NET).
  • Testing Web services / .NET Remoting objects and redirecting HTTP traffic over the Silk Performer Web engine to take advantage of features such as modem simulation and IP-address multiplexing. SOAP envelopes can also be explored using TrueLog Explorer.
  • Defining virtual users and their transactions through .NET custom attributes. A BDL script is generated automatically based on the custom attributes that have been applied to classes/methods.
  • Running TryScript tests from within Microsoft Visual Studio with the ability to watch virtual user output in a tool window within Microsoft Visual Studio.
  • Exploring the results of Try Scripts.

.NET Resources

  • http://msdn.microsoft.com/net
  • Visual Studio 拡張機能のインストール
    Visual Studio で Silk Performer を使用するには、Visual Studio 拡張機能をインストールします。
  • Starting the Visual Studio Extension
    Start the Visual Studio extension to run .NET tests created with Microsoft Visual Studio.
親トピック: Provided Tools
親トピック: Understanding the .NET Framework Platform


Silk Performer Java Explorer

Silk Performer Java Explorer, which was developed using Java, enables you to test Web Services, Enterprise JavaBeans (EJB), RMI objects, and other GUI-less Java objects. Java Explorer allows you to define and execute complete test scenarios with multiple test cases without requiring manual programming. Everything can be done visually via point and click operations. Test scripts are visual and easy to understand, even for personnel who are not familiar with Java programming.

Test scenarios created with Java Explorer can be exported to Silk Performer for immediate reuse in concurrency and load testing.

注: Java Explorer is only compatible with JDK versions 1.2 and later (v1.4 or later recommended).

Java Resources

  • http://java.sun.com
  • http://www.javaworld.com
親トピック: Provided Tools


Silk Performer Workbench

Remote component tests that are developed and executed using Java Explorer or .NET Explorer can be executed within Silk Performer Workbench. Silk Performer is an integrated test environment that serves as a central console for creating, executing, controlling and analyzing complex testing scenarios. Java Explorer and .NET Explorer visual test scripts can be exported to Silk Performer by creating Silk Performer Java Framework and .NET Framework projects. While Java Explorer and .NET Explorer serve as test-beds for functional test scenarios, Silk Performer can be used to run the same test scripts in more complex scenarios for concurrency and load testing.

In the same way that Silk Performer is integrated with Java Explorer and .NET Explorer, Silk Performer is also integrated with Silk Performer's Visual Studio .NET Add-On. Test clients created in Microsoft Visual Studio using Silk Performer's Visual Studio .NET Add-On functionality can easily be exported to Silk Performer for concurrency and load testing.

注: Because there is such a variety of Java development tools available, a Java tool plug-in is not feasible. Instead, Silk Performer offers features that assist Java developers, such as syntax highlighting for Java and the ability to run the Java complier from Silk Performer Workbench.

In addition to the integration of Silk Performer with .NET Explorer, Java Explorer, and Microsoft Visual Studio, you can use Silk Performer to write custom Java and .NET based test clients using Silk Performer's powerful Java and .NET Framework integrations.

The tight integration of Java and .NET as scripting environments for Silk Performer test clients allows you to reuse existing unit tests developed with JUnit and NUnit by embedding them into Silk Performer's framework architecture. To begin, launch Silk Performer and create a new Java or .NET Framework-based project.

In addition to creating test clients visually and manually, Silk Performer also allows you to create test clients by recording the interactions of existing clients, or by importing JUnit test frameworks or existing Java/.NET classes. A recorded test client precisely mimics the interactions of a real client.

注: The recording of test clients is only supported for Web Services clients.

To create a Web Service test client based on the recording of an existing Web Service client, launch Silk Performer and create a new project of application type Web Services/XML/SOAP.

親トピック: Provided Tools


Sample Applications for testing Java and .NET

The sample applications provided with Silk Performer enable you to experiment with Silk Performer's component-testing functionality.

Sample applications for the following component models are provided:

  • Web Services
  • .NET Remoting
  • Java RMI
  • Public Web Services
    Lists Web Services that are hosted on publicly accessible servers:
  • .NET Message Sample
    Explains the .NET Message Sample, which provides a .NET sample application that utilizes various .NET technologies.
  • .NET Explorer Remoting Sample
    Explains how the .NET Remoting sample application can be used for the testing of .NET Remoting.
  • Java RMI Samples
    Explains the Java RMI sample applications that are included.
親トピック: Tools and Samples


Public Web Services

Several Web Services are hosted on publicly accessible demonstration servers:

  • http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx
  • http://demo.borland.com/OrderWebServiceEx/OrderService.asmx
  • http://demo.borland.com/OrderWebService/OrderService.asmx
  • http://demo.borland.com/AspNetDataTypes/DataTypes.asmx
注: OrderWebService provides the same functionality as OrderWebServiceEx, however it makes use of SOAP headers in transporting session information, which is not recommended as a starting point for Java Explorer.
親トピック: Sample Applications for testing Java and .NET


.NET Message Sample

The .NET Message Sample provides a .NET sample application that utilizes various .NET technologies:

  • Web Services
  • ASP.NET applications communicating with Web Services
  • WinForms applications communicating with Web Services and directly with .NET Remoting objects.

To access the .NET Message Sample:

If you have Silk Performer SOA Edition: Go to Start > Programs > Silk > Silk Performer SOA Edition 21.0 > Sample Applications > .NET Framework Samples .

If you have Silk Performer Enterprise Edition: Go to Start > Programs > Silk > Silk Performer 21.0 > Sample Applications > .NET Framework Samples .

親トピック: Sample Applications for testing Java and .NET
関連概念
.NET メッセージ サンプルの使用


.NET Explorer Remoting Sample

The .NET Remoting sample application can be used in .NET Explorer for the testing of .NET Remoting.

To access the .NET Explorer Remoting Sample:

If you have Silk Performer SOA Edition: Go to Start > Programs > Silk > Silk Performer SOA Edition 21.0 > Sample Applications > .NET Explorer Samples > .NET Explorer Remoting Sample .

If you have Silk Performer Enterprise Edition: Go to Start > Programs > Silk > Silk Performer 21.0 > Sample Applications > .NET Explorer Samples > .NET Explorer Remoting Sample .

DLL reference for .NET Explorer: <public user documents>\Silk Performer 21.0\SampleApps\DOTNET\RemotingSamples\RemotingLib\bin\debug\RemotingLib.dll.

親トピック: Sample Applications for testing Java and .NET


Java RMI Samples

Two Java RMI sample applications are included:

  • A simple RMI sample application that is used in conjunction with the sample Java Framework project (<public user documents>\Silk Performer 21.0\Samples\JavaFramework\RMI).

    To start the ServiceHello RMI Server, go to: Start > Programs > Silk > Silk Performer 21.0 > Sample Applications > Java Samples > RMI Sample - SayHello.

  • A more complex RMI sample that uses RMI over IIOP is also available. For details on setting up this sample, go to: Start > Programs > Silk > Silk Performer 21.0 > Sample Applications > Java Samples > Product Manager. This sample can be used with the sample test project that is available at <public user documents>\Silk Performer 21.0\SampleApps\RMILdap.

Java RMI can be achieved using two different protocols, both of which are supported by Java Explorer:

  • Java Remote Method Protocol (JRMP)
  • RMI over IIOP

Java Remote Method Protocol (JRMP)

A simple example server can be found at <public user documents>\Silk Performer 21.0\SampleApps\Java.

Launch the batch file LaunchRemoteServer.cmd to start the sample server. Then use the Java Explorer Start Here Wizard to begin testing RMI objects. Select RMI and click Next.

The next dialog asks for the RMI registry settings and a classpath where the RMI interfaces for the client can be found. Here are the settings to be used for this example:

Host: localhost

Port: 1099

Client Stub Class: <public user documents>\Silk Performer 21.0\SampleApps\Java\Lib\sampleRmi.jar.

RMI over IIOP

A simple example server can be found at: <public user documents>\Silk Performer 21.0\SampleApps\Java.

Launch the batch file LaunchRemoteServerRmiOverIiop.cmd to start the sample server.

Use the Java Explorer Start Here Wizard to begin testing RMI objects. Select Enterprise JavaBeans/RMI over IIOP and click Next.

The next step asks for the JNDI settings and a classpath where the RMI interfaces for the client can be found. Here are the settings to be provided for this example:

Server: Sun J2EE Server

Factory: com.sun.jndi.cosnaming.CNCtxFactory

Provider URL: iiop://localhost:1050

Stub Class: Click Browse and add the following jar file: <public user documents>\Silk Performer 21.0\SampleApps\Java\Lib\sampleRmiOverIiop.jar.

親トピック: Sample Applications for testing Java and .NET


Sample Test Projects

The following sample projects are included with Silk Performer. To open a sample test project, open Silk Performer and create a new project. The Workflow - Outline Project dialog opens. Select the application type Samples.

  • .NET Sample Projects
    Lists the .NET sample projects that are included.
  • Java Sample Projects
    Lists the sample Java projects that are included.
親トピック: Tools and Samples


.NET Sample Projects

.NET Remoting

This sample project implements a simple .NET Remoting client using the Silk Performer .NET Framework. The .NET Remoting test client, written in C#, comes with a complete sample .NET Remoting server.

Web Services

This sample shows you how to test SOAP Web Services with the Silk Performer .NET Framework. The sample project implements a simple Web Services client. The Web Services test client, written in C#, accesses the publicly available demo Web Service at: http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx
親トピック: Sample Test Projects


Java Sample Projects

JDBC

This sample project implements a simple JDBC client using the Silk Performer Java Framework. The JDBC test client connects to the Oracle demo user scott using Oracle's "thin" JDBC driver. You must configure connection settings in the databaseUser.bdf BDL script to run the script in your environment. The sample accesses the EMP Oracle demo table.

RMI/IIOP

This sample project implements a Java RMI client using the Silk Performer Java Framework. The test client uses IIOP as the transport protocol and connects to a RMI server provided as a sample application. For detailed instructions on setting up this sample project, see <public user documents>\Silk Performer 21.0\SampleApps\RMILdap\Readme.html.

The Java RMI server can be found at: <public user documents>\Silk Performer 21.0\SampleApps\RMILdap.

RMI

This sample project implements a Java RMI client using the Silk Performer Java Framework. The test client connects to a RMI server provided as a sample application. For detailed instructions on setting up this sample project, see <public user documents>\Silk Performer 21.0\SampleApps\RMILdap\Readme.html.

To access the Java RMI server:

If you have Silk Performer SOA Edition: Go to Start > Programs > Silk > Silk Performer SOA Edition 21.0 > Sample Applications > Java Samples > RMI Sample - SayHello .

If you have Silk Performer Enterprise Edition: Go to Start > Programs > Silk > Silk Performer 21.0 > Sample Applications > Java Samples > RMI Sample - SayHello.

親トピック: Sample Test Projects


Testing .NET Components

Silk Performer’s Visual Studio .NET Add-On provides functionality to developers working in .NET-enabled languages for generating Silk Performer projects and test scripts entirely from within Visual Studio.0

  • The .NET Framework Approach
    With Silk Performer’s Visual Studio .NET Add-On, developers can generate Silk Performer projects and test scripts entirely from within Visual Studio.
  • The .NET Explorer Approach
    Explains how .NET Explorer integrates with Silk Performer and the .NET Framework.
親トピック: Silk Performer .NET Framework


The .NET Framework Approach

The .NET Framework approach to testing is ideal for developers and advanced QA personnel who are not familiar with coding BDL (Silk Performer’s Benchmark Description Language) scripting language, but are comfortable using Visual Studio to code .NET-enabled languages such as C#, COBOL.NET, C++ .NET, and Visual Basic.NET. With Silk Performer’s Visual Studio .NET Add-On, developers can generate Silk Performer projects and test scripts entirely from within Visual Studio by simply adding marking attributes to the methods they write in Visual Studio. The Add-On subsequently creates all BDL scripting that is required to enable the QA department to invoke newly created methods from Silk Performer.

親トピック: Testing .NET Components
関連概念
Understanding the .NET Framework Platform


The .NET Explorer Approach

.NET Explorer is a GUI-driven tool that is well suited to QA personnel who are proficient with Silk Performer in facilitating analysis of .NET components and thereby creating Silk Performer projects, test case specifications, and scripts from which load tests can be run.

Developers who are proficient with Microsoft Visual Studio may also find .NET Explorer helpful for quickly generating basic test scripts that can subsequently be brought into Visual Studio for advanced modification.

親トピック: Testing .NET Components


Understanding the .NET Framework Platform

.NET Framework is a powerful programming platform that enables developers to create Windows-based applications. The .NET Framework is comprised of CLR (Common Language Runtime, a language-neutral development environment) and FCL (Framework Class Libraries, an object-oriented functionality library).

Visit the .NET Framework デベロッパー センター for full details regarding the .NET Framework.

  • Working with Silk Performer .NET Framework
    Describes how you can use the Silk Performer .NET Framework to test Web services and .NET components.
  • Silk Performer .NET Framework Overview
    Provides an overview of how the Silk Performer .NET Framework works.
  • Intermediate Code
    Intermediate code is descriptive language that delivers instructions to functions that are available in libraries or within remote components.
  • Silk Performer Helper Classes
    Explains how helper classes serve as an interface between Silk Performer’s BDL language and the .NET language.
  • Silk Performer Visual Studio Extension
    Allows you to implement test drivers in Microsoft Visual Studio that are compatible with Silk Performer.
親トピック: Silk Performer .NET Framework


Working with Silk Performer .NET Framework

The Silk Performer .NET Framework allows you to test Web services and .NET components. The framework includes a set of the Benchmark Description Language (BDL) API functions of Silk Performer and an add-on for Microsoft Visual Studio.

注: For additional details regarding the available BDL API functions, refer to the Benchmark Description Language (BDL) Reference.

The framework allows you to either code your BDL calls to .NET objects manually in Silk Performer or use generated BDL code from the Visual Studio .NET Add-On. One benefit of the latter approach is that the developer of the .NET test driver doesn't require BDL skills, because BDL script generation is handled "behind the scenes" by the Visual Studio .NET Add-On. BDL Scripts can be launched for testing purposes from within Microsoft Visual Studio through the Add-On. All user output and generated output files, like TrueLogs, logs, output, and others, can be viewed from within Microsoft Visual Studio.

The .NET Framework allows you to route all HTTP/HTTPS traffic that is generated by a .NET component over the Silk Performer Web engine. This feature logs TrueLog nodes for each SOAP or .NET Remoting Web request, that is made by a .NET component.

This architecture provides good separation between test driver code and the test environment. There are also mechanisms for defining interaction between BDL and .NET, so you can design a fully customizable .NET test driver from a generated Silk Performer BDL script.

親トピック: Understanding the .NET Framework Platform
関連概念
Benchmark Description Language (BDL) Reference


Silk Performer .NET Framework Overview

.NET Framework Overview

The Silk Performer .NET Framework integration allows you to instantiate .NET objects and then call methods on them.

The Microsoft .NET Common Language Runtime (CLR) is hosted by the Silk Performer virtual user process when BDF scripts contain DotNet BDL functions.

HTTP/HTTPS traffic that is generated by instantiated .NET objects can be routed over the Silk Performer Web engine. Each WebRequest/WebResponse is logged in a TrueLog, allowing you to see what is sent over the wire when executing Web service and .NET Remoting calls.

Depending on the active profile setting, which is a .NET application domain setting, either each virtual user has its own .NET application domain where .NET objects are loaded, or alternately all virtual users in the process can share an application domain.

A .NET application domain isolates its running objects from other application domains. An application domain is like a virtual process where the objects running in the process are safe from interruption by other processes. The advantage of having one application domain for each virtual user is that the objects that are loaded for each user don't interrupt objects from other users, since they are isolated in their own domains.

The disadvantage is that additional application domains require additional administrative overhead of the CLR. This overhead results in longer object-loading and method-invocation times.

親トピック: Understanding the .NET Framework Platform


Intermediate Code

.NET code is not compiled into binary “machine” code. .NET code is intermediate code. Intermediate code is descriptive language that delivers instructions, for example “call this method” or “add these numbers”, to functions that are available in libraries or within remote components.

.NET code runs within a machine-independent runtime, or “execution engine,” which can be run on any platform—Windows, Unix, Linux, or Macintosh. So, regardless of the platform you’re running, you can run the same intermediate code. The drawback of this cross-platform compatibility is that, because intermediate code must be integrated with a runtime, it’s slower than compiled machine code.

.NET code calls basic Microsoft functionality that is available in .NET class libraries. These are the “base” classes. “Specific” classes, for creating Web applications, Windows applications, and Web Services are also available. In the runtime itself you also have some classes that are offered by Microsoft for building applications—all of this comprises the .NET Framework upon which intermediate code can be written using one of a number of available .NET-enabled programming languages.

It doesn’t matter which language is used to create the intermediate code that delivers instructions to the available classes through the .NET runtime—the resulting functionality is the same.

親トピック: Understanding the .NET Framework Platform


Silk Performer Helper Classes

.NET helper classes serve as an interface between Silk Performer’s BDL language and the .NET language. Although Silk Performer is able to call the .NET Framework through the basic functions that it offers, helper classes are required to enable .NET to call back to Silk Performer. With helper classes, which are generated automatically with .NET Explorer and the Visual Studio .NET Add-On, .NET developers can take full advantage of developing test code in .NET and don’t need to learn BDL. The test code that developers deliver to QA, by making use of helper classes, can be called from Silk Performer or scheduled in load tests using Silk Central.

親トピック: Understanding the .NET Framework Platform


Starting the Visual Studio Extension

Perform one of the following steps to start the Visual Studio extension:
  • Click Start > All Programs > Microsoft Visual Studio > Microsoft Visual Studio and create a new Silk Performer Visual Studio project.
  • Click Start > All Programs > Silk > Silk Performer 21.0 > Silk Performer Workbench and create a new project with the application type .NET > .NET Framework using Visual Studio .NET Add-On.
親トピック: Silk Performer Visual Studio Extension


Tour of the UI

Explains the view tabs that are offered by .NET Explorer.

  • Overview
    Introduces the main elements of the .NET Explorer interface, including the Loaded Components, Method Call, and Test Scenario panes, and the workflow bar.
  • Design Tab
    Explains that the Design tab offers the display of loaded components, invocation of methods, customization of input/output data, and the design of test scenarios.
  • Code Tab
    Explains that the Code tab displays generated code files for the current test scenario and that various code types are available.
  • Output Tab
    Explains that the Output tab displays log output during test runs.
親トピック: .NET Explorer ヘルプ


Overview

The main sections of the .NET Explorer interface are highlighted below.

Workflow Bar

The .NET Explorer workflow bar assists you in configuring and running your tests. The buttons on the workflow bar enable you to perform the following commands:

  • Start Here: Opens the Load File Wizard, which guides you through selecting the type of testing that you want to perform and loading the required components.
  • Test Class: Allows you to create a new test case for a class, or to add methods to an existing test case. This button is enabled when you select a class in the Loaded Components menu tree.
  • Invoke: Invokes the selected method in the Loaded Components menu tree and adds it to the selected test case in the Test Scenario menu tree.
  • Customize: Lets you store data as variables. This button is enabled when you select an input parameter in the Input Data menu tree, or an output parameter in the Output Data menu tree.
  • Verification: Allows you to define verifications for variables. This button is enabled when you select an output parameter in the Output Data menu tree that has been stored as a variable.
  • Run Test: Performs an animated run of your test cases.
  • Results: Lets you explore the results of your last test run through user report, TrueLog, error report, or log file analysis.
  • Net Traffic: Displays the request and response network traffic of the method call that is selected in the Test Scenario menu tree.

WSDL/DLL Address Field

The WSDL/DLL address field allows for the loading of either WSDLs or .NET assemblies.

Loaded Components Pane

The Loaded Components pane includes three tabs:
  • Classes: A list of loaded Web services, remotable classes/interfaces and other .NET classes. Allows you to instantiate objects, connect to remote objects, or call static methods.
  • Objects: A list of instantiated objects, global and random variables. Allows you to call methods on those kind of objects.
  • References: A list of loaded files (assemblies, WSDL‘s).

Method Call Pane

  • The Input Data menu tree shows input parameters (both headers and bodies) for the selected method call.
  • The Input Data Properties field shows the properties of the input parameters (value, type, pass, null, etc).
  • The Output Data menu tree shows the output parameters (header and body) of the last/selected method call.
  • The Output Data Properties field shows the properties of the output parameters (value, type, pass, null, etc).

Test Scenario Pane

The Test Scenario pane lists the current test cases along with all added method calls.

親トピック: Tour of the UI


Design Tab

The Design tab is the primary mode used to access the majority of .NET Explorer functionality. The Design tab offers the display of loaded components, invocation of methods, customization of input/output data, and the design of test scenarios.

  • Loaded Components Pane
    Explains that the Loaded Components pane, on the Design tab, distinguishes between classes and objects and displays these components within different tree menus.
  • Classes Tab
    Explains that all loaded classes and Web services are listed in the .NET ExplorerLoaded Components pane on the Classes tab.
  • Objects Tab
    Explains that when an object is instantiated through a constructor or returned by a method and stored in a variable, the object is listed in the Loaded Components pane on the Objects tab.
  • References Tab
    Explains that the References tab offers a list of loaded files (for example, assemblies and WSDLs).
親トピック: Tour of the UI


Loaded Components Pane

The Loaded Components pane, on the Design tab, distinguishes between classes and objects and displays these components within different tree menus.

On the Classes tab you see all loaded classes with their members (methods, fields, and properties) that can be accessed without the need of an object context. Normally these are static members and constructors.

When you instantiate a class, the created object is shown on the Objects tab with all instance members (methods, fields, and properties).

The two exceptions are Web services and interfaces. As an object instance is not required for Web Services (which are objects that expose static methods), all methods offered by Web services are shown on the Classes tab.

Interfaces are displayed in the Remotable Interfaces menu node. .NET Remoting allows for WellKnown remotable objects, which implement interfaces. Therefore it is not necessary to instantiate objects that work with WellKnowns (only one instance exists on the server). This is why .NET Explorer treats remotable interfaces like Web services. All members of interfaces are shown on the Classes tab. When you first attempt to invoke a method you must supply the endpoint of the remotable interface (as you must provide endpoints for Web services).

親トピック: Design Tab


Classes Tab

All loaded classes and Web services are listed in the .NET Explorer Loaded Components pane on the Classes tab.

Only constructors, static methods, and members are displayed, as there is no object context required to call them.

Web services and remotable interfaces are treated as if they only have static methods.

The following folders are available in Classes view:

Web Services

Classes that are derived from SoapHttpClientProtocol are included in this folder. Asynchronous method calls are not allowed and therefore are not shown.

Remotable Classes

Classes that are derived from MarshalByRefObjects are included in this folder. Activation information (type and URL) can be set at the class node.

To create a remote object, call one of the constructors or use the context menu.

Remotable Interfaces

Interfaces are included in this folder. Interfaces are treated like Web services.

An activation URL to a WellKnown object can be defined for each interface. If an interface is configured for remote access to a WellKnown object, simply call a method.

COM Classes

COM classes are COM wrapper classes that have been imported to be callable from .NET.

Other Classes

Other classes that do not fit in the above listed categories are included in this folder.

親トピック: Design Tab


Objects Tab

When an object is instantiated through a constructor or returned by a method and stored in a variable, the object is listed in the Loaded Components pane on the Objects tab. Instance members and methods that can then be invoked by the user are displayed.

The Objects tab shows objects stored in variables that have global scope and those that have a local scope of the currently selected test case.

Objects

By default, unless changed in the Options dialog box, only objects that differ from the basic types (for example, strings and integers) are listed here as objects. Instance methods and members are displayed to allow for easy invokation.

Members and properties have get/set accessors to enable the getting and setting of values.

Local test case objects are included in the Local Test Case Objects folder. Global test case objects are included in the Global Test Case Objects folder.

Variables

By default variables that store simple datatypes such as strings and integers are listed in the Global Random Variables folder, not as objects but as simple variables.

To work with variables of simple data types like objects, select Show Primitive Types as Objects on the Options dialog box.

親トピック: Design Tab


References Tab

The References tab offers a list of loaded files (for example, assemblies and WSDLs).

親トピック: Design Tab


Code Tab

Code view displays generated code files for the current test scenario. The following code types are available:

Client Proxy Code

The Client Proxy tab displays generated WebClient proxy code. When loading a WSDL file to access a Web Service, a WebClient proxy class is created. Proxy classes are created on method and type information in WSDL files. When Web Service methods return complex types, additional classes are declared. These additional classes are used to represent the complex types in the method calls that take complex parameters. For detailed information about WebClient Proxy generation, consult the MSDN for details regarding WSDL.EXE, a tool that creates proxy classes in the same way.

Test Driver Code

The test driver Test Code tab displays code generated for the test driver. This code can be compiled to a standalone console application. The main method for the application contains the calls to the test cases that are defined in your current test scenario. The test case methods contain all the calls that you have defined in your scenario for the respective test case.

When you export a standalone console application (via the Export menu) and then run the application, you will see output information regarding successful/failed methods in the console window.

Silk Performer .NET Framework Code

The Silk Performer .NET Framework tab displays test code for Silk Performer .NET Framework. For each test case in your current test scenario you will find a method with the [Transaction] attribute applied to it. These transaction methods contain all the calls that you have defined in your test scenario for the respective test case.

This code can either be exported to Microsoft Visual Studio as a Silk Performer .NET Project, or it can be exported directly to Silk Performer. In either case, results will be reported to Silk Performer and can be viewed in the log files or virtual user output.

Native BDL Script

The BDL Native tab displays native BDL script for Web Service calls. When testing Web Services, .NET Explorer can create BDL scripts with WebPagePost API calls for each Web Service method call in the current test scenario. WebPagePost methods are called with posted HTTP traffic from .NET Explorer during the last execution of the current test scenario.

Exporting to a native BDL script allows you to test a Web Service by sending its HTTP traffic without using the .NET Framework to generate the HTTP traffic.

BDL for .NET Framework

Th BDL FW tab displays BDL script for Silk Performer .NET Framework. When exporting a project as a Silk Performer .NET Framework project, .NET Explorer uses the code in the Silk Performer .NET Framework code pane, compiles the code to a .NET Assembly (DLL), and creates a BDL script that loads the DLL and calls the methods that have been marked with the [Transaction] attribute. The BDL script is shown here, but it is not shown in the final state that will be generated upon export. Only a skeletal BDL script is displayed.

親トピック: Tour of the UI


Output Tab

The Output tab displays log output during test runs. The Output tab shows details about each call of the most recent animated run. Statistics regarding execution time and executed methods are also shown.

Example Animated Log Output

Test started: 08.10.2004 08:01:50
Test stopped: 08.10.2004 08:01:53
Method calls: 1
Success calls: 1
Error calls: 0
TestWebProxies.Service1.echoStringArray
Parameters : System.String[](string)
Return Value: System.String[](string)
注: The Output tab can also be accessed by clicking Results on the Workflow Bar.
親トピック: Tour of the UI


Setting Up .NET Explorer Projects

This section shows you how to set up projects and define tests with .NET Explorer. A sample Web service is used for demonstration purposes.

.NET Explorer requires that Microsoft .NET Framework 4.0 or later is installed. Microsoft .NET Framework is available on Microsoft's .NET Framework のダウンロード page.

  • Creating .NET Explorer Projects
    Create a new .NET Explorer project to test Web services, .NET remoting, imported COM wrappers, and other .NET classes.
  • Test Case Definition
    Explains the available approaches for defining test cases with .NET Explorer.
  • Using the Load File Wizard
    Use the Load File Wizard to define where the information for the object you wish to test is located.
  • Viewing and Comparing WSDL Files
    If a WSDL file has changed, update individual Web Service Proxy classes with a new WSDL file.
  • Defining Client Certificates for a Web Service
    Define client certificates for Web services that require client certificates for authentication.
  • Test Case Characteristics
    Explains the characteristics of test cases as they relate to .NET Explorer.
親トピック: .NET Explorer ヘルプ
関連概念
Testing .NET Remoting


Creating .NET Explorer Projects

Upon opening .NET Explorer you are prompted to either open an existing project or create a new project.
  1. Click the Create a new project option button.
  2. Enter a name for your project in the text box.
  3. Click OK.
Your new project is created and the .NET Explorer GUI displays.
親トピック: Setting Up .NET Explorer Projects


Test Case Definition

Three approaches are available for defining tests with .NET Explorer:
  • Use the Load File Wizard to define where the information for the object you wish to test is located. The wizard then displays the available classes, automatically instantiates the available objects, and calls methods on those objects. This approach is more involved, but it offers more control.
  • Enter the location of the Web services’ WSDL file directly into .NET Explorer’s WSDL/DLL field and click Load. Information about the methods and objects is then displayed, however objects are not instantiated and methods are not called. This approach offers a quick, simple approach to analyzing remote service functionality.

  • Import a COM wrapper via the Load COM Type Libraries dialog (Model > Test COM Classes).

For demonstration purposes this Help uses the Load File Wizard to instantiate the objects available on the sample Web service, which is available at http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx?WSDL.

親トピック: Setting Up .NET Explorer Projects
関連タスク
Using the Load File Wizard


Using the Load File Wizard

  1. Click Start Here on the workflow bar.

    The Load File Wizard dialog box displays.

  2. To test a Web service, you must provide a Web Services Description Language (WSDL) document. Click the Web Services option button and specify a path or URL to the WSDL document using the browse (...) button.
    注: To test .NET Remoting or other .NET classes, click the corresponding option button (.NET Remoting or Other .NET Classes) and then specify a .NET Assembly (DLL or EXE) that defines the class.
  3. Click Next. The WSDL file now loads and finds out what is available on the Web service. A WSDL file is an XML description of the functionality that is offered by the Web service.
    注: The sample Web service offers a minimum of functionality. It simply echoes back some values.
  4. Select the Web service class you wish to test from the Class list box. Normally there will be only one class, but it is possible that the loaded WSDL will define multiple Web services.
  5. Using the URL (Endpoint) text box, you can change the endpoint of the service. The default endpoint is the one defined in the WSDL document. If required, you can change Web service proxy and authentication settings for the Web server by clicking browse (...) and entering information into the Web Proxy Settings Wizard dialog box.
  6. Click Next. The Method invocation page displays.
  7. Check the check boxes beside the methods that you want to have tested, for example echoFloat(Single) and echoString(String). Methods are called using the default parameters.
    注: To see the member functions of the base classes, click Inherited. This feature is generally only applicable to the testing of .NET Remoting and other .NET classes.
  8. To adjust the sequence in which the methods are called, use the up and down arrow buttons. This way, you can move methods up and down the invocation list. The button between the up and down arrow buttons enables you to invert the selection of methods, meaning that all unmarked methods become marked, and vice versa.
    注: Login and logout methods must be in first and last positions, respectively.
  9. Click Next. The Select a test case page displays.
  10. Select the test case to which the testing methods should be added. You can select from the following:
    • Init Test Case: This is the first test case that is called in test runs. Select this test case if your method calls are related to initialization, logging in, or start-up.
    • Existing Test Case: You can add to an existing test case. Choose the test case from the list box to the right of this selection.
    • New Test Case: A new test case is created and the methods are added to the new test case. Using the text box to the right of this selection, give the new test case a unique name.
    • End Test Case: This is the last test case that is called in test runs. Select this test case if your method calls are related to clean-up, for example logging off.
  11. Click Finish.
    注: A message displays if you have selected a method that takes parameters, letting you know that default parameters will be used for the method, which may result in an exception being thrown. Methods that throw exceptions will be excluded from your test scenario. If you do not want to proceed, click No, then go back, deselect the method in question, and add it later manually with a more meaningful parameter value.
The Web Service has been loaded in the Loaded Components menu tree and the selected methods have been called and added to the selected test case.
親トピック: Setting Up .NET Explorer Projects


Viewing and Comparing WSDL Files

WSDL files are stored in project files. For older projects, you must update Web Service Proxy classes to store WSDL documents. This is done by updating individual Web Service Proxy classes with a new WSDL file.
  1. Select a Web Service Proxy class in the Loaded Components menu tree. A property called WSDL is displayed in the Input Data Properties field.
  2. Select the WSDL parameter and click browse (...). The WSDL View dialog box opens, which includes the original URL, the date the WSDL file was downloaded, and the contents of the WSDL file.
  3. Enter a URL in the Compare With text box and click Compare. The content check functionality compares the string contents of both files.
You are informed whether or not there is a difference between the files’ contents, but not what the specific difference is.
親トピック: Setting Up .NET Explorer Projects


Defining Client Certificates for a Web Service

For Web services that require client certificates for authentication, client certificates must be defined in Web service properties.
  1. Select a Web service class in the Loaded Components menu tree. A property called ClientCertificates is displayed in the Input Data Properties field.
  2. Select the ClientCertificates parameter and click browse (...). The Client Certificate dialog box opens, where certificates can be added or removed.
  3. Click browse (...) next to the File text box to locate and select a certificate (.cer) file. The selected client certificate is listed in the File text box.
  4. Add a certificate file to the list of certificates by clicking the + button. Multiple certificates can be defined. Certificates can be removed by clicking the - button.
  5. Click OK.
Once client certificates have been added, the ClientCertificates property description is updated with the number of assigned certificates.

Generated Code

The following code is generated for the test framework and standalone code:
mWebProxy1 = new TestWebProxies.Service1();
mWebProxy1.ClientCertificates.Add(System.Security.Cryptography.X509Certificates.
X509Certificate.CreateFromCertFile("C:\\TestX509.cer"));
When exporting to a native BDL script, the following comment appears:
// You have to add the following certificate(s) to your profile!
// C:\TestX509.cer
親トピック: Setting Up .NET Explorer Projects


Test Case Characteristics

Following is an overview of the characteristics of test cases as they relate to .NET Explorer:
  • Each test scenario includes an Init test case and an End test case. Multiple Main test cases may also be defined. An Init test case is the first test case that is called during a test run. Init test cases often include method calls that are related to initialization, logging in, or start-up. An End test case is the last test case that is called during a test run. End test cases often include method calls that are related to clean-up, for example logging off.
  • Main test cases are executed between Init and End test cases and may include any sort of method call.
  • A local variable is only valid within a single test case and cannot be passed to another test case. Only global variables can be used to pass values between test cases.
  • Each test case must have a unique name.
  • Test case properties can be edited by selecting a test case in the Test Scenario menu tree and defining field values in the Output Data Properties field:
    • StopAtError is the attribute that defines the number of errors that can occur during an animated run. If this number is reached, the animated run aborts. Setting this attribute to 0 specifies that errors will be ignored.
    • CallCount is the attribute that defines the number of times that a test case will be called during an animated run.
  • You can create, copy, and remove test cases by right-clicking a test case in the Test Scenario menu tree and selecting the respective menu item.
親トピック: Setting Up .NET Explorer Projects


Setting Up Tests

This section explains how to set up and customize your tests with .NET Explorer. Topics include an introduction to GUI elements, customization of input parameters, definition of output value verifications, and generation of random variables. The section concludes with an explanation of how to use .NET Explorer to test .NET Remoting.

  • Customizing Input Parameters
    Explains how to customize method parameters using the Input Value Wizard.
  • Storing Output Values in Variables
  • Defining Global Variables
    Explains how to create a global variable to be used as an input parameter. Also explains how to initialize parameters from a data file.
  • Defining Output Value Verifications
    Explains that once you have stored an output parameter value in a variable you can specify a verification rule for the variable.
  • Adding Method Calls
    Explains how to invoke a method and add it to the currently selected test case.
  • Updating Method Calls
    Explains how to update a method that has already been added to a test case.
  • Complex Input/Output Data
    Explains that .NET Explorer supports complex data types such as arrays and objects as both input data and output data.
  • Testing .NET Remoting
    Explains that .NET Explorer supports both Client Activated Objects (CAO) remote objects and Server Activated Objects (SAO) remote objects.
  • Negative Testing
    Explains that negative testing is testing in which test methods are designed to throw exceptions. Such methods are only considered successfully executed when the anticipated exception type is thrown.
親トピック: .NET Explorer ヘルプ


Customizing Input Parameters

When a method has input headers or parameters, its values are displayed in the Input Data pane with their default values. Select the method you want to invoke in the Loaded Components pane. Parameters are displayed with their default values in the Input Data pane, and you can configure the option settings through Tools > Options .

To change a value, select a parameter. If a parameter is a simple data type, which means a string, float, or integer, you can enter the value directly into the InputValue text box in the Input Data Properties pane. If the parameter is a complex type, which means an object or array, or you want to use a random value or a value from a stored variable, click (...) to open the Input Value Wizard.

  1. Select an InputValue row in the Input Data Properties pane to display the Input Value Wizard (...) button.
  2. Click (...). The Input Value Wizard opens.
  3. Define the input value for the parameter of the method. You can pass a null value, a value from a variable, or a constant value.
    • Click Is Null to pass a null value. This value is only valid for strings, objects, and arrays.
    • If you have already stored a variable that holds values of the parameter’s type, click Use Variable and select the variable from the list box.

      If the parameter is an array, type the index into the Index Array text box.

    • If the parameter is not an object or array, you can specify a constant value such as a string, integer, or double value. Click the Constant value option button.
    • If you do not want to use a constant value and would rather use a random value for types such as string, integer, or float, you can create a new random value by clicking New random variable. If a random value of the parameter type has already been created, click Random variable and select the variable from the list box.
  4. Click OK.
Once input parameters have been defined, you can invoke a method to have that method automatically added it to the selected test case in the Test Scenario pane. From there, corresponding output values can either be stored as variables or verifications can be set up for them.
親トピック: Setting Up Tests
関連概念
[パラメータ ウィザード] でのパラメータの作成
Complex Input/Output Data


Storing Output Values in Variables

Using the Output Data and Output Data Properties panes, you can store output values as variables for later use or you can define verifications for the values.

  1. Invoke a method by clicking Invoke on the Workflow bar (or by right-clicking a method in the Input Data pane and selecting Invoke/Add to Test Case) and explore the output data.
  2. Select an output value node in the Output Data pane. You can store such values in variables that can be used as input values for other method calls.
  3. Select an OutputValue row in the Output Data Properties pane to display the (...) button. Click (...) to invoke the Output Value Wizard and store the value.
    注: The Output Value Wizard can also be launched by clicking Customize on the Workflow bar, or by right-clicking an output parameter in the Output Data pane.
  4. In the Output Value Wizard, type a name for the output value variable in the Variable name text box.
  5. Define the scope of the variable. The default is Local, which means that the variable can only be used within the test case within which it has been created. Global scope means that the variable can be used within any test case. Global scope enables you to pass information between test cases.
  6. Click OK. Verifications can be executed against variables. The Verification Wizard dialog box offers two text boxes for this purpose: Variable and Array Index (which defines the array index when a variable is an array).
親トピック: Setting Up Tests
関連概念
検証


Defining Global Variables

Global variables can be shared between test cases. These vary from local variables, which are only available to specific test cases.

Global variables can be used as input parameters for function calls and can also be used to store return values. Global variables are configured with an initial value, which makes them useful when you need to have the same value used for multiple function calls. Each time a test run begins, global variables are initialized with the defined initial value. The initial value can be changed if the variable is used to store result values.

When exporting global variables to Silk Performer, the global attribute can be retained as a Silk Performer project attribute, enabling you to also configure the initial values of global variables. To be able to modify the project attribute value in Silk Performer, you must set the UseAttribute value of the External Access property in the Input Data Properties pane to True before exporting the project.

注: Global variables of type string and byte[] can be initialized from data files (.txt files). This is useful when a lot of content must be passed to a method call. Rather than manually typing the content into the edit control, you can initialize a variable from a specified file. The From File text box is only enabled when the variable type is System.String or System.Byte[].
  1. Select the Objects tab. Right-click an object in the Objects tree menu and select New Global Variable. The Global Variable dialog box displays.
  2. Type a name for the variable in the Variable Name text box.
  3. Select a Variable type. The following types are available:
    • string
    • integer
    • boolean
    • double
    • single
    • byte
    • byte array
    • date/time
  4. Each variable has an initial value and a current value. When tests are run, all global variables are initialized to their initial values. Specify an intial value for the variable in the Initialize Value text box. You can also take the initial value from a file by clicking the from File option button and then specifying the file location by clicking (...).
  5. Click OK.
親トピック: Setting Up Tests


Defining Output Value Verifications

  1. Select Verification in the Output Data Properties pane to display the (...) button.
  2. Click (...) to open the Verification Wizard.
    • Select No Verification if you do not want the value to be verified.
    • Select NULL verification to verify that the value is either null, by checking the Should be null check box, or not null. This option verifies whether or not a value is present.
    • Select Constant string to verify that the value exactly matches a constant string.
    • Select Reg. expression to verify a string value.
    • Select Range if you are verifying integers or doubles. Then specify a range for the value using the From and To text boxes.
    • Select Variable to verify that the value exactly matches the value of the variable. If the variable is an array you can also define the Array index for the element that should be used for the verification.
  3. Select the Severity of error that should be thrown if the verification fails. The following severity options are available:
    Severity Option
    Description
    Success, no error
    No error is thrown.
    Informational
    An informational message is logged.
    Warning
    A warning is thrown.
    Error, simulation continues
    An error is thrown, but the simulation continues.
    Error, the active test case is aborted
    An error is thrown, the simulation continues, however the active test case is aborted.
    Error, the simulation is aborted
    An error is thrown and the simulation is aborted.
    Custom
    A section is inserted into the .NET code where special error handling code can be inserted.
  4. Click OK.
親トピック: Setting Up Tests


Adding Method Calls

  1. Within the Loaded Components or Method Call pane, select the method to be added.
  2. Invoke the method by clicking Invoke. The invoked method is added automatically to the currently selected test case.
親トピック: Setting Up Tests


Updating Method Calls

  1. From the Test Scenario pane, select the method that is to be changed.
  2. Make modifications to the input/output parameters of the method in the Input Data or Output Data panes. Updates are automatically accepted when you exit the Input Data or Output Data panes.
親トピック: Setting Up Tests


Complex Input/Output Data

.NET Explorer supports complex data types such as arrays and objects as both input data and output data. The Output Value Wizard assists you in using such data as variables.

  • Storing Array or Object Output Data as Variable
    Explains that when a method returns an array or an object as output data, you can store the value in a variable of either local or global scope.
  • Taking Array Object Data From a Variable
    Explains that when using an array from a variable as input data, the entire array can be taken from the variable.
  • Defining Each Member of a Variable Individually
    When using an object as input data, you can take the entire object from a variable or define each member individually.
  • Defining Array Elements
    Explains that when a method requires an array as an input parameter, you can define the number of array elements.
  • Defining a Column-Bound Variable
    Explains that in addition to standard random variables, random values bound to multi-column data files can also be defined.
親トピック: Setting Up Tests


Storing Array or Object Output Data as Variable

  1. Select the complex output parameter in the Output Data pane.
  2. Click (...) to open the Output Value Wizard.
  3. Specify the variable’s name and scope.
親トピック: Complex Input/Output Data
関連タスク
Storing Output Values in Variables


Taking Array Object Data From a Variable

  1. Select a complex input parameter in the Input Data pane.
  2. Click (...) to open the Input Value Wizard.
  3. Define the input value.
親トピック: Complex Input/Output Data


Defining Each Member of a Variable Individually

  1. Select individual members of an object in the Input Data pane.
  2. Define input values in the InputValue text box. For example, you can specify a random value from a value list as one input value and specify a constant value as another input value.
親トピック: Complex Input/Output Data
親トピック: Complex Input/Output Data
関連タスク
Customizing Input Parameters
Customizing Input Parameters


Defining Array Elements

  1. The default length for arrays is 1. To change the number of elements in an array, select the array node in the Input Data pane.
  2. In the Length text box, enter the number of elements in the array. .NET Explorer than automatically adds or removes the required elements.
  3. To specify an element’s value, select the element in the array and specify the value in the InputValue text box.
  4. Array members or an entire array can be assigned input parameters from a variable. To specify input parameters from a variable, click (...) to open the Input Value Wizard.
  5. Click Use variable on the Input Value Wizard and select a preconfigured variable from the list box. All variables of the current parameter type are listed.
  6. Click OK.
親トピック: Complex Input/Output Data


Defining a Column-Bound Variable

  1. Right-click the Global Random Variables tree menu node (Loaded Components pane, Objects tab) and select New Multi-Column Variable.
  2. On the Multi Column Parameter Wizard, select a file that contains multi-column data. The files that are displayed in the combo box control are the CSV files that are available in the Data directory.
  3. When a CSV file uses a specific column separator, select the Separator so that .NET Explorer can accurately populate the grid displaying the contents of the file.
  4. Specify a name for the Handle name variable. A file handle variable is a handle that is assigned a row in a multi-column file.
  5. Select the column that should be bound to the new variable by clicking within one of the column’s cells. The currently selected column is marked with an (*) at the end of the column name. Handle name and Parameter name are automatically generated when you change the file or select a different column if the user has not already changed the name manually.
  6. Specify a File name for the new bound variable.
  7. Click Finish to open the CSV file in the registered client application (for example, Microsoft Excel). Changing the file in the client application and re-selecting it in the combo box will reload the file with the revised content.
You will see the new file handle and the new column variable in the Global Random Variables tree menu node. To bind another variable to another column in the file, right-click another file handle element in the tree menu and select New Multi-Column Variable. The wizard will reappear with read-only file properties (File name, Handle name, and Separator).

These variables can now be used as input parameters for method calls. They will appear in the Input Parameter page variable list.

  • Defining How Column Variables are Bound
    Explains how to change the sequence or row access and define the test case in which each new row should be selected.
親トピック: Complex Input/Output Data
関連タスク
複数列データ ファイルから値をパラメータに挿入する


Defining How Column Variables are Bound

Before proceeding with this task you must have defined a column-bound variable.

  1. Double-click a multi-column file handle in the Global Random Variables tree menu node (Loaded Components pane, Objects tab). The Input Data Properties table allows you to change the sequence of row access and the amount of time that passes before each subsequent row is selected. When a new row is selected, the bound column variables are set to the values defined in the file.
  2. Specify if rows should be selected randomly or sequentially by selecting an option from the RowSelection list box.
  3. Click within the InitTestCase list box and select the test case in which each new row should be selected (for example, If you select a main test case that runs multiple times during each animated run, a new row will be accessed with each run).
親トピック: Defining a Column-Bound Variable
関連タスク
複数列データ ファイルから値をパラメータに挿入する


Testing .NET Remoting

.NET Explorer supports both Client Activated Objects (CAO), which are remote objects in which clients create new instances of objects on remoting servers, and Server Activated Objects (SAO), or WellKnown remote objects, in which a server offers one instance of a special type (class) and clients access the same object on the remoting server.

Both CAOs and SAOs are accessed through URLs. For CAOs, the Activation URL is the URL where a new CAO can be created, for example http://localhost. For SAOs, the URL is the location where the SAO object can be accessed, for example http://localhost/RemoteObject.rem.

CAO classes can only be derived from the base class MarshalByRefObject. SAOs can be derived from MarshalByRefObject or by implementing an interface.

To create a CAO or activated object, right-click a MarshalByRef object and select Create Remote Object. You will be prompted for the Activation URL and for the variable name that will be associated with the created object.

To call methods on a SAO or WellKnown object, simply call the method. You will then be prompted for the Activation URL.

For full details regarding .NET Remoting, refer to the MSDN Online Library at http://msdn.microsoft.com.

親トピック: Setting Up Tests


Negative Testing

Negative testing is testing in which test methods are designed to throw exceptions. Such methods are only considered successfully executed when the anticipated exception type is thrown.

Silk Performer offers an attribute that can be applied to test methods to indicate that a specific exception type is expected. If the specified exception is not thrown during execution, then the test method fails.

The Handle Exception dialog box opens whenever a method throws an exception. The dialog box enables you to specify what to do with the method:

  • Do not add this method to the test case
  • Add to test case

    The method is added. If the method throws the exception again during the animated run, it is considered an error.

  • Add to test case and expect this exception during test run

    The method is added. If the method throws the exception again during the animated run, it is considered a success. If the exception is not thrown, it is considered an error.

Click Details to view detailed exception information. The Explorer Exception dialog box displays the thrown exception and all inner exceptions. The exception detail grid shows all properties of the exception object. Place your cursor over the value column to display a tool-tip that includes complete content. This is especially useful for the StackTrace property as it is a multi-line property.

Expected Exceptions

Each method call that is added to a test case has a property called Expected Exceptions. This property holds a list of exception types that are expected to be thrown during an animated run. If you selected Add to test case and expect this exception during test run on the Handle Exception dialog box, the thrown exception type will automatically be added to this list.

Click (...) in the Output Data Properties pane to display the Expected Exceptions dialog box. This dialog box enables you to add/remove expected exception types.

The Possible Exceptions list is populated with the system exceptions. You can enter an exception type that is not of the system types, though to proceed you must click OK on a confirmation dialog box informing you of potential impact.

The following code is generated for method calls when the exception SoapException is expected:

public void TestWebProxies_Service1__GetRandomNumber1() {
try {
Bdl.MeasureStart("Service1::GetRandomNumber");
              mWebProxy1.GetRandomNumber(5, 1);
              Bdl.MeasureStop("Service1::GetRandomNumber");
              Bdl.LogVerification(
               "Expected exception of the type(s): System.Web.Services.Protocols.SoapException "+
               "has not been thrown!", Bdl.Severity.SEVERITY_ERROR);
} catch (System.Web.Services.Protocols.SoapException expected_0) {
               Bdl.MeasureStop("Service1::GetRandomNumber");
              Bdl.LogException(expected_0, Bdl.Severity.SEVERITY_SUCCESS);
} catch (SilkPerformer.StopException stopExcp) {
              Bdl.MeasureStop("Service1::GetRandomNumber");
              Bdl.LogException(stopExcp);
              throw stopExcp;
} catch (System.Exception e) {
              Bdl.MeasureStop("Service1::GetRandomNumber");
              Bdl.LogException(e);
}
}

If an exception is not thrown, a verification of severity Error will be logged. The log will contain the exception types that were expected but not thrown.

親トピック: Setting Up Tests


Animated Runs

Animated runs or test runs execute all test methods that are assigned to your test cases, with corresponding input and output data displayed in the Input Data and Output Data windows as they are submitted/received. Status symbols indicate the success/failure status of method calls after they have run.

Output of animated runs includes several logs and reports that help you to identify problems with tested components.

To configure settings for animated runs go to Tools > Options > Options tab. The following settings are available:

  • Always run Init test case
  • Always run End test case
  • Run all test cases during animated run
  • Invoke Delay (time delay between method calls, in ms)
注: By default, there is a 2-second (2000 ms) delay between the invocation of method calls. This is because .NET Explorer is designed to test the functionality of components, but not to overtax them with excessive load. Invocation delay settings can be configured on the Options tab.
  • Executing an Animated Run
    Animated runs or test runs, execute all test methods that are assigned to your test cases, with corresponding input and output data displayed in the Input Data and Output Data windows as they are submitted/received.
  • Viewing Status of Animated Runs
    Explains that depending on the number of times a test case is called (CallCount property) you can see which iteration is currently executing in the Test Scenario window. You can also see the status of each test case and method.
親トピック: .NET Explorer ヘルプ


Executing an Animated Run

  1. Click Run Test. The Animated Run dialog box displays.
  2. Select the test cases that are to be executed during the test run (InitTestCase, TestCase, or EndTestCase). The default selections vary based on your option settings.
    注: When test cases depend on each other for accessing global objects, ensure that you do not exclude test cases that define objects that are used by other test cases.
  3. Check the Do verifications check box to specify that verifications that have been defined for output parameters should be performed.
  4. Click OK to begin the animated run. All global variables are initialized to their initial values. All random variables are reset.

    If you have specified a different calling count for your test cases than the default (1), the test cases will be executed the number of times defined in this property.

    If the number of method calls reporting an error exceeds the number of allowed errors defined in the test case properties, the test case will be aborted.

    注: Animated runs can be aborted manually by either hitting Esc on your keyboard or by selecting Stop Run from the Run menu. Animated runs are aborted automatically when a verification with severity Error, the simulation is aborted fails.
親トピック: Animated Runs


Viewing Status of Animated Runs

Depending on the number of times a test case is called (CallCount property) you can see which iteration is currently executing in the Test Scenario window. Each test case and test method has one of the following status icons:

  • OK - Green checkmark
  • Verified - Blue V icon
  • Warning - Yellow triangle with exclamation mark
  • Error - Red X

Methods that fail due to thrown exceptions or failed verifications display failed or warning method call icons next to them. If a method call fails you can view a description of the failure by holding your cursor over the method.

親トピック: Animated Runs


Analyzing Results

.NET Explorer enables developers and testers to explore the TCP/HTTP network traffic that is sent and received with each Web Service and .NET Remoting call.

Once you have completed a test run, you can view four files to assist you in analyzing test results:

  • User report - View the user report generated during the last animated run. The report contains statistical information about each test case and each test method call.
  • TrueLog for Web Service calls - View the TrueLog generated during the last animated run. The TrueLog contains detailed information about Web Service calls.
  • Error report - View the error report generated during the last animated run. The report contains a description for every error that occurred.
  • Animated log - This file contains information about every method that has been called with their parameters and errors that occurred.
  • Viewing Result Files
    Explains how to open the Explore Results dialog box and select a result type.
  • User Report
    Explains that the user report offers information regarding time elapsed for each test case and test-method call.
  • TrueLog for Web Service Calls
    Explains that when testing Web Services, TrueLogs that contain HTTP traffic for each tested Web Service method are generated.
  • Error Report
    Explains that the error report delivers an overview of all errors that occur during test runs.
  • Animated Log
    Explains that the animated log on the Output tab displays real-time information about the methods that were called in the most recent test run.
  • Analyzing Request/Response Network Traffic
    Explains that .NET Explorer enables developers and testers to explore the TCP/HTTP network traffic that is sent and received with each Web service and .NET Remoting call.
親トピック: .NET Explorer ヘルプ


Viewing Result Files

Before proceeding with this task you must execute a test.

  1. Click Results on the Workflow bar to display the Explore Results dialog box.
  2. Select the result type you want to generate. Alternately, result files can be selected from the .NET Explorer Results menu.
親トピック: Analyzing Results


User Report

The user report is based on the Silk Performer virtual user report. This report offers information regarding time elapsed for each test case and test-method call.

User reports are comprised of four sections:

  • Test case summary
  • Test case details
  • Test method summary
  • Errors

The Test case summary section offers information about the number of executed test cases and the number of errors that occurred during the test run.

The Test case details table gives you information about each test case:

  • Number of executions per test case
  • Execution time of each test case

The Test method summary table offers information about each test method that has been called. You receive information about execution times, number of errors that occurred, and when testing Web Services or .NET Remoting, the number of bytes that were transmitted.

The Errors table gives you information about each error that occurred during the test run. You receive information regarding when each error occurred, which test methods caused the errors, and short descriptions of the errors.

親トピック: Analyzing Results


TrueLog for Web Service Calls

When testing Web Services, TrueLogs that contain all HTTP traffic for each tested Web Service method are generated.

For each Web Service call there is a TrueLog node that contains request and response HTTP header and body information. The TrueLog contains a transaction node for each test case and a Web document node for each Web Service / .NET Remoting request.

親トピック: Analyzing Results
関連概念
TrueLog の概要


Error Report

The error report delivers an overview of all errors that occur during test runs. They include details regarding error time, in which test case and which test method each error occurred, severity types, and error messages.

親トピック: Analyzing Results


Animated Log

The animated log on the Output tab displays real-time information about the methods that were called in the most recent test run. Additional information about passed parameters is also included. When exceptions are encountered, the animated log offers detailed stack traces for the exceptions.

The animated log can be accessed at any time by selecting the Output tab.

親トピック: Analyzing Results


Analyzing Request/Response Network Traffic

.NET Explorer enables developers and testers to explore the TCP/HTTP network traffic that is sent and received with each Web service and .NET Remoting call. Such information can be helpful to developers in seeing how large objects are serialized in XML when they are sent. It is also helpful to testers in load-testing scenarios.

With Web service calls, which are generally XML over HTTP, the actual content of HTTP headers from the requests and responses is displayed.

  1. Right-click an invoked Web service call or .NET Remoting method in the Input Data, Output Data, or Test Scenario pane and select Show Traffic. The Request/Response data of method call dialog box opens. Alternative: Select a method call and click Net Traffic on the Workflow bar. The upper left pane of the dialog box shows you the request header information of the call. The upper-right pane shows the reponse header information of the call. The lower-left window shows the request body, which is a SOAP envelope in the case of Web service calls. The lower-right pane displays the response body, which is also a SOAP envelope in the case of Web service calls.
  2. Select view tabs to view data in the request body and response body panes:

    • Hex View - Displays traffic data in binary (hexadecimal) view. This is useful when exploring the .NET Remoting binary protocol.

    • XML View - Displays SOAP traffic in an XML tree view. This view makes it easier to analyze the XML content of SOAP messages.
    • Text - Displays traffic data in a textual representation without formatting.
  3. Click OK.
親トピック: Analyzing Results


Configuring Option Settings

Several application setting options are available in .NET Explorer:

  • Default values
  • Code
  • Verifications
  • Animated runs
  • Loaded file drop list
  • Default proxy connection
  • Configuring Project-Wide Default Values
    You can define the default values that are available for each data type across your .NET Explorer project.
  • Application Settings
    Explains that the Microsoft .NET Framework allows you to specify settings in an application-specific configuration file.
  • Code Settings
    Explains that multiple options are available for defining the behavior of code when working with .NET Explorer.
  • Verification Settings
    Explains the setting options that are available for verifications.
  • Animated Run Settings
    Explains the setting options that are available for animated runs.
  • Editing the Loaded File Drop List
    Explains how to edit the list of files that is available from the WSDL/DLL list box.
  • Configuring Proxy Connection Settings
    Explains how to configure a default proxy connection to be used when loading WSDL documents and Web Service calls.
親トピック: .NET Explorer ヘルプ


Configuring Project-Wide Default Values

The Default Values options tab enables you to change the default input parameter values for method calls. You can set default values for the following value types:

  • Boolean
  • Double
  • Integer
  • String

Boolean can either be True or False. The other data type values must be selected from available variables, random variables, or constant values.

  1. Navigate to Tools > Options . The Default Values tab of the Options dialog box opens by default.
  2. Select a default value row to display that data type's browse (...) button.
  3. For Boolean, select either True or False from the list box. For all other value types, click (...) to launch the Input Value Wizard.
  4. Click OK.
親トピック: Configuring Option Settings


Application Settings

The Microsoft .NET Framework allows you to specify settings in an application-specific configuration file. The configuration file must have the same name as the application and carry the .config extension (for example, myapplication.exe.config). For ASP.NET Web applications, the extension is web.config.

The configuration file is an XML file with the following schema:

<configuration>
  <startup />
  <runtime />
  <appSettings>
    <add key=”mykey” value=”myvalue />
  </appSettings>
  <system.runtime.remoting />
  …
</configuration>

When such a file is present, the .NET runtime reads the settings and configures the internal runtime. With the key appSettings you can specify key/value pairs that can be read during runtime. A useful application for this is connection strings or other configuration properties. By changing the settings in the XML file, the behavior of the application can be adjusted without changing the code.

The App Settings options tab facilitates the testing of .NET components by enabling you to specify key/value pairs. The option page not only allows you to define settings, it also enables you to initialize settings from an existing .config file. This saves time when you already have a .config file that contains all settings and meaningful values.

You can browse (...) to and Load a .config file, in which case all appSettings are used to initialize the grid control, or you can add the entries manually. Changes take effect when you click OK.

When a project is exported as a standalone application, an app.exe.config file that includes the appSettings is exported.

When exporting to either a Microsoft Visual Studio project or a Silk Performer .NET project, a app.config file with only the appsettings entries is created. The app.config file is read by the perfrun when a virtual user is executed. Perfrun takes those settings and uses them to write a perfrun.exe.config file, which contains other settings as well.

親トピック: Configuring Option Settings


Code Settings

Multiple options are available for defining the behavior of code when working with .NET Explorer. These settings are available on the Options dialog box, Code tab.

.NET Code Generation

These project-level options define the behavior of .NET code generation in .NET Explorer:

  • Try-Catch block in every method - A try-catch block is scripted in each test method. Caught exceptions are forwarded to Silk Performer .NET Framework. It is recommended that you select this option.
  • Verifications - Verifications will be scripted in test methods. It is recommended that you select this option to make use of verification settings.
  • Test logic in BDL - Each test method call becomes a TestMethod in the Silk Performer .NET Framework and therefore becomes a separate method call in the resulting BDL script. It is recommended that you not select this option because test logic should remain in test case methods in the .NET Code.
  • Language - Select your preferred .NET language for code generation.

Source View

These user-level options define the behavior of the .NET Explorer source tree menu:

  • Show primitive types as objects - Primitive (simple) types that are stored in global variables are normally displayed as variables, not as objects. When this option is selected, types such as int and string are displayed as objects and you are able to call the methods that are defined for those types, for example String.Compare.
  • Show base type information - When this option is selected, members of the base types of displayed objects are displayed. Otherwise only the members that are declared by the object types themselves are displayed.
  • Use namespaces - When selected, the full namespace names of loaded classes are displayed in the class tree.
  • Switch to object view when storing a variable
親トピック: Configuring Option Settings


Verification Settings

Setting options for verifications are available on the Options dialog box, Options tab.

  • Automatically define a verification for stored values - When selected, default verifications are defined whenever you store an output value in a variable.
  • Ignore case (default value) - This is the default value of the Ignore Case check box when verifying a string value in the Verification Wizard.
  • Check verifications during animated run - This is the default value for the Do Verifications check box on the Selecting Test Cases dialog box.
親トピック: Configuring Option Settings


Animated Run Settings

Setting options for animated runs are available on the Options dialog box, Options tab.

  • Always run init test case - The init test case is checked by default on the Selecting Test Cases dialog box.
  • Always run end test case - The end test case is checked by default on the Selecting Test Cases dialog box.
  • Run all test cases during animated run - All test cases are checked by default on the Selecting Test Cases dialog box.
  • Invoke delay - Defines the delay between the invokation of method calls in animated runs. The lower the setting, the more frequently methods are called and consequently more load is placed on execution servers.
親トピック: Configuring Option Settings


Editing the Loaded File Drop List

  1. Navigate to Tools > Options . The Options dialog box displays.
  2. Click the Layout tab. The Load file entries text box lists all recently loaded WSDL and DLL files.
  3. Select a file entry and click Delete (X) to remove it from the WSDL/DLL list box.
  4. Click Yes on the confirmation dialog box.
  5. Click OK.
親トピック: Configuring Option Settings


Configuring Proxy Connection Settings

  1. Navigate to Tools > Options . The Options dialog box displays.
  2. Click the Connection tab.
  3. Type the Address of the default proxy server.
  4. Type the Port number of the default proxy server.
  5. Type the User who has access to the default proxy server.
  6. Type the user password into the Password text box.
  7. Click OK.
親トピック: Configuring Option Settings


Exporting Projects

.NET Explorer enables you to export projects to Silk Performer and Microsoft Visual Studio.

Exporting to Silk Performer from .NET Explorer is helpful for QA personnel who are proficient with Silk Performer in facilitating analysis of .NET components and want to create Silk Performer projects, test case specifications, and scripts from which load tests can be run.

Exporting to Microsoft Visual Studio from .NET Explorer is helpful for developers who want to use .NET Explorer to quickly generate basic test scripts that can be modified in Microsoft Visual Studio.

When a developer opens an exported .NET Explorer project in Visual Studio, the virtual user classes, test methods, and all code are generated automatically. From here a developer can add more methods, perform modifications, or execute Try Script runs to confirm the accuracy of scripts. Once a script is ready, it can be passed along to QA in BDL form for use in Silk Performer.

The other approach available to developers is to export projects directly to Silk Performer as .NET projects.

  • Exporting a .NET Explorer Project
    Export a .NET Explorer project to create Silk Performer projects, test case specifications, and scripts.
  • Exporting a Project to Silk Performer
    Explains that two options are available for exporting Silk Performer projects: Web projects and .NET projects.
  • Exporting a Project to Microsoft Visual Studio
    Describes how you can export a project to Microsoft Visual Studio to run tests.
  • Exporting a BDL Script
    .NET Explorer enables you to export test scenarios in BDL format independent of project files, assemblies, and source files.
  • Exporting a Standalone Console Application
    .NET Explorer can compile test cases into standalone console applications that call all test case methods in their main methods.
親トピック: .NET Explorer ヘルプ


Exporting a .NET Explorer Project

  1. Open the .NET Explorer Export menu and select the required export type:
    • Silk Performer Web project
    • Silk Performer .NET project
    The Export Project dialog box opens.
  2. Type a Project name, Project description, and destination Directory for the exported file. By default, projects are saved to <my documents>\Silk Performer 21.0\Projects.
  3. Optionally check the Open exported project after export check box.
  4. Click OK.

If you will be calling a Web service on the Internet, be sure to set the correct proxy in your Silk Performer project settings.

親トピック: Exporting Projects


Exporting a Project to Silk Performer

Two options are available for exporting projects to Silk Performer:

Silk Performer Web Projects

When testing Web Services, .NET Explorer enables you to export Silk Performer Web projects with native BDL scripts (no .NET code is included) that include WebPagePost statements for each Web service call, enabling you to run tests in Silk Performer to test the Web services while making use of the powerful Silk Performer Web engine and features such as TrueLog, statistical reporting, modem simulation, and IP spoofing. All random variables, output variables, and verifications are included in exported scripts.

注: .NET Framework is not required.
  • Silk Performer project file
  • BDL Web script
  • Random files

Silk Performer .NET Projects

Your test scenario can be compiled into a .NET assembly that uses the Silk Performer .NET Framework. Silk Performer .NET projects are then created with the compiled assembly and a BDF file that contains the calls to the assembly. In other words, .NET test code is compiled into a .NET intermediate language and then executed through Silk Performer. The value of this is that you can utilize Silk Performer runtime and scripting to make Web calls even though you are running .NET code and not a Web script.

注: Microsoft Visual Studio is not required.

With this intermediate code, when a test case contains Web service calls, the calls are routed over the Silk Performer Web engine so that you can obtain detailed information about each Web service call and make use of features such as TrueLog, statistical reporting, modem simulation, and IP spoofing.

  • Silk Performer project file
  • BDL .NET script
  • Random files
  • Referenced assemblies
親トピック: Exporting Projects


Exporting a Project to Microsoft Visual Studio

Test scenarios can be exported to C# or VB.NET files and then added to newly created Silk Performer .NET projects, which can subsequently be used in Microsoft Visual Studio to run tests. Further code customization in Visual Studio is also possible.

When you export a test scenario to a Silk Performer Microsoft Visual Studio project, .NET Explorer creates a Silk Performer .NET project and a corresponding Microsoft Visual Studio project. The test code that you define in your test scenario is added to your project and you can continue to work in Microsoft Visual Studio to make changes to the script. The exported test code makes use of the Silk Performer .NET Framework.

Once you have finished modifying test code, you can either continue to work in Silk Performer or you can run a test from within Microsoft Visual Studio.

When a test case contains Web service calls, the calls are routed over the Silk Performer Web engine so that you can obtain detailed information about each Web service call and make use of features such as modem simulation and IP spoofing.

  • Silk Performer .NET project
  • Visual Studio project (C# or VB)
  • Source files (test driver and proxies for Web services)
親トピック: Exporting Projects


Exporting a BDL Script

  1. Open the .NET Explorer Export menu and select the required export type (BDL Web script or BDL .NET Framework script).
  2. On the Save as dialog box, type a name and destination for the exported BDF file. By default, projects are saved to the Silk Performer Projects directory at <my documents>\Silk Performer 21.0\Projects.
親トピック: Exporting Projects


Exporting a Standalone Console Application

.NET Explorer can compile test cases into standalone console applications that call all test case methods in their main methods.

Console applications can be used to either run test scenarios independently of .NET Explorer, or to generate network traffic that can be recorded by Silk Performer. Silk Performer can consequently generate Web BDL scripts based on the network traffic.

  1. Open the .NET Explorer Export menu and select Standalone Console Application.
  2. On the Export Standalone Console Application to File dialog box specify a name and destination for the exported EXE file. By default, projects are saved to the Silk Performer project's Projects directory at <my documents>\Silk Performer 21.0\Projects.
  • Recording a Console Application With Silk Performer
    By recording a console application you get a Web BDL script that contains all the HTTP/TCP calls to a Web Service or .NET Remoting component.
親トピック: Exporting Projects


Recording a Console Application With Silk Performer

  1. Launch Silk Performer and create a new Web project.
  2. Create a new recording profile for the console application.
  3. Specify a name for the profile.
  4. Specify the path to the executable.
  5. Select Custom Application as the application type.
  6. Select Winsock.
  7. Begin recording the application.
After recording you have a Web BDL script that contains all the HTTP/TCP calls of the console application to a Web service or .NET Remoting component.
親トピック: Exporting a Standalone Console Application


Command Line Execution

Overview

It makes sense to run some functions from the command line, particularly those that are run numerous times on a daily basis.

The following .NET Explorer functions can be called from the command line:

Launch .NET Explorer
As with most applications, .NET Explorer can be launched from the command line. If you installed Silk Performer in the default directory, the command is C:\Program Files\Silk\Silk Performer 21.0\netexplorer.exe.
Execute animated runs for one or all test cases
You can launch .NET Explorer and have animated runs start immediately for one or all test cases in a project using a command line parameter:
  • To execute all test cases in a project, enter for example netexplorer.exe myproject.nef * at the command line.

  • To execute only the main test case in a project, enter for example netexplorer.exe myproject.nef TMain at the command line.

Write log files

When executing projects, result files (log, html, and error) are stored in project directories (.nef file directories). These files receive the same name as the .nef file, for example myproject.err, myproject.log, and myproject.html.

To define a different base name for these files, specify the log filename as an additional parameter in the command line, for example netexplorer myproject.nef * mylogfilename.

Usage

netexplorer netfile testcase | * [output]
Parameter | Description
netfile | .NET Explorer file (.nef)
testcase | The name of the test case to execute, or * to execute all
output | The directory to write reports to. If no path information is passed, the files are written to the project directory. The following result files are written: .log, .html, and .err
親トピック: .NET Explorer ヘルプ


.NET Framework Developer Guide

  • Tools and Samples
    Explains the tools, sample applications and test projects that Silk Performer provides for testing Java and .NET.
  • Silk Performer .NET Framework
    Silk Performer の .NET Framework では、開発者と QA 担当者はそれぞれ完全に特化した環境で作業することができ、開発とテストにかける労力を調整することができます。
  • Load Testing .NET Components
    Explains how to use the Silk Performer Visual Studio .NET Add-On for the testing of .NET components and Web services.
  • Testing .NET Services
    Offers an overview of the the Silk Performer .NET Framework can route Web traffic generated by .NET components through the Silk Performer Web engine. .NET Framework and the Silk Performer .NET Add-On for Microsoft Visual Studio .NET.
親トピック: .NET テストのサポート


Load Testing .NET Components

This section explains how to use the Silk Performer Visual Studio .NET Add-On for the testing of .NET components and Web services.

  • Silk Performer .NET プロジェクトをセットアップする
    Silk Performer .NET プロジェクトをセットアップして、 Visual Studio .NET Add-On が提供する機能をサポートする Microsoft Visual Studio プロジェクトを生成します。
  • Creating a Web Service Client Proxy
    Microsoft Visual Studio includes a wizard that generates a Web Service client proxy that you can use to call Web Service methods.
  • Instantiating Client Proxy Objects
    To instantiate a client proxy object you can declare a variable of the client proxy class as a public member variable of the .NET test driver.
  • Try Script Runs From Microsoft Visual Studio
    Explains that once you have implemented your .NET test code, you can execute a Try Script run from Microsoft Visual Studio.
  • Web Service Calls
    Explains how the Silk Performer .NET Framework routes Web traffic generated by .NET components over the Silk Performer Web engine.
  • Dependencies
    Explains how to specify files for addition to your Silk Performer project’s data files section.
  • Configuring .NET Add-In Option Settings
    Option settings for the .NET Add-In enable you to configure TrueLog Explorer, virtual user output, and BDF script settings.
  • Continuing Your Work in Silk Performer
  • カスタム属性
    VirtualUser 属性と、クラスへの適用方法について説明します。
親トピック: .NET Framework Developer Guide


Creating a Web Service Client Proxy

Microsoft Visual Studio includes a wizard that generates a Web Service client proxy that you can use to call Web Service methods. The wizard is launched via Project > Add Web Reference.
  1. Type the URL of your Web Service into the top text box, for example, http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx?WSDL, and click Enter. The Add Web Reference button is enabled when the wizard loads the WSDL document from the specified URL.
  2. Click Add Web Reference. The wizard generates a proxy class in a namespace that is the reverse of the name of the Web server that hosts the service (for example, demo.host.com becomes com.host.demo).
  3. Explore objects to see which classes have been generated. Each Web Service, and all complex data types used by the Web Service methods, are represented as classes. In the generated proxy code, the proxy class takes its name from the Web Service. The namespace of the class is the reverse of the name of the Web server that hosts the service. All files that are generated by the Add Web Reference wizard are displayed on the Solution Explorer tab.
    注: The Show All Files option must be activated to display all generated files.
親トピック: Load Testing .NET Components


Instantiating Client Proxy Objects

To instantiate a client proxy object you can declare a variable of the client proxy class as a public member variable of the .NET test driver. The variable should be instantiated either in the constructor or in the Init transaction. The first part of the namespace where the proxy class is generated is the name of your project, as this is the default namespace.
  1. Once you have instantiated a proxy class object, make calls to the service by inserting Web Service invocation code into a main transaction. Call the Web Service methods using simple parameters.
  2. Use MeasureStart and MeasureStop to measure the time required for the methods to execute.
  3. Print the result of the echoString method.
You can also call a Web Service method that takes an object as a parameter. To do this, instantiate the object, set the member values, and pass the object to the Web Service.
注: You can catch exceptions and log them in the TrueLog.
親トピック: Load Testing .NET Components


Try Script Runs From Microsoft Visual Studio

Once you have implemented your .NET test code, you can execute a Try Script run from Microsoft Visual Studio by calling Run > Try Script from the Silk Performer menu. Try Script runs are trial test runs that you can use to evaluate if your tests have been set up correctly.

The steps that are then performed by the Add-In are as follows:

  • The .NET code is compiled into a .NET assembly.
  • A BDF script is generated based on the meta information of the custom attributes and the settings in the Options dialog box.
  • The most recent BDF script is overwritten if there have been changes to the meta data of your assembly (for example, changed custom attributes, method order, or generation options).
  • If the meta data has changed, but you have altered the latest BDF file manually, you will be prompted to confirm that you want to have the file overwritten. This detection is achieved by comparing the last modified date of the BDF file with the timestamp scripted in the BDF file.
  • If you have multiple virtual user classes (classes that have the VirtualUser attribute applied) you will be prompted to specify which of the users is to be started.
  • Executing a Try Script Run
親トピック: Load Testing .NET Components


Executing a Try Script Run

  1. Select Run > Try Script from the Silk Performer menu.
    注: If you are accessing a Web Service on the Internet, ensure that you have configured proxy settings for the active profile.
  2. If you have multiple virtual user classes, select the virtual user that you want to execute from the Select Virtual User dialog box.
    注: If there are multiple test classes, you must select the test class that you want to execute.
  3. Click Run to begin the test.
    注: If the Automatic Start when running a Try Script option has been selected in Silk Performer options, TrueLog Explorer will launch showing the TrueLog that was generated by the test.
    Virtual user return-value output can be viewed in the Virtual User output tool window within Microsoft Visual Studio via the Bdl.Print method. The output window can be docked to other windows. Test controller output is displayed in a separate pane of the output tool window.
    注: WebDotNetRequest entries are Web Service calls that are routed over the Silk Performer Web engine.
    TrueLog Explorer launches automatically during Try Script runs. Each Web Service call has a node in the displayed TrueLog. The nodes in the main transaction represent the SOAP HTTP traffic that was responsible for the Web Service calls. By default, all HTTP traffic is redirected over the Silk Performer Web engine, enabling TrueLog output. You can turn off redirection or enable it for specific Web Service client proxy classes via the Silk Performer Web Settings dialog box.
  4. Using the TrueLog Explorer XML control, explore the SOAP envelope that was returned by each Web Service call.
Once the test is complete you can explore other result files (log, output, report, and error) by selecting them from the Silk Performer Results menu.
親トピック: Try Script Runs From Microsoft Visual Studio


Web Service Calls

The Silk Performer .NET Framework can route Web traffic generated by .NET components over the Silk Performer Web engine. This means that the Silk Performer Web engine executes the actual Web requests, allowing you to see exactly what is sent over the wire. This enables you to make use of Silk Performer Web engine features such as modem simulation, IP multiplexing, network statistics, and TrueLog.

By default, all network traffic is routed over the Web engine. You can however enable routing only for specific Web Service client proxy classes. To enable this feature only for specific Web Service proxy classes, change the base class of a proxy class from SoapHttpClientProtocol to SilkPerformer.SPSoapHttpClientProtocol.

This base class exchange allows the Silk Performer .NET Framework to generate more detailed statistical information for each Web Service call. It is recommended that you enable this feature for all of your Web Service proxy classes. This can be done using Visual Studio’s Web Service dialog box, which is accessible via the Silk Performer menu.

When this feature is disabled, the .NET HTTP classes process all requests.

For each Web Service call, a node is created in the TrueLog with the SOAP envelope that was passed to the Web Service and returned to the client.

When all or some classes are instrumented by Silk Performer, the HTTP traffic responsible for Web Service calls is routed over the Silk Performer Web engine. Network traffic and statistics are then written to the TrueLog. Modem simulation and IP multiplexing are also available.

  • Routing Web Service Calls
    Configure routing settings for your Web calls and select the Web Service proxy classes that should be instrumented by Silk Performer.
親トピック: Load Testing .NET Components


Routing Web Service Calls

  1. Open the Web Services dialog box (select Web settings from the Silk Performer menu).
  2. Select the Web Service proxy classes that should be instrumented by Silk Performer. These are the classes that will be routed over the Silk Performer Web engine. Select Instrument all HTTP/HTTPS traffic to have all calls routed or select specific proxy classes for routing.
親トピック: Web Service Calls


Dependencies

You can specify the files upon which your .NET code depends using the Add Dependencies dialog box (select Add Dependencies from the Silk Performer menu).

The files you specify will be added to your Silk Performer project’s data files section. This ensures that those files will be available on agents when you run tests that use multiple agents. To get the path to a file you have added to the data files section, use the GetDataFilePath function of the BDL object. This function returns the absolute path to the file. If you run a Try Script on localhost, the path will be to your original file. If you run a test it will return the path in the agent’s data directory.

  • Adding Dependencies
    You can specify the files that will be added to your Silk Performer project’s data files section.
親トピック: Load Testing .NET Components


Adding Dependencies

  1. Select Add Dependencies from the Silk Performer menu to open the Add Dependencies dialog box.
  2. Click Add file to browse to and select a file that you want to add. To remove a selected file, click Remove.
  3. Click OK to accept the dependent file list.
    注: All files in the Silk Performer project’s data files section will be copied to the agent that executes the test. To get the full path to a file, use the Bdl.GetDataFilePath function with the filename as a parameter. This function ensures that you receive the correct path to your file, regardless of whether or not the file was executed locally or remotely.
親トピック: Dependencies


Configuring .NET Add-In Option Settings

  1. From the Silk Performer menu, select Options to open the Options dialog box.
  2. Check the Automatic Start when running a Try Script check box to have TrueLog Explorer launch automatically and display the TrueLog of the current Try Script.
  3. In the Virtual User Output group box, define which types of information you want to have displayed in the Virtual User Output window.
    • Errors
    • Transactions
    • Functions
    • Information
    • User Data
    • All Errors of all Users
  4. In the BDL Script Generation group box, specify BDF script-generation settings.
    Option | Description
    DotNetCallMethod | When checked, MeasureStart and MeasureStop statements are scripted around each DotNetCallMethod call.
    Generate BDH for .NET Method Calls | When checked, a BDH file that contains BDL functions for each .NET call is generated. This makes the main BDF file slim as it only includes the BDL function calls in the transactions.
    Generate BDL functions for .NET Methods | When checked, a BDL function is scripted for each .NET call. The transactions then call the functions.
  5. Click OK to confirm the settings.
親トピック: Load Testing .NET Components


Continuing Your Work in Silk Performer

Once you have finished implementing your .NET test driver you can continue running tests with Silk Performer. You can open your .NET project in Silk Performer by selecting the Open in Silk Performer command from the Silk Performer menu.

In Silk Performer, you can run tests with multiple users distributed over multiple agents. Take advantage of the Silk Performer Web engine features (modem simulation and IP-address multiplexing) by testing how Web Service calls perform when they are called over a slow modem and how the Web server performs when numerous users make simultaneous service calls.

親トピック: Load Testing .NET Components


Attributes for Unit Test Standards

Unit-testing frameworks such as NUnit and Microsoft Unit Test Framework introduce attributes for methods that are to be called before and after test methods. These methods are called Setup/Initialize and TearDown/Cleanup.

To comply with these standards, four attributes are offered:

Attribute Class | Applicable to | Parameters | Description
VirtualUserInitialize | method |  | This method is called before a normal test method/transaction is called. It can be used for the global initialization of variables that all test methods use. Only one method with this attribute is allowed per virtual user.
VirtualUserCleanup | method |  | This method is called after each test method is called. It can be used for global clean-up. Only one method with this attribute is allowed per virtual user.
TestInitialize | method |  | This method is called before each test method/transaction. It can be used to initialize variables that are utilized by the subsequent test method.
TestCleanup | method |  | This method is called after each test method/transaction. It can be used for clean-up after a test method call
親トピック: カスタム属性


Negative Testing

Negative testing is testing in which test methods are designed to throw exceptions. Such methods should only be considered successful when a specific anticipated exception type is thrown.

Silk Performer offers an attribute that can be applied to test methods to indicate that a specific exception type is expected. If the specified exception is not thrown during execution, then the test method has failed.

Attribute Class | Applicable to | Parameters | Descriptions
TestException | method | - Exception type - Log text if the anticipated exception is not thrown (optional) | Test method/transactions can be declared with one or more TestException attributes. During execution, the runtime checks to see if the defined exception type was thrown. If the anticipated exception type was thrown, then the method call is considered successful. If not, the method call is considered a failure and exception details are written to the log file.
親トピック: カスタム属性


Testing .NET Services

This section offers an overview of the Silk Performer .NET Framework and the Silk Performer .NET Add-On for Microsoft Visual Studio .NET. It also serves as an in-depth demonstration of how to execute .NET methods with BDL, how to write complete test drivers in .NET, and how to test drivers in Visual Studio .NET. It explains how to write test code in .NET and customize test code in BDL. Because SOAP (Web services) has become widely accepted, this chapter also explores how Web services can easily be tested using Silk Performer and the .NET Framework.

  • Development Workflow
    Lines out the development workflow for .NET.
  • Writing a .NET Test Driver
    Describes how you can write a .NET test driver.
  • BDL Code Generation Engine
    Describes the BDL Code Generation Engine that generates a BDL script based on the meta data information of the compiled .NET assembly.
  • Testing Your .NET Test Driver
    Describes how you can test the .NET test driver.
  • Testing Web Services With Microsoft Visual Studio
    Explains that the Silk Performer .NET Framework and .NET add-on allow easy access to Web services from within .NET.
  • Testing with .NET Explorer
    Describes how you can use .NET Explorer to generate .NET test drivers.
  • Available BDL Functions for .NET Interoperability
    Describes the BDL functions that the Silk Performer .NET Framework and .NET add-on allow easy access to Web services from within .NET. provides for .NET interoperability.
親トピック: .NET Framework Developer Guide
関連概念
Silk Performer .NET Framework
Silk Performer Visual Studio Extension


Development Workflow

.NET Development Workflow
親トピック: Testing .NET Services


Writing a .NET Test Driver

This section describes how you can write a .NET test driver.

  • Creating a .NET Project
    Describes how you can create a new .NET project.
  • Defining a Virtual User in .NET
  • Defining a Transaction in .NET
    Describes how you can define a transaction in .NET.
  • Defining Additional Test Methods
    Describes how you can define test methods in .NET.
  • Passing Data Between BDL and .NET
    Describes the two means to exchange values between the generated BDL script and the .NET test driver
  • Calling BDL Functions from .NET
    Describes how you can call BDL functions from .NET.
  • Random Variables
    Describes how you can define random variables for your test user.
  • Exception Handling
    Describes how the Silk Performer .NET Framework handles exceptions in your test code.
  • Debugging
    Describes a workaround to enforce debugging for TryScript runs.
  • Configuration Files
    Describes how you can handle runtime-specific configurations with .NET.
親トピック: Testing .NET Services


Creating a .NET Project

Silk Performer ships with an add-on and a project wizard for Microsoft Visual Studio .NET. Microsoft Visual Studio .NET must be installed on your machine prior to the installation of the add-on. The project wizard creates a .NET project in one of the supported .NET languages, which are C# or VB.NET, and generates a sample test driver into which you only have to add your test code into the test methods. You can insert calls to .NET components, Web services and BDL functions, like MeasureStart, MeasureStop, and others.

This wizard can be invoked either by creating a new .NET project with Silk Performer or by creating a new Silk Performer project in Visual Studio .NET. In either case you start with a new Silk Performer .NET project in Microsoft Visual Studio .NET with the sample test code file open.

PerfDotNetFW.dll is a .NET assembly that ships with Silk Performer. It implements all classes, custom attributes, and enums that can be used to define meta information for automatic Silk Performer BDL script generation and calls BDL functions from within the .NET test driver. PerfDotNetFW.dll is discussed in great detail later in this chapter. The assembly is automatically referenced by the generated project.

親トピック: Writing a .NET Test Driver


Defining a Virtual User in .NET

A virtual user in .NET is a public .NET class with the SilkPerformer.VirtualUser attribute applied. This attribute tells the add-on to generate a virtual user definition in the BDL script.

The VirtualUser attribute has one parameter - the name of the virtual user that is to be generated in the BDL script when running a try script.

You can have multiple VirtualUser classes in your .NET assembly but the names of the virtual users must be unique.

Defining a Virtual User in .NET

C# Code BDL Script
[VirtualUser("Vuser1")]
public class MyTestUser1
{
  ...
}
[VirtualUser("Vuser2")]
public class MyTestUser2
{
  ...
}

dcluser
  user
    Vuser1
    ...
  user
    Vuser2
親トピック: Writing a .NET Test Driver


Defining a Transaction in .NET

A transaction in .NET is a public (non virtual) .NET method of your virtual user class that has the SilkPerformer.Transaction attribute applied to it. There are three types of transactions, init, main, and end. There can only be one init and one end transaction for each virtual user class, but there can be multiple main transaction methods.

The transaction type is passed as the first parameter. ETransactionType is an enum that defines the possible types.

SilkPerformer.ETransactionType:
  • TRANSTYPE_INIT
  • TRANSTYPE_MAIN
  • TRANSTYPE_END

Transactions of type main have an optional second parameter that defines the number of transaction calls - the default value is 1.

Example

C# Code BDL Script
[VirtualUser("Vuser1")]
public class MyTestUser1
{
  [Transaction(
    Etranstype.TRANSTYPE_INIT)]
  public void TInit()
  {
  }
  [Transaction(
    Etranstype.TRANSTYPE_MAIN)]
  public void TMain()
  {
  }
  [Transaction(
    Etranstype.TRANSTYPE_MAIN, 5)]
  public void TMain2()
  {
  }
  [Transaction(
    Etranstype.TRANSTYPE_END)]
  public void TEnd()
  {
  }
}

dcluser
  user
    Vuser1
  transactions
    TInit : begin;
    TMain : 1;
    TMain2 : 5;
    TEnd : end;

var hVuser1 : number;

dcltrans
  transaction TInit
  begin
    hVuser1:=
    DotNetLoadObject("..","MyTestUser1");
    DotNetCallMethod(hVuser1,"TInit");
  end;

  transaction TMain
  begin
    DotNetCallMethod(hVuser1,"TMain");
  end;
  transaction TMain2
  begin
    DotNetCallMethod(hVuser1,"TMain2");
  end;

  transaction TEnd
  begin
    DotNetCallMethod(hVuser1,"TEnd");
    DotNetFreeObject(hVuser1);
  end;

The add-on script generator scripts an init and an end transaction even if there are no corresponding .NET methods. These are used to load the .NET object in the init transaction and free it in the end transaction.

As you can see from the sample above, the transactions contain a DotNetCallMethod to call the .NET test driver method.

親トピック: Writing a .NET Test Driver


Defining Additional Test Methods

A test method in .NET is a public (non virtual) method that has the SilkPerformer.TestMethod attribute applied to it. Each call to a test method is scripted as a DotNetCallMethod function in the current transaction. It's possible to have multiple test methods in a single transaction.

Defining a Test Method

C# Code BDL Script
[VirtualUser("Vuser1")]
[Transaction(Etranstype.TRANSTYPE_MAIN)]
  public void TMain()
  {
  }

  [TestMethod]
  public void Method1()
  {
  }

  [TestMethod]
  public void Method2()
  {
  }

dcluser
  transaction TMain
  begin
    DotNetCallMethod(hVuser1,"TMain");
    DotNetCallMethod(hVuser1,"Method1");
    DotNetCallMethod(hVuser1,"Method2");
  end;

The two test methods, Method1 and Method2, will be called in the current transaction. The current transaction is the transaction method that is declared previous to these test methods in the .NET code.

親トピック: Writing a .NET Test Driver


Passing Data Between BDL and .NET

There are two means of exchanging values between the generated BDL script and the .NET test driver:
  • Attributes
  • Parameters
  • Declaring Attributes
    Explains how attributes are declared as project attributes, making them customizable without the need to change the .NET code.
  • Defining Parameters
    Describes how you can define input parameters and return values for .NET methods.
親トピック: Writing a .NET Test Driver


Declaring Attributes

A method can have multiple SilkPerformer.TestAttribute attributes applied to it. Attributes are not scripted, but created as project attributes. This makes it easier for engineers to customize BDL scripts to change values for different attributes, as all attributes can be found in the project attributes dialog box. Therefore the .NET test driver can access attributes with Bdl.AttributeGet.

The TestAttribute attribute has two parameters. The first parameter is the name of the attribute and the second is the default value of the project attribute.

A comment is scripted prior to the function call to indicate what specific attributes the function call requires.

// Requires attribute "Attrib1" with the default value: "Value1"
DotNetCallMethod(hVuser1, "TMain");

Declaring Attributes

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
[TestAttribute("Attrib1","Value1")]
public void TMain()
{
  string s = Bdl.AttributeGet("Attrib1");
}

dcltrans
  transaction TMain
  begin
    // Requires attribute "Attrib1"
    // with the default value: "Value1"
    DotNetCallMethod(hVuser1,"TMain");
  end;

By customizing the attribute value in the project attributes dialog box, you can customize the runtime behavior of the .NET test driver without changing the .NET code.

親トピック: Passing Data Between BDL and .NET
関連資料
Primary BDL Functions


Defining Parameters

If a method has input parameters and a return value, the Code Generation Engine appropriately creates the BDL calls for passing those parameters in and getting the return parameter. Therefore a method can have any combination of parameters and return values that can be accessed by the DotNet API functions (DotNetGetXX).

Defining Parameters

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
public string TMain(string s, int n)
{
  return s + n.ToString();
}

dcltrans
  transaction Tmain
  var
    sReturn : string;
  begin
    DotNetSetString(hVuser1,"stringvalue");
    DotNetSetInt(hVuser1, 123);
    DotNetCallMethod(hVuser1,"TMain");
    DotNetGetString(hVuser1, sReturn, sizeof(sReturn));
  end;
As you can see in the above example, DotNetSetXX functions are scripted for each method parameter. The values are default values that are suggested by the Add-On. The Code Generation Engine also scripts a DotNetGetXX function for the return value of the method. The following .NET parameter types are supported:
  • String
  • Byte
  • SByte
  • UIntPtr
  • UInt16
  • UInt32
  • UInt64
  • Int16
  • Int32
  • Int64
  • IntPtr
  • Decimal
  • Double
  • Single
  • Boolean
  • Object

Return Parameter

By default the return parameter is stored in a variable with the name xReturn, or sReturn for strings. You can give the variable a meaningful name by applying the SilkPerformer.BdlParameter attribute to your return type and passing the variable name as the first parameter (sConcatParam in the following example).

Example for Return Parameter

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
[return:BdlParameter("sConcatParam")]
public string TMain(string s, int n)
{
  return s + n.ToString();
}

dcltrans
  transaction Tmain
  var
    sConcatParam : string;
  begin
    DotNetSetString(hVuser1,"stringvalue");
    DotNetSetInt(hVuser1, 123);
    DotNetCallMethod(hVuser1,"TMain");
    DotNetGetString(hVuser1, sConcatParam,
      sizeof(sConcatParam));
  end;

The ability to define a different name for the return variable is necessary for the Code Generation Engine to generate BDL code that passes values between function calls.

親トピック: Passing Data Between BDL and .NET


Calling BDL Functions from .NET

Most of the functions exposed by the kernel.bdh of Silk Performer are implemented in PerfDotNetFW.DLL, which is a .NET assembly that comes with Silk Performer. The methods are static methods in the SilkPerformer.Bdl class. As Silk Performer is an imported namespace you can call the methods with Bdl.<MethodName>. PerfDotNetFW.dll is referenced by default when you create a Silk Performer .NET project.

  • Primary BDL Functions
    Lists the primary functions that are implemented by the SilkPerformer.Bdl class.
  • Constant Values
    Lists the constant values that certain BDL functions take as parameters.
親トピック: Writing a .NET Test Driver


Primary BDL Functions

The following table lists the primary functions that are implemented by the SilkPerformer.Bdl class. For a complete list of all functions, open the class in Microsoft Visual Studio .NET.
Function | Description
  • AttributeSet
  • AttributeGet
Setting and getting attribute values.
  • MeasureStart
  • MeasureStop
  • MeasurePause
  • MeasureResume
  • MeasureInc
  • MeasureIncFloat
  • MeasureGet
  • MeasureSetBound
  • MeasureTimeseries
  • MeasureOnOff
Measure functions.
  • GetUser
  • GetUserId
  • GetUserIdOnAgent
  • GetUserGroup
  • GetProfile
  • GetAgentId
  • GetRuntimes
  • GetAgent
  • GetController
  • GetProject
  • GetLoadTest
  • GetMemUsage
  • GetBdfFileName
  • GetBuildNo
Information about the current test.
Print | Printing messages to the virtual user output.
RepMessage Write a message to the following files:
  • .ERR
  • .LOG
  • .RPT
  • WriteErr
  • WriteLog
  • WriteData
  • WriteWrt
  • Write
  • Writeln
Write data to output files.
GetDataFilePath | Gets the absolute path to a file in the data files section.
RndUniN, and others | Random functions.
親トピック: Calling BDL Functions from .NET


Constant Values

Some functions in the BDL take constant values as parameters. These constant values are defined as public enums in the SilkPerformer.Bdl namespace. The following list lists some of the defined enums:
  • PrintDisplay (OPT_DISPLAY_ERRORS, OPT_DISPLAY_TRANSACTIONS, ...)
  • PrintColor (TEXT_GRAY, TEXT_BLACK, ...)
  • Severity (SEVERITY_SUCCESS, SEVERITY_INFORMATIONAL, ...)
  • MeasureKind (MEASURE_KIND_SUM, MEASURE_KIND_COUNT, ...)
  • MeasureUsage (MEASURE_USAGE_TIMER, ...)
  • MeasureClass (MEASURE_IIOP, MEASURE_TIMER, ...)
  • ThinkTimeOption (OPT_THINKTIME_RANDOMWAIT, ...)

Example

[Transaction(EtransactionType.TRANSTYPE_MAIN)]
[TestAttribute("Attribute1", "TestValue")]
public void Tmain()
{
  string sValue = Bdl.AttributeGet("Attribute1");
  Bdl.MeasureStart("My Testmeasure");
  string sReturn = SomeMethod(sValue);
  Bdl.Print(sReturn);
  Bdl.MeasureStop("My Testmeasure");
}
親トピック: Calling BDL Functions from .NET


Random Variables

You can define random variables for your test user that can be accessed within .NET test code. There is a wizard in Visual Studio .NET that helps you define these random variables. The wizard has the same look & feel as the random variable wizard of Silk Performer.

Depending on the type of random variable you choose, the wizard adds the appropriate random custom attribute to the virtual user class. You can use the following random custom attributes:
  • RndBin
  • RndExpF
  • RndFile
  • RndInd
  • RndPerN
  • RndSno
  • RndStr
  • RndStream
  • RndUniF
  • RndUniN

The first parameter is the name of the random variable. This is followed by the parameters that must be defined in BDL to define the random variable. For additional information, refer to the Benchmark Description Language (BDL) Reference or check Visual Studio .NET's Code Completion.

You can access random variables with the following three new functions that are declared in the BDL class as static methods:
  • GetRandomFloat
  • GetRandomNumber
  • GetRandomString
Those methods take the name of the random variable as an input parameter and then return random values.
親トピック: Writing a .NET Test Driver
関連概念
Benchmark Description Language (BDL) Reference


Exception Handling

The goal in exception handling is to catch all exceptions in your test code. That is why after creating a project, the default code has try/catch blocks in each test method.

The Silk Performer .NET Framework throws one exception, the SilkPerformer.StopException. The framework throws this exception when a run is aborted or stopped by the user. You can utilize this exception for clean up.

Other exceptions are handled normally. For detailed exception information in your TrueLogs, use Bdl.LogException to log exceptions, including message and stack trace, to TrueLog. This is particularly useful when running tests while TrueLog On Error is activate, because you can see which exceptions are thrown and you get a complete stack trace.

親トピック: Writing a .NET Test Driver


Debugging

Running TryScripts in debugging mode is not directly supported from within Visual Studio .NET. We recommend an approach to enforce debugging through a work-around.

Place a System.Diagnostics.Debug.Assert (false) statement in the constructor of your test driver or at any other position in your code. Compile your code and initiate a TryScript run from Silk Performer. You can also initiate a TryScript run from Visual Studio .NET, however we do not recommend this approach, as a new instance of Microsoft Visual Studio .NET is required for debugging and the new instance will not obtain information regarding it's impact on the instance that is running the TryScript run.

If you subsequently initiate a TryScript run from Silk Performer, a debug assertion dialog box opens, allowing you to debug the code.

親トピック: Writing a .NET Test Driver


Configuration Files

Microsoft .NET Framework allows to store a configuration file in the directory of the .NET executable or ASP.NET application that contains runtime-specific configurations. These configurations are loaded when the application is launched. For .NET executables the configuration file needs to be named with both the .exe file extension and the .config file extension. For example myprogramm.exe.config.

When running a test, the executable that hosts your .NET test driver code is perfrun.exe. Therefore it's possible to have a perfrun.exe.config that contains configuration settings that are loaded at startup. However this approach is not possible because Silk Performer generates the perfrun.exe.config file automatically before starting a test and would therefore overwrite such a configuration file. The perfrun.exe.config file contains settings based on the profile settings of the project profile.

With Silk Performer, you can have an app.config file in your project directory to specify your own configuration file settings. Silk Performer checks for this configuration file and merges the content into an automatically generated perfrun.exe.config file. To make the settings in the app.config file available to all agent machines, you need to add this file to the Data Files folder in the Project menu tree.

A perfrun.exe.config file has the following structure:
<configuration>
  <system.net>
    ...
  </system.net>
  <runtime>
    ...
  </runtime>
</configuration>

For backward compatiblity, when Silk Performer locates an app.config file, the content is added after the runtime tag. That means that your app.config file can contain any configuration nodes that are allowed below the root configuration node, except the system.net and runtime nodes, because Silk Performer generates those nodes.

With Silk Performer you can provide a fully-configured app.config file with all possible configuration sections. Silk Performer adds the necessary entries for web-traffic routing in the generated perfrun.exe.config file.

Configuring .NET Remoting Components

If you wish to configure .NET Remoting components, you need an app.config file such as the following:
<system.runtime.remoting>
  <application>
    <channels>
      <channel ref="http" port="2000" />
    </channels>
    <client url="http://remoteserver:2000">
      <activated type="RemoteDll.RemoteClass1, RemoteDll" />
      <activated type="RemoteDll.RemoteClass2, RemoteDll" />
    </client>
  </application>
</system.runtime.remoting>
親トピック: Writing a .NET Test Driver
関連タスク
データ ファイルを追加する


BDL Code Generation Engine

The Silk Performer .NET Add-On has a BDL Code Generation Engine that generates a BDL script based on the meta data information of the compiled .NET assembly (.NET test driver). The engine is invoked when a TryScript run is started in Microsoft Visual Studio .NET. The compiled .NET assembly is scanned for classes that have the VirtualUser attribute applied. Those classes are then scanned for methods that have either a Transaction or TestMethod attribute applied to them. The sequence of methods is important because calls to test methods, which are methods with the TestMethod attribute, are scripted in the transaction, which is a method with the Transaction attribute, that is declared prior to the test method.

  • Virtual User
    Describes how the Virtual User name is used to prevent method-name duplication.
  • Transactions - Virtual User Classes
    Describes how the virtual user class of a transaction is handled.
  • Test Methods
    Describes how the Code Generation Engine handles test methods.
  • Test Attributes
    Describes how the Code Generation Engine handles the test attributes of transactions and test methods.
  • Methods with Parameters
    Describes how the Code Generation Engine handles the input parameters and the return value of a method.
  • BDL Parameters
    Describes how you can apply a BdlParameter attribute to the return type of a method.
  • Intelligent Parameter Passing
    Describes how the Code Generation Engine passes the return value of a function to an input parameter with the same name in another function.
  • Options
    Describes the options that you can set in the Visual Studio .NET add-on to change the BDL code generation.
親トピック: Testing .NET Services


Virtual User

The Virtual User name is used as a prefix for all transactions and methods scripted in BDL. This is necessary to prevent method-name duplication, since the same method name may exist in two different .NET classes.

The engine checks for duplicate Virtual User names. If the assembly contains more than one Virtual User class, the names passed as parameters to the VirtualUser attribute must be unique. If there are duplicate names, an error is thrown and shown in the task list.

注: You should avoid using multiple methods with the same name in one .NET class. .NET allows using multiple methods with the same name if the methods have different parameters, but the Code Generation Engine of Silk Performer does not support this feature.
  • Random Variables - Virtual User Classes
    Describes how the virtual user class of a random variable is handled.
親トピック: BDL Code Generation Engine


Random Variables - Virtual User Classes

The Silk Performer code-generation engine also checks the virtual user class of all defined random-variable custom attributes. For each random variable, the corresponding random-variable definition is declared in the BDL script.

Currently these variables are of no real use, neither on the BDL side or the .NET side. If you use one of the Bdl.GetRandom functions, the definition of the random variable is read from the metadata information of the .NET code, not from the BDL file. That means that if you change the random variable definition in BDL it will not have any effect on the .NET code as it still must have the definition from the custom attributes. This behavior will be adjusted in future versions so that you will be able to change settings in the BDL script and have the executing .NET code receive those random values based on the BDL settings.

親トピック: Virtual User


Transactions - Virtual User Classes

The Code Generation Engine checks all methods that have the transaction attribute applied. There are three types of transactions, init, main, and end. A Virtual User class can only have one init and one end transaction. Even if there is no init or end transaction within the .NET code, transactions are still scripted because they are required for loading and freeing the .NET objects.

The first call in the init transaction in BDL is a DotNetLoadObject method call. After this call the actual call to the .NET method is made. Thereafter all methods with the TestMethod attribute that are defined between this transaction method and the next are called.

The last call in the end transaction in BDL is a DotNetFreeObject method call.

The main transactions call the actual transaction method in .NET and then the appropriate test method calls.

親トピック: BDL Code Generation Engine


Test Methods

When the Code Generation Engine scans the .NET assembly and finds a method with a TestMethod attribute, the engine scripts a call to the method in the current transaction. The current transaction is the transaction method that was declared before the test method. As a result, declaring a test method without a transaction method results in an error. Declaration means that the transaction method has been declared previously in the code.

Test Method

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain1()
{
}

[TestMethod]
public void TestMeth1()
{
}

[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain2()
{
}

[TestMethod]
public void TestMeth2()
{
}

[TestMethod]
public void TestMeth3()
{
}

dcltrans
  transaction TMain1
  begin
    DotNetCallMethod(hVuser1, "TMain1");
    DotNetCallMethod(hVuser1, "TestMeth1");
  end;
  transaction TMain2
  begin
    DotNetCallMethod(hVuser1, "TMain2");
    DotNetCallMethod(hVuser1, "TestMeth2");
    DotNetCallMethod(hVuser1, "TestMeth3");
  end;

Erroneous Test Method Declaration

The following test method declaration would cause an error with the Code Generation Engine as there is no current transaction for the TestMeth1 method:
[TestMethod]
public void TestMeth1()
{}

[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain1()
{}
親トピック: BDL Code Generation Engine


Test Attributes

When the Code Generation Engine processes a transaction or test method it checks whether the method has TestAttribute attributes applied to it. A project attribute is generated for each test attribute. The name and default values are used to generate project attributes with the same names and default values. To make it easier for engineers who customize BDL script, comments are scripted before the DotNetCallMethod.
// Requires attribute "Attr1" with the default value: "Value1" DotNetCallMethod(hVuser1, "TMain1");
// Requires attribute "Attr2" with the default value: "Value2"
// Requires attribute "Attr3" with the default value: "Value3" DotNetCallMethod(hVuser1, "TestMeth1");

Test Attributes

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
[TestAttribute("Attr", "Value1")]
public void TMain1()
{
}

[TestMethod]
[TestAttribute("Attr2", "Value2")]
[TestAttribute("Attr3", "Value3")]
public void TestMeth1()
{
}

dcltrans
  transaction TMain1
  begin
    // Requires attribute "Attr1"
    // with the default value: "Value1"
    DotNetCallMethod(hVuser1, "TMain1");
    // Requires attribute "Attr2"
    // with the default value: "Value2"
    // Requires attribute "Attr3"
    // with the default value: "Value3"
    DotNetCallMethod(hVuser1, "TestMeth1");
  end;
親トピック: BDL Code Generation Engine


Methods with Parameters

If a method, whether it is a transaction or a test method, has input parameters or a return value, the engine scripts DotNetSetXX functions to pass the input parameters and a DotNetGetXX function to retrieve the return value.

The following DotNetGetXX and DotNetSetXX functions are available:
  • DotNetSetString
  • DotNetSetInt
  • DotNetSetFloat
  • DotNetSetBoolean
  • DotNetSetObject
  • DotNetGetString
  • DotNetGetInt
  • DotNetGetFloat
  • DotNetGetBoolean
  • DotNetGetObject

Therefore you can exchange strings, integers, floats, Booleans, and objects. Objects are object handles to other .NET objects.

The Code Generation Engine scripts a DotNetSetXX function for each parameter in the same sequence as the parameter definition. If there is a return value, it scripts the corresponding DotNetGetXX function.

The Code Generation Engine creates appropriate values for input parameters such as 123 for the int in the example below. Silk Performer does not support arrays.

Methods with Parameters

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
public object TMain1(string s, int n)
{
}

dcltrans
  transaction TMain1
  var
    hReturn : number;
  begin
    DotNetSetString("stringvalue");
    DotNetSetInt(123);
    DotNetCallMethod(hVuser1, "TMain1");
    DotNetGetObject(hReturn);
  end;
The following .NET data types are supported:
  • String
  • Byte
  • SByte
  • UIntPtr
  • UInt16
  • UInt32
  • UInt64
  • Int16
  • Int32
  • Int64
  • IntPtr
  • Decimal
  • Double
  • Single
  • Boolean
  • Object
親トピック: BDL Code Generation Engine


BDL Parameters

If a method, whether it is a transaction or a test method, has a return parameter, the Code Generation Engine stores the value by default in a variable with the name xResult, where x depends on the return type. To change this behavior, apply a BdlParameter attribute to the return type of the method and pass the variable name as the first parameter.

BDL Parameters

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
[return:BdlParameter("sConcatParam")]
public string TMain(string s, int n)
{
  return s + n.ToString();
}

dcltrans
  transaction Tmain
  var
    sConcatParam : string;
  begin
    DotNetSetString(hVuser1, "stringvalue");
    DotNetSetInt(hVuser1, 123);
    DotNetCallMethod(hVuser1, "TMain");
    DotNetGetString(hVuser1, sConcatParam,
      sizeof(sConcatParam));
  end;
親トピック: BDL Code Generation Engine


Intelligent Parameter Passing

The Code Generation Engine checks methods for their return values and input parameters. If a method has an input parameter that has the same name as a previously returned value, the return value will be passed to the function. Normally return parameters do not have names assigned to them - but you can assign a name by applying a BdlParameter attribute.

As a result, you can pass values between method calls by giving the parameters and return values the same names. When you declare the parameters, ensure that you do not assign the same name to different parameter types. In Silk Performer the Code Generation Engine does not check if the return value and input parameter types are the same.

Intelligent Parameter Passing

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
[return:BdlParameter("sName")]
public string TMain()
{
  return "Andi";
}
[TestMethod]
public void Hello(string sName)
{
  Bdl.Print("Hello " + sName);
}

dcltrans
  transaction Tmain
  var sName : string;
  begin
    DotNetCallMethod(hVuser1, "TMain");
    DotNetGetString(hVuser1, sName, sizeof(sName));
    DotNetSetString(hVuser1, sName);
    DotNetCallMethod(hVuser1, "Hello");
  end;
親トピック: BDL Code Generation Engine


Options

This section describes the options that you can set in the Options dialog box of the Visual Studio .NET add-on. These options change the BDL code generation.

  • Generating Timers for DotNetCallMethod
    If this option is enabled, the time for each method to execute becomes available in the overview report.
  • Generating BDL Functions for .NET Method Calls
    If this option is enabled, the engine scripts a BDL function for each call to a .NET method.
  • Generating BDH for .NET Method Calls
    If this option is enabled, the engine scripts a BDL function for each .NET method and stores them in a BDH file in the main BDF file.
  • Generating Project Attributes
    When this option is enabled (by default), project attributes are created for each TestAttribute custom attribute on a method.
親トピック: BDL Code Generation Engine


Generating Timers for DotNetCallMethod

If this option is enabled, the engine scripts a MeasureStart and MeasureStop for each DotNetCallMethod that uses the name of the method. This gives you the time taken for the method to execute and the information becomes available in the overview report.

Generating Timers for DotNetCallMethod

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain()
{
}

[TestMethod]
public void Test1()
{
}

dcltrans
  transaction Tmain
  begin
    MeasureStart("TMain");
    DotNetCallMethod(hVuser1, "TMain");
    MeasureStop("TMain");
    MeasureStart("Test1");
    DotNetCallMethod(hVuser1, "Test1");
    MeasureStop("Test1");
  end;
親トピック: Options


Generating BDL Functions for .NET Method Calls

If this option is enabled, the engine scripts a BDL function for each call to a .NET method. The transaction calls the generated function. This makes the transactions shorter and easy to read. Input parameters to the .NET method become input parameters for the BDL function. If the .NET method returns a value, the value will be the return value of the function.

BDL Functions for .NET Method Calls

C# Code BDL Script
[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain()
{
}

[TestMethod]
public string Test1(int nParam)
{
}

dclfunc
  function Vuser_Tmain(hObject:number)
  begin
    DotNetCallMethod(hObject, "TMain");
  end;

  function Vuser_Test1(hObject:number;nParam:number): string;
    var sReturn : string;
  begin
    DotNetSetInt(hObject, nParam);
    DotNetCallMethod(hObject, "TMain");
    DotNetGetString(hObject, sReturn, sizeof(sReturn));
    Vuser_Test1 := sReturn;
  end;
  dcltrans
  transaction Tmain
    var sReturn : string;
  begin
    Vuser_Tmain(hVuser);
    SReturn := Vuser_Test1(hVuser, "stringparam");
  end;
親トピック: Options


Generating BDH for .NET Method Calls

If this option is enabled, the engine scripts a BDL function for each .NET method and stores them in a BDH file in the main BDF file. This option implies the Generating BDL Functions for .NET Method Calls option.

親トピック: Options


Generating Project Attributes

When this option is enabled (by default), project attributes are created for each TestAttribute custom attribute on a method and a comment is scripted before the DotNetCallMethod call to help engineers determine which attributes are required by which methods.

If the Generating Project Attributes option is disabled, you need to script AttributeSetString calls before the call to define the attributes and default values.

We recommend that you enable the option because you can then manage all your attributes using the project attributes dialog and you do not need to browse through the script.

親トピック: Options


Testing Your .NET Test Driver

You can test the .NET test driver within Visual Studio .NET without even opening Silk Performer. The add-on can run a Try Script, making the results and output visible in Microsoft Visual Studio .NET. This feature enables .NET developers to concentrate on developing their .NET test drivers. They do not need Silk Performer or BDL skills because script generation is done by the add-on. QA departments can take the final versions of .NET test drivers and customize the generated scripts to their needs.

  • Preparations
    Describes what you need to do before you can test your .NET test driver.
  • Try Script Runs
    Describes how you can launch a Try Script run.
  • 結果を検討する
    実行した負荷テストの結果について説明します。
  • Running Tests in Silk Performer
    Describes the tasks you can perform in Silk Performer when you have completed the implementation of the .NET test driver.
親トピック: Testing .NET Services


Preparations

If you have created a .NET test driver, and you do not need any special data files or profile changes, you are ready to execute a TryScript run to test your .NET test driver.

  • Data Files
    Describes how you can add files in your .NET methods to the data files section of the Silk Performer project.
  • Profile and System Settings
    Describes the profile settings that are specific to .NET.
  • Web Settings
    Describes the Web settings that are specific to .NET.
  • Testing Options
    Describes the options that are relevant to running tests.
親トピック: Testing Your .NET Test Driver
関連概念
Writing a .NET Test Driver


Data Files

If you access any files in your .NET methods you should add those files to the data files section of the Silk Performer project. You can do this through the Add Dependencies dialog box of the Silk Performer menu. If you are running a test on a remote agent, the files will be copied to the data directory of the agent. To ensure you have the right file path to your files, use the Bdl.GetDataFilePath method. This method returns the path to each data file using the filenames as parameters.

Adding the C:\myfiles\file1.txt File to the Data Files

[Transaction(Etranstype.TRANSTYPE_MAIN)]
public void TMain()
{
  string sFilename = Bdl.GetDataFilePath("file1.txt");
  System.IO.FileStream fs = System.IO.File.Open(sFilename,
  System.IO.FileMode.Open);
  ...
  fs.Close();
}

The .NET test driver DLL is automatically added to the data files of the project so that the DLL is available to remote agents.

親トピック: Preparations


Profile and System Settings

You can edit your profile and system settings within Microsoft Visual Studio .NET using the familiar Silk Performer dialog boxes. Open the dialog boxes through the Profile Settings and System Settings menu entries of the Silk Performer menu.

The following profile settings are specific to .NET:
  • Traffic redirection
    Option
    Description
    Route HTTP .NET through Silk Performer web engine

    If this option is enabled, all HTTP/HTTPS network traffic that is generated by .NET components is routed over the Silk Performer Web engine. This allows you to make use of Web engine features such as modem simulation, IP multiplexing, and others.

    This also creates TrueLog nodes for each Web request, along with statistical information about the traffic.

    Routed Web Service proxy classes
    This read-only class is filled by the .NET add-on with the Web service proxy classes you are using in your .NET test driver.
  • Application domain setting
    Option
    Description
    One application domain for each virtual user container process

    If this option is checked, there is only one application domain for all virtual users in the container process. This option improves performance because there is less overhead for the .NET Common Language Runtime to administrate multiple application domains for each process.

    The disadvantage is that all objects that are loaded from all virtual sers in the container process share a single application domain and therefore may conflict with one another in terms of, for example, global variables/resources.

    One application domain for each virtual user

    If this option is checked, each virtual user has its own application domain. The objects loaded by each virtual user are isolated in their application domains from other objects in other application domains.

    The disadvantage of this is that there is additional overhead for the .NET Common Language Runtime to administer multiple application domains in one process - therefore there is some performance loss.

  • Framework version
    Option
    Description
    Version

    Select the Microsoft .NET Framework version for your script replay. Silk Performer automatically populates this list with the framework version that you have installed on your computer.

親トピック: Preparations


Web Settings

You can change the Web settings in the Web Settings dialog box from the Silk Performer menu.

In this dialog box you can set the option Route HTTP .NET through Silk Performer web engine.

If you are testing Web services through a generated Web-service proxy class, you can route the generated network traffic over the Silk Performer Web engine to get information about sent and received data and use features such as modem simulation.

In the checklist of the dialog box you find all the Web Service proxy classes of your project. You can check or uncheck the proxy classes that should be routed over the Web engine. When you check Route HTTP .NET through Silk Performer Web engine, all proxy classes are routed since all network traffic is routed. Alternately, you can route individual Web-service calls by selecting them from the list.

The list of Web-service proxy classes is written to your project file and you can view the list in the .NET options of the profile settings dialog box.

親トピック: Preparations


Testing Options

Select the Options dialog box from the Silk Performer menu. The dialog box includes options that affect output during tests and behavior of the Code Generation Engine.

The options that are relevant for running tests are:
  • TrueLog Explorer
    Option
    Description
    Automatically Start when running a TryScript
    If this option is checked, TrueLog Explorer will launch automatically when a TryScript is run.
  • Virtual User Output

    These options define what output will be printed to the Virtual User Output window during TryScript runs. For additional information on the options, refer to Silk Performer Help.

親トピック: Preparations
関連概念
Options


Try Script Runs

You can launch a Try Script run from the Silk Performer menu or by pressing F8. This is only possible if you did not assign a different command to F8 when the add-on was installed.

  • Steps Performed by the Add-On before Try Script Runs
    The .NET add-on performs a series of steps before it runs a Try Script run.
親トピック: Testing Your .NET Test Driver


Steps Performed by the Add-On before Try Script Runs

The .NET add-on performs the following steps before it begins with the execution of a Try Script run:
  1. The add-on compiles the .NET Assembly. If the compilation fails the add-on does not execute the Try Script.
  2. The Code Generation Engine generates the BDF/BDH files.
    The engine checks if it has to overwrite old BDF/BDH files. Old files are overwritten only if there has been one of the following changes made to the structure of the .NET test driver:
    • Changes to VirtualUser, Transaction, TestMethod, TestAttribute, or BdlParameter attributes.
    • Changes to the sequence of a method definition.
    • Changes to the parameter definition of the methods.
    • Changes to code generation options.
    If significant changes have been made, the engine checks whether the BDF has been changed manually since it was last generated. If it has been changed, you must specify whether the file can be overwritten. If you select No, the Try Script is not executed.
  3. The add-on prompts you to execute the VirtualUser. If there is more than one VirtualUser class in the .NET test driver, you must choose which virtual user is to be executed.
  4. A temporary project file is generated and configured to run the Try Script.
  5. The Virtual User Output window is activated.
  6. The test begins.
  7. If the Automatically Start TrueLog Explorer option setting has been enabled, TrueLog Explorer will launch with the TrueLog of the active Try Script.
  8. All virtual user output, contingent on options, is printed to the Virtual User Output window.
親トピック: Try Script Runs


Running Tests in Silk Performer

Once you have completed the implementation of the .NET test driver, you can run tests from within Silk Performer. To do this, open Silk Performer from the Silk Performer menu. The project file is opened in Silk Performer with all the generated scripts and data files.

You can customize the .NET test driver by changing the input values of the .NET functions in the BDL script. The separation of .NET code and BDL code is a great benefit for companies with testing departments in which not all employees are familiar with .NET. One employee with .NET skills can implement .NET test drivers and pass a generated Silk Performer project along to other employees who are more familiar with Silk Performer. Those employees can then customize the BDL script by changing input parameters and configuring real tests.

Running Tests on Remote Agents

If you want to run a .NET test on remote agents you must make sure that the Microsoft .NET Framework is installed on each of the agents. You can download the Microsoft .NET Framework from http://msdn.microsoft.com.

親トピック: Testing Your .NET Test Driver


Testing Web Services With Microsoft Visual Studio

The Silk Performer .NET Framework and .NET add-on allow easy access to Web services from within .NET. Microsoft Visual Studio .NET has wizards that allow you to specify the URLs of Web services. It can also create Web-service client proxies to invoke the methods of Web services.

  • Web サービス クライアント プロキシを作成する
  • クライアント プロキシ オブジェクトをインスタンス化する
    クライアント プロキシ オブジェクトをインスタンス化する方法について説明します。
  • Web サービスのメソッドを呼び出す
    Web サービスのメソッドを呼び出す方法を説明します。
  • Web サービス トラフィックのルーティング
    Silk Performer .NET Framework が、 Silk Performer Web エンジンを通して .NET コンポーネントによって生成された Web トラフィックをルーティングできることを説明します。
  • Exploring Results in Visual Studio
    Enter a short description of your concept here (optional).
親トピック: Testing .NET Services
関連概念
Testing .NET Components


Exploring Results in Visual Studio

A TrueLog node is logged for each Web-service call that is executed by the .NET test driver, if routing Web-service traffic is enabled. Click the Response tab of the node in TrueLog Explorer for the Response SOAP Envelope, or click the Request tab for the Request SOAP Envelope.

The overview report for each Web-service method that is called contains the statistical information, like the round-trip time, the server busy time, and others.

親トピック: Testing Web Services With Microsoft Visual Studio


Testing with .NET Explorer

.NET Explorer is a tool that allows you to generate .NET test drivers through a point & click approach. .NET Explorer supports the following technologies:
  • SOAP Web Services
  • .NET Remoting
  • .NET Components
For additional information, refer to the .NET Explorer Help.
親トピック: Testing .NET Services
関連概念
.NET Explorer ヘルプ


Available BDL Functions for .NET Interoperability

This section describes the BDL functions that The Silk Performer .NET Framework and .NET add-on allow easy access to Web services from within .NET. provides for .NET interoperability. For detailed descriptions of these functions and all other BDL API functions, refer to the Benchmark Description Language (BDL) Reference. BDL reference details are also available in Silk Performer Help.

  • DotNetLoadObject Function
    Loads a .NET Assembly and creates an instance of a .NET type.
  • DotNetFreeObject Function
    Releases the object handle, so that the garbage collector will free the object.
  • DotNetCallMethod Function
    Calls a public method on the .NET object or a static method of a .NET type.
  • DotNetSetString Function
    Sets a string parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetSetFloat Function
    Sets a float parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetSetBool Function
    Sets a boolean parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetSetInt Function
    Sets an integer parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetSetObject Function
    Sets an object as parameter for the next DotNetCallMethod or DotNetLoadObject call in an internal parameter array.
  • DotNetGetString Function
    Gets the string return value of the last DotNetCallMethod call in sReturn.
  • DotNetGetFloat Function
    Gets the float return value of the last DotNetCallMethod call in fReturn.
  • DotNetGetBool Function
    Gets the boolean return value of the last DotNetCallMethod call in bReturn.
  • DotNetGetInt Function
    Gets the integer return value of the last DotNetCallMethod call in nReturn.
  • DotNetGetObject Function
    Gets the handle to the object returned by the last DotNetCallMethod call.
親トピック: Testing .NET Services


Java テストのサポート

このセクションでは、Silk Performer Java Framework と Java Explorer を使用して Java をテストする詳細な手順を説明します。

  • Java Explorer のヘルプ
    Java Explorer で Java をテストするための詳細な手順を説明します。
  • Java Framework Developer Guide
    Silk Performer Java Framework を使用して Java をテストする詳細な手順を説明します。
  • Java 用の SOAP Web サービスをテストする
    SOAP ベース Web サービスの基本および Java でのテスト方法についての詳細を説明します。


Java Explorer のヘルプ

  • Tools and Samples
    Explains the tools, sample applications and test projects that Silk Performer provides for testing Java and .NET.
  • Testing Java Components
    Explains that the Java Framework encourages efficiency and tighter integration between QA and development by enabling developers and QA personnel to coordinate their development and testing efforts while working entirely within their specialized environments.
  • Tour of the UI
    Introduces the main elements of the Java Explorer interface, including the Loaded Components, Method Call, and Test Scenario panes, and the workflow bar.
  • Setting Up Java Explorer
    Describes how to set up a project and define tests in Java Explorer.
  • Setting Up Tests
    Includes an introduction to Java Explorer GUI elements, customization of input parameters, definition of output value verifications, and generation of random variables. The section concludes with an explanation of how to use Java Explorer to test EJBs and RMI over IIOP.
  • Animated Runs
    Explains that animated runs execute the test methods that are assigned to your test cases. Several output logs and reports are available.
  • Analyzing Results
    Lists the four file types that are available for analyzing Java test results.
  • System and Project Settings
    Describes the system and project setting options that Java Explorer provides.
  • Exporting Projects
    Describes the environments to which you can export a test scenario.
親トピック: Java テストのサポート


Testing Java Components

The Java Framework encourages efficiency and tighter integration between QA and development by enabling developers and QA personnel to coordinate their development and testing efforts while working entirely within their specialized environments.

  • Testing Java Components Overview
    Explains that with the Java Framework developers work exclusively in their Java programming environments while QA staff work exclusively in Silk Performer.
  • Working With JDK Versions
    Explains that you need to test components against all JDK versions.
  • Java Framework Approach
    Explains that the Java Framework approach to component testing is ideal for developers and advanced QA personnel who are not familiar with BDL, but are familiar with Java programming.
  • Plug-In for Eclipse
    Explains the plug-in for Eclipse developers that automatically generates all required BDL code from within the Eclipse SDK.
  • Java Explorer Overview
    Explains Java Explorer
親トピック: Java Explorer のヘルプ
親トピック: Java Framework Developer Guide


Testing Java Components Overview

With the Java Framework developers work exclusively in their Java programming environments while QA staff work exclusively in Silk Performer. There is no need for staff to learn new tools.

Java developers typically build applications and then hand them off to QA for testing. QA personnel are then tasked with testing Java applications end-to-end and component-by-component. Typically QA personnel are not given clients (test drivers) to test applications and they typically are not able to code such test clients themselves. This is where Java Explorer and the Java Framework are effective. Java Explorer offers a means of visually scripting test clients. In effect Java Explorer acts like a test client and can be used to interact with the application under test.

All Java components can be tested with Java Explorer, but the focus lies on the following three Java components: Enterprise JavaBeans (EJBs), Web Services, and Remote Method Invocation (RMI).

The Java Framework enables users to run stand-alone Java test code, to use other tools to invoke Java test code, or to execute test code from an exported standalone console.

親トピック: Testing Java Components


Working With JDK Versions

Because multiple Java Developer Kit (JDK) versions are available, you need to test components against all versions. Both Silk Performer's Java Explorer and Java Framework support testing components of various vendors and of different JDK versions.

親トピック: Testing Java Components


Java Framework Approach

The Java Framework approach to component testing is ideal for developers and advanced QA personnel who are not familiar with BDL (Benchmark Description Language), but are comfortable working with a Java development tool. With this approach, Java code is used by the QA department to invoke newly created methods from Silk Performer.

You can generate Java Framework BDL code using the Silk Performer JUnit import tool. The import tool produces BDL code that can invoke customer test code or customer JUnit testcode. It can also be used to directly invoke a client API.

親トピック: Testing Java Components
関連概念
JUnit インテグレーション


Plug-In for Eclipse

Silk Performer offers a plug-in for Eclipse developers that automatically generates all required BDL code from within the Eclipse SDK. Developers simply write their code in Eclipse and implement certain methods for integrating with the Silk Performer Java Framework. The plug-in then creates all required BDL scripting that the QA department needs to invoke newly created methods from Silk Performer. The plug-in for Eclipse enables developers and QA personnel to better coordinate their efforts, consolidating test assets and enabling both testers and developers to work within the environments with which they are most comfortable.

親トピック: Testing Java Components


Java Explorer Overview

Java Explorer is a GUI-driven tool that is well suited for QA personnel who are proficient with Silk Performer in facilitating analysis of Java components and thereby creating Silk Performer projects, test case specifications, and scripts from which tests can be run.

Developers who are proficient with Java may also find Java Explorer helpful for quickly generating basic test scripts that can subsequently be brought into a development tool for advanced modification.

Java Explorer emulates Java clients. When working with Web services, Java Explorer achieves this through the use of proxies, which are conversion encoding/decoding modules between the network and client. Proxies communicate with servers by converting function calls into SOAP (XML) traffic, which is transferred through HTTP. Requests are decoded on the remote computer where the component resides. The XML request is then decoded into a real function call, and the function call is executed on the remote server. The results are encoded into XML and sent back to Java Explorer through SOAP, where they are decoded and presented to the user. What you see as the return result of the method call is exactly what the server has sent over the wire through XML.

親トピック: Testing Java Components


Tour of the UI

Explains the view tabs that are offered by Java Explorer.

  • Overview
    Introduces the main elements of the Java Explorer interface, including the Loaded Components, Method Call, and Test Scenario panes, and the workflow bar.
  • Design Tab
    Explains that the Design tab offers the display of loaded components, invocation of methods, customization of input/output data, and the design of test scenarios.
  • Code Tab
    Explains that the Code tab displays generated code files for the current test scenario and that various code types are available.
  • Output Tab
    Explains that the Output tab displays log output during test runs.
親トピック: Java Explorer のヘルプ


Overview

The main sections of the Java Explorer interface are highlighted below.

Workflow Bar

The Java Explorer workflow bar assists you in configuring and running your tests. The buttons on the workflow bar enable you to perform the following commands:

  • Start Here: Opens the Load File Wizard, which guides you through selecting the type of testing that you want to perform and loading the required components.
  • Test Class: Allows you to create a new test case for a class, or to add methods to an existing test case. This button is enabled when you select a class in the Loaded Components menu tree.
  • Invoke: Invokes the selected method in the Loaded Components menu tree and adds it to the selected test case in the Test Scenario menu tree.
  • Customize: Lets you store data as variables. This button is enabled when you select an input parameter in the Input Data menu tree, or an output parameter in the Output Data menu tree.
  • Verification: Allows you to define verifications for variables. This button is enabled when you select an output parameter in the Output Data menu tree that has been stored as a variable.
  • Run Test: Performs an animated run of your test cases.
  • Results: Lets you explore the results of your last test run through user report, TrueLog, error report, or log file analysis.

WSDL/JAR Address Field

The WSDL/JAR address field allows for the loading of either WSDLs or Java classes and packages.

Loaded Components Pane

The Loaded Components pane includes three tabs:
  • Classes: A list of loaded Web services, remotable classes or interfaces, and other Java classes. Allows you to instantiate objects, connect to remote objects, or call static methods.
  • Objects: A list of instantiated objects, global variables, and random variables. Allows you to call methods on those kind of objects.

Method Call Pane

  • The Input Data menu tree shows input parameters (both headers and bodies) for the selected method call.
  • The Input Data Properties field shows the properties of the input parameters (value, type, pass, null, etc).
  • The Output Data menu tree shows the output parameters (header and body) of the last/selected method call.
  • The Output Data Properties field shows the properties of the output parameters (value, type, pass, null, etc).

Test Scenario Pane

The Test Scenario pane lists the current test cases along with all added method calls.

親トピック: Tour of the UI


Design Tab

The Design tab is the primary mode used to access the majority of Java Explorer functionality. The Design tab offers the display of loaded components, invocation of methods, customization of input/output data, and the design of test scenarios.

  • Loaded Components Pane
    Explains that the Loaded Components pane, on the Design tab, distinguishes between classes and objects and displays these components within different tree menus.
  • Classes Tab
    Explains that all loaded classes and Web services are listed in the Java Explorer Loaded Components pane on the Classes tab.
  • Objects Tab
    Explains that when an object is instantiated through a constructor or returned by a method and stored in a variable, the object is listed in the Loaded Components pane on the Objects tab.
親トピック: Tour of the UI


Loaded Components Pane

The Loaded Components pane, on the Design tab, distinguishes between classes and objects and displays these components within different tree menus.

On the Classes tab you see all loaded classes with their members (methods, fields, and properties) that can be accessed without the need of an object context. Normally these are static members and constructors.

When you instantiate a class, the created object is shown on the Objects tab with all instance members (methods, fields, and properties).

The two exceptions are Web services and Remote Objects. As an object instance is not required for Web Services (which are objects that expose static methods), all methods offered by Web services are shown on the Classes tab. Remote Objects, for example EJB home objects, which are used to create an EJB object, are also listed in the Classes tab, although they are in fact objects.

親トピック: Design Tab


Classes Tab

All loaded classes and Web services are listed in the Java Explorer Loaded Components pane on the Classes tab.

Only constructors, static methods, and members are displayed, as there is no object context required to call them.

Web services and remotable interfaces are treated as if they only have static methods.

The following folders are available in Classes view:

Remote Objects

Home interfaces of EJBs on remote servers. The home interfaces are looked up on a naming service through JNDI. Invoking a create method on EJB home objects instantiates EJB objects on servers.

Web Services

Stub classes, which are helper classes that encapsulate network communications. Axis classes are derived from org.apache.axis.client.Stub or org.apache.axis2.client.Stub, depending on the selected Web service plugin in Tools > Project Settings > Web Service Plugin. When you use the Metro client stub, classes are derived from javax.xml.ws.Service. Asynchronous method calls are not allowed and therefore are not shown.

Other Classes

Other Java classes, that do not fit in the above listed categories, and the application under test (AUT) are included in this folder.

親トピック: Design Tab


Objects Tab

When an object is instantiated through a constructor or returned by a method and stored in a variable, the object is listed in the Loaded Components pane on the Objects tab. Instance members and methods that can then be invoked by the user are displayed.

The Objects tab shows objects stored in variables that have global scope and those that have a local scope of the currently selected test case.

Objects

Objects contain logic and data. For example, the data of an object might consist of a string. In this case, the logic of the object would consist of functions that can be used to manipulate the string.

注: You can create new objects by invoking a method more than once using different input parameters.

Instance methods and members are displayed to allow for easy invokation.

Members have get/set accessors to enable the getting and setting of values.

Local test case objects are included in the Local Test Case Objects folder. A local object is only displayed while the test case that is associated with it is selected. Global test case objects are included in the Global Test Case Objects folder.

注: To create a new test case, right-click a test case and choose New Test Case.

Variables

By default variables that store simple data types such as strings and integers are listed in the Global Random Variables folder, not as objects but as simple variables. Depending on the variable type - either simple value type or complex object - variables are either displayed as simple types, with no actions allowed, or as objects for which you can invoke all methods on the variable object, for example methods on java.lang.String.

String values are represented as complex objects that allow you to call all methods of the java.lang.String class.

親トピック: Design Tab


Code Tab

Displays generated code files for the current test scenario. The following code types are available:

Test Driver Test Code

This tab displays the Java code generated for the test driver. This code can be compiled to a standalone console application. The main method for the application contains the calls to the test cases that are defined in your current test scenario. The test case methods contain all the calls that you have defined in your scenario for the respective test case.

When you export a standalone console application through the Export menu and then run the application, you see output information regarding successful/failed methods in the console window.

Silk Performer Java Framework Test Code

When you export a Silk Performer Java Framework project, the following files are generated:
  • Silk Performer project file (.lpt)
  • Silk Performer script file (.bdf)
  • Java test script (.java)

This tab displays the Java test script code for Silk Performer Java Framework. Java framework code run by Silk Performer enables you to execute Java scripts through BDL. For each test case in your current test scenario, Java Explorer generates a separate BDL transaction in the test script.

BDL Script

This tab displays the BDL script code for Silk Performer Java Framework. The generated BDL executes the Java test script with the settings stored in the Silk Performer project file.

JUnit Code

This tab displays the JUnit test script code. this code can be executed with any JUnit TestRunner. For more information about JUnit testing, refer to the Silk Performer Help.

Client Proxy

This tab displays generated Web Service Client proxy code. When you load a WSDL file to access a Web service, a Client proxy class is created. Proxy classes are created on method and type information in WSDL files. When Web-service methods return complex types, additional classes are declared. These additional classes are used to represent complex types in the method calls that take complex parameters.

親トピック: Tour of the UI


Output Tab

The Output tab displays log output during test runs. The tab shows details about each call of the most recent animated run. Statistics regarding execution time and executed methods are also shown.

注: The Output tab can also be accessed by clicking Results on the Workflow Bar.

The following items are available:

Animation Log

Displays detailed information about test duration, method calls, and errors. It also lists each method, including input parameters and output values.

Java Explorer automatically saves this file to <my documents>\Silk Performer 21.0\Projects\<projectname>\RecentTestRun\<projectname>.log.

Error Log

The Error Log delivers detailed information about errors that occurred during the last test run.

Java Explorer automatically saves this file to <my documents>\Silk Performer 21.0\Projects\<projectname>\RecentTestRun\<projectname>.err.

User Report

An overview report in HTML format that displays the consolidated information from the animation log and the error log, in a report format that you can use for distribution or printing.

Java Explorer automatically saves this file to <my documents>\Silk Performer 21.0\Projects\<projectname>\RecentTestRun\<projectname>.html.

Example Animated Log Output

Test started: 08.10.2004 08:01:50
Test stopped: 08.10.2004 08:01:53
Method calls: 1
Success calls: 1
Error calls: 0
TestWebProxies.Service1.echoStringArray
Parameters : System.String[](string)
Return Value: System.String[](string)
親トピック: Tour of the UI


Setting Up Java Explorer

This section describes how you can set up a project in Java Explorer and how you can define tests for the project. A sample Web Service host is used for demonstration purposes. For additional information on how to use Java Explorer to test Enterprise JavaBeans and RMI over IIOP, see Enterprise JavaBeansand RMI over IIOP.

  • Java Explorer Prerequisites
    Describes the prerequisites that are needed before you can create a project in Java Explorer.
  • Creating a New Project
    Create a new Java Explorer project to run tests with Java Explorer.
  • Test Case Definition
    Explains the available approaches to define a test for a Java Explorer project.
  • Setting Up a Test Using the Load File Wizard
    Set up a Java Explorer test with the Load File Wizard to get enhanced control over the test.
  • Test Case Characteristics
    Explains the characteristics of test cases as they relate to Java Explorer.
親トピック: Java Explorer のヘルプ


Java Explorer Prerequisites

To work with Java Explorer you need to have a Java Development Kit 7、8, downloadable from the Java SE のダウンロード page, or a IBM Java Development Kit installed on your system.

If you are using Microsoft Windows Vista or Microsoft Windows 7 as your operating system, you must have administrator priviledges to launch Java Explorer from the Start menu. If you do not have administrator priviledges, Java Explorer is not able to create files or folders or to run Silk Performer.

Some Web Services only work with specific SOAP stacks, depending on the server-side implementation of the Web Service. In this case, use trial and error to find the appropriate SOAP stacks, because the reported error messages are not clear.

親トピック: Setting Up Java Explorer


Creating a New Project

To create a new Java Explorer project:

  1. Start Java Explorer. The Create or open a project dialog box opens.
  2. Click the Create a New Project option button.
  3. Type a name for the project into the text box.
    注: The project name cannot be longer than 19 characters and cannot contain certain special characters, for example *, ., or !.
  4. Click OK. The new project is created and the Java Explorer Web GUI opens. A new folder, which contains all the files required by the project for operation, is created in the project directory. The default project directory is <my documents>\Silk Performer 21.0\Projects.
  5. Navigate to Tools > Project Settings > Web Service Plugin .
  6. Select the Web service plug-in (SOAP stack) that is required for your tests. Because of incompatibilities between different SOAP stacks, you cannot change the SOAP stack once it is used by Java Explorer. Web Service plug-ins that are used, are grayed out in the list box.
親トピック: Setting Up Java Explorer


Test Case Definition

Use one of the following two approaches to define a test with Java Explorer:
  • Use the Load File Wizard to define where the information for an object you want to test is located. The wizard displays the available classes, automatically instantiates the available objects, and calls methods on those objects. This approach requires more involvement, but provides more control.
  • Enter the location of the Web services' WSDL file into the WSDR/JAR text box in Java Explorer and click Load. Information about the methods and objects is then displayed. This approach provides a quick and simple way to analyze remote service functionality.
    注: Objects are not instantiated and methods are not called.

For demonstration purposes this Help uses the Load File Wizard to instantiate the objects available on the sample Web service, which is available at http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx?WSDL.

親トピック: Setting Up Java Explorer
関連タスク
Setting Up a Test Using the Load File Wizard


Setting Up a Test Using the Load File Wizard

To set up a Java Explorer test using the Load File Wizard:
  1. Click Start Here on the workflow bar. The Load File Wizard dialog box opens.
  2. Click the option button that corresponds to the class type that you want to test.
    • Web Services
    • Enterprise JavaBeans
    • RMI
    • Java Archive
    • Java Class
  3. To test a Web service, you must provide a Web Services Description Language (WSDL) document. Click the Web Services option button and specify a path or URL to the WSDL document using the browse (...) button.
    注: To test Enterprise JavaBeans, click the corresponding option button and then specify the EJB-specific connection settings. To test other class types, click the appropriate option button and then specify the path to a Java archive or class file.
  4. Click Next. The WSDL file now loads and finds out what is available on the Web service. A WSDL file is an XML description of the functionality that is offered by the Web Service.
    注: The sample Web service offers a minimum of functionality-it simply echoes back some values.
  5. Select the Web service class you wish to test from the Class list box. Normally there will be only one class, but it is possible that the loaded WSDL will define multiple Web services.
  6. Use the URL (Endpoint) text box to change the endpoint of the service. The default endpoint is the one defined in the WSDL document.
  7. Optional: To change the Web service proxy and authentication settings for the Web server, click browse (...) to open the Connection Settings dialog box.
    1. Type the endpoint of the Web service in the URL text box.
    2. If user credentials are required for authentication, type the information in the Username and Password text boxes.
    3. Click OK.
  8. Click Next. The Method Invocation dialog box opens.
  9. Check the check boxes beside the methods that you want to test. For example echoFloat and echoString. Methods are called using the default parameters.
    注: The checked Inherited check box indicates that the member functions of the base classes are visible. You cannot change the state of the check box manually.
  10. To adjust the sequence in which the methods are called, use the up and down arrow buttons. This way, you can move methods up and down the invocation list. The button between the up and down arrow buttons enables you to invert the selection of methods, meaning that all unmarked methods become marked, and vice versa.
    注: Login and logout methods must be in first and last positions, respectively.
  11. Click Next. The Select a test case dialog box opens.
  12. Select the test case to which the testing methods should be added. You can select from the following:
    • Init Test Case: This is the first test case that is called in test runs. Select this test case if your method calls are related to initialization, logging in, or start-up.
    • Existing Test Case: You can add to an existing test case. Choose the test case from the list box to the right of this selection.
    • New Test Case: A new test case is created and the methods are added to the new test case. Using the text box to the right of this selection, give the new test case a unique name.
    • End Test Case: This is the last test case that is called in test runs. Select this test case if your method calls are related to clean-up, for example logging off.
  13. Click Finish.
    注: A message displays if you have selected a method that takes parameters, letting you know that default parameters will be used for the method, which may result in an exception being thrown. Methods that throw exceptions will be excluded from your test scenario. If you don’t want to proceed, click No, then go back, deselect the method in question, and add it later manually with a more meaningful parameter value.
The Web service has been loaded in the class tree list and the selected methods have been called and added to the selected test case.
親トピック: Setting Up Java Explorer


Test Case Characteristics

Following is an overview of the characteristics of test cases as they relate to Java Explorer:
  • Each test scenario includes an Init test case and an End test case. Multiple Main test cases may also be defined. An Init test case is the first test case that is called during a test run. Init test cases often include method calls that are related to initialization, logging in, or start-up. An End test case is the last test case that is called during a test run. End test cases often include method calls that are related to clean-up, for example logging off.
  • Main test cases are executed between Init and End test cases and may include any sort of method call.
  • A local variable is only valid within a single test case and cannot be passed to another test case. Only global variables can be used to pass values between test cases.
  • Each test case must have a unique name.
  • Names of test cases are restricted. The names are mapped to Java methods and Silk Performer transactions, so they are subject to the restrictions of Java method and Silk Performer transaction names. Code exported to Silk Performer cannot use keywords that are defined by BDL or Java. You cannot use the names of the following variables because they are scripted by Java Explorer scripts when exporting to Silk Performer Java Framework Projects:
    all | allownull | and | array | aux
    begin | benchmark | bin | boolean | by
    char chr clock$ commit con const create com1 ... com9 cursor
    database | dclevent | dclform | dclfunc | dclparam | dclrand | dclsql | dcltrans | dcluser | delete | dll | do | double | drop | dstring
    else | elseif | end | eos | exit | explicit
    false | fetch | float | for | form | from | function
    group
    halt | handler
    if | in | init | inout | insert | into
    last lenspec long loop lpt1 ... lpt9
    mod
    next | not | nul | number
    of | optional | or | ord | order | out
    prn | proc | ptr
    rc | reset | result | return | rndbin | rndefxp | rndexpn | rndfile | rndind | rndpern | rndsno | rndstr | rndstream | rndunif | rndunii
    rndunin | rollback | row | rows
    select | set | short | sizeof | sizespec | sql | stored | string
    then | throw | to | transaction | transactions | true
    union | unique | unsigned | update | use | user
    values | var | void
    wait | where | while | write | writeln
  • Test case properties can be edited by selecting a test case in the Test Scenario menu tree and defining field values in the Output Data Properties field:
    • StopAtError is the attribute that defines the number of errors that can occur during an animated run. If this number is reached, the animated run aborts. Setting this attribute to 0 specifies that errors will be ignored.
    • CallCount is the attribute that defines the number of times that a test case will be called during an animated run.
    • The Name attribute of the test case must be unique among all test cases.
  • You can create, copy, and remove test cases by right-clicking a teste case in the Test Scenario menu tree and selecting the respective menu item.
親トピック: Setting Up Java Explorer


Setting Up Tests

This section explains how to set up and customize your tests with Java Explorer. Topics include an introduction to GUI elements, customization of input parameters, definition of output value verifications, and generation of random variables. The section concludes with an explanation of how to use Java Explorer to test EJBs and RMI over IIOP.

  • Customizing Input Parameters
    Use the Input Value Wizard to customize input parameters of a complex type.
  • Storing Output Values in Variables
    Use the Output Data and Output Data Properties panes to store output data as variables for later use.
  • Manually Adding Global Variables
    Explains how to create a global variable to be used as an input parameter. Also explains how to initialize parameters from a data file.
  • Capturing an HTTP Response
    Describes how to use Silk Performer to record and capture the server response when running a test against a Web service.
  • Defining Output Value Verifications
    Store an output parameter value in a variable to specify a verification rule for the variable.
  • Adding Method Calls
    Invoke a method to add it to the currently selected test case.
  • Updating Method Calls
    Update a method that has already been added to a test case.
  • Complex Input/Output Data
    Explains that Java Explorer supports complex data types such as arrays and objects as both input data and output data.
  • Random Value Types
    Describes the random value types that you can apply to an input value type.
  • Configuring Random Variables
    Use the Random Variable Wizard to configure random variables for entire input parameters or individual members of complex input parameters.
  • Enterprise JavaBeans and RMI over IIOP
    Describes how you can use EJBs with RMI or RMI over IIOP.
  • Java RMI
    Describes how you can test Java RMI.
  • Testing Java Archives
    Describes how you can test Java archives.
  • Test Class Wizard
    Describes how you can use the Test Class Wizard to create a test for a class or an instantiated object.
  • Secure Web Services
    Describes how you can test secure Web services.
  • Negative Testing
    Describes how you can ignore expected exceptions when you perform negative testing.
親トピック: Java Explorer のヘルプ


Customizing Input Parameters

You should customize the input parameters before you execute a method. If you want to customize a method call after it is executed, for example if the method call was generated using the Load File Wizard, you need to execute an Animated Run after you have customized the method call to make the changes effective.

When a method has input headers or parameters, its values are displayed in the Default Input Parameter Values pane with their default values. Select the method you want to invoke in the Loaded Components pane. Parameters are displayed with their default values in the Default Input Parameter Values pane. To configure default values in the System Settings, click Tools > System Settings > Default Values.

To change a value, select a parameter in the Default Input Parameter Values pane. If a parameter is a simple data type, like string, float, or integer, you can enter the value directly into the text boxes in the pane. If the parameter is a complex type, like an object or array, or you want to use a random value or a value from a stored variable, click (...) to open the Input Value Wizard.

To use the Input Value Wizard to customize an input parameter:

  1. Select the InputValue row in the Input Data Properties pane.
  2. Click (...). The Input Value Wizard opens.
  3. Define the input value for the parameter of the method. You can pass a null value, a value from a variable, or a constant value.
    • ClickIs Null to pass a null value. This value is only valid for strings, objects, and arrays.
    • If you have already stored a variable that holds values of the parameter’s type, click Use Variable and select the variable from the list box.

      If the parameter is an array, type the index into the Index Array text box.

    • If the parameter is not an object or array, you can specify a constant value such as a string, integer, or double value. Select the Constant value option button.
    • If you do not want to use a constant value and would rather use a random value for types such as string, integer, or float, you can create a new random value by clicking New random variable. If a random value of the parameter type has already been created, click Random variable and select the variable from the list box.
  4. Click OK.
Once input parameters have been defined, you can invoke a method to have that method automatically added it to the selected test case in the Test Scenario pane. From there, corresponding output values can either be stored as variables or verifications can be set up for them.
親トピック: Setting Up Tests
関連概念
Animated Runs


Storing Output Values in Variables

Using the Output Data and Output Data Properties panes, you can store output values as variables for later use or you can define verifications for the values.

  1. Click Invoke on the Workflow bar or by right-click a method in the Input Data pane and choose Invoke/Add to Test Case to invoke the method. The Output Value Wizard opens.
    注: You can also open the Output Value Wizard by clicking Customize in the Workflow bar, or by right-clicking an output parameter in the Output Data pane.
  2. In the Output Value Wizard, type a name for the output value variable in the Variable name text box.
  3. Click the option button that corresponds to the scope of the variable. The default is Local, which means that the variable can only be used within the test case within which it has been created. Global scope means that the variable can be used within any test case. Global scope enables you to pass information between test cases.
  4. Click OK.
親トピック: Setting Up Tests


Manually Adding Global Variables

Global variables can be shared between test cases. They vary from local variables, which are only available to specific test cases.

注: You can also create global variables by clicking the Global scope option button in the Output Value Wizard.

Global variables can be used as input parameters for function calls. Global variables are configured with an initial value, which makes them useful when you need to have the same value used for multiple function calls. Each time a test run begins, global variables are initialized with the defined initial value.

To create a global variable:

  1. Click the Objects tab.
  2. Right-click an object in the Objects tree menu and choose New Global Variable. The Define a Global Variable dialog box displays.
  3. Enter a name for the variable in the Variable Name text box.
  4. Select a Variable type. The following variable types are available:
    • boolean
    • byte
    • short
    • int
    • long
    • char
    • float
    • double
    • java.lang.String
  5. Each variable has an initial value and a current value. When tests are run, all global variables are initialized to their initial values. Specify an intial value for the variable in the Initialize Value text box.
  6. Click OK.
親トピック: Setting Up Tests


Capturing an HTTP Response

By default, Java Explorer does not allow you to view the HTTP response when running a test against a Web service. As an alternative, you can use Silk Performer to record and capture the server response.

  1. Launch Silk Performer.
  2. Silk Performer メニューで 設定 > システム をクリックします。
  3. Recorder アイコンをクリックします。 記録プロファイル ページが開きます。
  4. Click Add to add a new recording profile for Java. The Recording Profile dialog box opens.
  5. In the Profile name text box, type a unique name for the Java recording profile. The profile name is required to identify the application in the Silk Performer Recorder window.
  6. In the Application path text box, type the name of the Java application's executable and the directory in which it resides. To locate the executable, click Browse.
    注: There may be multiple Java executables. Therefore, it is important that the Recording Profile should match the Java executable used in the Java Explorer runtime settings.
  7. In the Working directory text box, type the working directory of the Java application. The working directory is the folder that contains the application or related files. Some applications need files located in other directories, so you might have to specify the folder in which these files reside.
  8. In the Application type list box, make sure that Custom Application is selected.
  9. In the Protocol selection area, select the Web check box, which identifies that the Silk Performer Recorder hooks into a Web application, intercepts all function calls, and displays the results.
  10. Click OK to add the new Java profile to the list.
  11. Ensure that you record the script in Silk Performer with the newly created recording profile before invoking and running the test in Java Explorer.
  12. After you save the recording, you can view the HTTP response in TrueLog Explorer by selecting the In Body tab of the recorded TrueLog file (.xlg).
親トピック: Setting Up Tests


Defining Output Value Verifications

  1. Select Verification in the Output Data Properties pane to display the (...) button.
  2. Click (...) to open the Verification Wizard.
    1. Select Range if you are verifying integers or doubles. Then specify a range for the value using the From and To text boxes.
  3. Select one of the following:
    • Click No Verification if you do not want the value to be verified.
    • Click Verification with NULL or variable to verify one of the following:
      • Check the Should be null check box, to verify that the value is NULL.
      • The value is not NULL. This option verifies whether or not a value is present.
      • Verify that the value exactly matches the value of an existing variable, a public member of a variable, or an element of an array.If the variable is an array you can also define the Array index for the element that should be used for the verification.
    • Click Constant Value to verify that the value exactly matches a constant string.
    • Click Regular expression to verify against a string value.
    • Click Range if you are verifying that a numeric value is within a specified range. Then specify a range for the value using the From and To text boxes.
  4. Select the Severity of error that should be thrown if the verification fails. The following severity options are available:

    • Success, no error

      No error is thrown

    • Informational

      An informational message is logged

    • Warning

      A warning is thrown

    • Error, simulation continues

      An error is thrown, but the simulation continues

    • Error, the active test case is aborted

      An error is thrown, the simulation continues, however the active test case is aborted. This is a transaction exit severity in Silk Performer

    • Error, the simulation is aborted

      An error is thrown and the simulation is aborted

    • Custom

      A section is inserted into the .NET code where special error handling code can be inserted

  5. Click OK.
  • Verification with NULL or Variable
    Describes how you can verify against NULL or a variable.
親トピック: Setting Up Tests


Verification with NULL or Variable

The Verification with NULL or variable selection inludes a list box that contains the entries < is Null > and < is not Null > and a list of variables that match the return value of the method call.

The list box additionally contains arrays for which the element type matches the return value of the method call. For example, the array myStringArray has a return value of type java.lang.String. You can select variables that represent a string array from the list box. In such cases, an array index list box is enabled.

The list box also contains public fields of complex objects of matching type. For example, the test class PublicMember has a public field called mStr of type string, which can be selected. The notation of public fields is <variable name>.<member name>, which for the example is PublicMember.mStr.

親トピック: Defining Output Value Verifications


Adding Method Calls

  1. Within the Loaded Components or Method Call pane, select the method to be added.
  2. Invoke the method by clicking Invoke. The invoked method is added automatically to the currently selected test case. If the method call returns a value, the Output Value Wizard opens automatically, and prompts you to store the value.
親トピック: Setting Up Tests


Updating Method Calls

  1. From the Test Scenario pane, select the method that is to be changed.
  2. Make modifications to the input/output parameters of the method in the Input Data or Output Data panes. Updates are automatically accepted when you exit the Input Data or Output Data panes.
  3. Perform an Animated Run to apply the changes.
親トピック: Setting Up Tests
関連概念
Animated Runs


Complex Input/Output Data

Java Explorer supports complex data types such as arrays and objects as both input data and output data. The Output Value Wizard assists you in using such data as variables.

  • Verification of Variables
    Describes how Java Explorer supports the verification of variables.
  • Storing Array or Object Output Data as Variable
    When a method returns an array or an object as output data, you can store the value in a variable of either local or global scope.
  • Taking Array Object Data From a Variable
    When you use an array from a variable as input data, you can take the entire array from the variable.
  • Defining Each Member of a Variable Individually
    When using an object as input data, you can take the entire object from a variable or define each member individually.
  • Defining Array Elements
    When a method requires an array as an input parameter, you can define the number of array elements and all elements in the array.
  • Using Complex Input Data
    Use complex input data as described in this example.
親トピック: Setting Up Tests


Verification of Variables

Java Explorer fully supports the verification of complex data types. When the return value of a method, including array elements and public fields of complex type, is complex, you can select an existing variable, an array element of an existing variable, or a public field of an existing varible to verify against. Java Explorer also supports the verification of variables with primitive data types.

親トピック: Complex Input/Output Data


Storing Array or Object Output Data as Variable

When a method returns an array or an object as output data, you can store the value in a variable of either local or global scope.

  1. Select the complex output parameter in the Output Data pane.
  2. Click (...). The Output Value Wizard opens.
  3. Specify the name and scope of the variable.
親トピック: Complex Input/Output Data
関連タスク
Storing Array or Object Output Data as Variable


Taking Array Object Data From a Variable

  1. Select a complex input parameter in the Input Data pane.
  2. Click (...). The Input Value Wizard opens.
  3. Define the input value.
親トピック: Complex Input/Output Data
関連タスク
Customizing Input Parameters


Defining Array Elements

  1. The default length for arrays is 1. To change the number of elements in an array, select the array node in the Input Data pane.
  2. In the Length text box, enter the number of elements in the array. Java Explorer automatically adds or removes the required elements.
  3. To specify the value of an element, select the element in the array and specify the value in the Value text box.
  4. Array members or an entire array can be assigned input parameters from a variable. To specify input parameters from a variable, click (...). The Input Value Wizard opens.
  5. Click Use variable on the Input Value Wizard and select a preconfigured variable from the list box. All variables of the current parameter type are listed.
  6. Click OK.
親トピック: Complex Input/Output Data


Using Complex Input Data

The following example task describes how you can use complex input data:
  1. Call the method echoStringArray of the sample Web service. The sample Web service is available from http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx?WSDL. This service requires an object of the generated class ArrayOfString as a parameter.
  2. Right click init() and choose Invoke in the Design pane to instantiate the ArrayOfString object. The Output Value Wizard opens.
  3. Check the Store as variable check box.
  4. Type myArrayOfString into the Variable name text box.
  5. Click OK. The Output Value Wizard closes.
  6. Right click setString(String[]) and choose Invoke in the Design pane to call the setString method and define the array elements.
  7. Use the Input Value Wizard to pass myArrayOfString to the echoStringArray method.
親トピック: Complex Input/Output Data
関連タスク
Setting Up a Test Using the Load File Wizard


Random Value Types

When you define a random variable for an input value you can only choose one of the random types that are applicable for that input value type.

Random variables return one of the following value types:
  • String
  • Number
  • Float

String Random Values

You can define random variables that return strings with the Random Variable Wizard.

Individual Strings

An individual string declares a random variable of type RndInd. With each access, such a variable contains a random value with type string. You must declare all possible values for the random variable, along with their probabilities. For each string value you must define a weighted number that indicates the probability that the string value will be selected. Weighted numbers are integer numbers.

Strings from a Pattern

A string from a pattern declares a random variable of type RndStr. Such a variable contains a random string value with each access. The characters of the string and the length of the string are randomly generated following a uniform distribution.

The pattern string defines the characters that you must use to construct random strings. The length of calculated strings is selected randomly with a uniform distribution based on defined minimum and maximum lengths, including boundaries.

Number Random Values

You can define random variables that return integers with the Random Variable Wizard. The values can either be calculated based on a weighted number list or by specifying a number range.

Integer Numbers

Declares a random variable of type RndUniN. With each access, such a variable contains a value that is generated following a uniform distribution. The parameters of the RndUniN function specify the minimum value and the maximum value of the uniform distribution. Within these boundaries all integer values have the same probability, including the boundaries.

Weighted Integer Numbers

Declares a random variable of type RndInd. With each access, such a variable contains a random value whose type is either string or integer, depending on the syntax of the declaration. You must declare all possible values for the random variable, along with their probabilities. You cannot mix integer and string values. For each integer value you must define a weighted number that indicates the probability that the integer value will be selected.

Float Random Values

You can define random variables that return floats with the Random Variable Wizard. There is only one possible definition for generating float values currently.

Floating Point Numbers

Declares a random variable of type RndUniF. With each access, such a variable contains a value that is generated following a uniform distribution. The parameters of the RndUniF function specify the minimum value and the maximum value of the uniform distribution.

親トピック: Setting Up Tests


Configuring Random Variables

With the Random Variable Wizard, you can configure random variables for entire input parameters or individual members of complex input parameters. You can also reuse existing random variables by using the Input Value Wizard.

To configure a random variable:

  1. On the Input Value Wizard, click the New random variable option button. Alternative: If you have already configured a random variable that you would like to apply, click the Use random variable option button.
  2. Alternative: If you have already configured a random variable that you would like to apply, perform the following:
    1. Click the Use random variable option button.
    2. Select the variable that you wish to apply from the list box.
    3. Click OK.
  3. Click OK. The Random Variable Wizard opens.
  4. From the Random type list box, select the type of random variable that you wish to insert to your script. A short type description and a variable declaration preview for each type is displayed.
    注: Random variables always have global scope, and so are available to all test cases in your project.
  5. Click Next.
  6. In the Parameter pane, edit the existing valyues or insert new values. Weight numbers define the fraquency at which values are displayed. The weight numbers are more flexible than using percentages to define frequency.
  7. Click Finish.
親トピック: Setting Up Tests


Enterprise JavaBeans and RMI over IIOP

Enterprise JavaBeans (EJB) is a specification for developing scalable, server-side, multi-user enterprise applications. When you test components like EJBs or other remote components, you cannot use HTTP traffic when the application expects RMI or RMI over IIOP traffic. To communicate with the application, Silk Performer must invoke a Java client that generates the appropriate protocols that can be used to approach the interface of the application.

Java Remote Method Invocation (RMI) technology is developed jointly by Sun Microsystems and IBM. RMI delivers CORBA-distributed computing functionality to the Java 2 platform, when the technology is run over Internet Inter-Orb Protocol (RMI-IIOP).

  • Working with Enterprise JavaBeans
    Create an EJB on the application server to test the EJB with Java Explorer.
  • Vendor-Specific JNDI Settings
    Describes the vendor-specific JNDI settings of the application server.
  • Working with RMI Over IIOP
    Test RMI over IIOP to use CORBA-distributed computing functionality.
  • Testing the RMI Sample
    Test the Silk Performer RMI sample to get additional knowledge of RMI testing.
親トピック: Setting Up Tests
関連概念
Java RMI Samples


Working with Enterprise JavaBeans

Testing an EJB with Java Explorer involves the following three main steps:
  • Connecting to the Java Name Service (JNDI)
  • Selecting an EJB Home object that is registered at the Naming Service and can be used as the factory object
  • Creating an EJB on the application server

To test an EJB:

  1. In the Workflow bar, click Start Here. The Load File Wizard opens.
  2. Alternative: In the Classes pane, right-click Remote Objects and choose New EJB to start the EJB Wizard directly. In this approach, skip the next two steps.
  3. Click the Enterprise JavaBeans / RMI over IIOP option button.
  4. Click Next. The Connect to Naming Server dialog box opens.
  5. If available, select the application server vendor from the Server list box.
    注: The entries in the list work as a template that pre-configures other settings, like initial context factory, protocol, and port, with default values. For additional information regarding the configuration of specific application server types, see Vendor-Specific JNDI Settings.
  6. In the Factory text box, specify the context factory of the naming service.
  7. In the Host/Port text boxes, type the URL where the naming service provider is to be hosted. The naming server provider URL is comprised by protocol, host, and port. You can also type the URL directly into the Provider URL text box.
  8. If required by the provider, type the credentials in the User and Password text boxes.
  9. Click Edit Classpath .... The Classpath Configuration dialog box opens.
  10. Choose Static and click Add entries to classpath to specify the archives that are necessary to connect to the naming service of the application server.
  11. Choose Dynamic and click Add entries to classpath to specify the archives that contain the client stubs of the application. For vendor-specific details, refer to the application server documentation. For additional information on classpaths, see Classpath Settings.
  12. Click OK.
  13. Back on the EJB Wizard, click Next to connect to the naming service. The Look up and narrow a Home Interface or Remote Object dialog box opens.
  14. In the naming service sub-folders, select the EJB Home interface, represented by a "hand holding a coffee bean" icon, or the remote object, represented by a satellite dish icon, for which Java Explorer should obtain a reference. The corresponding client stubs must have been added to the classpath of the project.
  15. Click Finish. You can now use the Load File Wizard to browse for the methods of the remote object and to specify which test case the methods are to be called from.
    注: EJBs which implement the EJBLocalObject interface instead of the EJBHome interface are not displayed correctly in the JNDI tree.
  16. Alternative: If you invoke the EJB Wizard directly by right-clicking Remote Objects in the Classes pane, you must perform the following two steps:
    1. Select the create() method of the EJB Home object to instantiate an EJB object. Store the EJB object to a variable.
    2. Invoke one or more methods on the EJB object.
親トピック: Enterprise JavaBeans and RMI over IIOP
関連概念
Vendor-Specific JNDI Settings


Vendor-Specific JNDI Settings

The application server vendor-specific default values are inserted automatically when you select the aproperiate server name in the Connect to Naming Service dialog box. The following vendor-specific default values exist:
  • initial context factory
  • protocol
  • port
注: The naming service provider URL is comprised by protocol, host, and port.
  • Connecting to BEA WebLogic
    Use a BEA WebLogic server as the application server.
  • Connecting to IBM WebSphere
    Use an IBM WebSphere server as the application server.
  • Connecting to Sun
    Use a Sun server as the application server.
  • Connecting to JBoss
    Use a JBoss server as the application server.
親トピック: Enterprise JavaBeans and RMI over IIOP


Connecting to BEA WebLogic

To connect to a BEA WebLogic server:
  1. In the Connect to Naming Service dialog box, choose WebLogic Application Server from the Server list box.
  2. From the Factory list box, choose weblogic.jndi.WLInitialContextFactory
  3. In the Provider Url text box, type t3://red:7001. The port may vary depending on the configuration of the server.
  4. Click Edit Classpath ... and specify the following server and client classpaths:
    1. In the Server Classpath text box, type the path to weblogic.jar. This file is provided by BEA and contains the WebLogic J2EE implementation and the implementation used for connecting to the naming mechanism of BEA WebLogic. The file has a size of about 40 MB and you can normally find it in a lib subdirectory of the BEA WebLogic home directory.
    2. In the Client Classpath text box, type all JAR files and classpaths that are required to connect to the EJB. You usually put the client-side stubs and additional classpath entries into the client classpath. WebLogic servers automatically generate the stubs when EJBs are deployed.
  5. Verify your settings and click Next. The names of all registered EJBs and RMI objects that are hooked into your WebLogic server are browsed.
  6. Choose the home interface that allows for the creation of instances of EJBs. It is typical for EJBs to have home interfaces that are used to create EJB instances. For example, choose ejb20-statelessSession-Traderhome to use the TraderHome interface.
  7. Click Finish.
  8. In the Load File Wizard, click Next. The home interface you have selected is browsed for the published methods it includes. A method named create is likely to be among these methods. Call this method to get a valid reference to an EJB object.
  9. Click Next and select the test case where Java Explorer should write code for the steps that are performed by the wizard. For example, you can put the steps that are referred to as bootstrapping into the init test case or an existing test case.
  10. Click Next.
  11. Check the Store as variable check box and type a name for the EJB reference obtained by the Java Explorer Wizard into the Variable name text box.
  12. Click OK. You can now call any of the EJBs business methods.
親トピック: Vendor-Specific JNDI Settings
関連概念
Java RMI
Test Case Characteristics
Animated Runs


Connecting to IBM WebSphere

To connect to an IBM WebSphere server:
  1. In the Connect to Naming Service dialog box, choose WebSphere Application Server from the Server list box.
  2. From the Factory list box, choose com.ibm.websphere.naming.WsnInitialContextFactory.
  3. In the Provider Url text box, type iiop://lab44:900. The port may vary depending on the configuration of the server.
  4. Click Edit Classpath ... and specify the following server and client classpaths:
    1. In the Server Classpath text box, type the path to csicpi.jar, which is the IBM implementation of J2EE. This file is provided by IBM and contains the IBM J2EE implementation.
    2. Additionally type the paths to the following required packages into the Server Classpath text box:
      WebSphere 4.x
      • ejbcontainer.jar
      • iwsorb.jar
      • j2ee.jar
      • jts.jar
      • ns.jar
      • ras.jar
      • ujc.jar
      • utils.jar
      • websphere.jar
      WebSphere 5.x
      • ffdc.jar
      • idl.jar
      • iwsorb.jar
      • j2ee.jar
      • naming.jar
      • namingclient.jar
      • ras.jar
      • wsexception.jar
      • ecutils.jar
      • tx.jar
      • utils.jar
      • ejbportable.jar
      • The properties directory, which is usually located in the WebSphere home directory.
      These files are shipped with each WebSphere installation and are normally found in the lib directory of WebSphere installations.
    3. In the Client Classpath text box, type all JAR files and classpaths that are required to connect to the EJB. You usually put the client-side stubs and additional classpath entries into the client classpath. WebSphere servers automatically generate the stubs when EJBs are deployed. You can normally find these stubs in the installedApps directory, which is located within the WebSphere home directory.
  5. Verify your settings and click Next. The names of all registered EJBs and RMI objects that are hooked into your WebSphere server are browsed.
  6. Choose the home interface that allows for the creation of instances of EJBs. It is typical for EJBs to have home interfaces that are used to create EJB instances. For example, choose cart to use the CartHome interface from the petstore sample.
  7. Click Finish.
  8. In the Load File Wizard, click Next. The home interface you have selected is browsed for the published methods it includes. A method named create is likely to be among these methods. Call this method to get a valid reference to an EJB object.
  9. Click Next and select the test case where Java Explorer should write code for the steps that are performed by the wizard. For example, you can put the steps that are referred to as bootstrapping into the init test case or an existing test case.
  10. Click Next.
  11. Check the Store as variable check box and type a name for the EJB reference obtained by the Java Explorer Wizard into the Variable name text box.
  12. Click OK. You can now call any of the EJBs business methods.
親トピック: Vendor-Specific JNDI Settings
関連概念
Java RMI
Test Case Characteristics
Animated Runs


Connecting to Sun

To connect to a Sun server:
  1. In the Connect to Naming Service dialog box, choose SUN J2EE Server from the Server list box.
  2. From the Factory list box, choose com.sun.jndi.cosnaming.CNCtxFactory
  3. In the Provider Url text box, type iiop://red:1050. The port may vary depending on the configuration of the server.
  4. Click Edit Classpath ... and specify the following server and client classpaths:
    1. In the Server Classpath text box, type the path to j2ee.jar. This file is provided by Sun and contains the J2EE implementation and the implementation used for connecting to the naming mechanism of Sun. You can normally find the file in a lib subdirectory of the J2EE home directory.
    2. In the Client Classpath text box, type all JAR files and classpaths that are required to connect to the EJB. You usually put the client-side stubs and additional classpath entries into the client classpath. Sun J2EE servers automatically generate the stubs when EJBs are deployed.
  5. Verify your settings and click Next. The names of all registered EJBs and RMI objects that are hooked into your Sun server are browsed.
  6. Choose the home interface that allows for the creation of instances of EJBs. It is typical for EJBs to have home interfaces that are used to create EJB instances.
  7. Click Finish.
  8. In the Load File Wizard, click Next. The home interface you have selected is browsed for the published methods it includes. A method named create is likely to be among these methods. Call this method to get a valid reference to an EJB object.
  9. Click Next and select the test case where Java Explorer should write code for the steps that are performed by the wizard. For example, you can put the steps that are referred to as bootstrapping into the init test case or an existing test case.
  10. Click Next.
  11. Check the Store as variable check box and type a name for the EJB reference obtained by the Java Explorer Wizard into the Variable name text box.
  12. Click OK. You can now call any of the EJBs business methods.
親トピック: Vendor-Specific JNDI Settings


Connecting to JBoss

To connect to a JBoss server:
  1. In the Connect to Naming Service dialog box, choose JBoss Application Server from the Server list box.
  2. From the Factory list box, choose org.jnp.interfaces.NamingContextFactory
  3. In the Provider Url text box, type jnp://red:1099. The port may vary depending on the configuration of the server.
  4. Click Edit Classpath ... and specify the server and client classpaths. For additional information regarding the testing of JBoss application servers, contact Customer Care.
  5. Verify your settings and click Next. The names of all registered EJBs and RMI objects that are hooked into your JBoss server are browsed.
親トピック: Vendor-Specific JNDI Settings


Working with RMI Over IIOP

To test RMI over IIOP:
  1. In the Workflow bar, click Start Here. The Load File Wizard opens.
  2. Click the Enterprise JavaBeans / RMI over IIOP option button.
  3. Click Next. The Connect to Naming Service dialog box opens.
  4. If available, select the application server vendor from the Server list box.
    注: The entries in the list work as a template that pre-configures other settings, like initial context factory, protocol, and port, with default values. For additional information regarding the configuration of specific application server types, see Vendor-Specific JNDI Settings.
  5. In the Factory text box, specify the context factory of the naming service.
  6. In the Host/Port text boxes, type the URL where the naming service provider is to be hosted. The naming server provider URL is comprised by protocol, host, and port. You can also type the URL directly into the Provider URL text box.
  7. If required by the provider, type the credentials in the User and Password text boxes.
  8. Click Edit Classpath .... The Classpath Configuration dialog box opens.
  9. Choose Static and click Add entries to classpath to specify the archives that are necessary to connect to the naming service of the application server.
  10. Choose Dynamic and click Add entries to classpath to specify the archives that contain the client stubs of the application. For vendor-specific details, refer to the application server documentation. For additional information on classpaths, see Classpath Settings.
  11. Click OK.
  12. Back on the EJB Wizard, click Next to connect to the naming service. The Look up and narrow a Home Interface or Remote Object dialog box opens.
  13. In the naming service sub-folders, select the EJB Home interface, represented by a "hand holding a coffee bean" icon, or the remote object, represented by a satellite dish icon, for which Java Explorer should obtain a reference. The corresponding client stubs must have been added to the classpath of the project.
  14. Click Finish. You can now use the Load File Wizard to browse for the methods of the remote object and to specify which test case the methods are to be called from.
    注: EJBs which implement the EJBLocalObject interface instead of the EJBHome interface are not displayed correctly in the JNDI tree.
親トピック: Enterprise JavaBeans and RMI over IIOP
関連概念
Vendor-Specific JNDI Settings


Testing the RMI Sample

To test the Silk Performer RMI sample:
  1. Launch the Product Manager RMI sample.
  2. Navigate to the <public user documents>\Silk Performer 21.0\SampleApps\RMILdap directory.
  3. Invoke the four batch files step1 through step4.
  4. In the Classes pane, right-click Remote Objects and choose New EJB. The EJB Wizard opens. The RMI objects are registered at a JNDI naming service.
  5. Type com.sun.jndi.cosnaming.CNCtxFactory into the Factory text box.
  6. Type iiop://localhost:1900 into the Provider Url text box.
  7. Click Edit Classpath ... and select <public user documents>\Silk Performer 21.0\SampleApps\RMILdap\RMILdap\ProductManager-server\ProductManager-server.jar.
  8. Back on the EJB Wizard, click Next to connect to the naming service. The Look up and narrow a Home Interface or Remote Object dialog box opens.
  9. Select the ProductManagerServicesLdap remote object. The RmiExtension helper class performs all necessary bootstrapping.
  10. Click the RmiExtension helper class in the Classes pane of the Loaded Components page.
  11. Click the createObject method of the class in the Input Data pane. The method includes a class to provide the parameters for the RMI connection settings.
  12. View the result of the createObject method in the Objects pane. The result is a stub class instance, which is used to communicate with the remote object on the server.
  13. Open the getProductsByName method in the Loaded Components page. The method requires a string as parameter. You can use * as a wildcard to get all products.
親トピック: Enterprise JavaBeans and RMI over IIOP
関連概念
Java RMI Samples


Java RMI

Java Explorer supports the following protocols for Java RMI:
  • RMI over IIOP
  • Java Remote Method Protocol (JRMP)
  • RMI Testing with JRMP
    Test RMI with JRMP to use an RMI registry.
親トピック: Setting Up Tests
関連概念
Enterprise JavaBeans and RMI over IIOP


RMI Testing with JRMP

The main difference between testing RMI with JRMP and testing RMI over IIOP is that with JRMP you need to connect to an RMI registry.

To test RMI with JRMP:

  1. In the Workflow bar, click Start Here. The Load File Wizard opens.
  2. Alternative: In the Classes pane, right-click Remote Objects and choose New RMI to start the RMI Wizard directly. In this approach, skip the next two steps.
  3. Click the RMI option button.
  4. Click Next. The Rmi Wizard dialog box opens.
  5. In the Host/Port text boxes, type the name and port of the host. For example, type localhost and 1099.
  6. Click Add archive(s) to classpath and specify the location of the RMI interfaces for the client. For example, <public user documents>\Silk Performer 21.0\SampleApps\Java\Lib\sampleRmi.jar.
  7. Back on the EJB Wizard, click Next to view all registered remote objects in the RMI registry. The Look up and narrow a Remote Object dialog box displays all registered remote objects in the RMI registry.
  8. Choose RemoteServer and click Next. The methods of the remote object are browsed.
  9. Select the first two methods by checking the appropriate check boxes.
    • echoFloat(float)
    • echoString(string)

    The selected methods are implemented by the sample RMI server. The other methods are inherited from base classes and don't need to be tested.

  10. Click Next and select the test case from which the methods should be called.
親トピック: Java RMI


Testing Java Archives

Java archives normally contain many classes that need to be tested.

To test a Java archive:

  1. In the Workflow bar, click Start Here. The Load File Wizard opens.
  2. Click the Java Archive option button.
  3. Click Browse ... to browse for the JAR file that contains the classes to be tested. For example, load sampleBasis.jar. This archive is selected by default.
  4. Click Next. The Testing Java Classes dialog box opens.
  5. In the Class text box, type the name of the class to be tested.
  6. Choose the constructor of the class from the Constructor list box.
  7. Click Next. The instance of the class is created and the created object is browsed for the methods it includes.
  8. In the Method Invocation dialog box, select the toString method.
  9. Click Next.
  10. Choose a test case where Java Explorer should add the created scenario. The method toString returns a string. Therefore, Java Explorer asks you whether it should store the returned value or discard it.
親トピック: Setting Up Tests


Test Class Wizard

You can create a test for a class or an instantiated object with the Test Class Wizard. To use the wizard, select a class in the Classes pane or an object in the Object pane and call the wizard, either through the context menu or the Workflow bar. You can also select methods that are to be called with the wizard.

親トピック: Setting Up Tests


Secure Web Services

You can configure Java Explorer for the testing of secure Web services.

To test secure Web services, the following steps are required:
  • Create a truststore for your JDK.
  • Load a secure WSDL into Java Explorer.
  • Invoke Web service calls over a secure connection.

Java Explorer supports authentication of Web services. Use the Connection Settings dialog box to specify your credentials.

  • Creating a Truststore for Your JDK
    Create a truststore for your JDK to enable testing of a Web application.
  • Configuring Java Explorer to Use a Truststore
    Configure Java Explorer to use a truststore.
  • Loading a Secure WSDL
    Load a secure WSDL document into Java Explorer.
  • Working with Secure Web Service Calls
    Configure Java Explorer to use Apache Axis 1.4 or later to test secure Web services.
  • Specifying Web Service Connection Settings
    Specify the web service connection settings to configure Web service authentication.
  • Web Service Emitter Timeout for Axis 1.x
    Describes how you can specify a longer timeout for the process of generating the Java source code.
親トピック: Setting Up Tests


Creating a Truststore for Your JDK

When you work with secure Web services, the Web service clients must trust the Web applications they interact with to be secure. The Web service client is typically a Web browser, but in this case the client is Java Explorer. To enable testing of a Web application, Java Explorer must accept the server certificate of the application or trust the certifying authority who issues the server certificate.

Your JDK installation includes a command-line tool called keytool. You can manage server certificates and certifying authorities with this tool. The easiest way of downloading server certificates is to export them from your Web server.

To create a truststore for your JDK:

  1. Export a CER certificate file from your Web browser to your local system. For information on exporting a certificate, refer to the Help of your browser.
  2. To add the saved certificate to your truststore, which is called mykeystore, enter the following into the command-line tool of your system:
    keytool
-import
-alias <alias name>
-file c:\<pathname>\<certificate file name>
-keystore mykeystore
    The command-line tool creates a file called mykeystore in your current working directory.
親トピック: Secure Web Services


Configuring Java Explorer to Use a Truststore

Set the system property -Djavax.net.ss.trustStore=trustedcerts to configure a Java process to use a truststore. When you work with Java Explorer, you can specify the system properties in property files that reside at <Java Explorer Home>/Startup directory.

To configure Java Explorer to use a truststore:

  1. Open ./startup/gui.properties in a text editor.
  2. Add the following line:
    system.property.javax.net.ssl.trustStore=C:\\Temp\\mykeystore
  3. Open ./startup/runtime.properties in a text editor.
  4. Add the following line:
    system.property.javax.net.ssl.trustStore=C:\\Temp\\mykeystore
  5. Restart Java Explorer.
親トピック: Secure Web Services


Loading a Secure WSDL

To load a secure WSDL document into Java Explorer:
  1. Copy the URL of the WSDL file into the address bar of Java Explorer.
  2. Press Enter.
    注: Ensure that you have configured Java Explorer to use a truststore that accepts the server certificate of the URL.
  3. If loading the WSDL document fails, try the following:
    1. Open the WSDL document in a Web browser.
    2. Save the WSDL document to your local machine.
    3. Open the document with Java Explorer.
親トピック: Secure Web Services
関連タスク
Setting Up a Test Using the Load File Wizard


Working with Secure Web Service Calls

To execute Web service calls over a secure connection, ensure that you have created a truststore for your JDK and that you have configured the Java Explorer Runtime process to use a truststore.

注: Use Apache Axis 1.4 or later to test secure Web services.

To configure Java Explorer to use Apache Axis:

  1. Click Tools > Project Settings.
  2. Click the Web Service Plugin tab.
  3. Select Axis 1.4 or Axis2 1.5 from the Assigned Web Service Plugin list box.
    注: The read-only Classpath pane displays the classpath configuration that belongs to the selected Axis version.
    The selected Axis version is stored persistently in the project file of Java Explorer.
  4. Click OK.
  5. Click Yes to confirm that you want to change the Web service library settings.
親トピック: Secure Web Services
関連タスク
Creating a Truststore for Your JDK
Configuring Java Explorer to Use a Truststore


Specifying Web Service Connection Settings

To specify Web service connection settings:

  1. In the Loaded Components pane, click the Classes tab.
  2. Choose the loaded Web service class node to display the Input Data Properties.
  3. In the Input Data Properties pane, click ... to the right of the Connection text box.
  4. Configure the Web service endpoint and your user credentials.
  5. Click OK. Java Explorer saves your connection settings.
親トピック: Secure Web Services


Web Service Emitter Timeout for Axis 1.x

注: You do not need to specify timeouts with Axis2, as Axis2 handles timeouts itself.
When you generate Web service stub code for large WSDL files, the process of generating the Java source code may take longer than the default timeout specified by the Axis library. In such a case, the following exception is generated:
com.segue.jexplorer.datatyp.exception.JExpWsdlException:
Failed to generate Web Service proxy library(webAxisProxy1.jar).:
Failed to create java source from WSDL.:
java.io.IOException:WSDL2Java emitter timed out (this often means the WSDL
at the specific URL is inaccessible)!
at com.seque.jeplorer.runtime.plugin.impl.webservice.axis.JExpAxisProxyGen
.generateProxyLibrary(JExpAxisProxyGen.java:272) at
com.segue.jexplorer.runtime.plugin.impl.webservice.axis.JExpAxisProxyGen
.generateProxy(JExpAxisProxyGen.java:138) at
com.segue.jexplorer.runtime.communication.JExpRuntimeOperation
.generateWebServiceProxy(JExpRuntimeOperation.java:772)

You can specify a WSDL2Java emitter timeout in a configuration file called webservice.properties. The property in the file must be called emitter.timeout. The value must be specified in milliseconds.

The file is located under <install dir>\Java Explorer\Startup\webservice.properties and has the following content:
# For generating Web Service stub code with axis libraries
# a timeout in milliseconds may be specified for the emitter to
# generate the source files
emitter.timeout=5000
親トピック: Secure Web Services


Negative Testing

Although extended support for negative testing is not available, you can ignore the expected exceptions.

親トピック: Setting Up Tests


Animated Runs

Animated runs or test runs execute all test methods that are assigned to your test cases, with corresponding input and output data displayed in the Input Data and Output Data windows as they are submitted/received. Status symbols indicate the success/failure status of method calls after they have run.

Output of animated runs includes several logs and reports that help you to identify problems with tested components.

To configure settings for animated runs go to Tools > System Settings > Options. The following settings are available:

  • Always run Init Test Case
  • Always run End Test Case
  • Run all Test Cases during Animated Run
  • Invoke Delay, which is the time delay between method calls, in ms
注: By default, there is a 2-second (2000 ms) delay between the invocation of method calls. This is because Java Explorer is designed to test the functionality of components, but not to overtax them with excessive load. Invocation delay settings can be configured on the Options page.
  • Executing an Animated Run
    Execute an animated run to execute all test methods that are assigned to your test cases, with corresponding input and output data displayed in the Input Data and Output Data windows.
  • Viewing Status of Animated Runs
    Explains that depending on the number of times a test case is called, which is defined by the CallCount property, you can see which iteration is currently executing in the Test Scenario window. You can also see the status of each test case and method.
親トピック: Java Explorer のヘルプ


Executing an Animated Run

To execute an animated run:

  1. Click Run Test on the Workflow bar. The Animated Run dialog box displays.
  2. Alternative: Click Run > Animated Run.
  3. Check the check boxes that correspond to the test cases that are to be executed during the test run:
    • InitTestCase
    • TestCase
    • EndTestCase
    The default selections vary based on your option settings.
    注: When test cases depend on each other for accessing global objects, ensure that you do not exclude test cases that define objects that are used by other test cases.
  4. Check the Do verifications check box to specify that verifications that are defined for output parameters should be performed.
  5. Click OK to begin the animated run.

    If you have specified a different calling count for your test cases than 1, the test cases are executed the number of times defined in this property.

    If the number of method calls reporting an error exceeds the number of allowed errors defined in the test case properties, the test case is aborted.

    注: Animated runs can be aborted manually by either hitting Esc on your keyboard or by selecting Stop Run from the Run menu. Animated runs are aborted automatically when a verification with severity Error, the simulation is aborted fails.
    All global variables are initialized to their initial values. All random variables are reset.
親トピック: Animated Runs


Viewing Status of Animated Runs

Depending on the number of times a test case is called, which is defined by the CallCount property, you can see which iteration is currently executing in the Test Scenario window. Each test case and test method has one of the following status icons:
Status Icon
Description
Green checkmark
OK
Blue V icon
Verified
Yellow triangle with exclamation mark
Warning
Red X
Error

Methods that fail due to thrown exceptions or failed verifications display failed or warning method call icons next to them. If a method call fails you can view a description of the failure by holding your cursor over the method.

親トピック: Animated Runs


Analyzing Results

Once you have completed a test run, you can view the following three result files to assist you in analyzing test results:
Result File
Description
User report
View the user report generated during the last animated run. The report contains statistical information about each test case and each test method call.
Error report
View the error report generated during the last animated run. The report contains a description for every error that occurred.
Animation log
This file contains information about every method that has been called with their parameters and errors that occurred.
  • Viewing Result Files
    Open the Explore Results dialog box to select a result type.
  • User Report
    Explains that the user report offers information regarding time elapsed for each test case and test-method call.
  • Error Report
    Explains that the error report delivers an overview of all errors that occur during test runs.
  • Animation Log
    Explains that the animation log on the Output tab displays real-time information about the methods that were called in the most recent test run.
  • Exploring Object Properties
    Explore the properties of objects with Java Explorer.
  • Exploring Method Properties
    Explore the properties of methods with Java Explorer.
親トピック: Java Explorer のヘルプ


Viewing Result Files

Before proceeding with this task you must execute a test.

  1. Click Results on the Workflow bar to display the Explore Results dialog box.
  2. Select the result type you want to generate.
  3. Alternative: You can also select result files from the Java Explorer Results menu or by clicking the Output tab above the Loaded Components pane.
親トピック: Analyzing Results
関連タスク
Executing an Animated Run


Animation Log

The animation log on the Output tab displays real-time information about the methods that were called in the most recent test run. Additional information about passed parameters is also included. When exceptions are encountered, the animation log offers detailed stack traces for the exceptions.

You can access the animation log at any time by clicking the Output tab.

親トピック: Analyzing Results


Exploring Object Properties

To explore the properties of an object:
  1. Click the Objects tab below the Loaded Components pane.
  2. Right click the object and select Quick Info. The Quick Info dialog box displays the internal state of the selected object.
  3. Optional: In the Quick Info dialog box, you can additionally view the following oroperties of an object:
    • Click Statics to display the static fields of the object.
    • Click None Public to display the private, package, and protected fields of the object.
    • Click Base Types to display the parent classes of the object.
親トピック: Analyzing Results


Exploring Method Properties

To explore the properties of a method:
Right click the object in the Loaded Components pane and select Properties. The Method Properties dialog box displays the following properties:
  • Name
  • Input parameter types
  • Output parameter type
  • Exceptions
  • Modifiers
親トピック: Analyzing Results


System and Project Settings

Java Explorer offers a number of system and project setting options.

  • System Settings
    Describes the system setting options that Java Explorer provides.
  • Project Settings
    Describes the project setting options that Java Explorer provides.
親トピック: Java Explorer のヘルプ


System Settings

System settings are saved in the file JExplorer.conf located at C:\ProgramData\Silk\Silk Performer 21.0.

  • Accessing System Settings
    Access the Java Explorer system settings to edit the system setting options.
  • Processes
    Describes the processes that run when you start Java Explorer.
  • Configuring Default Value Settings
    Use the Default Values tab to change the input value parameters for method calls.
  • Configuring Verification Settings
    Configure the verification settings to change the behavior of verifications.
  • Configuring Code Generation Settings
    Configure the code generation settings to define how code is generated when you export to a standalone application, JUnit, or a Silk Performer Java Framework project.
  • Configuring Animated Run Settings
    Configure the animated run settings to define the behavior of animated runs.
  • Deleting Loaded-File Entries in History
    Open the loaded-file entries list to delete the classes, archives, and WSDL URLs that are loaded to Java Explorer.
  • Connection Settings
    Describes how you can define the default proxy connection that is used to communicate with a Web service.
  • JUnit Settings
    Describes how you can select the TestRunner that is used to run JUnit tests.
  • Silk Performer Settings
    Describes how you can configure the home directory and the project directory for Silk Performer.
親トピック: System and Project Settings


Accessing System Settings

  1. Click Tools > System Settings. The System Settings dialog box opens.
  2. Click the tab that corresponds to the options you wish to configure. The dialog box provides the following tabs:
    • Runtime
    • Default Values
    • Options
    • History
    • Connection
    • JUnit
    • Silk Performer
親トピック: System Settings


Processes

When you start Java Explorer, at least two processes are run. The first process displays the Java Explorer GUI and runs under SDK 1.4. The second process is the runtime process. This process instantiates and manages all Java objects that belong to the currently open project. The runtime process can run under any JDK. You can configure the JDK in the Project Settings dialog box.

The runtime process is started with the JDK that is configured and is initialized with the static classpath entries. After the runtime process is initialized, the UrlClassLoader is initialized with the dynamic classpath entries.

親トピック: System Settings
関連概念
Project Settings
Java Explorer Prerequisites


Configuring Default Value Settings

You can change the input value parameters for method calls. You can set default values for the following value types:
  • Default boolean, which can either be true or false.
  • Default double, which stands for all floating-point numbers.
  • Default int, which stands for all integer numbers.
  • Default string.
  1. Click Tools > System Settings. The System Settings dialog box opens.
  2. Click the Default Values tab.
  3. Click on the value that you wish to change and type the new value.
  4. Click OK to confirm your changes.
親トピック: System Settings


Configuring Verification Settings

  1. Click Tools > System Settings. The System Settings dialog box opens.
  2. Click the Options tab.
  3. In the Verifications section, check the check boxes that correspond to the settings that you want to activate. The following options define the behavior of verifications:
    Option
    Description
    Automatically define a verification for stored values
    If checked, the default verifications are defined whenever you store an output value in a variable.
    Ignore Case (default value)
    If checked, the verification of string values in the Verification Wizard is case insensitive. By checking or unchecking this check box, you also check or uncheck the Ignore Case check box in the Verification Wizard.
    Check verifications during animated runs
    If checked, the verification is activated during animated runs. By checking or unchecking this check box, you also check or uncheck the Do Verifications check box on the Animated Runs dialog box.
  4. Click OK to confirm your changes.
親トピック: System Settings


Configuring Code Generation Settings

  1. Click Tools > System Settings. The System Settings dialog box opens.
  2. Click the Options tab.
  3. In the Code Generation section, check the check boxes that correspond to the settings that you want to activate. The following options define how code is generated when you export to a standalone application, JUnit, or a Silk Performer Java Framework project:
    Option
    Description
    Try-Catch block in every method
    By checking or unchecking this check box, you also check or uncheck the init test case in the Verification Wizard.
    Verifications
    If checked, adds verifications to the generated code.
    Silk Performer Measures
    If checked, adds Silk Performer MeasureStart and MeasureStop functions to the generated Silk Performer Java Framework code. For additional information about measures, refer to Silk Performer Help.
  4. Click OK to confirm your changes.
親トピック: System Settings
関連タスク
Defining Output Value Verifications


Configuring Animated Run Settings

  1. Click Tools > System Settings. The System Settings dialog box opens.
  2. Click the Options tab.
  3. In the Animated Run section, check the check boxes that correspond to the settings that you want to activate. The following options define the behavior of animated runs:
    Option
    Description
    Always run init test case
    By checking or unchecking this check box, you also check or uncheck the init test case on the Animated Run dialog box.
    Always run end test case
    By checking or unchecking this check box, you also check or uncheck the end test case on the Animated Run dialog box.
    Run all test cases during animated run
    By checking or unchecking this check box, you also check or uncheck all test cases on the Animated Run dialog box.
  4. To define the delay in milliseconds between the invocation of method calls in an animated run, type the delay into the Invoke Delay text box.
  5. Click OK to confirm your changes.
親トピック: System Settings


Deleting Loaded-File Entries in History

Java Explorer tracks all classes, archives, and WSDL URLs that are loaded. Instead of typing the full name, you can select an entry from the history list if the class is loaded.

To delete loaded-file entries:

  1. Click Tools > System Settings. The System Settings dialog box opens.
  2. Click the History tab.
  3. Select the file that you want to delete in the Loaded file entries list box.
  4. Click Delete.
  5. Click Yes to confirm the deletion of the file entry.
親トピック: System Settings


Connection Settings

Tools > System Settings > Connection

The Connection dialog box enables you to define the default proxy connection that is used to communicate with a Web service. The specified connection is also used to load a WSDL file from the Internet.

When you load a WSDL file, the Web service class inherits the settings in the Connection dialog box. If you change the settings in the dialog box after the Web service class is loaded, the changes are not reflected in the Web service class.

親トピック: System Settings


JUnit Settings

Tools > System Settings > JUnit

The JUnit dialog box enables you to select the TestRunner that is used to run JUnit tests from the Kind of TestRunner to use list box. In the Archives necessary to run JUnit section, you can click the Add archive(s) to classpath button to specify the classpath information that is required to run the selected TestRunner.

親トピック: System Settings


Silk Performer Settings

Tools > System Settings > Silk Performer

You can configure the home directory and the project directory for Silk Performer with the Silk Performer dialog box. The initial settings are detected by the Java Explorer setup.

親トピック: System Settings


Project Settings

This section describes the project setting options that Java Explorer provides.

  • Configuring Runtime Settings
    Add a JDK version to the system to assign the version to your project.
  • Configuring Web Service Plug-In Settings
    Configure Java Explorer to use Apache Axis 1.4 or later to test secure Web services.
  • Configuring Classpath Settings
    Configure the classpath settings to define the classpaths that are used by Java Explorer.
  • Configuring Scripting Settings
    Explains that the Scripting dialog box defines the file names that are used to export the Java Explorer project.
親トピック: System and Project Settings


Configuring Runtime Settings

To enable a specific JDK version for a project:

  1. Click Tools > System Settings. The System Settings dialog box opens.
  2. Click Add next to the Target JDK list box and browse for the Java Home Directory. For example, the Sun JDK version 1.4 might be installed under C:\j2sdk1.4.2_04. The IBM JDK version might be installed under C:\WebSphere\AppServer\java.
  3. Click OK. You can now select the added JDK version from any project.
  4. Click Tools > Project Settings. The Runtime tab of the Project Settings dialog box opens.
  5. Select the JDK from the Assigned Runtime list box.
  6. Click OK. The Java Runtime is now assigned to the current project.
注: When you change the active JDK, the runtime process is restarted. Perform an animated run to update the objects in the runtime.
親トピック: Project Settings


Configuring Web Service Plug-In Settings

Java Explorer supports Axis 1.4, Axis2 1.4 or later, and GlassFish Metro 1.5 out of the box.

注: Use Apache Axis 1.4 or later to test secure Web services.
注: Metro does not work with JDK 1.6 unless you install the latest JDK 1.6 updates.

To select a specific SOAP stack version for the project:

  1. Click Tools > Project Settings. The Runtime dialog box opens, and you can assign the SOAP stack version that is used for the current project.
  2. Click the Web Service Plugin tab.
  3. Select a SOAP stack library version from the Assigned Web Service Plugin list box and click OK. The Properties list box displays the classpath configuration that belongs to the selected SOAP stack version.
  4. Restart the Java Explorer runtime process to change the selected SOAP stack version.
  5. Click Yes to confirm the restart.
親トピック: Project Settings


Configuring Classpath Settings

To configure the classpath settings:

  1. Click Tools > Project Settings.
  2. Click the Classpath tab.
  3. Add static classpaths to or remove static classpaths from the Static list. The static classpaths include entries that are defined as static or system classpaths. These entries are set when the runtime is created. When you change a static or system class you need to restart the runtime.
  4. Add classpaths to or remove classpaths from the Jdk list. The entries in the list reflect the classpaths for the currently configured JDK.
  5. Add classpaths to or remove classpaths from the Dynamic list. The entries in the list are dynamically added to the UrlClassLoader in the runtime process. When you add an entry to the list or change an entry, you do not need to restart the runtime.
  6. Check the Restart Runtime Process check box to restart the Java Explorer runtime process. The check box fulfills two purposes. Firstly, it signals if changes made to the classpaths require the restart of the runtime process, and secondly it allows you to explicitly force a restart of the runtime process.
  7. Check the Show Full Classpath check box to display all the internally used classpath entries. By default, only the static, dynamic, and JDK classpath entries are displayed and can be customized. When you check the check box, all other classpath entries, for example the Java Explorer archives, the Web service plug-ins, and others, are also visible. This is helpful for expert users and certain internal purposes, for example if you want to see if an archive of a test of a customer environment conflicts with a Web service plug-in.
    注: The classpath tree is ordered by priority. Archives at the top of the tree have priority over archives at the end. You can move the entries up and down within a group or even between neighboring groups, unless the groups are read-only.
    注: Check boxes indicate whether a classpath is static or dynamic, which means whether a change to the classpath group requires a restart of the runtime process or not.
  8. Optional: You can also edit runtime-specific classpath entries through the Project Settings dialog box.
    注: The runtime classpath belongs to the System Settings and changes to it effect all projects. The classpath is stored in both the JExplorer.conf system settings file and the JEP project file. When you load a project, if the classpath entries in the project file do not match the classpath settings in the system settings, the system settings override the stored project settings.
親トピック: Project Settings
関連概念
Processes


Configuring Scripting Settings

The Scripting dialog box defines the file names that are used to export the Java Explorer project.

To configure the scripting settings:

  1. Click Tools > Project Settings.
  2. Click the Scripting tab.
  3. Type the file name of the exported Java test class for the Silk Performer Java Framework into the TestClass for Silk Performer text box.
  4. Type the file name of the exported JUnit test class into the TestClass for JUnit text box. This class extends junit.framework.TestCase.
  5. Type the file name of the exported standalone test class into the TestClass for Standalone text box. You can execute the class from the command line or integrate it into other test frameworks.
  6. Type the name of the BDL script file, that is generated for the Silk Performer Java Framework, into the TestScript for Silk Performer text box.
親トピック: Project Settings


Exporting Projects

Once you have defined your test scenario you can either continue running tests in Java Explorer or you can export the underlying test code to the following environments:
Environment
Description
Silk Performer Java Framework Project
Export to Silk Performer to run tests based on the scenario you have defined in Java Explorer.
JUnit Test Case
Export to JUnit to directly execute the test cases with the JUnit Run Test Suite.
Standalone Console Application
Run the test scenario as a standalone application, independent of Java Explorer, or use the test scenario to record Web traffic with Silk Performer.
  • Exporting a Java Explorer Project
    Export test scenarios to other test environments to continue testing.
  • Silk Performer Java Projects
    Describes how to export projects to Silk Performer.
  • JUnit Test Cases
    Describes how to export projects to JUnit.
  • Standalone Console Applications
    Describes how you can use standalone console applications.
親トピック: Java Explorer のヘルプ


Exporting a Java Explorer Project

To export a Java Explorer project:
  1. Click Export.
  2. Click on one of the following buttons to select the environment to which you want to export the test scenario:
    • Java Project Silk Performer
    • JUnit Test Case
    • Standalone Console Application
  3. Specify a name for the exported file in the corresponding text box.
  4. Specify a destination for the exported file in the Directory text box. By default, Java Explorer saves projects to the project directory at <my documents>\Silk Performer 21.0\Projects.
    注: If you are calling a Web service in the Internet, ensure that you have set the correct proxy in Tools > Project Settings > Classpath.
親トピック: Exporting Projects


Silk Performer Java Projects

You can create Silk Performer Java projects with the Java class and a BDF file that contains the calls to the Java class. The Java Profile Settings are saved in the Silk Performer project file, so the same Java Runtime and classpath settings are used in Java Explorer and Silk Performer. You can compile the Java test class in the Silk Performer GUI. When you start a test or a try-script run, the Java compiler and the BDL compiler are automatically invoked.

Java Explorer exports the following files to Silk Performer:
  • The Silk Performer project file, which is of type LTP.
  • The Silk Performer script file, which is of type BDF.
  • The Java test script, which is of type JAVA.
  • Silk Performer Java Framework
    Describes how you can use the Silk Performer Java Framework to coordinate development and testing efforts.
  • Working with Multiple Agents
    Configure your testing environment to enable the Java Framework to perform as intended.
親トピック: Exporting Projects


Silk Performer Java Framework

The Silk Performer Java Framework enables developers and QA personnel to coordinate their development and testing efforts while working within their specialized environments. The developers work exclusively in their Java-programming environment while the QA personnel work exclusively in Silk Performer. The Silk Performer Java Framework thereby encourages efficiency and a tighter integration of QA and development.

Exporting to Silk Performer is valuable for QA personnel who are proficient in facilitating analysis of Java components with Silk Performer and wish to create Silk Performer projects, test case specifications, and scripts from which they can run tests.

When you directly export a project to Silk Performer as a Java project, a default Silk Performer project file of type LTP is created. You can then test a project with multiple virtual users. You can also gather and analyze performance data for each method call in the project.

親トピック: Silk Performer Java Projects
関連概念
Java Framework Approach


Working with Multiple Agents

Usually, load testing with Silk Performer is done through multiple agents. To enable the framework to work smoothly:
  1. Install a JDK on each agent machine. The version of the JDK should be the same version, or later, as the one used for the Java Explorer project.
    注: Install the JDK in the same directory on each machine.
  2. Ensure that the same classpath is available on each agent machine. For example, to load test a WebLogic EJB, you must install the package weblogic.jar in the same directory on each agent machine. The same applies to EJB stubs.
親トピック: Silk Performer Java Projects


JUnit Test Cases

JUnit is a widely used regression testing framework. You can export JUnit TestSuites with Java Explorer. The export generates a Java test class for JUnit and two batch files for compiling and running the test class. For additional details on JUnit, visit https://bugs.eclipse.org/bugs/.

  • Exporting a JUnit TestSuite
    Export your test scenario as a JUnit TestSuite to perform regression tests.
  • Test Case Execution Sequence
    Describes the differences in the test case execution sequence between Java Explorer and JUnit.
親トピック: Exporting Projects


Exporting a JUnit TestSuite

To export a JUnit TestSuite:
  1. Click Export > JUnit Test Case.
  2. Click Open Dialog ... next to the File Name text box. The Scripting page of the Project Settings dialog box opens.
  3. Specify a name for the exported file in the Test Class for JUnit text box.
  4. Click OK. The Project Settings dialog box closes.
  5. Click Browse ... next to the Directory text box to select the target directory.
  6. Check the Open Test Suite in JUnit check box to start the JUnit testrunner directly from the Java Explorer GUI.
  7. Click OK. Java Explorer confirms that the settings are correct. If the settings are not correct, the JUnit page of the System Settings dialog box opens. You can select the TestRunner that is to be used to run JUnit tests from the Kind of TestRunner to use list box. The Add archive(s) to classpath button next to the Archives necessary to run JUnit box enables you to specify the classpath information required to run the selected TestRunner.
親トピック: JUnit Test Cases


Test Case Execution Sequence

There are differences in the way that JUnit and Java Explorer run tests. In JUnit TestSuites, values and global variables that need to be initialized in the init() test case cannot be passed from one test case to the next.

Example

The execution sequence of the following Java Explorer project, that contains an init() test case, an end() test case, and two test cases, is:
  1. InitTestCase
  2. TestCase1
  3. TestCase2
  4. EndTestCase
In JUnit, the execution sequence of the same project is:
  1. InitTestCase (setUp)
  2. TestCase1 (testMethod1)
  3. EndTestCase (tearDown)
  4. InitTestCase (setUp)
  5. TestCase2 (testMethod2)
  6. EndTestCase (tearDown)
親トピック: JUnit Test Cases


Standalone Console Applications

With Java Explorer, you can compile the test cases in a test scenario into a standalone console application, which is a Java class that can run independent of Java Explorer, for example from the commandline. A standalone console application calls all test methods in the main method.

You can use standalone console applications to either run test scenarios independent of Java Explorer, or to generate network traffic that can be recorded by Silk Performer. Silk Performer can generate Web BDL scripts based on such network traffic.

  • Exporting Standalone Console Applications
    Export a standalone console application to either run test scenarios independent of Java Explorer, or to generate network traffic that can be recorded by Silk Performer.
  • Recording a Standalone Console Application
    Record a standalone console application to create a Web BDL script with all the HTTP/TCP calls of the application to a Web service.
親トピック: Exporting Projects


Exporting Standalone Console Applications

  1. Click Export > Standalone Console Application. The Export Standalone Java application dialog box opens.
  2. Type a name for the exported standalone console application into the File name text box.
  3. Click Browse ... next to the Directory text box and select the destination directory for the standalone console application.
  4. Click OK. A JAVA and a BAT file are saved to the current project directory by default.
  5. Open a command prompt in the folder to which you have exported the standalone console application.
  6. Run <project name>.bat, where <project name> is the name of your current Java Explorer project.
  7. Check the status information which is listed in the command window.
親トピック: Standalone Console Applications


Recording a Standalone Console Application

To record a standalone application with Silk Performer:
  1. Launch Silk Performer.
  2. Click File > New Project and create a new Web project.
  3. Create a new recording profile for the standalone console application.
  4. Specify a name for the profile.
  5. Specify the path to the batch file.
  6. Specify Custom Application as the application type.
  7. Select Winsock.
  8. Begin recording the application. After recording you should have a Web BDL script that contains all the HTTP/TCP calls of the console application to a Web service.
親トピック: Standalone Console Applications


Java Framework Developer Guide

  • Tools and Samples
    Explains the tools, sample applications and test projects that Silk Performer provides for testing Java and .NET.
  • Testing Java Components
    Explains that the Java Framework encourages efficiency and tighter integration between QA and development by enabling developers and QA personnel to coordinate their development and testing efforts while working entirely within their specialized environments.
  • Java Framework
    Explains that as a powerful extension to the Silk Performer Benchmark Description Language, the Java Framework enables you to implement user behavior in Java.
親トピック: Java テストのサポート


Java Framework

As a powerful extension to the Silk Performer Benchmark Description Language, the Java Framework enables you to implement user behavior in Java. When testing an existing Java application you do not need to spend much time creating test scripts. The only effort required is embedding existing Java source code into the framework.

  • Java Framework Overview
    Explains the basic requirements for generating a benchmark executable within the Java Framework.
  • Using Java Code for Load Testing
    Explains how to transfer Java code to the Silk Performer Workbench, where you can use it to execute load tests.
  • 32 ビット Java と 64 ビット Java の切り替え
    32 ビット Java と 64 ビット Java を切り替える方法と、Java アーキテクチャのテスト実行への影響について説明します。
  • Java Framework Architecture
    The Java Framework is the technology that connects Java and BDL and hence opens up a variety of possibilities.
  • Runtime-to-Java Communication
    Explains the functions that are available for invoking the methods of a Java class from within a test script.
  • Java-to-Runtime Communication
    Explains the functionality offered by the SilkPerformer class. Also covers sample Java Framework applications and installation requirements.
  • Programming With Java Framework
    Explains how to implement a Java Framework test project using Silk Performer.
  • Visual Programming with Java Explorer
    Explains that Java Explorer offers a convenient alternative to scripting test classes by hand.
  • Structure of a Java Framework Project
    Explains that Java Framework projects consist of at least one BDL script, one or more Java source files, class files (compiled Java files), and/or JAR files (collections of class files).
  • Advanced Usage
    Explains that when working with a Java Framework script template you are only required to have a basic knowledge of the available Java Framework functions.
  • Java Test Class
    Explains that within a Silk Performer test script, the Java test class enables you to implement the behavior of virtual users in Java.
  • JVM Option Settings
    Explains how to use JavaSetOption to determine options such as Java version, Java home directory, and the class path.
  • Java User Implementation (deprecated)
    Lists deprecated technology that is outdated and has been replaced by newer technology.
親トピック: Java Framework Developer Guide


Java Framework Overview

To generate a benchmark executable and run a load test with the help of the Java Framework, two source files are normally required:

  • A Java class, with the file extension .java. It implements the behavior of a virtual user.
  • A Silk Performer test script with the file extension .bdf. It invokes Java method calls.

Silk Performer lets you call Java methods of any Java object from a BDL context including passing parameters of any type and number. Return values can be retrieved equally. When a Java method returns a complex object, a handle to the Java object is returned in its place. The handle can be passed to other method calls as an input parameter, or public methods may be invoked on the object. There is also support for static methods, cast operations, and exception handling.

Java-based tests are driven by BDL scripts. BDL implements a set of functions that enable you to:

  • Set JVM options
  • Load a JVM
  • Load Java classes
  • Invoke methods on loaded Java classes

The silk.performer package provides the SilkPerformer class, which enables the Java side to communicate with the Silk Performer's runtime system. It exposes a set of testing methods that are also available in BDL.

親トピック: Java Framework


Using Java Code for Load Testing

The Silk Performer Java Framework allows you to model virtual users in Java code, access useful functionality from Silk Performer's runtime environment, and it helps you to generate the necessary BDL stub code where necessary.

There are a number of ways to integrate your Java code. The diagram below shows the options you have:

  • Your first option is to script Java code within your preferred Java IDE.
    • When you work with Eclipse, you can use the Silk Performer Eclipse plugin. It lets you export your code wrapped in a Silk Performer Java Framework project and open it in the Workbench.
    • When you work with another Java IDE, first build .jar files from your source files. Then use Silk Performer's import tools: the JUnit import tool for JUnit tests and the Java Class import tool for generic Java code. This way Silk Performer generates all necessary stub code for you.
  • Your second option is to write Java code directly within the Workbench. Create a Java Framework project and write your code into the .java file, which is automatically created, using Silk Performer's editor. Silk Performer offers syntax highlighting and allows to compile the Java code using the configured Java Development Kit within the Workbench.
  • Your third option is to create Java code within Java Explorer. Java Explorer lets you create code visually, so you do not have to write your code manually. Transferring the Java code from Java Explorer to the Silk Performer Workbench is easy due to the seamless integration of the two solutions.

Depending on how you import Java code to the Workbench, Silk Performer creates different sets of files within the Java Framework project. This results in different call sequences. The diagram below shows three types of call sequences:

  • Sequence 1 is the default call sequence. Note that the communication between BDL and the Java wrapper is bidirectional. This means that you can call Java code from the .bdf script and Silk Performer functionality from the .java script. Code within the .java file can then call code from further classes or .jar files.
  • Sequence 2A applies when Java code is imported using the Java Class Import tool. In this case, Java code that is part of the .jar files is directly called from BDL.
  • Sequence 2B applies when JUnit tests are imported using the JUnit Import tool. Java code within .jar files is called from BDL - just like in sequence 2 A. However, in this case the .jar file consists of the unit test (which itself is a .jar file), which again can call Java code from other .jar files.

親トピック: Java Framework
関連概念
Java のサポート
JUnit インテグレーション


Java Framework Architecture

The Java Framework is the technology that connects Java and BDL and hence opens up a variety of possibilities.

It enables you to utilize your Java code for
  • functional testing,
  • load testing, and
  • monitoring.
Using the Java Framework, you can test and monitor server components through a variety of Java technologies, like
  • EJB,
  • SOAP,
  • RMI,
  • or JDBC.
It enables you to both create new and use existing Java code, by
  • visual creation,
  • manual scripting, or
  • importing.
It offers you to use a number of tools to do so like
  • the Silk Performer Workbench
  • Eclipse or any other Java IDE
  • specialized import tools
  • Java Explorer

For more information, see Using Java Code for Load Testing.

The Java Framework BDL API is the "membrane" between the generic Silk Performer BDL code and Java code. All the possibilities to communicate from BDL to Java is covered by Runtime-to-Java Communication, the reverse direction of the communication is described in Java-to-Runtime Communication.

親トピック: Java Framework
関連タスク
Programming With Java Framework


Runtime-to-Java Communication

Silk Performer provides the following functions for invoking the methods of a Java class from within a test script:

  • JavaSetOption: Sets options for the Java Virtual Machine.
  • JavaCreateJavaVM: Initializes and starts the Java Virtual Machine (JVM).
  • JavaLoadObject: Instantiates a Java object and returns a handle on it.
  • JavaLoadString: Instantiates a Java string object and returns a handle on it.
  • JavaCallMethod: Invokes either a dynamic or a static Java method.
  • JavaFreeObject: Frees a Java object.
  • JavaCastObject: Casts an object to a type of your choice.
  • JavaGetBoolean: Retrieves the Boolean return value.
  • JavaGetFloat: Retrieves the float return value.
  • JavaGetNumber: Retrieves the int return value.
  • JavaGetObject: Retrieves a handle on the object returned by the last call of JavaCallMethod on the specified object or class.
  • JavaGetString: Retrieves the string return value
  • JavaGetUserObject: Returns the handle on the JavaUser object loaded by JavaUserInit command.
  • JavaSetChar: Sets a char parameter for the next function or constructor call.
  • JavaGetChar: Retrieves the ordinal number of the char return value.
  • JavaSetBoolean: Sets a Boolean parameter for the next function or constructor call.
  • JavaSetFloat: Sets a float parameter for the next function or constructor call.
  • JavaSetNumber: Sets a numeric parameter for the next function or constructor call.
  • JavaSetObject: Sets an object parameter for the next function or constructor call.
  • JavaSetString: Sets a string parameter for the next function or constructor call.
  • JavaSetByteArray: Convenience function derived from JavaSetString function.
  • JavaSetCharArray: Convenience function derived from JavaSetString function.
  • JavaRegisterException: Registers a Java exception string under a custom error number.
  • JavaUnregisterErrorNumber: Unregisters an exception message.
  • JavaGetLastException: Retrieves the last exception message.

Convenience function to call JUnit test methods:

  • JUnitCallMethod: Invokes a JUnit conform method of a class derived from junit.framework.TestCase. Prepares the method execution by invoking the setUp() method and finishes the test by invoking the tearDown() method.

Deprecated Java Framework functions:

  • JavaUserInit: Calls the JavaUserInit method of the Java class that implements the behavior of the virtual user.
  • JavaUserRun: Calls the JavaUserRun method of the Java class that implements the behavior of the virtual user.
  • JavaUserMethod: Calls an additional method of the Java class that implements the behavior of the virtual user.
  • JavaUserShutdown: Calls the JavaUserShutdown method of the Java class that implements the behavior of the virtual user.
親トピック: Java Framework


Java-to-Runtime Communication

Silk Performer Class

注: For detailed information on all Java Framework classes and methods, view the Java documentation (HTML). The Java documentation is located in your Silk Performer installation folder: \Silk\Silk Performer <version>\Doc\JavaFramework

The SilkPerformer class is used to access runtime information and to forward user information to the Silk Performer runtime environment. Here is the functionality offered by the SilkPerformer class:

  • Measure functions for timers and counters
  • Synchronization of users (checkpoint = rendezvous) (global functions)
  • Extended file functions (file load functions)
  • Output functions for logging and errors (Print, Write and Rep functions)
  • Global attribute get and set functions accessible from both Java and BDL (AttributeSet, AttributeGet functions)
  • Test functions (Get functions)
  • Random functions (Rnd functions)
  • Date time format functions (format functions

Class Files

The silk.performer package contains classes that enable the Java user implementation to communicate with the Silk Performer runtime environment. The class files are bundled in the javaUserFramework.zip archive. See the Classfiles folder in the installation home directory.

  • SilkPerformer class
  • FileEx
  • MeasureCounter
  • MeasureTimer
  • PrintStream
  • ReflectionUtil

Java Framework Template

A reference implementation of a BDL script called NewJavaFramework.bdf is included.

Sample Java Class

A sample Java class belonging to a BDL script called NewJavaFramework.java is included.

Sample Applications

Three online samples are available. The sample files and related documentation are available at: <public user documents>\Silk Performer 21.0\Samples\JavaFramework\.

  • Java Framework sample: This sample demonstrates the basic usage of the Java Framework API.
  • Java RMI and JDBC: These samples demonstrate how to use the Java Framework API for RMI and JDBC replay.
  • BankSample: This sample demonstrates some advanced features of the Java Framework API.

Installation Requirements

A Java Virtual Machine compatible with Oracle’s Java Runtime Environment (JRE) 7 or 8 must be installed on each agent machine. Note however that a full installation of a Java Development Kit (JDK) is recommended so that manually created Java test classes can be compiled.

親トピック: Java Framework


Programming With Java Framework

Explains how to implement a Java Framework test project using Silk Performer.

  1. Add a new Java Framework script to your project. Within Silk Performer, choose File > New > Java Framework Scripts (.bdf/.java).
  2. Enter a name for the Java class, for example Testclass. Then Save the .bdf and .java templates.
  3. Open the Java class by double clicking it in the Project tree menu. Implement the desired Java test code in one or more member functions of the Java class. For example, public void doFoo() throws SilkPerformerException. If you prefer, you can open and modify the Java class in an IDE instead. Note that Java Explorer offers powerful scripting functionality.
  4. Modify the BDF file and make sure that the methods of the Java class are called with correct parameters. Use JavaSet<Datatype> functions to set the function parameters. Use JavaGet<Datatype> functions to retrieve return values.
  5. Open Profile settings and configure a Java Virtual Machine for the test run. If the Java class requires additional Java archives, add them to the classpath. The project directory is added to the classpath automatically and does not have to be configured explicitly.
  6. Invoke a Try Script run. The Java and BDL script will then be compiled automatically.
親トピック: Java Framework


Visual Programming with Java Explorer

Rather than scripting test classes by hand, Java Explorer offers a convenient means of creating projects for testing web services, Enterprise Java Beans, and remote objects. Any existing Java Explorer project can be exported to Silk Performer.

親トピック: Java Framework


Structure of a Java Framework Project

A Java Framework project consists of at least one BDL script. Additionally, a project may contain one or more Java source files, class files (compiled Java files), and/or JAR files (collections of class files).

The structure of the BDL script follows the standard syntax. It usually consists of an Init transaction, in which the Java environment is initialized, one or several transactions defining user behavior, and an end transaction in which the Java environment is deleted. The BDL script is used as a starting point for the Java runtime initialization while later in the script. execution of virtual user behavior, or at least part of it, is transferred to the Java environment. This is done by instantiating Java objects within the VM and invoking methods on them.

A Java test class template and corresponding test script can automatically be generated by choosing File > New > Java Framework Scripts (.bdf/.java). A dialog box opens. Enter the name of the Java test class that is to be generated.

BDL scripts for invoking existing Java test classes and existing JUnit test classes can easily be created using the Java / JUnit import tool.

  • User Group Definitions
    Shows how the users to be simulated are defined in the workload section of your test script.
  • Initialization Transaction
    Explains that the first transaction enables virtual machine initialization. Also details the function calls that must be performed with the transaction.
  • Java Method Calls
    Explains the main transactions that allow you to define the actions that a virtual user is to perform during a test.
  • Parameterized Java Method Calls
    Explains that attribute functions can be used to pass parameters from BDL to Java code and that you can call test methods in a Java test class that expect or return simple or complex parameters.
  • End Transaction
    Explains that an end transaction, executed at the end of a test, implements user termination.
親トピック: Java Framework


User Group Definitions

The users to be simulated are defined in the workload section of the test script. A virtual user is denoted by the transactions to be called, along with their frequency.

Usually, user behavior implementation is divided into at least three separate parts: initialization, user actions, and shutdown. Note the user group definition in the BDL sample below:

dcluser
  user
    JavaUser
  transactions
    TInit         : begin;
    TMyJavaTrans  : 1;
    TEnd          : end;

Here is a BDL sample that includes multiple transactions:

dcluser
  user
    JavaUser
  transactions
    TInit           : begin;
    TMyTransaction1 : 5;
    TMyTransaction2 : 2;
    TMyTransaction3 : 8;
    TEnd            : end;
親トピック: Structure of a Java Framework Project


Initialization Transaction

The first transaction executed in a test enables virtual machine initialization. The following function calls must be performed within this transaction:

JavaCreateJavaVM() initializes and starts the Java Virtual Machine.

JavaSetOption() starts the Java Virtual Machine. Several parameters are required, including home directory, Java version, and classpath. These may be configured in the Java section of the active profile or scripted by the JavaSetOption command.

JavaLoadObject is used to create a Java object. It is necessary to instantiate the class where the Java test code resides. For example, if the Java test code was implemented in a class called Test.java, the following method call would instantiate the class and store a handle on it in a global variable. The handle is used whenever a reference to the test class is required.

hTestObj := JavaLoadObject("Test");

If the Java test class calls SilkPerformer functions, then a reference to the SilkPerformer context object must be passed to the testclass. The SilkPerformer context object must be instantiated first, then the handle on it can be passed to the constructor of the test class by the JavaSetObject command.

hPerf := JavaLoadObject("silk/performer/SilkPerformer");
JavaSetObject(JAVA_STATIC_METHOD, hPerf);

The corresponding code in the test class must be a constructor that takes the SilkPerformer context object as a parameter. It makes sense to store the context object as a member variable so that it can be used by all method calls in the Java test class.

private SilkPerformer SilkPerformer = null;
public Test(SilkPerformer perf)
{
  SilkPerformer = perf;
}

To avoid memory leaks, references to Java objects in BDL should be freed by the JavaFreeObject command. The handle on the SilkPerformer context object is only used in the TInit transaction, so it can be freed at the end of the transaction. Note that only the reference to the object is freed, the Java object itself remains alive as long as there are Java references to it. The handle on the instantiated test object is needed throughout the test. It is freed in the TEnd transaction.

JavaFreeObject(hPerf);

Implementation of the initial transaction should resemble the following:

var
  hTestObj   : number;

dcltrans
  transaction TInit
  var
    hPerf : number;
  begin
    JavaCreateJavaVM();

    hPerf := JavaLoadObject("silk/performer/SilkPerformer");
    JavaSetObject(JAVA_STATIC_METHOD, hPerf);
    hTestObj := JavaLoadObject("Test");
    JavaFreeObject(hPerf);
  end TInit;
親トピック: Structure of a Java Framework Project
関連概念
Instantiating Java Objects
Java Test Class
関連資料
JavaSetObject Function
JavaCreateJavaVM Function
JavaFreeObject Function


Java Method Calls

The main transactions allow you to define most of the actions that a virtual user is to perform during a test. These actions are defined in any member method of the Java test class, which is defined in the respective Java script. To call a test method called doFoo for example, the main transaction in the test script would contain the following function call:

JavaCallMethod(hTestObj, "testFoo") calls the testFoo method of the Java test class that is defined in the respective Java source file, for example Test.java.

Here is an example TMyJavaTrans transaction:

dcltrans
  transaction TMyJavaTrans
  begin
    JavaCallMethod(hTestObj, "doFoo");
  end TMyJavaTrans;
注: To create a custom timer measure for a Java or JUnit method call, specify the timer name as the third optional parameter of the respective JavaCallMethod or JUnitCallMethod command.
親トピック: Structure of a Java Framework Project
関連資料
JavaCallMethod Function


Parameterized Java Method Calls

As long as test code is parameterized in the Java test class, it may be sufficient to call simple Java methods that do not take parameters or have return values. Often however it is desirable to customize test code in BDL and execute it in Java. Attribute functions can be used to pass parameters from BDL to Java code, but with Silk Performer it is also possible to call test methods in a Java test class that expect or return simple or complex parameters.

To call a test method that takes parameters, use the following function calls prior to invoking the test method:

  • JavaSetNumber( in hObject : number, in nParam : number, in sType : string optional );
  • JavaSetBoolean( in hObject : number, in bParam : boolean );
  • JavaSetFloat( in hObject: number, in fParam : float, in sType : string optional );
  • JavaSetObject( in hObject : number, in hParam : number, in sType : string optional );
  • JavaSetString( in hObject : number, in sParam : string allownull );
  • JavaSetChar( in hObject : number, in nParam : number );
  • JavaSetByteArray( in hObject : number, in sParam : string allownull, in nLen : number optional );
  • JavaSetCharArray( in hObject : number, in sParam : string allownull, in nLen : number optional );

The first parameter of the functions must be a valid handle on a Java object, usually the handle on the Java test object that was retrieved in the TInit transaction.

The data type of the first parameter of the Java test method must match the first usage of the JavaSet* function, and so on. In parameters are only valid for the following method call on a referenced object.

To call a test method that returns a parameter, use the following function calls after invoking the test method:

  • JavaGetBoolean( in hObject: number ): boolean;
  • JavaGetFloat( in hObject: number ): float;
  • JavaGetNumber( in hObject: number ): number;
  • JavaGetObject( in hObject : number ): number;
  • JavaGetString( in hObject : number, out sBuffer : string, in nBufLen : number optional );
  • JavaGetChar( in hObject: number ): number;

Here is an example parameterized Java method call:

dcltrans
  transaction TMyJavaTrans
  var
    fValue : float;
  begin
    // set the first parameter
    JavaSetString(hTestObj, "1");
    // set the second parameter
    JavaSetNumber(hTestObj, 1);
    // invoke the method
    JavaCallMethod(hTestObj, "doFoo");
    // retrieve the result
    fValue := JavaGetFloat(hTestObj);
    Print("doFoo returned "+String(fValue));
  end TMyJavaTrans;
親トピック: Structure of a Java Framework Project
関連資料
JavaSetNumber Function
JavaSetBoolean Function
JavaSetFloat Function
JavaSetObject Function
JavaSetString function
JavaGetNumber Function
JavaGetFloat Function
JavaGetString Function


End Transaction

The end transaction, executed at the end of a test, implements user termination. This transaction should free all references on all remaining Java test objects.

JavaFreeObject(in hObject: number) takes a handle on a Java object as a parameter and frees all references to it.

Here is an example end transaction:

dcltrans
transaction TEnd
  begin
    JavaFreeObject(hTestObj);
  end TEnd;
親トピック: Structure of a Java Framework Project
関連資料
JavaFreeObject Function


Advanced Usage

Using a Java Framework script template requires that you have only a basic knowledge of the available Java Framework functions. If a Java test driver is already available for reuse, then a template project can be generated in which the Java test class acts as an interface between the original test driver and the Silk Performer script.

Java test drivers can also be invoked directly from Silk Performer scripts. Normally, you have to update the BDL script, the Java test class, and the Java test driver. By calling the Java test driver directly, you avoid having to update the Java test class. To call a test driver directly from BDL, additional syntax is often required to call static and overloaded methods or to reuse complex objects.

  • Static Java Method Calls
    Explains how to invoke and define input parameters for static Java methods
  • Distinguishing Java Methods
    Explains that input parameters specified with JavaSet* functions must exactly match the formal data type of the Java function. Also includes a Java exception example.
  • Instantiating Java Objects
    Explains how the JavaLoadObject function is used to instantiate Java objects, and additionally obtain handles on Java objects.
  • Java Objects as Return Parameters
    Explains how the JavaGetObject function can be used to retrieve a handle on complex Java objects.
  • Exception Handling of Java Method Calls
    Explains that each exception that is not handled by the invoked Java method itself is thrown to the BDL script where a native Java error is raised.
親トピック: Java Framework


Static Java Method Calls

Static methods can be invoked just like any other method using the JavaCallMethod function. Since static methods are defined on a Java class and not on a Java object, the constant JAVA_STATIC_METHOD must be used in place of a handle to a Java object, for example hTestObj. The second parameter defining the method name now begins with the fully qualified class name, where the method is defined, then a '.' symbol, and then the method name. A fully qualified class name means that the package that contains the class must also be specified. Use the '/' symbol as a separator between subpackages.

JavaCallMethod(JAVA_STATIC_METHOD, "test/mypackage/Test.doFoo") calls the static doFoo method of the Test class in the mypackage subpackage in the package test.

Like member methods, static methods may also expect and return parameters. To define an input parameter for a static method, use the following function calls prior to invoking the test method:

  • JavaSetNumber(JAVA_STATIC_METHOD, in nParam : number, in sType : string optional );
  • JavaSetBoolean(JAVA_STATIC_METHOD, in bParam : boolean );
  • JavaSetFloat(JAVA_STATIC_METHOD, in fParam : float, in sType : string optional );
  • JavaSetObject(JAVA_STATIC_METHOD, in hParam : number, in sType : string optional );
  • JavaSetString(JAVA_STATIC_METHOD, in sParam : string allownull );
  • JavaSetChar(JAVA_STATIC_METHOD, in hObject : number, in nParam : number );
  • JavaSetByteArray(JAVA_STATIC_METHOD, in hObject : number, in sParam : string allownull, in nLen : number optional );
  • JavaSetCharArray(JAVA_STATIC_METHOD, in hObject : number, in sParam : string allownull, in nLen : number optional );

The datatype of the first parameter of the static Java test method must match the first usage of the JavaSetParameter function, and so on. In parameters are only valid for the following static method call.

To call a static Java method that returns a parameter, use the following function calls after invoking the test method:

  • JavaGetBoolean(JAVA_STATIC_METHOD): boolean;
  • JavaGetFloat(JAVA_STATIC_METHOD): float;
  • JavaGetNumber(JAVA_STATIC_METHOD): number;
  • JavaGetObject(JAVA_STATIC_METHOD): number;
  • JavaGetString(JAVA_STATIC_METHOD, out sBuffer : string, in nBufLen : number optional );
  • JavaGetChar(JAVA_STATIC_METHOD, in hObject: number ): number;

Here is an example of a parameterized static Java method call:

dcltrans
  transaction TMyStaticJavaTrans
  var
    fValue : float;
  begin
    ThinkTime(0.2);
    // set the first parameter
    JavaSetString(JAVA_STATIC_METHOD, "1");
    // set the second parameter
    JavaSetNumber(JAVA_STATIC_METHOD, 1, JAVA_BYTE);
    // invoke the method
    JavaCallMethod(JAVA_STATIC_METHOD, "test/mypackage/Test.doFoo");
    // retrieve the result
    fValue := JavaGetFloat(JAVA_STATIC_METHOD);
    Print("doFoo returned "+String(fValue));
  end TMyStaticJavaTrans;

Additional Samples

<public user documents>\Silk Performer 21.0\Samples\JavaFramework\JavaFrameworkSample.bdf

<public user documents>\Silk Performer 21.0\Samples\JavaFramework\JavaFrameworkSample.java

親トピック: Advanced Usage
関連資料
JavaSetNumber Function
JavaSetBoolean Function
JavaSetFloat Function
JavaSetObject Function
JavaSetString function
JavaGetNumber Function
JavaGetBoolean Function
JavaGetFloat Function
JavaGetString Function


Distinguishing Java Methods

Input parameters specified with JavaSet* functions must exactly match the formal data type of the Java function. Some BDL functions, such as JavaSetNumber, can be used for more than one Java data type. The third optional parameter of the BDL function allows you to distinguish between the various Java data types (in the following example, byte, short, int, and long_.

Java code example

public void doFoo(byte b) {}
public void doFoo(int i) {}

BDL code example

JavaSetNumber(hTestObj, 127, JAVA_BYTE);
JavaCallMethod(hTestObj, "doFoo");

If the actual parameters specified by JavaSet* functions and the formal parameters of the Java method do not match, a java.lang.NoSuchMethodError exception will be thrown.

The following sample shows such a NoSuchMethodError.

Native: 1007 - Java Exception, Native Error 3:
java.lang.NoSuchMethodError: doFoo, Test, doFoo((F))

The log output shows that no method named doFoo defined in a class Test could be found with the method signature doFoo((F)). As abbreviations for the method parameters, standard Java element type encoding is used.

Additional Samples

<public user documents>\Silk Performer 21.0\Samples\JavaFramework\JavaFrameworkSample.bdf

<public user documents>\Silk Performer 21.0\Samples\JavaFramework\JavaFrameworkSample.java

親トピック: Advanced Usage


Instantiating Java Objects

The JavaLoadObject function is used to instantiate Java objects, and additionally obtain handles on Java objects. Such handles can later be used to call methods on objects or they can be used as input parameters for other method calls. For the JavaLoadObject function, you must provide fully qualified names of classes to instantiate them as parameters. The ‘/’ character must be used as a package separator.

For example, to instantiate a Java object of class java.util.ArrayList in a TMain transaction, the BDL code looks like this:

  transaction TMain
  var hList : number;
  begin
    // invoking constructor of java.util.ArrayList
    hList := JavaLoadObject("java/util/ArrayList");
    // use the object
    // ...
    // free reference on the object when done
    JavaFreeObject(hList);
  end TMain;

If a Java class has a constructor that takes parameters, use JavaSet* functions to set those parameters. In the Java Framework, constructor calls are treated like static method calls, so use the constant JAVA_STATIC_METHOD instead of an object handle as the first parameter for JavaSet* functions.

For example, to invoke the constructor ArrayList(int initialCapazity) of class java.util.ArrayList in a TMain transaction, the BDL code looks like this:

  transaction TMain
  var hList : number;
  begin
    // putting necessary parameters on the stack
    JavaSetNumber(JAVA_STATIC_METHOD, 100);
    // invoking constructor of java.util.ArrayList
    hList := JavaLoadObject("java/util/ArrayList");
    // use the object
    // ...
    // free reference on the object
    JavaFreeObject(hList);
  end TMain;

The JavaLoadString function was introduced for convenience; it simplyfies the instantiation of java.lang.String objects.

To create a custom timer measure for a Java object instantiation, specify the timer name as the third optional parameter of the respective JavaLoadObject or JavaLoadString command.

親トピック: Advanced Usage


Java Objects as Return Parameters

Java method calls can return complex Java objects. The JavaGetObject function can be used to retrieve a handle on such objects. Java objects can also be used as input parameters for other Java method calls. The JavaSetObject function is used for this purpose.

Input parameters specified with the JavaSetObject function must exactly match the formal parameters of the Java method call. If the formal and actual data type do not match exactly, but their assignments are compatible, then a kind of cast operation must be performed. For example, the formal data type is java.lang.Object. The actual datatype is java.lang.String. Strings are assignment compatible to objects.

One time cast operation: The third optional parameter of the JavaSetObject function allows you to specify the data type that is to be used for the next Java method call.

transaction TMyJavaTrans
var
  hValue :number;
  hVector :number;
begin
  hValue := JavaLoadString("myValue");
  hVector := JavaLoadObject("java/util/Vector");
  JavaSetObject(hVector, hValue, "java/lang/Object");
  JavaCallMethod(hVector, "add");
end TMyJavaTrans;

A java.util.Vector object expects a java.lang.Object object as parameter for its add method. So, as shown above, the Java string hValue must be treated as a java.lang.Object object for the call of the add method. Therefore the third optional parameter of JavaSetObject is set to java/lang/Object.

Permanent cast operation: If a Java object that is referenced in BDL code needs to have a specific data type for several Java method calls, then the JavaCastObject function can be used to permanently change the data type of the object.

transaction TMyJavaTrans
var
  hValue :number;
  hVector1 :number;
  hVector2 :number;
begin
  hVector1 := JavaLoadObject("java/util/Vector");
  hVector2 := JavaLoadObject("java/util/Vector");
  hValue := JavaLoadString("myValue");
  JavaCastObject(hValue, "java/lang/Object");

  JavaSetObject(hVector1, hValue);
  JavaSetObject(hVector2, hValue);
  JavaCallMethod(hVector1, "add");
  JavaCallMethod(hVector2, "add");
end TMyJavaTrans;

The actual datatype of a referenced Java object in BDL is slightly different from what is commonly considered to be the actual datatype of an object in the Java world. If an object is retrieved from a collection class, then the actual data type of the referenced object equals the formal data type of the method used to access the object.

transaction TMyJavaTrans
var
  hObj :number;
  hVector :number;
begin
  hVector := JavaLoadObject("java/util/Vector");
    … /* some methods filling the Vector */
  JavaSetNumber(hVector, 0);
  JavaCallMethod(hVector, "elementAt");
  hObj := JavaGetObject(hVector);
end TMyJavaTrans;

So in the BDL context, the actual data type of the hObj reference is java/lang/Object, because the formal return value of the elementAt method is java/lang/Object. The real actual data type of the Java object in the Java virtual machine is unknown.

You can pass a null object to a Java method call. The following function call can be used to define a null parameter:

JavaSetObject(hTestObj, JAVA_NULL_OBJECT);

親トピック: Advanced Usage
関連資料
JavaSetObject Function
JavaGetObject Function
JavaCastObject Function


Exception Handling of Java Method Calls

Each exception that is not handled by the invoked Java method itself is thrown to the BDL script where a native Java error is raised. The raised error contains the name of the exception class and the exception message. However, the raised error does not contain the stack trace of the exception.

The exception stack trace, which belongs to the native Java error, is written to the virtual user log file.

  JavaCallMethod()
  {
    handle       = 0x012fdde8
    Meth. name   = "doFakeScenario"
    return value = false
    Exception    = "java.lang.RuntimeException: something unexpected thrown in my java code
    at Test.anotherSubMethod(Test.java:40)
    at Test.aSubMethod(Test.java:35)
    at Test.doFakeScenario(Test.java:47)
"
  }

Developers often rely on output written to the command console when debugging Java applications. When doing a Try Script run, all command console output of the Java application is captured as RepMessage with severity informational. These messages can be viewed in the VU output console and the virtual user report file.

Advanced Exception Handling

Each exception that is not caught by the Java test driver is thrown to the BDL script, where an error under facility Native Java (1007) is raised. In most cases the error subcode is 0. To distinguish different Java exceptions in BDL, error subcodes can be assigned to specific exception messages. Use JavaRegisterException to assign an error subcode to a specific Java exception. These error subcodes can be helpful for other BDL functions, such as ErrorAdd, which can be used to change the severity of errors.

親トピック: Advanced Usage
関連概念
仮想ユーザー レポート ファイル
関連資料
JavaRegisterException Function
JavaUnregisterException Function
JavaUnregisterErrorNumber Function
ErrorAdd Function


Java Test Class

Within a Silk Performer test script, the Java test class enables you to implement the behavior of virtual users in Java. You can use all available Java classes to create user behavior that is as realistic as possible; you can also use a number of Silk Performer functions that can be accessed through an instance of the SilkPerformer class.

  • Java Test Class Overview
    Explains what is required to implement the Java test class. Also details use of some member methods that contain Java test code.
  • Members
    Explains that an instance of the SilkPerformer class enables access to each of the functions provided by the Silk Performer runtime system.
  • Constructor
    Explains that the constructor of the Java test class is required to assign a SilkPerformer context object to the previously defined member.
  • Example Test Method
    Explains that any number of member or static methods may be called within a Silk Performer test script.
親トピック: Java Framework


Java Test Class Overview

A Java test class template can be generated automatically by choosing New > Java Framework Scripts (.bdf/.java). A dialog box opens, requesting the name of the Java test class that is to be generated.

To enable use of Silk Performer functions, the implementation of the Java test class must contain the following:

  • Instance of the SilkPerformer class
  • Constructor to enable access to the Silk Performer runtime system

Additionally, there can be any number of member methods containing Java test code. An automatically generated Java test class will contain one member method, for example:

public void doFoo()

These elements are detailed below:

Required Package

To access several functions that are provided by the Silk Performer runtime system, you must import the SilkPerformer class. This class is provided in the silk.performer package. The javaUserFramework.zip file, located in the Classfiles subfolder of the Silk Performer home directory, is automatically included in the classpath.

Default classpath entries such as javaUserFramework.zip are defined in perfrun.xml in the Silk Performer home directory.

At the beginning of your Java script, import the SilkPerformer class using the following statement:

import silk.performer.SilkPerformer;

Class Definition

The Java test class is defined immediately following the import statement. If Test is chosen as the name of the Java test class, the class definition in the Java script will appear as follows:

public class Test
{
  ...
}
親トピック: Java Test Class


Members

As a member of the Java test class, an instance of the SilkPerformer class enables access to each of the functions provided by the Silk Performer runtime system. The member is initialized when the constructor of the Java test class is called.

private SilkPerformer SilkPerformer = null;
親トピック: Java Test Class


Constructor

The constructor of the Java test class is required to assign a SilkPerformer context object, which is an instance of the SilkPerformer class, to the previously defined member called SilkPerformer. The SilkPerformer context object is passed to the constructor through the constructor’s parameter. The constructor definition should resemble the following:

public Test(SilkPerformer perf)
{
  SilkPerformer = perf;
}
親トピック: Java Test Class


Example Test Method

Any number of member or static methods may be called within a Silk Performer test script. The methods may take any basic or complex parameters and have any return values. The only restriction is that arrays of basic and complex parameters are not supported.

As a member method example, here is the implementation of the doFoo() method:

public void doFoo() throws SilkPerformerException
{
  if (SilkPerformer != null)
    SilkPerformer.Print("Method \"Foo\" entered.");
  SilkPerformer.MeasureStart("Foo");
  SilkPerformer.MeasureStop("Foo");
}
注: Any method invoked on the SilkPerformer context object can throw a SilkPerformer exception, for example when the execution of the test is stopped. SilkPerformerException must not be caught by the test code. Exceptions must be thrown on the method caller, which is the Silk Performer runtime.
親トピック: Java Test Class


JVM Option Settings

The JavaSetOption(<option id>, <option string>) BDL function can be used to determine options such as Java version, the Java home directory, and the class path. This function and the allowed option identifiers are defined in the Java.bdh file.

It is recommended that you set Java options in the profile settings. When Java options are set in both profile settings and BDL the settings made in BDL take precedence.

注: When using the Eclipse plug-in, the Java settings defined in Eclipse have precedence over all other settings.

Option Identifiers

  • JAVA_VERSION - (must be defined) Determines the JVM version (1.1.x, 1.2.x, 1.3.x, or 1.4.x).
  • JAVA_HOME - (recommended) Determines the installation directory of the JVM that should be used for replay. Loading of the JVM is independent of the PATH environment, so it is possible to switch between JVMs without changing the system PATH environment.
  • JAVA_CLASSPATH - (recommended) Determines the class path for the JVM. The system class path is appended by default (-classpath).
  • JAVA_DLL - Allows you to specify an individual DLL file path for implementing the JVM that is to be loaded.
  • JAVA_VERBOSE - Enables the verbose option (-verbose) of the JVM. By default, this option is disabled.
  • JAVA_DISABLE_COMPILER - Disables the JIT (Just In Time compiler) of the JVM. By default the JIT is enabled.
  • JAVA_CMDLINE_OPTIONS - Enables you to specify any commandline options that are to be passed to the JVM.
  • JAVA_USE_SYSTEM_CLASSPATH - Determines that the system class path should be appended. By default it is appended.
  • JAVA_DESTROY_JVM_ON_SHUTDOWN - When not set (the default), the current thread is detached from the JVM upon shutdown, but the JVM is not destroyed. When the option is set, all Java threads are killed and the JVM is destroyed upon shutdown. Note that to do this, JVMDI must be enabled by setting -Xdebug -Xnoagent -Djava.compiler=NONE in the commandline options.
  • JAVA_SUPPRESS_EXCEPTIONS – When not set (the default), Java exceptions raise BDL errors. When set, Java exceptions are suppressed and must be checked manually using the JavaGetLastException() command

Examples

  • JavaSetOption(JAVA_VERSION, JAVA_V14); // JVM v1.4.x

    JavaSetOption(JAVA_HOME, "j2sdk1.4.0_01");

    JavaSetOption(JAVA_CLASSPATH, "c:/myApplication/classes;c:/myTools/tools.zip");

    JavaSetOption(JAVA_DISABLE_COMPILER, YES);

    JavaSetOption(JAVA_CMDLINE_OPTIONS, ENABLE_JVMDI);

親トピック: Java Framework


Java User Implementation (deprecated)

This topics lists deprecated technology that is outdated and has been replaced by newer technology.

The Java User methodology simplifies use of the Java Framework. The Java User class works as an additional layer between BDL and the Java application under test. It defines a JavaUserInit(), a JavaUserShutdown() function, and optionally, a JavaUserRun() or custom methods, all with Boolean return values.

The Init transaction in BDL must call the JavaUserInit() function, the End transaction must call the JavaUserShutdown() function. Any further BDL transactions may either call the JavaUserRun() function or one of the custom methods. A Silk Performer object, for enabling Java-to-runtime Communication, is automatically passed to the Java User class.

  • Public JavaUserImplementation(SilkPerformer perf) // Constructor
  • Public Boolean JavaUserInit() throws Exception
  • Public Boolean JavaUserRun() throws Exception // optional
  • Public Boolean anyMethodName throws Exception // optional
  • Public Boolean JavaUserShutdown() throws Exception
親トピック: Java Framework


TrueLog Explorer 21.0

TrueLog Explorer 21.0 へようこそ。

TrueLog Explorer では、テスト スクリプトをカスタマイズしたり、返されたテスト結果を徹底的に分析したりするためのフレームワークを提供することで、 Silk Performer のテスト作業をサポートします。

TrueLog Explorer では、数々のツールやレポートが用意されているため、スクリプトに自動コンテンツ検証を組み込んだり、静的セッション データの解析関数を挿入したり、TrueLog On Error 機能でエラーの根本原因を特定することが簡単にできます。

  • 入門
    TrueLog Explorer、TrueLog ファイル、テストの分析、サンプル アプリケーションについて、概要を説明します。
  • セッション処理のカスタマイズ
    記録 TrueLog に現れることがあるハードコードされたセッション データを解析する方法について説明します。 セッション処理のカスタマイズを行うと、テスト中に状態情報を保持できます。
  • 検証を追加する
    HTML ページ タイトル、HTML コンテンツ、HTML テーブル、および HTML ソース コードについての検証チェックを作成する方法を説明します。
  • ユーザー データのカスタマイズ
    このセクションでは、ユーザーにより入力されたデータをどのようにパラメータ化すれば現実世界におけるユーザーの活動を負荷テスト時により適切にエミュレートできるかを説明します。
  • データベース アプリケーションでの作業
    TrueLog Explorer のスクリプト カスタマイズ機能を共通データベース API に依存するアプリケーションのテストに適用する方法について説明します。
  • XML アプリケーションでの作業
    XML アプリケーションのテスト用に提供されているスクリプト カスタマイズ機能や TrueLog 分析機能について説明します。
  • SAPGUI アプリケーションでの作業
    SAPGUI ベースのアプリケーションに対して、TrueLog Explorer では、TrueLog の記録、TrueLog の再生、基本的な TrueLog 解析、データ解析、コンテンツ検証、およびユーザー入力データのカスタマイズが利用できます。
  • Oracle Forms アプリケーションでの作業
    スクリプトの試行の実行結果に基づいて Oracle Forms テスト スクリプトをカスタマイズする方法について説明します。
  • Citrix アプリケーションでの作業
    Citrix サーバーをホストとするアプリケーションのテストに対する TrueLog 記録、TrueLog 再生、および基本的な TrueLog 分析のほかに、TrueLog Explorer では、ユーザー入力データのカスタマイズも提供されています。
  • TCP/IP および UDP ベースのアプリケーションでの作業
    TrueLog On Error とテスト スクリプトの分析機能を TCP/IP および UDP プロトコル ベースのアプリケーションに適用する方法について説明します。
  • ターミナル エミュレーション アプリケーションでの作業
    スクリプトの試行の結果に基づいてターミナル エミュレーション テスト スクリプトをカスタマイズする方法について説明します。
  • AJAX 対応 Web アプリケーションでの作業
    このセクションでは、JSON データや XML データを "きれいに" 整形する方法と、AJAX 技術を使ったアプリケーションのテストに TrueLog Explorer のスクリプト カスタマイズ機能を適用する方法について説明します。
  • TrueLog Explorer をカスタマイズする
    このセクションでは、TrueLog Explorer のカスタマイズ、表示、および TrueLog 生成の各機能を、特定のニーズに適合させる方法について説明します。


入門

このセクションでは、TrueLog Explorer、TrueLog ファイル、テストの分析、サンプル アプリケーションについて、概要を説明します。

  • TrueLog Explorer の概要
    サポートされているアプリケーションの種類、組み込みの負荷テスト方法論など、TrueLog Explorer の概要を説明します。
  • TrueLog Explorer でできること
    TrueLog Explorer の機能について詳しく説明します。
  • UI のツアー
    テスト スクリプトのカスタマイズや検証の機能など、TrueLog Explorer のインターフェイスの主要要素について説明します。
  • TrueLog Explorer の使用方法のベスト プラクティス
    TrueLog Explorer を使ってテスト実行を調査したりテスト スクリプトをカスタマイズする際の、効果的な典型的ワークフローの概要を説明します。
  • TrueLog について
    履歴ファイルの概要を説明します。このファイルには、データ/ページ リクエストやサーバー レスポンスについてのきわめて詳細な情報が、テスト中に記録されます。
  • テストの分析
    TrueLog Explorer を使ってスクリプトの試行の結果を分析する方法を説明します。
  • Silk Performer での作業
    TrueLog Explorer で提供される Silk Performer 固有の機能について説明します。
  • Silk Test 用 TrueLog Explorer
    TrueLog Explorer に付属の Silk Test のバージョンについて説明します。
  • パースペクティブ
    TrueLog Explorer の 2 つの表示パースペクティブと、それぞれのパースペクティブがいつ使われるかについて説明します。
  • サンプル アプリケーション
    Silk Performer に付属しているサンプルの Web アプリケーションおよびデータベース アプリケーションについて説明します。
親トピック: TrueLog Explorer 21.0


TrueLog Explorer の概要

TrueLog Explorer では、テスト スクリプトをカスタマイズしたり、返されたテスト結果を徹底的に分析したりするためのフレームワークを提供することで、 Silk Performer のテスト作業をサポートします。

TrueLog Explorer では、数々のツールやレポートが用意されているため、スクリプトに自動コンテンツ検証を組み込んだり、静的セッション データの解析関数を挿入したり、TrueLog On Error 機能でエラーの根本原因を特定することが簡単にできます。

組み込みの負荷テスト方法論

TrueLog Explorer は負荷テスト スクリプトのカスタマイズやエラー分析のベスト プラクティスにもとづいて設計されており、セッション処理のカスタマイズやコンテンツ検証から、ユーザー データのカスタマイズ、最終的にエラー分析へと進めるようになっています。 TrueLog Explorer のワークフロー バーを使ってこの方法論に沿って一歩ずつ進むことで、セッション処理や検証チェックや入力データのパラメータ化などによりテストを強化することができます。 最終的には、ワークフロー バーから TrueLog On Error 分析を実行することができます。

注: このヘルプ システムに含まれる例のほとんどは、特に Web アプリケーションに関するものです。 しかし、そこで説明している概念の多くは、データベース アプリケーションや、Citrix アプリケーション、Oracle Forms アプリケーション、SAPGUI アプリケーション、AJAX 対応の Web アプリケーション、ターミナル エミュレーション画面アプリケーション、XML アプリケーションにも適用できます。 また、その概念の多くは、POP3 や SMTP やカスタム プロトコルなど、UDP や TCP/IP をベースとしたアプリケーションのテストにも適用できます。 その概念を適用する際、TrueLog 分析は利用可能ですが、スクリプトのカスタマイズはできません。
親トピック: 入門


TrueLog Explorer でできること

TrueLog Explorer を使って次の作業を行うことができます。
  • 再生エラーの迅速かつ容易な検索- TrueLog の比較モードを使うと、記録セッションと再生セッションの違いを自動的に検出して、アプリケーションが意図したとおりに機能しているかを判断することができます。 記録セッションも再生セッションも視覚的に表示されるため、両者を並べてその違いを比較したり、ユーザーに対して表示されたのと同じエラーを見ることができます。
  • セッション処理のカスタマイズ– TrueLog Explorer の解析関数を使うと、スクリプト内の静的セッション ID を動的セッション ID に置き換え、それによって、成功した負荷テスト実行の状態情報を保守することができます。 これらの関数は、Web アプリケーション、データベース アプリケーション、XML アプリケーションで有効です。
    注: Silk Performer の記録技術は、記録されたテスト実行に固有のセッション データを使用するスクリプトを自動生成します。 スクリプト自体には静的セッション情報を含みません。 そのため、ほとんどのアプリケーションでは、通常、セッション処理をカスタマイズする必要がありません。
  • 入力データのパラメータ化- ユーザー データのカスタマイズでは、記録された静的ユーザー入力データを、トランザクションごとに変化するパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。 このようなデータ駆動型テストを実行するために手動でスクリプトを作成する必要はありません。 この機能は、Web アプリケーション、データベース アプリケーション、XML アプリケーション、Citrix アプリケーション、SAPGUI アプリケーション、ターミナル エミュレーション アプリケーション、Oracle Forms アプリケーションで有効です。
  • テスト スクリプトへの検証の追加- 検証の追加 ツールを使うと、テスト中にダウンロードされたデータの内容を確認することができ、サーバーの送信したコンテンツをクライアントが受信していることを検証できます。 検証は、システム開発後も、稼働中のパフォーマンス管理に役立ちます。 この機能は、Web アプリケーション、データベース アプリケーション、XML アプリケーション、SAPGUI アプリケーション、Citrix アプリケーション、ターミナル エミュレーション アプリケーション、Oracle Forms アプリケーションで有効です。 TrueLog Explorer は、Citrix サーバーをホストとするアプリケーションのビットマップとウィンドウの検証をサポートしています。
  • TrueLog On Error の分析- TrueLog On Error ファイルは、テスト中に発生したすべてのエラーのエラー履歴を完全に記録しているため、根本原因の分析に非常に役立ちます。 TrueLog を用いると、現実のコンテンツを詳しく調べてエラー状況を分析することができます。 TrueLog は、エラーが発生したセッションのコンテキストにおけるエラーを表示するため、テスト スクリプトと密接に統合されています。
  • データベース操作の視覚化とカスタマイズ- SQL クエリなどのデータベース操作のカスタマイズは、HTML 操作のカスタマイズと同様に行うことができます。 結果セット データに検証を適用することも可能です。
  • XML の視覚化とカスタマイズ– TrueLog Explorer には直感的な XML ビューアが含まれていて、SOAP のリクエストやレスポンスといった XML ベースのデータをすべて詳しく調査することができます。 XML データのカスタマイズや視覚的検証を行うこともできます。
  • Citrix の視覚化とカスタマイズ- Citrix 対応アプリケーションでは、マウスの移動、マウスのクリック、キーボード入力、およびウィンドウの作成/破棄といった画面上のイベントを、記録、再生、およびカスタマイズすることができます。 検証用に画面同期関数も提供されています。
  • ターミナル エミュレーションの視覚化とカスタマイズ- VT100+、IBM 3270、および IBM 5250 というターミナル エミュレーション プロトコル用のテスト スクリプトを、記録、再生、およびカスタマイズすることができます。 テスト スクリプトをカスタマイズして、値解析や、ステータス値解析、値検証、ステータス値検証を含めることができます。
  • TCP/IP および UDP テスト結果の分析- POP3、SMTP、カスタム プロトコルなどの UDP や TCP/IP ベースのプロトコルを使用するアプリケーションについて、記録 TrueLog と再生 TrueLog を比較し、セッションに依存する情報を特定したりエラーを分析することができます。
  • GUI レベルのテスト結果の分析- リモート デスクトップ セッションにおける GUI レベル (ファット クライアント) アプリケーションのテストの記録 TrueLog と再生 TrueLog。
親トピック: 入門


UI のツアー

TrueLog Explorer のインターフェイスについて紹介します。このインターフェイスをよく理解していると、テスト スクリプトのカスタマイズや検証の作業を簡単に管理、実行できます。

以下では、TrueLog Explorer インターフェイスの主要セクションを取り上げて説明します。

メイン メニュー

メイン メニューから、TrueLog Explorer の結果分析機能やスクリプト カスタマイズ機能にアクセスすることができます。
注: 開いている TrueLog のプロトコルのタイプによって、メニュー項目の一部が使用できないことがあります。

ツールバー

ツールバーから、よく使用する機能にアクセスすることができます。
注: 開いている TrueLog のプロトコルのタイプによって、ツールバーの一部のボタンが使用できないことがあります。

ワークフロー バー

ワークフロー バーは、テスト実行結果の分析やスクリプトのカスタマイズに関する主要な操作を行いやすくするためのものです。ワークフロー バーは、TrueLog Explorer に組み込まれている負荷テスト方法論を元に、5 つの主要な作業をサポートしています。

  • テスト実行の分析
  • セッション処理のカスタマイズ
  • ユーザー データのカスタマイズ
  • 検証の追加
  • TrueLog On Error の分析

API ノード ツリー メニュー

インターフェイスの左側にあるメニュー ツリーでは、TrueLog API ノードを展開したり折りたたんだりすることができます。ノードをクリックすると、そのコンテンツが [コンテンツ] ペインに、履歴の詳細が 情報 ペインに表示されます。

[コンテンツ] ペイン

TrueLog Explorer は、送受信したすべてのデータに対して複数のビューを提供します。テスト対象のアプリケーションの種類 (Web、XML、データベース、TCP/IP、UDP、Oracle Forms、SAPGUI、Citrix など) によって、[コンテンツ] ペインの表示オプションは変化します。
レスポンス
(Web ベースのアプリケーションの場合のみ)

レスポンス ページには、サーバーからのレスポンスが視覚的にレンダリングして表示されます。HTML、XML、JSON を視覚的にレンダリングできます。他のすべてのコンテンツは、レンダリングされずに生データの形式で表示されます。このような場合、タブには レスポンス (生データ) が表示されます。レンダリング モードを変更するには、レスポンス タブを右クリックして、モードを選択します。

SQL コマンド
(データベース アプリケーションの場合のみ)

SQL コマンド ページには、入力や結果データなど、選択したデータベース呼び出しに関連する SQL 文が表示されます。他のプロトコルの レスポンス ページと同じです。

差分
(Web ベースのアプリケーションの場合のみ)

差分 ページには、選択したノード間の 受信本文 の差分が一覧表示されます。このページは、サーバー レスポンス内の動的情報を検索するのに役立ちます。セッション情報を探すには、まずここを検索します。

注: 差分 ページが利用可能になるのは 差分モードのときのみです。
リクエスト
(Web ベースのアプリケーションの場合のみ)

リクエスト ページには、出力データ (アプリケーションからサーバーに送られたデータ) がレンダリングされて表示されます。XML の場合は、XML のメニュー ツリー形式で表示されます。HTML の場合、ポストされたデータ (HTTP-POST コマンドの POST データまたは HTTP-GET コマンドのクエリ文字列) は、そのデータに対応する HTML フォームを含む HTML ページ内に表示されます。コンテキストを持つ HTML フォーム データの送信 (WebPageSubmit で送信された HTML フォーム データ。WebPageForm 経由の送信は含まない) だけが リクエスト ページに表示されます。要素は赤で、属性は青緑で表示されます。

レンダリング ビューのコンテンツを検索するには、レンダリング ビューで右クリックして 検索 を選択します。グローバル検索オプションでは、レンダリング ビューを検索できません。

注: レスポンス ページと リクエスト ページは、異なる API ノードのコンテンツを同時に表示することがあります。レスポンス ページにその前の Web ページで送信された HTML-FORM の結果が表示されている場合、リクエスト ページには送信された値を含む Web ページが表示されます。これらの値は、マウスを置くと表示されます。
フォーム コントロール
(Oracle Forms の場合のみ)

フォーム コントロール ページには、Oracle Forms コントロールのプロパティ (状態と内容) が表示されます。比較モードの場合は、このページで記録と再生のコントロールの状態を比較できます。

画面
(Citrix の場合のみ)

画面 ページには、レンダリングされたアプリケーション GUI、ウィンドウ同期関数、ユーザー入力値が表示されます。

ウィンドウ
(Citrix の場合のみ)

現在の関数のウィンドウ パラメータによって参照されているウィンドウが表示されます。

開始リクエスト
(SAPGUI の場合のみ)

開始リクエスト ページには、サーバーへの各ラウンドトリップの前の SAPGUI アプリケーションの状態が表示されます。

終了リクエスト
(SAPGUI の場合のみ)

終了リクエスト ページには、サーバーへの各ラウンドトリップの後の SAPGUI アプリケーションの状態が表示されます。

ホスト画面
(ターミナル エミュレーション アプリケーションの場合のみ)

ホスト画面 ページには、ターミナル ビュー内で選択した API ノードのサーバーからのレスポンスを視覚的にレンダリングしたものが表示されます。

情報ペイン

情報 ペインでは、BDL スクリプト、HTTP ヘッダー、タイミング統計など、テスト スクリプトおよびテスト実行に関するデータが表示されます。テスト対象のアプリケーションの種類 (Web、XML、データベース、Oracle Forms、SAPGUI、Citrix、TCP/IP、UDP など) によって、情報 ペインの表示内容は変化します。

情報

情報 ページには、開いている TrueLog ファイルと選択した API ノードについての一般情報が表示されます。

BDL

BDL ページには、開いている TrueLog に対応する BDL スクリプトが表示されます。この BDL スクリプトは、選択されている API ノードの行まで自動的に移動して表示されます。

参照

このページは、HTML データを返すノードの場合にのみ有効になります。参照 ページには、選択されている HTML の簡単な DOM (Document Object Model) が表示されます。 含まれる HTML 要素は、ハイパーリンク、フレーム、埋め込みドキュメント、フォーム です。

フォーム データ

Oracle Forms 画面に含まれる、あるいは Web サーバーに送信される、カスタマイズ可能なすべてのコントロールを表示したり操作するのに便利なツールです。

送信ヘッダー

送信ヘッダー ページには、アプリケーション (再生 TrueLog の場合は Silk Performer、記録 TrueLog の場合はブラウザ) がサーバーに送信する HTTP ヘッダーがそのまま表示されます。

送信本文

HTTP の場合、このページには、アプリケーションからサーバーへ HTTP-POST コマンドで送られるデータが表示されます。TCP/IP と UDP の場合は、アプリケーションからサーバーへ WebTcpipSend 関数で送られるデータが表示されます。Citrix の場合は、データ文字列が表示されます。Oracle Forms のログ レベルが 通常 および デバッグ の場合 (再生プロファイル設定で設定可能)、送信本文 ページには、現在のアクション (ボタンをクリックするなど) で送信される Oracle Forms メッセージが表示されます。

データの表示方法は、16 進数表示とテキスト表示を切り替えることができます (設定 > オプション > 表示 > データ形式)。デフォルトでは、TrueLog Explorer によってそのデータに最適な表示形式が選択されます (画像の場合はバイナリ、HTML ドキュメントの場合はテキストなど)。

受信ヘッダー

受信ヘッダー ページには、サーバーがアプリケーションに送信する HTTP ヘッダーがそのまま表示されます。

受信本文

受信本文 ページには、アプリケーションがサーバーから受信したデータが表示されます。このデータは、サーバーから受信したそのままの形式で表示されます (HTML のレンダリングや XML のメニュー ツリー表示は行われません)。

統計
プロトコル レベルの Web アプリケーションの場合には、統計 ページには Web ページのタイミング統計が表示されます。ここには、Web ページ コンポーネントや通信要素ごとのタイミング情報が含まれます。コンポーネントごとの内訳も含めて、正確なレスポンス時間がグラフで表示されます。これにより、エラーやページ ダウンロードの遅延の根本原因を突き止めることができます。統計 ページには、ページ コンポーネントごとに次のデータが表示されます。
  • DNS 検索時間：渡されたドメイン/ホスト名から IP アドレスを解決するのに要した時間
  • 接続時間：擬似ユーザーがサーバーに接続するのに要した時間
  • SSL ハンドシェイク時間：サーバーとの間で暗号鍵を交換するのに要した時間
  • データ送信時間：クライアント リクエストの最初のバイトからクライアント リクエストの最後のバイトまでの時間
  • サーバー ビジー時間：クライアント リクエストの最後のバイトからサーバー レスポンスの最初のバイトまでの時間
  • レスポンス受信時間：サーバー レスポンスの最初のバイトからサーバー レスポンスの最後のバイトまでの時間 (ドキュメントはすべて含むが埋め込みオブジェクトは含まない)
  • キャッシュ統計値
Web ブラウザ駆動 - AJAX アプリケーションの場合には、統計 ページには Web ページのタイミング統計が表示されます。ここには、Web ページ コンポーネントや通信要素ごとのタイミング情報が含まれます。コンポーネントごとの内訳も含めて、正確なレスポンス時間がグラフで表示されます。これにより、エラーやページ ダウンロードの遅延の根本原因を突き止めることができます。統計 ページには、ページ コンポーネントごとに次のデータが表示されます。
  • DNS 検索時間：渡されたドメイン/ホスト名から IP アドレスを解決するのに要した時間
  • 接続時間：擬似ユーザーがサーバーに接続するのに要した時間
  • ネット ラウンドトリップ：クライアント リクエストの最初のバイトからサーバー レスポンスの最後のバイトまでの時間 (ドキュメントはすべて含むが埋め込みオブジェクトは含まない)
  • キャッシュ統計値
コントロール

コントロール ページは、SAPGUI ウィンドウに含まれるカスタマイズ可能なコントロール値を表示したり操作するのに便利なツールです。

ホスト画面情報

ホスト画面情報 ページは、ホスト画面それぞれについて、ステータス (名前/値のペア) などの追加情報を記録します。フィールド名を選択すると、上述の ホスト画面 ウィンドウで対応するフィールドが選択されます。一般的な画面情報(カーソル位置、画面の寸法など) も表示されます。

親トピック: 入門
関連概念
TrueLog Explorer による視覚的分析


TrueLog Explorer の使用方法のベスト プラクティス

TrueLog Explorer の使用方法のベスト プラクティスは、以下のステップから構成されます。

多くの場合、この一連のステップを 1 度通して実行するだけでは済みません。これらのタスクは繰り返して行うものです。たとえば、カスタマイズをし、結果を確認し、さらにカスタマイズをして、そのカスタマイズの結果を確認するなどです。

注: タイマの挿入やその他のスクリプト変更機能を有効にするには、TrueLog が最新でなければ (同期が取れていなければ) なりません。TrueLog が最新でない場合には、スクリプトの試行を行って同期化してください。
テストの分析
このプロセスでは、以前のテスト実行結果の調査、仮想ユーザー要約レポートの確認、再生エラーの場所の特定、再生セッションと元の記録セッションとの比較を行います。このプロセスで、カスタマイズしたスクリプトのエラー チェックを行うことができます。
セッション処理のカスタマイズ
古いセッション データが負荷テスト スクリプトに埋め込まれたまま、後続のテスト実行で再実行すると、セッション処理エラーが発生します。 TrueLog Explorer では、このような静的データを特定し、動的データに置き換えて、テスト実行を成功させるための処理を自動化します。手作業でコードを編集する必要はありません。
注: Silk Performer のスクリプト記録技術では、静的セッション情報を含まない、コンテキストを持つスクリプトが生成されるため、セッション処理のカスタマイズはたいてい必要ありません。
ユーザー データのカスタマイズ
負荷テスト中に現実の状況をより正確にシミュレートするには、シミュレートするトランザクションごとに、仮想ユーザーがサーバーに対して行うアクションを変更する必要があります。ユーザー入力データをカスタマイズすることで、フォーム フィールドからのデータ入力といったユーザー タスクをテスト スクリプトでシミュレートする際にデータを取り出すデータ ファイル (名前/アドレス、番号、製品のリストなど) を指定できます。ランダム関数を使用して、ランダムに生成したデータを入力フィールドに挿入することもできます。
ユーザー データのカスタマイズ
負荷テスト中に現実の状況をより正確にシミュレートするには、シミュレートするトランザクションごとに、仮想ユーザーがサーバーに対して行うアクションを変更する必要があります。ユーザー入力データをカスタマイズすることで、フォーム フィールドからのデータ入力といったユーザー タスクをテスト スクリプトでシミュレートする際にデータを取り出すデータ ファイル (名前/アドレス、番号、製品のリストなど) を指定できます。ランダム関数を使用して、ランダムに生成したデータを入力フィールドに挿入することもできます。
検証関数の追加
セッション情報や仮想ユーザーのデータ入力をテスト スクリプトでどう処理するかのカスタマイズが済んだら、関数をスクリプトに組み込んで、テスト対象のアプリケーションが正確なデータを返しているかどうかを自動的に確認することができます。このようなコンテンツ検証では、現実の状況でグラフィックやデータなどの要素をクライアントが実際に受信しているかどうかを確認します。要素を受信していない場合には、検証結果としてエラーが出力されます。
Silk Performer によるカスタマイズの拡張
TrueLog Explorer ではほとんどの BDL スクリプトが自動的に作成されますが、Silk Performer を使って手作業でスクリプトのコードを書くことで、より複雑な検証やカスタマイズを追加することができます。
TrueLog On Error の分析
テストを実行した後、TrueLog On Error ファイルには、テスト中にエラーとなったすべてのトランザクションの完全な履歴が記録されています。TrueLog On Error を使って実際のコンテンツを詳しく調べ、システムやアプリケーションの障害の根本原因を分析することができます。
親トピック: 入門


TrueLog について

履歴ファイルの概要を説明します。このファイルには、データ/ページ リクエストやサーバー レスポンスについてのきわめて詳細な情報が、テスト中に記録されます。

  • TrueLog の概要
    履歴ファイルの概要を説明します。このファイルには、データ/ページ リクエストやサーバー レスポンスについてのきわめて詳細な情報が、テスト中に記録されます。
  • 負荷時の視覚的検証
    TrueLog が負荷時の視覚的検証をどのように行うかを説明します。
  • 根本原因分析のためのリクエスト/レスポンス ログ
    エラーの根本原因を特定し、問題を解決するのに役立つログ情報について説明します。
  • TrueLog On Error ファイル
    TrueLog On Error を記録することで TrueLog のサイズを削減できる理由を説明します。
  • TrueLog をステップ スルーする
    記録された TrueLog ノードを指定した間隔で移動し、記録された TrueLog データの中を進みます。
  • プロトコル ベースの TrueLog タイプを指定する
    TrueLog Explorer で利用できる機能は、アクティブな TrueLog のプロトコルに応じて変化します。 プロトコルのタイプを変更しなければならない可能性があります (特に Oracle Forms を使っている場合)。
親トピック: 入門


TrueLog の概要

Silk Performer は、セッションとテスト スクリプトを関連付け、クライアントとサーバーの間で送信されるすべてのデータを記録するため、唯一、再生結果をスクリプトのカスタマイズや検証に取り入れることが可能です。

この TrueLog 技術 は、エラーの再現や根本原因の分析において大きな利点となります。 TrueLog は履歴ファイルであり、このファイルには、データおよびページのリクエストやサーバー レスポンスについてのきわめて詳細な情報が、テスト中に記録されます。 Web テストの場合、この詳細情報にはページの完全なコンテンツが含まれます。 このような情報は、システム障害の原因を特定する際に非常に有益です。

TrueLog を使うと、クライアント/サーバー アプリケーションや Web アプリケーションでエラー状況が発生したときに記録した実際のコンテンツを、詳しく調べることができます。 HTML アプリケーションの場合、TrueLog Explorer では、セッション コンテキストを含め、仮想ユーザーがテスト時に目にするものと同じ、レンダリングされた直感的な HTML インターフェイスを通じて、TrueLog ファイルを分析したり操作することができます。

TrueLog はセッションやテスト スクリプトと密接に結合しているため、リアルタイムでのスクリプト カスタマイズが可能になります。 スクリプトをカスタマイズした後、スクリプトの試験的実行によってすぐにその効果を確認できます。つまり [スクリプトの試行] を使って TrueLog を検査し、カスタマイズが成功したかどうかを判断することができます。 カスタマイズがうまく動かない場合には、TrueLog で、エラーの原因となったセッションでのシステム リクエスト/レスポンスを見ることができます。 このプロセスは、カスタマイズした部分がすべて意図したとおりに動作するまで繰り返すことができます。

TrueLog ファイルと TrueLog On Error ファイルのファイル拡張子は .xlg です。 XLZ ファイルは、ZIP 形式で圧縮された TrueLog ファイルであり、TrueLog Explorer 内では解凍された TrueLog ファイルとして扱われます。 TrueLog を ZIP 圧縮することでダウンロード時間を短縮できます。 Silk Performer は ZIP 圧縮された TrueLog を使用しません。

親トピック: TrueLog について


負荷時の視覚的検証

Web アプリケーションが HTTP エラー コードを使ってエラー情報を送信するのは、一般的ではありません。 通常は、HTML コンテンツにエラー情報を含めて送信します。 このような場合はたいてい、スクリプトがページ上のリンクを呼び出そうとして、ページに元のコンテンツではなくエラー メッセージが含まれていたときに初めて、エラーが検出されます。 このとき一般に、「リンクが見つかりません」というエラーが出力されます。 エラーの発生原因を明らかにし、デバッグ環境でのエラーの再現方法を決定するには、このメッセージではたいてい不十分です。 このような見つけにくいエラーの原因を突き止めるには、負荷がかかったときのエラー履歴を記録し、エラーが発生する前の仮想ユーザーとサーバーのアクションを割り出すしかありません。

TrueLog はこの情報を提供します。シミュレート対象の仮想ユーザーが数千に上り、長い期間の中でまれにしかエラーが発生しない場合でも、それは同じです。

TrueLog が提供する負荷時の視覚的検証によって、アプリケーションの負荷が高いときに一部のユーザーにしか通常は発生しない、見つけにくいアプリケーション レベルのエラーを明らかにすることができます。 ほとんどのアプリケーションでは、アプリケーションが配置された後でしかこの種の負荷がかかることはありません。 Web アプリケーションの HTTP 以外の典型的なエラーには、Web ページのテキストの誤りや値の計算結果の誤り、サーブレット エラー や サーバーがビジー状態です といったアプリケーション関連のメッセージなどがあります。

親トピック: TrueLog について


根本原因分析のためのリクエスト/レスポンス ログ

負荷時の視覚的検証だけでは、アプリケーション レベルのエラーの根本原因まで突き止められないため、あまり価値はありません。 このため、TrueLog では、エラー発生前のものも含め、関連するユーザー操作とサーバー レスポンスをすべて記録しています。

返された Web ページに特定のリンクが含まれていないため リンクが見つかりません というエラーが表示された場合に、仮想ユーザーに対してアプリケーション レベルのエラーが発生する可能性があります。Web サーバーが完全な Web ページを返せなかったのかもしれませんし、アプリケーション サーバーがページの動的コンテンツをタイミングよく渡せなかったのかもしれません。TrueLog Explorer を使用して、このようなエラーの発生前に記録された TrueLog 履歴を分析すると、エラーの原因となったクリック パスを視覚的に調べることができます。エラーの根本原因を特定して根本的な修正を行う上で、この TrueLog 履歴は非常に有益な情報となります。

次の図は、エラーの原因となったトランザクションのクリック パスを示す視覚的ログです。この TrueLog は、Web サーバーから返されたエラー メッセージが原因でタイトル検証エラーが生じたことを表しています。

TrueLog On Error の例

親トピック: TrueLog について


TrueLog On Error ファイル

TrueLog ファイルはサイズが大きくなる可能性があるため、負荷テストでエラーが発生したときにのみ TrueLog を生成するよう、Silk Performer を構成することができます。 システムが正しく動いている間は、何も記録されません。 このように対象を限定した TrueLog の生成は TrueLog On Error と呼ばれ、生成される TrueLog ファイルはエラー状況に的を絞った小さいものになります。

テスト実行中にエラーが検出された場合、TrueLog On Error ファイルを見ることでそのエラーの原因が明らかになります。 テスト実行後にワークフロー バーで TrueLog On Error の分析 をクリックし、該当する TrueLog ファイルにアクセスして分析してください。

親トピック: TrueLog について


TrueLog をステップ スルーする

TrueLog のステップ スルー ダイアログ ボックスを使って、記録された TrueLog データを指定した間隔で進むことができます。

  1. TrueLog メニュー ツリーで TrueLog を選択します。 TrueLog の内容が レスポンス ページと 情報 ページに表示されます。
  2. 編集 > TrueLog のステップ スルー を選択します。 代替方法：ツールバーの TrueLog のステップ スルー をクリックします。 TrueLog のステップ スルー ダイアログ ボックスが開きます。
  3. TrueLog の記録されたデータ ノードの中を進みたい間隔を指定します。
  4. 次を検索 と 前を検索 をクリックして、指定した間隔でノード間を移動します。
親トピック: TrueLog について


プロトコル ベースの TrueLog タイプを指定する

TrueLog Explorer で利用できる機能は、開いている TrueLog のプロトコルに応じて変化します。 たとえば、フォーム データ タブが有効なのは Web TrueLog が開いているときだけ、TrueLog のステップ スルー ダイアログ ボックスの ラウンドトリップ オプションが有効なのは SAPGUI TrueLog が開いているときだけ、TrueLog のステップ スルー ダイアログ ボックスの 安定な画面 オプションが有効なのはターミナル エミュレーション TrueLog が開いているときだけです。

  1. 編集 > TrueLog のタイプ を選択します。
  2. TrueLog Explorer に取り込みたい機能セットを選択します。 デフォルトのプロトコルは Web です。
    注: Oracle Forms は混合型のプロトコルで、多くの場合、スクリプト内に Web 呼び出しを含んでいます。 Web ベース プロトコルの機能セットを選択し、Oracle Forms スクリプトに含まれる HTML に対して、セッション処理をカスタマイズしたり、HTML の値を解析したり、検索を実行したりすることもできます。
親トピック: TrueLog について


テストの分析

Silk Performer Recorder を使って BDL 形式のテスト スクリプトを記録し保存したら、スクリプトの試行を実行してスクリプトをテストする必要があります。 スクリプトの試行は、実際の負荷テストではなく、スクリプトのデバッグが必要かどうかを確認するための試験的なテスト実行です。 スクリプトをカスタマイズするたびにスクリプトの試行を実施することをお勧めします。 スクリプトの試行 ボタンでスクリプトの試行を開始すると、自動的に TrueLog Explorer が開いて、最も新しいテスト実行の TrueLog が表示されます。

TrueLog Explorer によるテストの分析には、次の 3 つのタスクが含まれます。
  • 仮想ユーザー要約レポートの表示
  • エラーの検索
  • 再生テスト実行と記録テスト実行の比較
  • 視覚的分析
    テスト対象のアプリケーションが表示する Web コンテンツの TrueLog Explorer による視覚的レンダリングについて説明します。
  • TrueLog を開く
    TrueLog または TrueLog On Error を開いて、テスト実行の分析やテスト スクリプトのカスタマイズを行います。
  • テスト実行を分析する
    テスト実行の分析では、要約レポートの表示、エラーの検索、再生/記録テスト実行の比較などを行います。
  • 仮想ユーザー要約レポート
    スクリプトの試行に関する基本情報やタイミング平均を要約した仮想ユーザー要約レポートについて説明します。
  • エラーを検索する
    スクリプトの試行の後、エラーとなったリクエストを調査し、必要なカスタマイズを行います。
  • タイマ関数を挿入する
    タイマを使って、トランザクションの実行から次のトランザクションの実行の間の時間を測定できます。
  • パフォーマンス分析 (HTTP)
    負荷のない状態で Web (HTTP) アプリケーションのパフォーマンスを分析する方法を説明します。
  • パフォーマンス分析 (AJAX)
    負荷のない状態で Web (AJAX) アプリケーションのパフォーマンスを分析する方法を説明します。
  • 概要ページを表示する
    テスト実行が正確であることを検証した後、概要 ページを開いてパフォーマンスの詳細を分析します。
  • 再生 TrueLog と記録 TrueLog
    再生 TrueLog とアプリケーションの記録中に生成された TrueLog とを並べて比較し、テスト スクリプトを検証する方法を説明します。
  • TrueLog On Error
    エラー状況が発生する前のトランザクションを分析する方法を説明します。 TrueLog On Error は、標準の TrueLog ほどメモリや処理量を必要としません。
  • TrueLog を閉じる
    TrueLog の分析が終わったら、TrueLog を閉じてメニュー ツリーから消すことができます。
親トピック: 入門


視覚的分析

TrueLog Explorer は、テスト対象のアプリケーションが表示する Web コンテンツを視覚的にレンダリングして、仮想ユーザーがテスト中に見ているものを正確に示すことができます。

SQL コマンドや、Oracle Forms コントロール、TCP/IP 操作、UDP 操作は、Web コンテンツのような高度なインターフェイスを持ちませんが、TrueLog Explorer の比較モードを使うことで、データベース、Oracle Forms、Citrix、TCP/IP、UDP の記録 TrueLog を、データベース、Oracle Forms、Citrix、TCP/IP、UDP の 再生 TrueLog と比較することができます。

親トピック: テストの分析


TrueLog を開く

  1. ファイル > TrueLog の追加 または ファイル > TrueLog On Error ファイルの追加 を選択します。 ファイルを開く ダイアログ ボックスが開き、指定したファイルの種類が ファイルの種類 リスト ボックスで選択されます。
  2. 該当するテストのディレクトリに移動し、調査対象のファイルを選択します。
  3. 省略可能: 比較ビューで開く チェック ボックスをオンにすると、ファイルは比較ビューで開きます。
  4. OK をクリックします。
注: 複数の TrueLog を TrueLog Explorer で同時に開くこともできます。
親トピック: テストの分析


テスト実行を分析する

  1. 分析または変更したい TrueLog を開きます。
  2. ワークフロー バーの テストの分析 をクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが開きます。
  3. 以下のいずれかのオプションを選択します。
    • 仮想ユーザー要約レポートの表示
    • エラーの検索
    • テスト実行の比較
親トピック: テストの分析


仮想ユーザー要約レポート

スクリプトの試行に関する基本情報やタイミング平均を要約した仮想ユーザー要約レポートについて説明します。

  • 仮想ユーザー要約レポートの概要
    仮想ユーザー要約レポートは、個々のスクリプト試行について要約したレポートで、基本情報とタイミング平均を含みます。
  • 仮想ユーザー要約レポートを表示する
    仮想ユーザー要約レポートを作成して、個々のスクリプト試行の要約情報を分析します。
親トピック: テストの分析


仮想ユーザー要約レポートの概要

仮想ユーザー要約レポートは、個々のスクリプト試行について要約したレポートで、基本情報とタイミング平均を含みます。 それぞれのレポートは 1 人の仮想ユーザーについて作成されます。 データは表形式で表示されます。
注: 仮想ユーザー要約レポートの処理にはかなりの時間がかかるので、デフォルトでは生成されない設定になっています。

アニメーションを指定したスクリプトの試行が終了したときや、メニュー ツリーで TrueLog ファイルのルート ノードをクリックしたときに、自動的に仮想ユーザーレポートが表示されるようにするには、 設定 > オプション > ワークスペース > レポート で 仮想ユーザー レポートを表示する チェック ボックスをオンにしてください。

仮想ユーザー要約レポートには、以下に関する詳細情報が含まれています。
  • 仮想ユーザー
  • 検出されたエラー
  • テスト スクリプトに定義されているトランザクションごとに追跡したレスポンス時間情報
  • ダウンロードされた Web ページごとのページ タイマの測定値
  • テスト スクリプトで宣言されている各 Web フォームに関連する測定値。POST、GET、および HEAD の各メソッドを使用したフォーム送信に対するレスポンス時間測定値とスループットを含みます。
  • スクリプトで使用された個別のタイマおよびカウンタ (Measure 関数)
  • IIOP、Web フォーム、TUXEDO、SAP などに関連する情報
親トピック: 仮想ユーザー要約レポート


仮想ユーザー要約レポートを表示する

  1. 分析または変更したい TrueLog を開きます。
  2. ワークフロー バーの テストの分析 をクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが開きます。
  3. 仮想ユーザー要約レポートの表示 リンクをクリックします。
親トピック: 仮想ユーザー要約レポート


エラーを検索する

TrueLog Explorer では、スクリプトの試行の後でエラーをすばやく検索できます。 そして、エラーとなったリクエストを調査して、必要なカスタマイズを行うことができます。

注: メニュー ツリーでは、再生エラーを含む API ノードは赤い「X」印が付いて表示されます。
  1. 分析または変更したい TrueLog を開きます。
  2. ワークフロー バーの テストの分析 をクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが開きます。
  3. エラーの検索 リンクをクリックします。 TrueLog のステップ スルー ダイアログ ボックスが、エラー オプションが選択された状態で表示されます。
  4. 一度に 1 つのエラーを検索しながら TrueLog 結果ファイル内を移動するには、次を検索 をクリックします。 別の方法で TrueLog 内を移動して、スクリプトが意図どおりに動作したかを視覚的に検証することもできます (ページ全体、HTML ドキュメント、フォーム送信、または API 呼び出し)。
親トピック: テストの分析


タイマ関数を挿入する

新しいタイマ セッションを挿入するには、再生 TrueLog を読み込んで、TrueLog Explorer の エクスプローラ モードを有効にしておく必要があります。

注: タイマの挿入やその他のスクリプト変更機能を有効にするには、TrueLog が最新でなければ (同期が取れていなければ) なりません。TrueLog が最新でない場合には、スクリプトの試行を行って同期化してください。

測定関数 (タイマ) を BDL スクリプトに挿入して、あるトランザクションの実行から次のトランザクションの実行の間に経過した時間を測定することができます。 測定関数の結果は、仮想ユーザーの要約レポートに一緒に表示されます。

注: 元から存在するタイマの MeasureStart 関数と MeasureStop 関数の間に新しいタイマ セッションを挿入することもできます。
  1. メニュー ツリーでタイマを開始する API ノードを右クリックし、新規タイマの開始 を選択します。 タイマの開始 ダイアログ ボックスが開きます。
  2. タイマの名前を入力して OK をクリックします。 そのノードの BDL スクリプトに、新しい MeasureStart 関数が挿入されます。
  3. タイマを終了する API ノードを右クリックし、タイマの停止 を選択します。 タイマの停止 ダイアログ ボックスが開きます。
  4. 停止したいタイマを選択し、OK をクリックします。 そのノードの BDL スクリプトに、新しい MeasureStop 関数が挿入されます。
注: 1 つのスクリプトに複数のタイマを挿入する場合や、挿入したタイマをすべて停止したかどうかが不確かな場合には、New Timer Session を使って、タイマを挿入する前にこれまでのタイマをすべて停止します。 New Timer Session では、まだ解決されていないすべてのタイマに対して MeasureStop 関数を挿入し、その後、新しいタイマ セッションの MeasureStart 関数を挿入します。
親トピック: テストの分析


パフォーマンス分析 (HTTP)

テスト実行が正確であることを検証した後、TrueLog Explorer では、情報 ペインの 統計 タブを使って、"負荷のない" 状態でのアプリケーションのパフォーマンスを分析できます。概要 ページには、ページの総レスポンス時間、ドキュメント ダウンロード時間 (サーバー ビジー時間を含む)、埋め込みオブジェクトの受信に要した時間が表示されます。

詳細な Web ページ統計には、個々の Web ページ コンポーネントの正確なレスポンス時間が表示されます。この詳細統計を使って、エラーやページ ダウンロードの遅延の根本原因を突き止めることができます。

Web ページの詳細な分析結果には、ページ コンポーネントごとに以下のデータが記載されています。
時間 | 説明
DNS | ホスト名を IP アドレスに変換する時間。
接続 | サーバーとの接続を確立する時間。
SSL ハンドシェイク | 既存の接続にセキュリティ層を確立する時間。クライアントとサーバーは、証明書を交換し、関連するキーを含む暗号化テクノロジに合意し、データ伝送をセキュリティで保護します。
送信 | Silk Performer からオペレーティング システムにリクエスト データを渡す時間。オペレーティング システムからサーバーにリクエスト データを送信するにかかる時間は、この値には含まれません。
サーバー ビジー | オペレーティング システムからサーバーにリクエスト データを送信する時間、サーバー上でレスポンス データを計算する時間、およびサーバーからクライアントにレスポンス データの最初のバイトを送信する時間（ネットワーク遅延を含む）。
受信 | レスポンス データ全体を受信する時間。
キャッシュ統計値 |
親トピック: テストの分析


パフォーマンス分析 (AJAX)

テスト実行が正確であることを検証した後、TrueLog Explorer では、情報 ペインの 統計 タブを使って、"負荷のない" 状態でのアプリケーションのパフォーマンスを分析できます。 概要 ページには、合計アクション時間、ドキュメント ダウンロード時間 (サーバー ビジー時間と埋め込みオブジェクトの受信に要した時間を含む) が表示されます。

詳細な Web ページ統計には、個々の Web ページ コンポーネントの正確なレスポンス時間が表示されます。 この詳細統計を使って、エラーやページ ダウンロードの遅延の根本原因を突き止めることができます。

Web ページの詳細な分析結果には、ページ コンポーネントごとに以下のデータが記載されています。
  • DNS 検索時間
  • 接続時間
  • ネット ラウンドトリップ
  • キャッシュ統計値

親トピック: テストの分析


概要ページを表示する

  1. 統計値を表示する API ノードを選択します。
  2. 統計 タブをクリックします。 統計 ビューが開きます。
親トピック: テストの分析


再生 TrueLog と記録 TrueLog

スクリプトの開発プロセス中に生成された TrueLog と、当初生成された TrueLog を比較することで、テスト スクリプトが正確に実行されたかどうかを確かめることができます。

  • 再生 TrueLog と記録 TrueLog の概要
    再生 TrueLog とアプリケーションの記録中に生成された TrueLog とを並べて比較し、テスト スクリプトを検証する方法を説明します。
  • 再生 TrueLog と記録 TrueLog を比較する
    テストの実行後に再生 TrueLog とそれに対応する記録 TrueLog とを比較して、テスト実行がどう異なるかを正確に確認することができます。
  • 再生 TrueLog と記録 TrueLog を同期させる
    再生 TrueLog と記録 TrueLog の間で対応する API ノードを同期させて、TrueLog 間の差分を検索します。
  • 再生 TrueLog と記録 TrueLog を自動的に同期させる
    比較モードで、再生 TrueLog と記録 TrueLog の対応する API ノードを自動的に同期させることができます。
親トピック: テストの分析
関連概念
セッション処理のカスタマイズ


再生 TrueLog と記録 TrueLog の概要

スクリプトの開発プロセス中に生成された TrueLog と、当初生成された TrueLog を比較することで、テスト スクリプトが正確に実行されたかどうかを確かめることができます。

Web アプリケーションのテストの場合、TrueLog Explorer には、テスト時に受信された実際の Web ページが表示されます。 TrueLog Explorer のアニメーション モードでは、ダウンロードされたデータをリアルタイムで監視することができます。 テスト中に受信されたとおりにデータが表示されます。

Web テストの場合、TrueLog Explorer は送受信したデータを以下のようなさまざまな形で [コンテンツ] ペインに表示します。
  • レスポンス タブ： 受信したデータを、レンダリング済み HTML、整形済み JSON、XML、生データ形式で表示します。デフォルトの表示モードが適切でない場合は、タブを右クリックして、他のオプションを選択してください。
  • 差分 タブ： 再生 TrueLog と記録 TrueLog 間の相違点を表示します。
  • リクエスト タブ： テキスト入力フィールドなどのユーザー インターフェイスを含む、ページからポストしたデータを表示します。
注: 再生時のコンテンツを表示しているウィンドウには、左上隅に緑色の三角マークが付いています。 アプリケーションの記録時に元々表示されていたコンテンツを表示しているウィンドウには、左上隅に赤い三角マークが付いています。
ヒント: 分析の結果、セッション処理が有効でないことがわかった場合には、ワークフロー バーの セッション処理のカスタマイズ をクリックします。
注: TrueLog の比較には、複数のエントリ ポイントやアプローチが利用可能です。再生メニュー ツリーで再生 TrueLog を開いておく必要はありませんし、記録メニュー ツリーで記録 TrueLog を開いておく必要もありません。2 つの TrueLog を相互比較することも可能です。どのような TrueLog の比較でも手順は同じです。
親トピック: 再生 TrueLog と記録 TrueLog


再生 TrueLog と記録 TrueLog を比較する

  1. ファイル > TrueLog の追加 または ファイル > TrueLog On Error ファイルの追加 を選択します。 ファイルを開く ダイアログ ボックスが開き、指定したファイルの種類が ファイルの種類 リスト ボックスで選択されます。
  2. 該当するテストのディレクトリに移動し、調査対象のファイルを選択します。
  3. 省略可能: 比較ビューで開く チェック ボックスをオンにすると、ファイルは比較ビューで開きます。
  4. OK をクリックします。
  5. ワークフロー バーの テストの分析 をクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが開きます。
  6. テスト実行の比較 をクリックします。 対応する記録 TrueLog が 比較 ビューで開き、ページ全体 オプションが選択された状態で TrueLog のステップ スルー ダイアログ ボックスが表示されます。 これを選択していると、TrueLog をノードごとに比較することができます。
  7. 次を検索 をクリックして、TrueLog 結果ファイル内を 1 ページずつ移動します。 別の方法でも TrueLog を移動して、スクリプトが意図どおりに動作したかを視覚的に検証してみてください (HTML ドキュメント、エラー、フォーム送信、または API 呼び出し)。
    注: 記録セッションに関するサブペインには赤色の三角マークが、再生セッションに関するサブペインには緑色の三角マークが、それぞれ左上の隅に付いています。
親トピック: 再生 TrueLog と記録 TrueLog


再生 TrueLog と記録 TrueLog を同期させる

比較モードでは、記録値と再生値の差分を識別できるように、再生 TrueLog と記録 TrueLog の間で対応する API ノードを同期することができます。

注: この機能は、TrueLog の自動同期が有効になっている場合は無効になります。
  1. 次のいずれかを実行して比較モードを有効にします。
    • 表示 > 比較モード を選択します。
    • ツールバーの 比較モード ボタンをクリックします。
  2. 対応する一組の記録/再生 TrueLog を開きます。
  3. API ノードを右クリックし、TrueLog の同期 を選択します。 TrueLog Explorer は、対応する TrueLog 内で、選択された API ノードと最も相関がある API ノードを見つけます。
親トピック: 再生 TrueLog と記録 TrueLog
親トピック: 再生 TrueLog と記録 TrueLog
関連タスク
再生 TrueLog と記録 TrueLog を自動的に同期させる


再生 TrueLog と記録 TrueLog を自動的に同期させる

比較モードで、再生 TrueLog と記録 TrueLog の対応する API ノードを自動的に同期させることができます。

  1. 次のいずれかを実行して比較モードを有効にします。
    • 表示 > 比較モード を選択します。
    • ツールバーの 比較モード ボタンをクリックします。
  2. 対応する一組の記録/再生 TrueLog を開きます。
  3. 次のいずれかを実行して TrueLog を同期させます。
    • ツールバーの TrueLog の同期を保つ をクリックします。
    • 表示 > TrueLog の同期を保つ を選択します。
    これで、いずれかの TrueLog で API ノードをクリックしたときに、他方の TrueLog の API ノードのうちで選択した API ノードと最も関連が強いものを TrueLog Explorer が自動的に選択してくれます。
親トピック: 再生 TrueLog と記録 TrueLog
関連タスク
再生 TrueLog と記録 TrueLog を同期させる


TrueLog On Error

TrueLog On Error ファイルは、負荷テスト時に見つかったエラーの前のトランザクションの完全な履歴です。 このファイルを用いて、実際のコンテンツを詳しく調べ、エラー状況を分析することができます。

TrueLog On Error ファイルには、すべてのクライアント リクエストとサーバー レスポンスの履歴が保存されています。 TrueLog On Error ファイルは、エラーが発生したセッションと関連させてエラーを示し、テスト スクリプトと密接に統合されているため、システムやアプリケーションの障害の根本原因を分析するのに非常に適しています。

TrueLog On Error が記録されるのはエラーが発生した場合だけなので、標準の TrueLog と比べると、消費するメモリや処理量はずっと少なくなります。

通常は、テストを実行した後に、複数の TrueLog On Error ファイルが TrueLog Explorer で開きます (エラーを返した仮想ユーザーごとに TrueLog が 1 つ)。 TrueLog Explorer の エラーの検索 機能を使うと、エラーがどの TrueLog に記録されているかに関係なく、発生した順にエラーを特定することができます。 これによりエラーの分析作業を単純化できます。 開いている TrueLog をすべて手作業で調べながら次のエラーを順に探す必要はありません。

  • TrueLog On Error の分析
    負荷テストを実行した後、エラーとなったトランザクションの完全な履歴を分析します。
親トピック: テストの分析


TrueLog On Error の分析

負荷テストを完了します。
  1. Silk Performer で 結果の検討 をクリックします。 ワークフロー - 結果の検討 ダイアログ ボックスが開きます。
  2. TrueLog Explorer をクリックします。
    注: TrueLog が見つからない場合、Silk TrueLog Explorer の起動 オプションは無効になっています。
    TrueLog Explorer が起動し、現在開いているテストで生成された TrueLog On Error ファイルがすべて表示されます。 エラーの検索 ダイアログ ボックスが開きます。
    注: そのテストに関連する TrueLog ファイルが 100 個を超える場合は、最初の 100 個の TrueLog だけが自動的に開くというダイアログが表示されます。
  3. 検索範囲 リスト ボックスから、開いているすべての TrueLog (デフォルト) を選択します。 開いているすべての TrueLog に含まれるエラーが順に検索されます。
  4. メニュー ツリーで TrueLog を選択します。
  5. 検索範囲 リスト ボックスから、選択した TrueLog のみ を選択します。 選択した TrueLog に含まれるエラーだけが順に検索されます。
    注: TrueLog On Error ファイルは、作られた順に表示されます。
  6. このダイアログの 検索対象 の部分では、検索したいエラーの種類 ([エラー]、[警告]、[情報]) を選択します。
  7. ダイアログの 検索方法 の部分では、検索方法 ([選択したノードから検索を開始する]、[最初のエラーから検索を開始する]) を指定します。
  8. 次を検索 ボタンと 前を検索 ボタンを使用して、エラー間を移動します。
    ヒント: Web アプリケーションのテストでは、ロードされない画像やエラー メッセージなどの形でページ コンテンツにエラーが現れる 1、2 ステップ前に、実際のエラーが発生していることがよくあります。
親トピック: TrueLog On Error


TrueLog を閉じる

TrueLog の分析が終わったら、TrueLog を閉じてメニュー ツリーから消すことができます。

  1. TrueLog のメニュー ツリーで、閉じたい TrueLog を選択します。
  2. ファイル > 選択した TrueLog を削除 を選択します。 代替方法: 開いているすべての TrueLog を閉じるには、ファイル > すべての TrueLog を削除 を選択します。
親トピック: テストの分析


Silk Performer での作業

ここでは、読者が既に Silk Performer の機能をよく知っていることを前提としています。 Silk Performer の使い方や TrueLog Explorer との連携の詳細については、 のヘルプを参照してください。

  • Silk Performer から TrueLog を検討する
    説明した方法のいずれかで TrueLog Explorer から Silk Performer を開きます。
  • Silk Performer から TrueLog を有効化する
    Silk Performer によるテストの TrueLog および TrueLog On Error の生成を有効化することができます。
  • スクリプトの試行
    スクリプトの試行によって元の記録セッションを再生セッションと比較し、解析が必要なセッション情報を特定したり検証関数をテストしたりする方法を説明します。
親トピック: 入門


Silk Performer から TrueLog を検討する

TrueLog Explorer ワークフロー バーの スクリプトの試行 をクリックしてスクリプトの試行を開始すると、Silk Performer が自動的に起動し、最も新しく生成された TrueLog が表示されます。その他にも、TrueLog Explorer は以下の方法で Silk Performer から開くことができます。
  • Silk Performer のスクリプト エディタでスクリプトを右クリックし 最近のスクリプト試行の TrueLog を検索 を選択すると、最も新しいスクリプト試行の再生 TrueLog を対応するノードで開くことができます。
  • Silk Performer の 出力 ペインの 仮想ユーザー タブで仮想ユーザー出力を右クリックし TrueLog の検討 を選択すると、現在の実行の再生 TrueLog を対応するノードで開くことができます。
  • Silk Performer のプロジェクト メニュー ツリーでスクリプトを右クリックして 記録された TrueLog の検討 を選択すると、記録 TrueLog を開くことができます。
  • Silk Performer のプロジェクト メニュー ツリーでスクリプトを右クリックして 最近のスクリプト試行の TrueLog を検討 を選択すると、最も新しいスクリプト試行の再生 TrueLog を開くことができます。
  • 結果 > TrueLog の検討 を選択すると、再生 TrueLog を開くことができます。
  • Silk Performer の 監視/仮想ユーザー ビューで仮想ユーザーを右クリックし TrueLog の検討 を選択すると、現在の実行の再生 TrueLog を開くことができます。
親トピック: Silk Performer での作業


Silk Performer から TrueLog を有効化する

TrueLog Explorer では、TrueLog および TrueLog On Error ファイルの書き出しに Silk Performer を使用しています。 スクリプトの試行 (TrueLog ファイルを利用する最も一般的なシナリオ) の際には、自動的に TrueLog ファイルが有効化されます。 構成は必要ありません。

TrueLog を標準的に生成すると大量のデータが出力されてパフォーマンスが低下する可能性があるため、トランザクションが失敗したときにのみ TrueLog 情報を記録する TrueLog On Error を使うことを検討してください。

以下の表では、TrueLog および TrueLog On Error を有効化するためのオプションを説明します。
オプション | ステップ
Silk Performer の 結果 ツールバー | すべての TrueLog アクティビティを記録するには Silk Performer の 結果 ツールバーの TrueLog ファイルの生成 を、トランザクションの失敗が起きたときにだけ TrueLog を生成するには TrueLog On Error ファイルの生成 をクリックします。
Silk Performer メニュー | 設定 > アクティブ プロファイル > 結果 > TrueLog を選択します。 すべてのアクティビティを記録するには TrueLog ファイル (.xlg) チェック ボックスを、トランザクションの失敗が起きたときにだけ TrueLog を生成するには TrueLog On Error ファイル (.xlg) チェック ボックスをオンにします。 OK をクリックします。
Silk Performer の ワークロードの設定 ページ | テストの TrueLog On Error を有効化するには、Silk Performer の ワークロードの設定 ページで 設定 セクションのチェック ボックスをオンにします。
親トピック: Silk Performer での作業


スクリプトの試行

スクリプトの試行は、テスト スクリプトの準備状況を評価するために用いられる Silk Performer のテスト実行です。 スクリプトの試行では、元の記録セッションを再生セッションと比較し、解析が必要なセッション情報を特定したり検証関数をテストしたりします。

  • TrueLog Explorer からスクリプトの試行を実行する
    TrueLog Explorer から、元の記録セッションと再生セッションを比較し、解析が必要なセッション情報を特定したり検証関数をテストしたりします。
  • Silk Performer からスクリプトの試行を実行する
    Silk Performer から、元の記録セッションと再生セッションを比較し、解析が必要なセッション情報を特定したり検証関数をテストしたりします。
親トピック: Silk Performer での作業


TrueLog Explorer からスクリプトの試行を実行する

スクリプト > スクリプトの試行 を選択します。すると、 Silk Performer がテスト スクリプトを開いて実行します。

親トピック: スクリプトの試行


Silk Performer からスクリプトの試行を実行する

  1. Silk Performer のワークフロー バーで スクリプトの試行 をクリックします。 スクリプトの試行 ダイアログ ボックスが開きます。
  2. 実行 をクリックします。
    注: スクリプトの試行中に TrueLog Explorer を開くには、スクリプトの試行 ダイアログ ボックスで TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします。
親トピック: スクリプトの試行


Silk Test 用 TrueLog Explorer

TrueLog Explorer の機能テスト ツールである Silk Test, には、異なるバージョンの Silk が付属しています。 TrueLog Explorer に付属の Silk Test はビューア モードに設定されています。つまり、Silk Test TrueLog はテスト ケース内の結果の調査のみをサポートするということです。 ほとんどの Silk Performer ベースの TrueLog で利用可能なスクリプトのカスタマイズは提供されません。

Silk Performer は、Silk Test を利用して、リモート デスクトップ セッションで GUI レベルの (ファット クライアントの) テストを実行します。 詳細については Silk Performer のヘルプを参照してください。

Silk Test と TrueLog Explorer の連携については、Silk Test に付属の TrueLog Explorer ヘルプを参照してください。

親トピック: 入門


パースペクティブ

TrueLog Explorer には、さまざまな TrueLog タイプに対応できるよう、2 つの表示モード、つまりパースペクティブが用意されています。 デフォルトであり、Silk Performer ユーザーがもっともよく使用するビュー パースペクティブは、エクスプローラ パースペクティブです。 エクスプローラ パースペクティブには、TrueLog Explorer が提供するスクリプト カスタマイズ機能がすべて備わっています。 エクスプローラ パースペクティブでは、TrueLog Explorer のワークフロー バーに用意されているすべての機能を利用できます。 デフォルトでは、有人の Silk Performer テストは常にエクスプローラ パースペクティブの TrueLog を生成します。

ビューア パースペクティブでは、すべての TrueLog Explorer ビューで一部のコンテキスト メニュー コマンドしか利用できず、ワークフロー バーは無効です。 このパースペクティブの目的は、スクリプトをカスタマイズしないユーザー向けの簡易ビューを提供することと、スクリプトをカスタマイズできない TrueLog タイプをサポートすることです。 デフォルトでは、無人の Silk Performer テストと Silk Test テストは常にビューア パースペクティブの TrueLog を生成します。

  • ビューア パースペクティブに切り替える
    スクリプトのカスタマイズ機能を使用しない場合には、エクスプローラ パースペクティブからビューア パースペクティブに切り替えます。
  • エクスプローラ パースペクティブに切り替える
    スクリプトのカスタマイズ機能をすべて利用するには、ビューア パースペクティブからエクスプローラ パースペクティブに切り替えます。
親トピック: 入門


ビューア パースペクティブに切り替える

エクスプローラ パースペクティブとビューア パースペクティブの切り替えは、エクスプローラ パースペクティブを提供している TrueLog タイプで有効になっています。 エクスプローラ パースペクティブがサポートされていない TrueLog タイプの場合は、ビューア パースペクティブ モードのみが使用可能です。

次のいずれかのオプションを選択します。

  • ビューア パースペクティブの有効化 (ツールバーの目のアイコン) をクリックします。

  • 表示 > パースペクティブ > ビューア を選択します。

親トピック: パースペクティブ


エクスプローラ パースペクティブに切り替える

エクスプローラ パースペクティブとビューア パースペクティブの切り替えは、エクスプローラ パースペクティブを提供している TrueLog タイプで有効になっています。 エクスプローラ パースペクティブがサポートされていない TrueLog タイプの場合は、ビューア パースペクティブ モードのみが使用可能です。

次のいずれかのオプションを選択します。

  • エクスプローラ パースペクティブの有効化 (ツールバーの拡大鏡のアイコン) をクリックします。

  • 表示 > パースペクティブ > エクスプローラ を選択します。

親トピック: パースペクティブ


サンプル アプリケーション

このヘルプでは、3 つのサンプル アプリケーション (Web 2.0 アプリケーション、純粋な HTML を使用した典型的な Web アプリケーション、およびデータベース アプリケーション) を参照します。 これらのアプリケーションによって Silk Performer および TrueLog Explorer の機能をよく学んでから、重要なデータに適用してください。

  • サンプル Web 2.0 アプリケーション
    Silk Performer には、Web 2.0 アプリケーションのテストを習得するために使用できる最新のサンプル Web アプリケーションが備えられていることについて説明します。
  • 典型的な Web アプリケーションのサンプル
    このアプリケーションを使って TrueLog Explorer の、純粋な HTML を使用した Web アプリケーションのテスト機能を学ぶことができます。
  • サンプル データベース アプリケーション - Customer OCI
    このアプリケーションを使って TrueLog Explorer のデータベース アプリケーション機能を学ぶことができます。
親トピック: 入門


典型的な Web アプリケーションのサンプル

ShopIt は、擬似的なオンライン ショッピングのためのキャンピング用品カタログを持つ、純粋な HTML を使用した簡単な e コマースの Web サイト をシミュレートするものです。 このアプリケーションを使用して、TrueLog Explorer の純粋な HTML を使用した Web アプリケーション機能を試すことができます。

  • ShopIt の概要
    ShopIt サンプル アプリケーションは、擬似的なオンライン ショッピングのためのキャンピング用品カタログを持つ、簡単な e コマースの Web サイト をシミュレートするものです。
  • ShopIt V 6.0 のインストール
    ShopIt V 6.0 は、Silk Performer が提供するサンプル Web アプリケーションです。
親トピック: サンプル アプリケーション


ShopIt の概要

ShopIt は、擬似的なオンライン ショッピングのためのキャンピング用品カタログを持つ、簡単な e コマースの Web サイト をシミュレートするものです。 このアプリケーションを使用すると、TrueLog Explorer の Web アプリケーション機能を試すことができます。

ShopIt は、セッション エラーや、在庫切れ商品に起因する Web リンクの欠落などのエラーを生成するように作られています。 セッション エラーの原因は JavaScript に埋め込まれたセッション情報であり、この情報は Silk Performer のコンテキスト管理では検出されません。 テスト スクリプトをエラーなしで実行するためには、セッション データがハードコードされたテスト スクリプトをカスタマイズする必要があります。

注: ShopIt の最新情報については、ShopItV60.exe の readme ファイル (セットアップ時にアクセス可能になります) を参照してください。

ShopIt のソフトウェア要件

Active Server Pages を持つ IIS 4 または IIS 5 と Microsoft Internet Explorer (バージョン 5.0 以降) を備えた Windows オペレーティング システムが必要です。

親トピック: 典型的な Web アプリケーションのサンプル


サンプル データベース アプリケーション - Customer OCI

サンプル データベース アプリケーションの Customer OCI は、顧客の連絡先情報の追加、編集、削除を行う簡単なアプリケーションをシミュレートするものです。

  • Customer OCI の概要
    サンプル データベース アプリケーションの Customer OCI は、顧客の連絡先情報の追加、編集、削除を行う簡単なアプリケーションをシミュレートするものです。
  • Customer OCI にアクセスする
    サンプル データベース アプリケーションを使用して、新規顧客レコードの挿入とデータベース クエリを行うサンプルのデータベース セッションを記録します。
  • PersonPB
    PersonPB を設定し、作業する方法について説明します。
親トピック: サンプル アプリケーション
親トピック: データベース アプリケーションでの作業


Customer OCI の概要

サンプル データベース アプリケーションの Customer OCI は、顧客の連絡先情報の追加、編集、削除を行う簡単なアプリケーションをシミュレートするものです。 このアプリケーションで、新規顧客レコードの挿入とデータベース クエリを行うサンプルのデータベース セッションを記録することができます。 その結果として出力される TrueLog を使って、TrueLog Explorer のデータベース機能を学ぶことができます。

Customer OCI には、次の 2 つのバージョンがあります。
  • Person PB V6 - OCI7
  • Person PB V7 - OCI8

使用する PowerBuilder (バージョン 6 と 7) と OCI (バージョン 7 と 8) のバージョンが異なる点を除けば、どちらも同一です。

注: サンプルの TrueLog はすべて Person PB V7 - OCI8 を使って作成されています。

Customer OCI のソフトウェア要件

Customer OCI を実行するには、以下の要件を満たす必要があります。
  • Oracle8 または Oracle9 クライアントがインストールされていること
  • Oracle データベースにアクセスできること
親トピック: サンプル データベース アプリケーション - Customer OCI


Customer OCI にアクセスする

サンプル データベース アプリケーション Customer OCI を使用して、新規顧客レコードの挿入とデータベース クエリを行うサンプルのデータベース セッションを記録します。 Customer OCI は、インストールされた Silk Performer に含まれています。

どちらのバージョンにアクセスするかを決めてから、以下のステップのいずれかを実行してください。
  • PersonPB V6 - OCI7 にアクセスするには、スタート > プログラム > Silk > Silk Performer 21.0 > サンプル アプリケーション > データベース サンプル > PersonPB V6 - OCI7 sample application
  • PersonPB V7 - OCI8 にアクセスするには、スタート > プログラム > Silk > Silk Performer 21.0 > サンプル アプリケーション > データベース サンプル > PersonPB V7 - OCI8 sample application
親トピック: サンプル データベース アプリケーション - Customer OCI


PersonPB

PersonPB アプリケーションは Silk Performer と共にインストールされるサンプル アプリケーションで、Silk Performer チュートリアルの Oracle チュートリアルに記載された手順を実行するときに使用します。このアプリケーションは、Oracle データベースに対する顧客の検索、新しい顧客レコードの挿入、不要な顧客データの削除を行うための簡単な UI を備えています。

このアプリケーションは、デモ用に開発されたアプリケーションです。アプリケーションが生成するデータベース トラフィックは、Silk Performer Recorder を使って簡単に記録できます。 また、キャプチャしたデータベース トラフィックから生成した BDL スクリプトは、ほとんど単純な Oracle API 関数呼び出しから構成されるため、理解しやすいでしょう。

PersonPB アプリケーションを使用するには、次のいずれかが必要です。
  • Oracle 9.x 以降のデータベース
  • SQLNet クライアント（データベースと互換性のあるバージョン）
  • PersonPB を設定する
    PersonPB のアプリケーション パラメータの設定方法について説明します。
  • PersonPB での作業
    顧客データを検索、更新、作成、削除する方法について説明します。
親トピック: サンプル データベース アプリケーション - Customer OCI


PersonPB を設定する

Silk Performer をインストールすると、SampleApp サブディレクトリに PersonPB アプリケーションがインストールされます。Silk Performer のインストールについては、『インストール ガイド』を参照してください。

PersonPB アプリケーションでは、いくつかの設定を行って、アプリケーションの動作を指定します。これらの設定は、UI ではなく SQL 文に影響を与えるため、設定による変化を確認するには、Silk Performer API Recorder を使ってデータベース トラフィックを記録する必要があります。

アプリケーション パラメータを設定するには：

  1. PersonPB のメニュー バーから、File > Parameter をクリックします。
  2. Static Bind 設定を指定します。 このオプションをオンにすると、各リスト項目に対する Select が個別に定義されます。オフの場合は、すべてのリスト項目に対する Select が単一のオペレーションで記述されます。
  3. Disable Bind 設定を指定します。 このオプションをオンにすると、SQL 文のパラメータが、対応するプログラム変数からバインドされるのではなく、定数で置き換えられます。
  4. オペレーションごとにフェッチする行数を Rows to fetch に入力します。 フェッチ オペレーション後に指定した行数の項目だけが利用可能になります。
  5. SQL cache にキャッシュ サイズを指定します。 この設定では、アプリケーションが使用するデータベース カーソルの最大数を決定します。
  6. OK をクリックして、変更を保存します。
  7. Customer OCI ウィンドウで、Serializable オプションか Read Committed オプションのいずれかを選択します。 分離レベルについての詳細は、Oracle のドキュメントを参照してください。分離レベルは、データベースを変更するトランザクションの扱い方を決定します。
    注: 複数の仮想ユーザーを使ってテスト スクリプトを再生するには、トラフィックを生成するアプリケーションの分離レベルを Read Committed に設定する必要があります。
親トピック: PersonPB


PersonPB での作業

このセクションでは、PersonPB UI について説明します。 このアプリケーションは、 データベースに対する顧客の検索、新しい顧客レコードの挿入、不要な顧客データの削除を行うための簡単な UI を備えています。

  • PersonPB をデータベースに接続する
    PersonPB を Oracle データベースに接続する方法について説明します。
  • 顧客を検索する
    顧客レコードをデータベースから検索する方法について説明します。
  • 顧客レコードを更新する
    データベース中の顧客レコードを更新する方法について説明します。
  • 顧客レコードを作成する
    新しい顧客レコードを作成する方法について説明します。
  • 顧客レコードを削除する
    顧客レコードを削除する方法を説明します。
  • ストアド プロシージャを使用する
    ストアド プロシージャを作成し、使用する方法について説明します。
親トピック: PersonPB


PersonPB をデータベースに接続する

PersonPB での作業を始める前に、PersonPB と Oracle データベース間の接続を確立する必要があります。OCI 7 を使って Oracle データベースに接続する場合は、ステップ 1 から始めます。OCI 8 を使って Oracle データベースに接続する場合は、ステップ 2 から始めます。
  1. OCI 7 用の PersonPB V6 アプリケーションを起動するには、スタート > すべてのプログラム > Silk > Silk Performer <バージョン番号> > サンプル アプリケーション > データベース サンプル > PersonPB V6 - OCI7 Sample Application をクリックします。
  2. OCI 8 用の PersonPB V7 アプリケーションを起動するには、スタート > すべてのプログラム > Silk > Silk Performer <バージョン番号> > サンプル アプリケーション > データベース サンプル > PersonPB V7 - OCI8 Sample Application をクリックします。
  3. Login ダイアログ ボックスで、Oracle データベースにアクセスするための接続文字列を入力します。 接続文字列は、リモート Oracle データベースへの接続をリクエストするのに使用します。SQL Net Easy Configuration ツール（Oracle クライアント ソフトウェアの一部）を使って、接続文字列を準備できます。詳細については、Oracle ソフトウェアに付随するドキュメントを参照してください。
  4. ユーザー名とパスワードを入力して、Login をクリックします。 Customer OCI ウィンドウが表示されます。
親トピック: PersonPB での作業


顧客を検索する

顧客レコードをデータベースから検索する前に、「PersonPB をデータベースに接続する」トピックの手順を実行してください。

  1. Customer OCI ダイアログ ボックスで、Cancel をクリックします。
  2. 検索条件（Firstname、Lastname、Address 1 など）を指定します。
  3. Select をクリックします。 顧客リストに検索結果が表示されます。
親トピック: PersonPB での作業


顧客レコードを更新する

顧客レコードを更新する前に、「PersonPB をデータベースに接続する」トピックの手順を実行してください。

  1. Customer OCI ダイアログ ボックスで、顧客を選択します。
  2. 顧客情報の対応するフィールドを更新します。
  3. Update をクリックします。 顧客リストに更新された情報が表示されます。
親トピック: PersonPB での作業


顧客レコードを作成する

顧客レコードを作成する前に、「PersonPB をデータベースに接続する」トピックの手順を実行してください。

  1. Customer OCI ダイアログ ボックスで、Cancel をクリックします。
  2. 新しい顧客データを入力します。姓と名前は必須です。
  3. Insert をクリックします。
    注: 新しい顧客レコードは自動的に選択されないため、新しい顧客に対して Select をクリックして、リストに表示されるようにする必要があります。
親トピック: PersonPB での作業


顧客レコードを削除する

顧客レコードを削除する前に、「PersonPB をデータベースに接続する」トピックの手順を実行してください。

  1. Customer OCI ダイアログ ボックスで、顧客を選択します。
  2. 顧客リストから、削除する顧客レコードを選択します。
  3. Delete をクリックします。
親トピック: PersonPB での作業


ストアド プロシージャを使用する

新しい顧客を挿入するストアド プロシージャを作成する前に、「PersonPB をデータベースに接続する」トピックの手順を実行してください。

PersonPB アプリケーションは、新しい顧客を挿入するストアド プロシージャをサポートします。ストアド プロシージャを使うと、Silk Performer Recorder の別の機能を試してみることができます。
  1. Customer OCI ダイアログ ボックスで、ストアド プロシージャが存在していないことを確認します。
  2. Create をクリックします。 これでストアド プロシージャを使って新しい顧客を挿入できるようになりました。
  3. Cancel をクリックします。
  4. 新しい顧客データを入力します。姓と名前は必須です。
  5. Insert using SP をクリックします。
    注: 新しい顧客レコードは自動的に選択されないため、新しい顧客に対して Select をクリックして、表示されるようにする必要があります。
  6. ストアド プロシージャを削除する場合は、Drop をクリックします。
親トピック: PersonPB での作業


セッション処理のカスタマイズ

記録 TrueLog に現れることがあるハードコードされたセッション データを解析する方法について説明します。 セッション処理のカスタマイズを行うと、テスト中に状態情報を保持できます。

  • セッション処理の概要
    セッション処理に関する問題と、その問題をスクリプトのカスタマイズによってどう解決するかの概要を説明します。
  • セッション処理をカスタマイズする状況の判断
    スクリプト内の静的なセッション ID を、実行時に生成される動的な値に置換しないと、Web アプリケーションで次のようなエラーが発生します： セッションが期限切れです。ログイン画面に戻ってください。
  • セッション処理のカスタマイズ
    記録されたテスト スクリプトにセッション依存の情報がハードコードされていると、後でそのスクリプトを実行したときにエラーが発生します。このような静的セッション情報は、記録ルールまたは解析関数に置き換える必要があります。
  • 学習機能付き Recorder
    クライアント側のスクリプトに強く依存したアプリケーションをサポートする Silk Performer の学習機能付き Recorder について説明します。
  • 解析関数
    負荷テストの実行中に状態情報を保持し、実際のユーザー データの入力をシミュレートするために解析関数を使用する方法について説明します。
  • Web アプリケーションのセッション処理
    セッション ID が Web サーバーから返される場合に、通常、セッション ID が取る形式について説明します。
  • セッション処理のカスタマイズ手順
    適切なセッション情報を識別およびカスタマイズする一般的な手順について説明します。
  • HTTP 解析ルールの使用
    Silk Performer の記録ルールの機能について説明します。
親トピック: TrueLog Explorer 21.0


セッション処理の概要

セッション処理のカスタマイズとは、負荷テスト時にアプリケーションの状態情報が変わらないようにしながら、サーバー レスポンスを操作する処理です。

後続のクライアント リクエストが同じコンピュータから同じユーザー セッションとして送られてきたものかを識別するための情報を、サーバーが実行時に生成し、クライアントへのレスポンスに含めることがよくあります。 たとえば、サーバーが セッション ID と一般に呼ばれる一意の文字列を送信するなどが考えられます。 このようなセッション情報は、テスト スクリプトで更新しなければ、後のテスト実行で問題の原因となる場合があります。

再生テスト実行を元の記録テスト実行と比較して、古いセッション情報が見つかった場合には、今後テストを実行するときのために、その情報を動的変数に置き換える必要があります。 そうしなければ、テスト スクリプトは無効なセッション ID などのセッション情報を渡してしまいます。

TrueLog Explorer は、カスタマイズに関係する差分を黄色で、カスタマイズが必要ない関係のない差分を青で示します。

注: Silk Performer の記録技術では、静的セッション情報を含まない、コンテキストを持つスクリプトが生成されるため、ほとんどのアプリケーションでは、セッション処理のカスタマイズは必要ありません。 そのため、自分のテストを分析して何も問題が検出されなければ、セッション処理のカスタマイズを省略して、ユーザー データのカスタマイズに進むことができます。
注: ここで紹介する例は具体的に Web アプリケーションに関するものですが、データベース アプリケーションや XML アプリケーションにも同じ原則を適用できます。 Oracle Forms、SAPGUI、Citrix、ターミナル エミュレーション、TCP/IP、および UDP の記録/再生 TrueLog は、TrueLog Explorer を使って比較できますが、これらの種類のアプリケーションでセッション処理のカスタマイズを行うことはできません。
親トピック: セッション処理のカスタマイズ


セッション処理をカスタマイズする状況の判断

スクリプト内の WebPageUrl 呼び出しが、クエリ文字列の一部にセッション ID を含む URL を使用する場合、このスクリプトが再生されると、それと同じハードコードされた静的なセッション ID がサーバーに送信されます。しかし、この セッション ID では再生セッションを正しく識別できません。これは、以前の記録セッションを表しているに過ぎないため、スクリプトを再生するとエラーが発生します。

スクリプト内の静的なセッション ID を、実行時に生成される動的な値に置換しないと、Web アプリケーションでは、次のようなエラーが生成されます： セッションが期限切れです。ログイン画面に戻ってください。

Silk Performer のセッション処理方法の性質上、ほとんどの Web アプリケーションでは、セッション処理のカスタマイズは必要ありません。まれに、手動によるセッションのカスタマイズが必要になった場合でも、TrueLog Explorer を利用して、簡単にその作業を実行できます。

Silk Performer では、ハードコードされたセッション ID を手動で処理する必要性が減るように、次の 2 つのセッション ID 処理方法を使用しています。

クッキー管理

Silk Performer は、クッキーを使用してセッション情報を交換するサーバーに対して、動的なセッション ID 値を自動的に処理します。Silk Performer は、ブラウザのクッキー管理を正確にエミュレートするので、ブラウザと同じように、サーバーにクッキーを送信できます。このため、手動でやり取りをして、状態を維持する必要がありません。

ページ レベルの Web API

記録の際にページ レベルの API を使用する (これがデフォルト設定) と、WebPageLink や WebPageSubmit などの、コンテキストのある Web API 関数呼び出しを生成するスクリプトが提供されます。コンテキストを持つ Web API 呼び出しは、HTTP レベルではなく、HTML レベルで動作します。したがって、URL をパラメータとして使用しません。コンテキストを持つ API 呼び出しに対しては、手動によるセッションのカスタマイズは必要ありません。Silk Performer のページ レベルの API が使用されるのは、ワークフロー - プロジェクトの概要設定 ダイアログ ボックスの [アプリケーションの種類] で [Web business transaction (HTML/HTTP)] が選択されている場合です。
注: Silk Performer の低レベルのブラウザ ベースの API よりも、Silk Performer のページ レベルの API を使用することを強くお勧めします。

HTML を動的に生成するためにクライアント側の JavaScript を利用している場合は、Silk Performer の Recorder が HTML のコンテキストを失って、コンテキストのない Web API 呼び出しが生成されることがあります。コンテキストなしの Web API 呼び出し (WebPageUrl、WebPageForm など) には、パラメータとして URL が含まれます。このようなまれなケースでは、スクリプトにハードコードされたセッション ID が含まれています。このようなセッション ID は、Web API 呼び出しの URL パラメータ内や、スクリプトの DCLFORM セクションで宣言されているフォーム フィールド内で見つけることができます。

例

カスタマイズする必要がないコンテキストを持つスクリプトの例を以下に示します。

transaction TMain
  begin
    WebPageUrl("http://myHost/ShopIt/"); // first call always context-less
    WebPageLink("Join the experience!");
    WebPageSubmit("Enter", SHOPIT_MAIN_ASP001);
    WebPageLink("Products");
  end TMain;

dclform
  SHOPIT_MAIN_ASP001:
    "SessionID"       := "" <USE_HTML_VAL>, // hidden value:
                                            // LGIJALLCGEBMIBIMFKOEJIMM2
                                            // recognized as a hidden
                                            // form field, the value is
                                            // taken from the actual
                                            // HTML form field.
    "name"            := "Tester",          // changed
    "New Name Button" := "" <USE_HTML_VAL>; // unchanged value: "Enter"

例

コンテキストなしの関数を含むスクリプトの例 (カスタマイズが必要な静的なセッション データが DCLFORM セクションに含まれている) を以下に示します。

transaction TMain
begin
  WebPageUrl("http://myHost/ShopIt/"); // first call always context-less
  WebPageUrl("http://myHost/ShopIt/main.asp", NULL, SHOPIT_MAIN_ASP001);
  WebPageForm("http://myHost/ShopIt/main.asp", SHOPIT_MAIN_ASP002);
  WebPageUrl("http://myHost/ShopIt/products.asp");
end TMain;

dclform
  SHOPIT_MAIN_ASP001:
    "from"     := "welcome";

  SHOPIT_MAIN_ASP002:
    "SessionID"       := "LGIJALLCGEBMIBIMFKOEJIMM2",
    "name"            := "Tester",
    "New Name Button" := "Enter";
親トピック: セッション処理のカスタマイズ


セッション処理のカスタマイズ

解析関数に指定した値を使用して、TrueLog Explorer で新しい記録ルールを作成できます。たとえば、セッション カスタマイズ解析関数から記録ルールを作成すると、そのアプリケーションの記録が可能になり、セッションのカスタマイズの問題を完全に避けることができます。

  1. メニュー ツリーで TrueLog を選択します。
  2. ワークフロー バーの セッション処理のカスタマイズ をクリックします。 ワークフロー - セッション処理のカスタマイズ ダイアログ ボックスが開きます。
  3. 差分の検索 リンクをクリックして、差分テーブルを 差分 ページに表示します。 この手順で、再生セッション中に記録セッションと異なる (または動的な) 情報をサーバーが返した箇所が明らかになります。このような情報は、変数に置き換える必要があります。
    注: 対応する記録 TrueLog がまだ開かれていない場合には、対応する記録 TrueLog を開くかどうかを確認するダイアログ ボックスが表示されます。
    1. OK をクリックします。
  4. TrueLog のステップ スルー ダイアログ ボックスを使って、HTML サーバー レスポンスをステップ スルーします。 記録レスポンスは、対応する再生レスポンスと並んで表示されます。解析が必要なのは、テスト スクリプトに静的情報が含まれていて、それがサーバーに送り返されていることを示す差分だけです。たとえば、e コマース サイトの在庫切れが原因で再生セッションと記録セッションの差分が発生する可能性があります。そのような差分は、セッションに関係がないため、スクリプト カスタマイズの対象とはなりません。

    ヒント: 差分 ページの列見出しの上にマウス ポインタを移動させると、各列に含まれる要素を説明する、便利なツールチップが表示されます。
  5. 差分 ページに一覧表示されたエラーの 1 つをダブルクリックします。 解析関数の挿入 ダイアログ ボックスが、境界値が既に挿入された状態で表示されます。境界値を手動で探して入力する必要はありません。
  6. 省略可能： 記録ルールの作成 をクリックして、解析関数の値に基づいた記録ルールを作成します。これにより、今後は、セッションのカスタマイズについて再度心配する必要なく、そのアプリケーションを記録できます。
  7. 解析関数の挿入 ダイアログ ボックスに戻って、OK をクリックします。
  8. スクリプトの変更が成功したら、ワークフロー バーの セッション処理のカスタマイズ をクリックします。
  9. スクリプトの試行 をクリックして、セッション処理を変更した結果、スクリプトが正しく実行されるかどうかを確認します。 スクリプトの試行が新たに開始されます。
  10. その後のテスト実行の結果を分析して、セッション処理のカスタマイズが成功したかどうかを確認します。
親トピック: セッション処理のカスタマイズ


学習機能付き Recorder

Silk Performer の学習機能付き Recorder は、クライアント側のスクリプトに強く依存したアプリケーションを適切にサポートします。 このレコーダは、高度なコンテキスト管理技術を備えており、ページ コンテキストを維持する Web スクリプトを生成できます。これは、JavaScript の関数によって実行されるページ リクエストにも対応しています。

ページ コンテキストを維持することは、Web ページを呼び出したリンクやフォーム送信のコンテキスト内で、そのページがリクエストされることを意味します。 このようなコンテキストを持つ Web ページ リクエスト関数は、URL だけでなく、リンクやフォーム名によって Web ページを参照します。 このため、Silk Performer はリンクやフォーム送信を Web サーバーのトラフィックを通じて解析し、コンテンツを呼び出したページを識別します。

親トピック: セッション処理のカスタマイズ


解析関数

解析関数は、負荷テストの実行中に状態情報を保持し、実際のユーザー データの入力をシミュレートするために使用できます。 解析関数 (BDL 変数に格納される) は、サーバー レスポンス内のセッション関連の値を読み取ります。 そして、解析した値をパラメータ化されたデータとして使用します。このデータは、ポストされるクエリ文字列や URL データの一部として、サーバーに送り返されます。
注: 解析関数は、指定した入力値が存在することを単にチェックするだけの検証関数とは異なります。
  • 解析関数の概要
    負荷テストの実行中に状態情報を保持し、実際のユーザー データの入力をシミュレートするために解析関数を使用する方法について説明します。
  • HTML コンテンツの解析関数
    レンダリングされた HTML コンテンツに適用できる、HTML コンテンツの解析関数の一覧を示します。
  • レスポンス データの解析関数
    サーバーから返されたレスポンス データに適用できるデータ解析関数の一覧を示します。
親トピック: セッション処理のカスタマイズ


HTML コンテンツの解析関数

HTML コンテンツの解析関数は、レンダリングされた HTML コンテンツに適用できます。 これらは、TrueLog Explorer の レンダリング ビューで適用されます。 HTML の解析関数を利用すると、Web ブラウザで表示可能な HTML コンテンツを解析できます。

利用可能な HTML コンテンツの解析関数を以下に示します。
  • WebParseHtmlBoundおよびWebParseHtmlBoundEx
  • WebParseHtmlBoundArray (TrueLog Explorer では未サポート)
  • WebParseHtmlTitle
  • WebParseTable
  • WebParseResponseTag (TrueLog Explorer では未サポート)
  • WebParseResponseTagContent (TrueLog Explorer では未サポート)
親トピック: 解析関数


レスポンス データの解析関数

データ解析関数は、サーバーから返されたレスポンス データに適用できます。 HTML ドキュメントがサーバーから返された場合、それには、ドキュメントの完全なソース コードが含まれています。 これらの解析関数は、TrueLog Explorer の ソース ページで適用されます。

利用可能なデータ解析関数を以下に示します。
  • WebParseDataBound および WebParseDataBoundEx (従来の WebParseResponseData の代替関数)
  • WebParseDataBoundArray (TrueLog Explorer では未サポート)
  • WebParseResponseHeader (TrueLog Explorer では未サポート)
注: TrueLog Explorer による視覚的解析は、TCP/IP および UDP ベースのアプリケーションでは現在利用できません。 ただし、WebTcpipRecv 関数からのレスポンス データを解析できる BDL 関数は利用できます。
親トピック: 解析関数


Web アプリケーションのセッション処理

セッション ID は、さまざまな方法でクライアントに送信されます。 ほとんどの場合、セッション ID は、クッキー、ハイパーリンクの URL、埋め込みオブジェクトの URL、および HTML のフォーム フィールドに含まれています。 セッション ID は、同様に、クッキー、URL、および HTTP のポスト データに含めてサーバーに送り返されます。 以下に例を示します。

例：セッション情報がクッキーに含まれる場合：

クライアントに送信される情報:

Set-Cookie: SessionID=LGIJALLCGEBMIBIMFKOEJIMM; path=/

サーバーに返される情報:

Cookie: SessionID=LGIJALLCGEBMIBIMFKOEJIMM

例：セッション情報が URL に含まれる場合：

クライアントに送信される情報:

<html>
  …
<a href="/ShopIt/acknowledge.asp?SessionID=LGIJALLCGEBMIBIMFKOEJIMM" >
  Enter Shop
</a>
…
</html>

サーバーに返される情報:

GET /ShopIt/acknowledge.asp? SessionID = LGIJALLCGEBMIBIMFKOEJIMM HTTP/1.1

例：セッション情報が、非表示のフォーム フィールドに含まれる場合：

クライアントに送信される情報:

<html>
  …
<form action="kindofpayment.asp" method="post" >
  Currently we only accept Credit Cards
<input type="hidden" name="SessionID" value="LGIJALLCGEBMIBIMFKOEJIMM">
<input type="text" name="name" value="Jack " >
  <input type="submit" name="paymentButton" value="Submit">
</form>
…
</html>

サーバーに返される情報:

POST /ShopIt/kindofpayment.asp HTTP/1.1
…
SessionId=LGIJALLCGEBMIBIMFKOEJIMM&name=Jack&paymentButton=Submit
親トピック: セッション処理のカスタマイズ


セッション処理のカスタマイズ手順

セッション処理のカスタマイズは、通常、標準的な手順に従います。 どのセッション ID の場合も、以下に示す高レベルの手順に従う必要があります。
  1. セッション ID をカスタマイズする必要があるかどうかを決定します。
  2. そのセッション ID がサーバーからクライアントへ送信された最初のレスポンス (スクリプト内の Web API 呼び出し) を検索します。
  3. そのレスポンス内のセッション ID を抽出して変数に代入します。
  4. スクリプト内の、ハードコーディングされているセッション ID の出現箇所すべてをその変数に置換します。
  • セッション ID の識別
    セッション ID をカスタマイズする必要があるかどうかを決定する方法について説明します。
  • 最初のレスポンス (Web API) を検索する
    セッション処理のカスタマイズでは、セッション ID がサーバーからクライアントへ送信された最初のレスポンス (スクリプト内の Web API 呼び出し) を検索することが必要になります。
  • セッション ID を解析および置換する
    セッション ID の解析と置換を行う状況について説明します。
親トピック: セッション処理のカスタマイズ


セッション ID の識別

セッション ID は、記録セッションと再生セッションで異なりますが、記録 TrueLog と再生 TrueLog を比較すれば、セッション ID を簡単に識別できます。

セッション ID は、TrueLog Explorer を利用して簡単に見つけることができます。ワークフロー バーの セッション処理のカスタマイズ をクリックすると、開いている再生 TrueLog に関連付けられた記録 TrueLog ファイルが自動的に表示されます。記録 TrueLog と再生 TrueLog を 1 行ごとに読むことによって、記録スクリプトと再生スクリプト間の HTML レスポンスの違いを簡単に識別できます。
注: 差分 ビューに差分リストが自動的に表示されるので、手動で 1 行ごとに読む必要はありません。

記録セッションからのサーバー レスポンス データ内のフレーズの違いが、Web API 呼び出しの URL や、スクリプトの DCLFORM セクションに含まれるフォーム フィールドでも見つかった場合は、セッション ID をカスタマイズする必要があります。

記録セッションから返されたデータと、再生セッションから返されたデータとの差分すべてが、セッションのカスタマイズに関連するとは限りません。セッションのカスタマイズを検討する必要があるのは、記録セッションと再生セッションとの差分がスクリプトに埋め込まれている場合だけです。これは、差分 ビューの黄色の警告メッセージと BDL 出現数 列 (0 より大きい値である場合) によって示されます。

差分 ビューでは、カスタマイズが必要だと思われる差分にはオレンジ色の感嘆符が付きます。カスタマイズが必要ないと思われる差分には、青い疑問符が付きます (HTML 内のそのような文字列の出現箇所を置換することはお勧めしません。そのような文字列用の解析関数を挿入することはできますが、置換は行われません)。青い感嘆符は、情報コメントのみの場合です。

親トピック: セッション処理のカスタマイズ手順


最初のレスポンス (Web API) を検索する

セッション処理のカスタマイズでは、セッション ID がサーバーからクライアントへ送信された最初のレスポンス (スクリプト内の Web API 呼び出し) を検索することが必要になります。

  1. メニュー ツリーから再生 TrueLog を選択します。
  2. ツールバーの 比較モード をクリックします。
  3. ツールバーの 差分モード をクリックします。 差分 ビューに、TrueLog 間で識別された差分が一覧表示されます。
  4. 差分 ビューのリストを右クリックして、BDL スクリプト内の最初の出現箇所に移動 または HTML 内の最初の出現箇所に移動 を選択します。
親トピック: セッション処理のカスタマイズ手順


セッション ID を解析および置換する

セッション ID や、セッション ID を返す BDL スクリプトの Web API 呼び出しを識別できたら、そのセッション ID を Web API 呼び出しへのレスポンスから抽出する必要があります。 ハードコードされたセッション ID の出現箇所すべてを、変数で置換する必要があります。 TrueLog Explorer は、この作業をサポートするので、手動でスクリプトをカスタマイズする必要はありません。 TrueLog Explorer が、解析と置換のための適切なコードを自動生成します。

  • セッション ID を解析および置換する
    セッション処理をサポートするには、ハードコードされたセッション情報を見つけて解析し、動的変数に格納する必要があります。
  • 解析と置換の文の例
    セッション処理をカスタマイズするために必要な解析と置換の文のサンプル コードを示します。
  • 手動での差分の選択
    解析された差分を手動で選択することによって、フレーズの抽出方法をきめ細かく制御する方法について説明します。
  • スクリプト内の解析関数
    解析関数は、レスポンス データの解析を開始する Web API 呼び出しの前に挿入する必要があることについて説明します。
親トピック: セッション処理のカスタマイズ手順


セッション ID を解析および置換する

  1. メニュー ツリーから再生 TrueLog を選択します。
  2. セッション処理のカスタマイズ をクリックします。 ワークフロー - セッション処理のカスタマイズ ダイアログ ボックスが開きます。
  3. 差分の検索 をクリックします。
    TrueLog Explorer を利用して、関連する記録 TrueLog を見つけて表示するかどうかを確認するダイアログ ボックスが表示されます。
  4. はい をクリックします。 関連する記録 TrueLog が 比較ビュー に表示され、TrueLog のステップ スルー ダイアログ ボックスが開きます。
    注: 差分 ビューでは、カスタマイズが必要となり得る記録データと再生データの差分が明らかになります。TrueLog のステップスルー ダイアログ ボックスを使用して、コンテンツの [ページ全体] を走査し、カスタマイズが必要な差分が見つかるまで API ノード間を進みます。
  5. 差分 ビューにあるリストをダブルクリックすると、解析関数の挿入 ダイアログ ボックスが開きます。
  6. リストを右クリックして、セッション処理のカスタマイズ を選択します。 解析関数の挿入 ダイアログ ボックスが開きます。
  7. 解析関数の挿入 ダイアログ ボックスには、解析関数を調整するためのパラメータが表示されます。デフォルト設定でも問題はありませんが、以下の設定を調整することもできます：
    1. 大文字/小文字を区別する - 解析関数で大文字と小文字を区別したい場合は、このオプションをオンにします。
    2. 変数名 - 解析関数の結果を受け取るための変数の名前を入力します。
    3. 左境界 - このフィールドには、指定したテキストの左境界 (指定したテキストの直前に位置するテキスト) が表示されます。
    4. 右境界 - このフィールドには、指定したテキストの右境界 (指定したテキストの直後のテキスト) が表示されます。
    5. スクリプトに出力文を挿入 - Web ページ呼び出しの後に、通知のための Print 文をスクリプトに挿入するには、Print 文 をオンにします。これによって、解析関数の結果が Silk Performer の 仮想ユーザー 出力ウィンドウに出力されます。
    6. (Print 文によって 仮想ユーザー出力 ウィンドウに値を書き込むだけでなく) デバッグに役立つように解析結果を出力ファイルに書き込むには、Writeln 文 (write line 文) をオンにします。出力ファイルを生成すると負荷テストの時間測定値が変化するので、これらのファイルはデバッグのためだけに使用し、完全な負荷テストでは生成しないでください。
    7. 変数に置き換える - このチェック ボックスをオンにすると、解析済みテキストのすべての出現回数を指定した変数に置き換えます。
  8. 省略可能： 指定した値に基づいて記録ルールを作成したい場合は、記録ルールの作成 をクリックします。記録ルール作成の詳細については、『Silk Performer ヘルプ』を参照してください。
  9. OK をクリックします。 これで、選択したセッション ID の処理をカスタマイズするために必要な、解析と置換の文が生成されます。
  10. [スクリプトの試行] を実行してカスタマイズを検証し、セッション処理の問題が解決したことを確認します。 緑色のチェックマークが付いた API ノードは、スクリプトの試行の実行中にセッション エラーが発生しなかったことを表します。赤い X マークは、まだスクリプト再生エラーが存在することを表します。
親トピック: セッション ID を解析および置換する


解析と置換の文の例

以下のサンプル コードは、セッション処理をカスタマイズするために必要な解析と置換の文の例を示しています。

注: 元のセッション ID はコメントアウトされていますが、スクリプト内に残っています。

TrueLog Explorer によって生成された WebParseDataBoundEx 関数が、それに続く WebPageLink 呼び出しから返された HTML ドキュメント内の、境界 name=\" と \" に挟まれた値を抽出します。 次に、実際の値を sSessionInfo1 変数に格納します。 解析関数は、レスポンス データが解析される Web API 呼び出しの前に指定する必要があります。 デバッグ用に、TrueLog Explorer は、解析結果を Silk Performer の 仮想ユーザー出力 ウィンドウに出力されます。Print セッション ID の変数は、sFormSid1 フォーム フィールド変数に代入されます。これは、定数値のセッション ID (858891446) の代わりに、DCLFORM スクリプト セクションで直接使用されます。

例

transaction TMain
begin
  ...
  WebParseDataBoundEx(sSessionInfo1, STRING_COMPLETE,
    "name=\"", 3, "\"", WEB_FLAG_IGNORE_WHITE_SPACE |
    WEB_FLAG_CASE_SENSITIVE, 1);
  WebPageLink("Check out", "ShopIt - Check Out"); // Link 3
  Print("sSessionInfo1: " + sSessionInfo1);

  ...

  sFormSid1 := sSessionInfo1;
  WebPageUrl("http://lab3/ShopItV60/kindofpayment.asp",
    "kindofpayment.asp", SHOPITV60_KINDOFPAYMENT_ASP004);
  ...
end TMain;

dclform
  ...
  SHOPITV60_KINDOFPAYMENT_ASP004:
    ...
//     "sid"                       := "858891446";
    "sid"                       := sFormSid1;
  ...
親トピック: セッション ID を解析および置換する


手動での差分の選択

差分 ページを利用する代わりに、受信本文 ページで、差分を手動で選択すると、フレーズの抽出方法をきめ細かく制御できます。

たとえば、セッション ID が 1 つの HTML ページの複数の場所に埋め込まれている場合に 差分 ページを使用すると、最初に出現したフレーズのみが抽出されます。これは、解析に使用した境界が適切でない場合でも同じです。

抽出するフレーズを手動で選択することによって、より正確な境界を選択できます。

  • 手動で差分を選択する
    ソース ビューまたは 受信本文 ビューで差分を手動で選択すると、フレーズの抽出方法をきめ細かく制御できます。
親トピック: セッション ID を解析および置換する


手動で差分を選択する

  1. メニュー ツリーから再生 TrueLog を選択します。
  2. ツールバーの 比較モード をクリックします。
  3. 受信本文 ビューで、TrueLog 間の差分を識別します。
  4. 記録 TrueLog で差分フレーズを右クリックします。 選択したフレーズが、BDL スクリプトに含まれる静的なデータの場合は、コンテキスト メニューが表示されます。
  5. セッション処理のカスタマイズ を選択します。 解析関数の挿入 ダイアログ ボックスが開きます。

必要に応じて解析関数を構成してください。

親トピック: 手動での差分の選択


スクリプト内の解析関数

解析関数は、スクリプト内の、レスポンス データの解析/検証を開始する Web API 呼び出しの前の位置に挿入する必要があります。 各 Web API 呼び出しの前には、複数の解析/検証関数を指定できます。

解析/検証関数の順序は関係ありません。 この規則の例外には、フラグ WebParseDataBound を使用する WebVerifyDataBound および WEB_FLAG_SYNCHRON があります。

例

検証関数を利用した BDL スクリプトの例を以下に示します。

WebVerifyHtml("Proper equipment leads to a successful trip", 1, ...);
WebPageLink("ShopIt");
親トピック: セッション ID を解析および置換する


HTTP 解析ルールの使用

HTTP 解析の例は、Silk Performer の記録ルールの機能の概要を示すために設計されました。

HTTP 解析ルールは、動的に値を変更するために、Recorder が解析関数 WebParseDataBoundEx() を生成するタイミングと、解析結果を置換する場所を指定します。解析ルールを利用すると、Recorder に作業スクリプトを自動生成させることができます。また、TrueLog Explorer を使用して、視覚的にセッションをカスタマイズする必要が通常はなくなります。

  • Web アプリケーションの解析ルールの例
親トピック: セッション処理のカスタマイズ


Web アプリケーションの解析ルールの例

サンプル Web アプリケーション ShopIt は、セッション ID を含むフォーム定義によって、Silk Performer Recorder にコンテキストなしの WebPageUrl() 関数を生成させる意図で作成したものです。これは、JavaScript で URL を組み立てることによって実現されています。記録ルールを使用せずに ShopIt を記録すると、ハードコーティングされたセッション ID を含むスクリプトが生成されます。

この HTTP 解析ルールの例では、セッション ID を含むフォーム定義によって、コンテキストなしの WebPageUrl() 関数が生成されています。[スクリプトの試行] を実行すると、ハードコードされたセッション ID が原因で再生エラーが発生します。

TrueLog Explorer のセッション処理カスタマイズ機能では、次のようにスクリプトを変更することによって、この問題を解決します。

例

var
  sFormSid1     : string (100);
  sSessionInfo1  : string (100);

  ...

  WebParseDataBoundEx(sSessionInfo1, STRING_COMPLETE,
    "name=\"", 5, "\"", WEB_FLAG_IGNORE_WHITE_SPACE, 1);
  WebPageLink("Check out", "ShopIt - Check Out"); // Link 3
  Print("sSessionInfo1: " + sSessionInfo1);

  ...

  sFormSid1 := sSessionInfo1;
  WebPageUrl(sParsedUrl,
    "Unnamed page", SHOPITV60_KINDOFPAYMENT_ASP004);

  ...

dclform
  ...
  SHOPITV60_KINDOFPAYMENT_ASP004:
    "choice"                    := "CreditCard",
    "price"                     := "115.8",
//     "sid"                       := "858891471";
    "sid"                       := sFormSid1;

カスタム Recorder の詳細

カスタマイズが完了して、スクリプトが正しく実行されるようになりました。しかし、今後記録されるスクリプトでも、毎回カスタマイズを行わなければならないという問題が残ります。

HTTP 解析ルールを利用すると、今後は、この種のカスタマイズを Silk Performer Recorder に自動的に行わせることができます。つまり、手動の操作なしで、記録スクリプトを自動生成できます。

それには、各セッション ID の解析方法を調査する必要があります。TrueLog Explorer によって提示されたカスタマイズを見ると、セッション ID が最初に発生した API 呼び出しがわかります。また、各セッション ID を解析するために使用できる境界もわかります。

TrueLog Explorer を使用して、HTML コード内でセッション ID が最初に出現する場所を見つけます。

<script LANGUAGE="JavaScript">
  function doProcess(mylink)
  {
    scheme="http://";
    server="lab3";
    serverport="";
    path="/ShopItV60/";
    file="kindofpayment.asp?";
    name="858891471";
      price="115.8";
    choice="CreditCard";
    mylink.href=scheme + server + serverport + path + file + "choice=" +
      choice + "&price=" + price + "&sid=" + name;
  }
</script>

TrueLog Explorer によって識別された左境界 name=" と 右境界 " は、セッション ID を抽出するためには妥当な選択です。

これで、HTTP 解析ルールの初期バージョンを Recorder 用に書き込むことができます。

<RecordingRuleSet>

  <HttpParsingRule>
    <Name>ShopIt V5.1 Session Id</Name>

    <Search>
      <SearchIn>Body</SearchIn>
      <LB>
        <Str>name=&quot;</Str>
      </LB>
      <RB>
        <Str>&quot;</Str>
      </RB>
    </Search>

    <ScriptGen>
      <VarName>ShopItSessionId</Varname>
    </ScriptGen>

  </HttpParsingRule>

</RecordingRuleSet>

ShopIt のセッション ID は、HTTP のレスポンス ヘッダーには存在しないので、レスポンス ボディだけを検索するように指定します (Search\SearchIn 属性を使用)。

左境界 (Search\LB\Str 属性で指定) を検索して、セッション ID を見つけるように設定します。
注: XML では、引用符 (") は、特殊文字列 &quot; を使用してエンコードされます。

セッション ID の終りには、単一引用符が付きます。これは、Search\RB\Str 属性で指定します。ここで、再び、引用符がエンコードされています。

最後に、解析結果を格納する変数の名前を定義しています。この名前は、ScriptGen\VarName 属性を使用して指定します。

このルール ファイルをすべてのプロジェクトでグローバルに利用できるようにするには、Silk Performer の Include ディレクトリに保存します。ファイル名は任意の長さにできますが、ファイルの拡張子は .xrl にする必要があります。この記録ルールを 1 つのプロジェクトだけで使用する場合は、このファイルを、特定の Silk Performer プロジェクトの Documents ディレクトリに保存します。

親トピック: HTTP 解析ルールの使用


検証を追加する

このセクションでは、HTML ページ タイトル、HTML コンテンツ、HTML テーブル、および HTML ソース コードについての検証チェックを作成する方法の概要を説明します。

注: TCP/IP および UDP ベースのアプリケーションでは、現在、コンテンツの検証を利用できません。
  • 検証の概要
    HTML ページ タイトル、HTML コンテンツ、HTML テーブル、および HTML ソース コードについて Web コンテンツ検証チェックを作成する方法の概要を説明します。
  • 検証チェック
    テスト スクリプトに検証チェックを埋め込む利点について説明します。
  • コンテンツ検証関数を挿入する
    検証関数を使うと、負荷のない状態で、クライアントから受け取ったコンテンツが、サーバーから送信されたものと同じであることを検証できます。
  • HTML 検証関数
    Web ブラウザに表示されるテキスト ベースのコンテンツを検証する関数の一覧を示します。
  • レスポンス データ検証関数
    サーバーから返されたレスポンス データの検証を行う関数の一覧を示します。
親トピック: TrueLog Explorer 21.0
関連タスク
レンダリング XML ビューを使用した検証文の追加
プレーン テキスト ビューを使用した検証文の追加


検証の概要

TrueLog Explorer を使用して、HTML ページ タイトル、HTML コンテンツ、HTML テーブル、および HTML ソース コードについての Web コンテンツ検証チェックを作成することができます。 検証したいテキストを HTML ソース コードで、またはレンダリングされた HTML ビューで直接に選択するだけで、必要なすべての検証関数が生成され、自動的に BDL スクリプトに挿入されます。

視覚的データ検証

TrueLog Explorer では、2 つの方法でコンテンツ検証を行うことができます。 簡単なのは、単純なポイント アンド クリック インターフェイスを使ってコンテンツ検証チェックを作成する方法です。

レスポンス データ検証

レスポンス データ検証は、サーバー機能を検証するための強力ですが複雑な方法です。 視覚的データ検証と同様に、レスポンス データ検証もポイント アンド クリック インターフェイスでセットアップします。 視覚的データ検証では、レンダリングされた HTML のビューで作業を行い、アプリケーションがエンド ユーザーに対して表示するコンテンツを検証します。 レスポンス データ検証では、HTML コードや XML コードなど、サーバーから返される、エンド ユーザーには表示されないデータを検証します。

選択された関数に応じて、TrueLog Explorer は、サーバーから返されたレスポンス データ全体に、または境界を指定して選択した部分だけに適用する、レスポンス データ検証関数を生成できます。

親トピック: 検証を追加する


検証チェック

テスト スクリプトに検証チェックを埋め込む利点について説明します。

  • 検証チェックを使う理由
    テスト スクリプトに検証チェックを埋め込む利点について説明します。
  • 記録中に自動的に検証を生成する
    HTML ページ タイトル検証およびレスポンス データのダイジェスト検証が、記録セッション中に自動的に生成されます。
  • TrueLog Explorer の検証チェック
    テスト スクリプトにコンテンツ チェックを追加して、サーバーから送信されるコンテンツを、現実の条件下で実際にクライアントが受信するかを検証します。
  • 再生中に検証チェックを有効にする
    Silk Performer のプロファイル設定で再生中の検証チェックを有効または無効にします。
親トピック: 検証を追加する


検証チェックを使う理由

アプリケーション エラーが HTTP レスポンスのエラーとして返されることは多くありません。 それよりも、アプリケーションが不適切なデータ値やエラー メッセージを HTML コンテンツに組み込んで返す方が一般的です (サーブレット例外が発生しました あるいは サーバーがビジー状態です といったエラー メッセージなど)。 HTTP ステータス コードをチェックしてもこの種のエラーは発見できないため、標準の HTTP エラー以外のものをチェックする検証関数がテスト スクリプトに組み込まれていない限り、アプリケーション エラーは見過ごされがちです。

検証がテスト スクリプトに組み込まれると、テストは単純な負荷テストから複合的な負荷/機能テストに進化します。 そのようなスクリプトは、大規模な負荷テスト シナリオで使用してもそれほどパフォーマンスは劣化しません。 この機能を使うことで、他の負荷テスト ツールでは検出できない種類のエラーを検出することができます (負荷時にしか発生しないエラーは、標準の負荷テスト スクリプトで検出できないため)。

TrueLog Explorer では、以下の方法でテスト スクリプトに検証機能を追加することができます。
  • Silk Performer Recorder を有効化して、記録時に検証チェックを自動生成する
  • ユーザーが レンダリング ビューでポイント アンド クリック インターフェイスを使って検証チェックを視覚的に適用する。 BDL コードを編集する必要はありません。 TrueLog Explorer が自動的に検証関数をスクリプトに追加してくれます。
  • 検証関数のコードを手作業でスクリプトに挿入して直接的に拡張する
親トピック: 検証チェック


コンテンツ検証関数を挿入する

  1. 分析または変更したい TrueLog を開きます。
  2. 検証したいコンテンツ (テキストや画像など) を含む TrueLog API ノードを選択します。
  3. 検証したいコンテンツを ソース ページで選択します。
    注: ページ タイトル検証関数およびページ ダイジェスト検証関数の場合は、このステップは不要です。
  4. ワークフロー バーの 検証の追加 をクリックします。 ワークフロー - 検証の追加 ダイアログ ボックスが開きます。
  5. 有効になっている検証を以下から 1 つ選択します。
    • ページ タイトルの検証
    • 選択したテキストの検証
    • HTML テーブル内で選択したテキストの検証
    • ダイジェストの検証
  6. 表示されるダイアログ ボックスに必要事項を入力します。 検証関数を BDL スクリプトにどう挿入するかを指定します。
    注: [左境界] と [右境界] は、自動的に識別されます。
  7. BDL スクリプトに追加したい検証それぞれについて、この作業を繰り返します。
  8. ワークフロー - 検証の追加 ダイアログ ボックスで はい をクリックします。
    スクリプトの試行が開始します。
  9. 検証が正常に合格したことを確認します。 検証を含む API ノードには、青い "V" 印が表示されます。
以下の作業が終了したときには、負荷テスト スクリプトは、エラーなしで実行できるようになっているはずです。
  • アプリケーションがセッション情報やユーザー入力データをどう処理するかのカスタマイズ
  • 必要な検証関数の挿入
  • 必要であれば、Silk Performer での BDL スクリプトを手動で編集します。
親トピック: 検証を追加する


HTML 検証関数

HTML 検証では、レンダリングして表示された Web コンテンツをチェックします。 このチェックでは、Web ブラウザに表示されたテキスト ベースのコンテンツを検証します。 レンダリング ビューで以下の HTML 検証関数を適用できます。
  • WebVerifyHtmlTitle- ページ タイトルの検証
  • WebVerifyHtml- テキスト ベースのコンテンツの検証
  • WebVerifyHtmlBound(Ex)- 境界内のコンテンツの検証
  • WebVerifyTable- HTML テーブルに含まれるコンテンツの検証
  • WebVerifyHtmlDigest- HTML ページのダイジェストの検証
  • タイトル検証関数を生成する
    WebVerifyHtmlTitle を使って、選択した HTML ページのタイトル (HTML <title/> タグのコンテンツ) をチェックします。
  • テキスト検証関数を生成する
    WebVerifyHtml を使って、レンダリング ビューで選択したテキストを検証します。
  • 境界内のテキスト検証関数を生成する
    WebVerifyHtmlBound(Ex) を使って、レンダリング ビューで選択したテキストを検証します。
  • HTML テキスト検証関数を生成する
    WebVerifyTable を使って、レンダリング ビューの HTML テーブル セルで選択したテキストを検証します。
  • HTML ダイジェスト検証関数を生成する
    WebVerifyHtmlDigest を使って Web ページ ダイジェストを計算し、計算済みのダイジェストと照らして検証します。
親トピック: 検証を追加する


タイトル検証関数を生成する

WebVerifyHtmlTitle 関数は、選択された HTML ページのタイトル (HTML <title> タグのコンテンツ) をチェックします。 タイトル検証を適用する際にテキストを選択する必要はありません。

  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. 以下の手順の 1 つを実行します。
    • スクリプト > ページ タイトルの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスで ページ タイトルの検証 をクリックします。
    ページ タイトルが 定数値 テキスト ボックスに表示され、定数値 オプション ボタンが選択されます。
  3. 省略可能: 既存または新規のパラメータと照合して検証するには、パラメータ値 オプション ボタンをクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。
    2. パラメータが存在しない場合には、次へ をクリックして パラメータ ウィザード を開き、新しいパラメータを作成します。
  4. ページ タイトル リスト ボックスで、次のいずれかを選択します。
    • 等しい
    • 異なる
    • 含む
    • 含まない
  5. チェック ボックスを使って、検証で大文字/小文字を区別するか、スクリプト全体のルールとして適用するかを指定します。
  6. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  7. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、タイトル検証用に自動生成されたものです。

transaction TMain
begin
  ...
  WebVerifyHtmlTitle("ShopIt - Greetings",
    WEB_FLAG_IGNORE_WHITE_SPACE |
    WEB_FLAG_EQUAL | WEB_FLAG_CASE_SENSITIVE, 1,
    SEVERITY_ERROR, bVerifyTitleSuccess1);
  WebPageUrl("http://myHost/shopit");
  ...
親トピック: HTML 検証関数


テキスト検証関数を生成する

WebVerifyHtml 関数は、レンダリング ビューで選択されたテキストを検証します。 TrueLog Explorer は、選択されたテキストが HTML ドキュメント内で出現する回数を自動的に検知します。

  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. レンダリング ビューで適切なテキストを選択します。
  3. 以下の手順の 1 つを実行します。
    • スクリプト > 選択したテキストの検証 を選択します。
    • 選択したテキストを右クリックして、選択したテキストの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスから HTML ページ内で選択したテキストの検証 を選択します。
    選択したテキストが 定数値 テキスト ボックスに表示され、定数値 オプション ボタンが選択されます。
  4. 省略可能: 既存または新規のパラメータと照合して検証するには、パラメータ値 オプション ボタンをクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。
    2. パラメータが存在しない場合には、次へ をクリックして パラメータ ウィザード を開き、新しいパラメータを作成します。
  5. 省略可能: 検証の許容度を上げたい場合には、以下の設定を変更します。
    注: このダイアログ ボックスの設定は、現在のページについて検証が成功する値に自動的に設定されています。 検証の許容度を上げたい場合にのみ、これらの設定を変更します ("ちょうど" "2" 回を "以上" "1" 回に変える、大文字/小文字を区別しない、など)。
    1. このページでの出現回数 リスト ボックスで、次のいずれかを選択します。
      • ちょうど
      • 以上
      • 以下
    2. 回 テキスト ボックスに数値を入力します。
  6. チェック ボックスを使って、検証で大文字/小文字を区別するか、スクリプト全体のルールとして適用するかを指定します。 結果の変数名が 結果の変数名 テキスト ボックスに表示されます。
  7. 省略可能: 結果の変数名 を編集します。
  8. 境界文字列を必要とする チェック ボックスがオフになっていることを確認してください。
  9. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  10. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、HTML テキスト検証用に自動生成されたものです。

transaction TMain
begin
  ...
  WebVerifyHtml("Hi Tester! ", 1, WEB_FLAG_IGNORE_WHITE_SPACE |
    WEB_FLAG_EQUAL | WEB_FLAG_CASE_SENSITIVE, NULL,
    SEVERITY_ERROR, nVerifyHtmlResult1);
  WebPageSubmit("Enter", SHOPIT_MAIN_ASP001, "ShopIt - Main menu");
  ...
親トピック: HTML 検証関数


境界内のテキスト検証関数を生成する

WebVerifyHtmlBound(Ex) 関数は、レンダリング ビューで選択されたテキストを検証します。 TrueLog Explorer は、選択されたテキストの位置を特定する一意の境界を自動的に検出します。

注: Silk Performer では、 TrueLog Explorer は WebVerifyHtmlBoundEx の代わりに WebVerifyHtmlBound を使用します。
  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. レンダリング ビューで適切なテキストを選択します。
  3. 以下の手順の 1 つを実行します。
    • スクリプト > 選択したテキストの検証 を選択します。
    • 選択したテキストを右クリックして、選択したテキストの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスから HTML ページ内で選択したテキストの検証 を選択します。
    選択したテキストが 定数値 テキスト ボックスに表示され、定数値 オプション ボタンが選択されます。
  4. 省略可能: 既存または新規のパラメータと照合して検証するには、パラメータ値 オプション ボタンをクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。
    2. パラメータが存在しない場合には、次へ をクリックして パラメータ ウィザード を開き、新しいパラメータを作成します。
  5. チェック ボックスを使って、検証で大文字/小文字を区別するか、スクリプト全体のルールとして適用するかを指定します。 結果の変数名が 結果の変数名 テキスト ボックスに表示されます。
  6. 省略可能: 結果の変数名 を編集します。
  7. 境界文字列を必要とする チェック ボックスをオンにします。 これにより、このページでの出現回数 の設定が無効になります。

    左境界と右境界が、左境界 と 右境界 のテキスト ボックスに表示されます。 このダイアログ ボックスで境界の文字列を編集することはできません。

  8. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  9. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、境界内の HTML テキスト検証用に自動生成されたものです。

transaction TMain
begin
  ...
  WebVerifyHtmlBound("Name:", "Address", "Tester",
    WEB_FLAG_IGNORE_WHITE_SPACE | WEB_FLAG_CASE_SENSITIVE,
    NULL, SEVERITY_ERROR, bVerifyHtmlBoundSuccess2);
  WebPageSubmit("Submit", SHOPIT_KINDOFPAYMENT_ASP002”);
  ...
親トピック: HTML 検証関数


HTML テキスト検証関数を生成する

WebVerifyTable 関数は、レンダリング ビューの HTML テーブル セルで選択されたテキストを検証します。 TrueLog Explorer は、HTML テーブルと、選択されたセルの行と列を自動的に特定します。

  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. レンダリング ビューで、テーブル セル内の適切なテキストを選択します。
  3. 以下のいずれかを行います。
    • スクリプト > HTML テーブル内で選択したテキストの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスで HTML テーブル内で選択したテキストの検証 を選択します。
    選択した行と列が 検証内容 リスト ボックスに表示されます。 必要であれば、別の行や列を指定します。
  4. リスト ボックスから次のいずれかを選択します。
    • 等しい
    • 異なる
    • 含む
    • 含まない
    選択したテキストが 値 テキスト ボックスに表示され、値 オプション ボタンが選択されます。
  5. 省略可能: 既存または新規のパラメータと照合して検証するには、パラメータ値 オプション ボタンをクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。
    2. パラメータが存在しない場合には、次へ をクリックして パラメータ ウィザード を開き、新しいパラメータを作成します。
  6. 検証で 大文字/小文字を区別する かどうかを指定します。
  7. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  8. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、HTML テーブル検証用に自動生成されたものです。

transaction TMain
begin
  ...
  WebVerifyTable(7, 3, 1, "115.8",
    WEB_FLAG_IGNORE_WHITE_SPACE |
    WEB_FLAG_CONTAINS | WEB_FLAG_CASE_SENSITIVE,
    NULL, SEVERITY_ERROR, bVerifyTableSuccess1);
  WebPageLink("Add to basket", "ShopIt - Basket");
  ...
親トピック: HTML 検証関数


HTML ダイジェスト検証関数を生成する

WebVerifyHtmlDigest 関数は、Web ページ ダイジェストを計算し、計算済みのダイジェストに照らして検証します。 ダイジェストとは、レンダリングされた HTML ページ内の特定の文字に関して計算された、文字の出現頻度のテーブルです。 HTML ドキュメントがフレーム セットに含まれている場合、テキストの検証は、ページ全体ではなく、選択されたテキストを含むフレームだけを対象に行われます。

  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. レンダリング ビューを選択します。
  3. 以下の手順の 1 つを実行します。
    • スクリプト > ページ ダイジェストの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスで ダイジェストの検証 をクリックします。
    ダイジェストの名前が 定数名 テキスト ボックスに表示されます。
  4. 省略可能: 定数名 テキスト ボックスを編集します。
  5. 検証対象 グループ ボックスで、検証を適用する対象を指定します。
    • すべての文字
    • 印刷可能な文字
    • 英数字
  6. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  7. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、HTML ダイジェスト検証用に自動生成されたものです。

const
  HTML_DIGEST_1     :=
"\h01910000000011D063032CCB7D023EFBBD02000000000000000000000000000000001
602010601010703010108010503020201"
"\h03010201030502010105010403070103010205050402060107050102";

transaction TMain
begin
  ...
  WebVerifyHtmlDigest(HTML_DIGEST_1, 79, 0, 0, NULL,
    SEVERITY_ERROR);
  WebPageLink("Check out", "ShopIt - Check Out"); // Link 3
  ...
親トピック: HTML 検証関数


レスポンス データ検証関数

レスポンス データ検証関数は、サーバーから正しいレスポンス データが返されたかどうかを検証します。 Web アプリケーションの場合、データ検証の一環として包括的なソース コード チェックも行われます。

ソース ビューで、コードやテキストなどのデータを選択することによって、レスポンス データ検証関数を視覚的に適用できます。 TrueLog Explorer では、次のデータ検証関数を生成することができます。
  • WebVerifyData- 選択したデータの検証
  • WebVerifyDataBound(Ex)- 境界内の選択したデータの検証
  • WebVerifyDataDigest- データ ダイジェストの検証
  • HTML データ検証関数を生成する
    WebVerifyData を使って、ソース ビューで選択したコードやテキストなどのデータを検証します。
  • 境界内のデータ検証関数を生成する
    WebVerifyDataBound(Ex) を使って、ソース ビューで選択したコードやテキストなどのデータを検証します。
  • HTML データ ダイジェスト検証関数を生成する
    WebVerifyDataDigest を使って Web ページ ダイジェストを計算し、計算済みのダイジェストと照合します。
親トピック: 検証を追加する


HTML データ検証関数を生成する

WebVerifyData 関数は、ソース ビューで選択されたコードやテキストなどのデータを検証します。 TrueLog Explorer は、選択されたデータが選択された HTML ドキュメント内で何回出現するかを自動的に検出します。

  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. ソース ビューで該当するデータを選択します。
  3. 以下の手順の 1 つを実行します。
    • スクリプト > 選択したテキストの検証 を選択します。
    • 選択したテキストを右クリックして、選択したテキストの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスから HTML ページ内で選択したテキストの検証 を選択します。
    選択したテキストが 定数値 テキスト ボックスに表示され、定数値 オプション ボタンが選択されます。
  4. 省略可能: 既存または新規のパラメータと照合して検証するには、パラメータ値 オプション ボタンをクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。
    2. パラメータが存在しない場合には、次へ をクリックして パラメータ ウィザード を開き、新しいパラメータを作成します。
  5. 選択したテキストが出現する頻度を以下のように指定します。
    1. このページでの出現回数 リスト ボックスで、次のいずれかを選択します。
      • ちょうど
      • 以上
      • 以下
    2. 回 テキスト ボックスに数値を入力します。
  6. チェック ボックスを使って、検証で大文字/小文字を区別するか、スクリプト全体のルールとして適用するかを指定します。 結果の変数名が 結果の変数名 テキスト ボックスに表示されます。
  7. 省略可能: 結果の変数名 を編集します。
  8. 境界文字列を必要とする チェック ボックスがオフになっていることを確認してください。
  9. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  10. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、データ検証用に自動生成されたものです。

transaction TMain
begin
  ...
  WebVerifyData("main.asp?from=welcome", 1,
    WEB_FLAG_IGNORE_WHITE_SPACE |
    WEB_FLAG_EQUAL | WEB_FLAG_CASE_SENSITIVE, 1,
    SEVERITY_ERROR, nVerifyDataResult1);
  WebPageUrl("http://myHost/shopit/", "ShopIt - Greetings");
  ...
親トピック: レスポンス データ検証関数


境界内のデータ検証関数を生成する

WebVerifyDataBound(Ex) 関数は、ソース ビューで選択されたコードやテキストなどのデータを検証します。 TrueLog Explorer は、選択されたデータの位置を特定する一意の境界を自動的に検出します。

注: TrueLog Explorer は、WebVerifyDataBound の代わりに WebVerifyDataBoundEx を使用します。
  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. ソース ビューで該当するデータを選択します。
  3. 以下の手順の 1 つを実行します。
    • スクリプト > 選択したテキストの検証 を選択します。
    • 選択したテキストを右クリックして、選択したテキストの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスから HTML ページ内で選択したテキストの検証 を選択します。
    選択したテキストが 定数値 テキスト ボックスに表示され、定数値 オプション ボタンが選択されます。
  4. 省略可能: 既存または新規のパラメータと照合して検証するには、パラメータ値 オプション ボタンをクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。
    2. パラメータが存在しない場合には、次へ をクリックして パラメータ ウィザード を開き、新しいパラメータを作成します。
  5. チェック ボックスを使って、検証で大文字/小文字を区別するか、スクリプト全体のルールとして適用するかを指定します。 結果の変数名が 結果の変数名 テキスト ボックスに表示されます。
  6. 省略可能: 結果の変数名 を編集します。
  7. 境界文字列を必要とする チェック ボックスをオンにします。 これにより、このページでの出現回数 の設定が無効になります。

    左境界と右境界が、左境界 と 右境界 のテキスト ボックスに表示されます。 このダイアログ ボックスで境界の文字列を編集することはできません。

  8. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  9. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、境界内のデータ検証用に自動生成されたものです。

transaction TMain
begin
  ...
  WebVerifyDataBound("ahref=\"", "\"", "main.asp?from=welcome",
    WEB_FLAG_IGNORE_WHITE_SPACE | WEB_FLAG_CASE_SENSITIVE, 1,
    SEVERITY_ERROR, bVerifyDataBoundSuccess1);
  WebPageUrl("http://myHost/shopit/", "ShopIt - Greetings");
  ...
親トピック: レスポンス データ検証関数


HTML データ ダイジェスト検証関数を生成する

WebVerifyDataDigest 関数は、Web ページ ダイジェストを計算し、その後、コンテンツを計算済みのダイジェストに照らして検証します。 HTML や XML のソース コードの場合、ダイジェストは、ページのレスポンス ボディに含まれる特定の文字に関して計算した、文字の出現頻度のテーブルから構成されます。

  1. メニュー ツリーで、検証したい Web ページを選択します。
  2. ソース ビューを開きます。
  3. 以下の手順の 1 つを実行します。
    • スクリプト > ページ ダイジェストの検証 を選択します。
    • 検証の追加 をクリックし、ワークフロー - 検証の追加 ダイアログ ボックスで ダイジェストの検証 をクリックします。
    ダイジェストの名前が 定数名 テキスト ボックスに表示されます。
  4. 省略可能: 定数名 テキスト ボックスを編集します。
  5. 検証対象 グループ ボックスで、検証を適用する対象を指定します。
    • すべての文字
    • 印刷可能な文字
    • 英数字
  6. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  7. OK をクリックします。 関数がテスト スクリプトに追加されます。

コード例

次のサンプル コード (太字部分) は、データ ダイジェスト検証用に自動生成されたものです。

const
  DATA_DIGEST_1     :=
"\h019200000000E7FBEFFFAEF7FD2AFEFFFF2B000000000000000000000000000000004
F06040072000800020038000600060002"
"\h0006000A0035004B0024000E00050001000100010001000200010002000F0059005A0
058000100030007000300020003000100";
"\h1200010001000600020003000100150013000200010001000300010003000300A1002
30047003E00BA002100710056009B0001"
"\h000D0062003C00620079003E000300AE006D00BC0023000E002C0005000E000200020
0";

transaction TMain
begin
  ...
  WebVerifyDataDigest(DATA_DIGEST_1, 188, 0, 0, 1,
    SEVERITY_ERROR);
  WebPageUrl("http://lab3/ShopItV60/default.asp", "ShopIt - Greetings");
  ...
親トピック: レスポンス データ検証関数


ユーザー データのカスタマイズ

このセクションでは、ユーザーにより入力されたデータをどのようにパラメータ化すれば現実世界におけるユーザーの活動を負荷テスト時により適切にエミュレートできるかを説明します。

  • ユーザー入力データ
    記録されたユーザー入力データをパラメータ化されたデータに置き換えることによってユーザー入力データのカスタマイズを行い、テスト スクリプトをより現実的なものにする方法について説明します。
  • ユーザー データのカスタマイズのシナリオ
    ユーザー データのカスタマイズが一般に行われる 5 つのシナリオについて説明します。
  • HTML ユーザー データをカスタマイズする
    パラメータに基づいて HTML ユーザー データをカスタマイズする方法について説明します。
  • [フォーム データ] ビュー
    カスタマイズ可能なすべてのフォーム フィールドの表示およびカスタマイズを行うための便利な手段を提供する フォーム データ ビューについて説明します。
  • 複数列データ ファイル
    複数列データ ファイルを使用する利点を説明します。
親トピック: TrueLog Explorer 21.0


ユーザー入力データ

ビジュアルなユーザー入力データのカスタマイズ機能を使用すると、記録されたユーザー入力データをパラメータ化されたデータに置き換えることでテスト スクリプトをより現実的なものにすることができます。

ユーザー入力データのカスタマイズを行わないと、シミュレートするトランザクションはすべて同一のものになり、現実の環境でよく見られる変数を再現できません。

たとえば、パラメータ ウィザード を使用すると、テスト中にフォームに入力されるユーザー入力データをカスタマイズできます。パラメータ ウィザード を使用すると、テスト中にフォーム フィールドに入力される値を指定できます。そして、記録されたユーザー入力データをランダムなパラメータ化されたユーザー データに置き換えることによって、テスト スクリプトをより現実的なものにすることができます。

ユーザー データのカスタマイズの用途は以下のとおりです。
  • 特定のトランザクションを実行するたびに異なる値をサーバーに渡して機能テストを行う
  • 指定された確率分布に基づいて送信値を選択することにより、ユーザーの現実の行動をシミュレートすること

TrueLog Explorer ワークフロー

ユーザー データのカスタマイズを最も良く行えるのは以下のいずれかです。
  • テスト スクリプトからセッション情報が構文解析された後
  • サーバーからの応答が検証される前
親トピック: ユーザー データのカスタマイズ


ユーザー データのカスタマイズのシナリオ

ユーザー データのカスタマイズが一般に行われる場合のシナリオは 5 つあります。
  • HTML フォームのポスト (WebPageSubmit を用いる)
  • XML データのポスト (WebUrlPostBin または WebCustomRequestBin を用いる)
  • データベース アプリケーション用データのポスト (入力データを Oracle OCI、DB2 CLI、ODBC などのデータベース アプリケーションの SQL コマンドやストアド プロシージャにバインドする (OraSet*、Ora8Set*、OdbcSet* を用いる) ことによる)
  • Oracle フォーム制御値の変更 (ユーザー入力) のポスト (OraForms*Set 関数を用いる)
  • Citrix ユーザー入力アクション (たとえば、マウス イベント、キーボード入力など) のポスト (CitrixKey* 関数や CitrixMouse* 関数を用いる)
注: ユーザー データのカスタマイズは、ターミナル エミュレーション アプリケーションではサポートされていませんが、入力パラメータはターミナル エミュレーションのテスト スクリプトで手動で編集することができます。

HTML の場合、パラメータ化はフォームの宣言部で行われます。パラメータ化すると、テスト スクリプトの dclform セクションで宣言されているようなハードコードされたフォーム フィールド値は、ランダム変数に置き換わります。

XML アプリケーションおよびデータベース アプリケーションの場合、パラメータ化は上記の関数呼び出しのパラメータで行われ、ハードコードされたパラメータ値はデータ駆動型変数またはランダム変数に置き換わります。

親トピック: ユーザー データのカスタマイズ


HTML ユーザー データをカスタマイズする

パラメータに基づいて HTML ユーザー データをカスタマイズする方法について説明します。

  • 新しいパラメータを使用して HTML ユーザー データをカスタマイズする
    ランダム変数に基づいてパラメータを作成する手順を説明します。
  • 既存のパラメータを使用して HTML ユーザー データをカスタマイズする
    既存のパラメータを使用して HTML ユーザー データをカスタマイズすることによって、変則的で多様なユーザーの動作をエミュレートします。
親トピック: ユーザー データのカスタマイズ


新しいパラメータを使用して HTML ユーザー データをカスタマイズする

読み進める前に、静的なセッション情報がすべてテスト スクリプトから削除されていることと、最も最近のスクリプトの試行で TrueLog Explorer に表示される TrueLog が生成されていることを確認してください。

HTML ベースのアプリケーションでは、ユーザー データのカスタマイズの目標は、フォーム フィールドに送信される値をカスタマイズすることです。

このタスクでは、ランダム変数に基づいてパラメータを作成する手順を説明します。

  1. ファイル > TrueLog の追加 を選択して、TrueLog を TrueLog Explorer にロードします。 TrueLog は、静的なセッション情報がすべて削除されたスクリプトの試行に基づいている必要があります。
  2. ワークフロー バーの ユーザー データのカスタマイズ をクリックします。 ワークフロー - ユーザー データのカスタマイズ ダイアログ ボックスが開きます。
  3. HTML フォームにおけるユーザー入力データのカスタマイズ リンクをクリックします。 これにより、TrueLog Explorer で以下のアクションが行われます。
    • メニュー ツリーで、最初の WebPageSubmit API 呼び出しノードを選択します。
    • TrueLog のステップ スルー ダイアログ ボックスを開きます (フォーム送信 オプション ボタンが選択されています)。
    • リクエスト ビューが表示されます。

      リクエスト ビューには、選択されている WebPageSubmit 呼び出しによって送信された HTML フォームが含まれているページが表示されます。カーソルをフォーム コントロールの上に置くと、ツールチップに、そのコントロールの名前、初期値、および送信値が表示されます。オレンジ色の線は、下にある フォーム データ ビュー内の対応する BDL フォーム フィールド宣言を示します。

  4. TrueLog のステップ スルー ダイアログ ボックスの 次を検索 または 前を検索 をクリックすると、TrueLog 内のすべての WebPageSubmit 呼び出しに目を通すことができます (これらは、ユーザー データのカスタマイズの候補となる呼び出しです)。
    注: リクエスト ビューで強調表示されている HTML コントロールは、カスタマイズ可能なフォーム フィールドを表しています。
  5. リクエスト ページで、カスタマイズしたいフォーム コントロールを右クリックし、値のカスタマイズ を選択します。 記録されている値を、さまざまな種類の入力データ（ファイルにあらかじめ定義した値や一般的なランダム値を含む）に置き換えることができます。また、記録された入力データをカスタマイズした値に置き換えるためのコードをテスト スクリプトに生成することもできます。 パラメータ ウィザード が開きます。
    パラメータ ウィザード では、次の 2 つの方法でスクリプトの値を変更できます。
    • スクリプトの dclparam または dclrand のセクションで定義されている既存のパラメータを使用する
    • 新しい定数値、ランダム値、複数列データ ファイル内の値に基づいた、新しいパラメータを作成する

    新しいパラメータを作成すると、そのパラメータは既存パラメータ群に追加され、以降のカスタマイズで利用できるようになります。

  6. パラメータを新規に作成する オプション ボタンをクリックし、それから 次へ をクリックして新しいパラメータを作成します。 パラメータの新規作成 ページが開きます。
  7. ランダム変数からパラメータを作成 オプション ボタンをクリックし、それから 次へ をクリックします。 ランダム変数 ページが開きます。
  8. テスト スクリプトに挿入したいランダム変数の種類をリストボックスから選択し、次へ をクリックします。 選択した変数の種類の簡単な説明が下部のウィンドウに表示されます。 変数の名前と属性の指定 ページが開きます。
  9. 変数の名前を 名前 テキスト ボックスに入力します。
  10. 省略可能：ファイル グループ ボックスの 新規作成 をクリックして、新しいランダム変数ファイルを作成します。
  11. 値を呼び出す順序として ランダム または シーケンシャル を指定します。 ファイルからの文字列 というランダム変数タイプでは、指定されたファイルからランダムに選択または順次選択できるデータ文字列が生成されます。
  12. ファイル グループ ボックスの 名前 リスト ボックスから構成済みのデータ ソースを選択して、次へ をクリックします。
    使用法の選択 ページが表示されます。
  13. 以下の選択肢のいずれかを選択して、新しいランダム変数の使用法を指定します。
    • 毎回
    • トランザクションごと
    • テストごと
  14. 完了 をクリックします。 これで、テスト スクリプトは、そのフォーム フィールドについて、記録された値ではなくランダム変数を使用するようになります。新しいランダム変数関数が BDL ページに追加されます。

テスト スクリプトにランダム変数関数を追加した状態でスクリプトの試行を起動し、スクリプトがエラーなしに動作することを確かめます。

親トピック: HTML ユーザー データをカスタマイズする


既存のパラメータを使用して HTML ユーザー データをカスタマイズする

  1. ファイル > TrueLog の追加 を選択して、TrueLog を TrueLog Explorer にロードします。 TrueLog は、静的なセッション情報がすべて削除されたスクリプトの試行に基づいている必要があります。
  2. ワークフロー バーの ユーザー データのカスタマイズ をクリックします。 ワークフロー - ユーザー データのカスタマイズ ダイアログ ボックスが開きます。
  3. HTML フォームにおけるユーザー入力データのカスタマイズ リンクをクリックします。
  4. TrueLog のステップ スルー ダイアログで 次を検索 または 前を検索 をクリックして、TrueLog 内のすべての WebPageSubmit 呼び出しを参照します。
    注: これらは、ユーザー データのカスタマイズの候補となる呼び出しです。
    リクエスト ページには、選択されている WebPageSubmit 呼び出しによって送信された HTML フォームが含まれているページが表示されます。カーソルをフォーム コントロールの上に置くと、ツールチップに、そのコントロールの名前、初期値、および送信された値が表示されます。
    注: リクエスト ページで強調表示されている HTML コントロールは、カスタマイズ可能なフォーム フィールドを表しています。
  5. リクエスト ページで、カスタマイズしたいフォーム コントロールを右クリックし、値のカスタマイズ を選択します。 記録されている値を、さまざまな種類の入力データ（ファイルにあらかじめ定義した値や一般的なランダム値を含む）に置き換えることができます。また、記録された入力データをカスタマイズした値に置き換えるためのコードをテスト スクリプトに生成することもできます。 パラメータ ウィザード が開きます。
    パラメータ ウィザード では、次の 2 つの方法でスクリプトの値を変更できます。
    • スクリプトの dclparam または dclrand のセクションで定義されている既存のパラメータを使用する
    • 新しい定数値、ランダム値、複数列データ ファイル内の値に基づいた、新しいパラメータを作成する

    新しいパラメータを作成すると、そのパラメータは既存パラメータ群に追加され、以降のカスタマイズで利用できるようになります。

  6. 既存のパラメータを使用する を選択します。 これにより、テスト スクリプトの dclparam セクションまたは dclrand セクションに定義されている既存のパラメータを指定できます。
  7. リスト ボックスから、使用するデータ型を選択します。 このリストには、テスト スクリプトの dclparam セクションと dclrand セクションに定義されているすべての変数が表示されます。
  8. 完了 をクリックします。 テスト スクリプトが新しいパラメータによって変更されます。
  9. カスタマイズ対象の次のフォーム フィールドを見つけるには、TrueLog のステップ スルー ダイアログの 次を検索 をクリックします。
親トピック: HTML ユーザー データをカスタマイズする


[フォーム データ] ビュー

リクエスト ビューおよび フォーム データ ビューのどちらからでも、入力データを変更する関数呼び出しごとに入力データをカスタマイズできます。フォーム データ ビューは、カスタマイズ可能なすべてのフォーム フィールドの表示とカスタマイズを行う便利な手段となります。フォーム データ ビューは、BDL スクリプトのフォーム セクションとそれに含まれているすべての名前/値ペアを表したものです。

(リクエスト ビューと同様に) コントロールを右クリックして 値のカスタマイズ を選択し、パラメータ ウィザード を開きます。

ユーザー データが既にカスタマイズされているコントロールは、緑色の輪郭で表示されます。

親トピック: ユーザー データのカスタマイズ


複数列データ ファイル

複数列データ ファイルを使ったパラメータ化は、データをパラメータ化する有効な方法です。 特定の文字列値の組み合わせを保存したファイルを定義します。 データ ファイルの各列はそれぞれのパラメータに対応します。 複数列データ ファイルを使うと、データ駆動型テスト モデルが利用できるようになり、すべてのユーザー データ入力をただ 1 つのデータ ファイルでカバーできます。

親トピック: ユーザー データのカスタマイズ
親トピック: SAPGUI テストスクリプトのカスタマイズ
親トピック: Oracle Forms のユーザー入力データのカスタマイズ


データベース アプリケーションでの作業

ここでは、TrueLog Explorer のスクリプト カスタマイズ機能を共通データベース API に依存するアプリケーションのテストに適用する方法について説明します。

  • データベース アプリケーションでの作業 - 概要
    TrueLog Explorer のスクリプト カスタマイズ機能を共通データベース API に依存するアプリケーションのテストに適用する方法について説明します。
  • サンプル データベース アプリケーション - Customer OCI
    このアプリケーションを使って TrueLog Explorer のデータベース アプリケーション機能を学ぶことができます。
  • データベース TrueLog の構造
    データベース TrueLog の解析に利用できるビューについて説明します。
  • 相関関係
    データベースの入力パラメータと出力パラメータの相関関係を識別する方法を説明します。
  • データベース解析関数
    結果セットの 1 つの要素に対する解析文を生成する Parse Element Value 関数について説明します。
  • 入力パラメータのカスタマイズ
    SQL 文への入力パラメータのカスタマイズの適用について説明します。
  • 結果セット データの検証
    SQL クエリなどのデータベース操作の結果セットに検証を適用します。 検証を利用すると、テストの実行中に、予想されるテスト結果が返らない場合はエラーを発生させることによって、テスト結果を拡張できます。
親トピック: TrueLog Explorer 21.0


データベース アプリケーションでの作業 - 概要

Silk Performer は、データベースの拡張サポートを提供します。これには、Microsoft ODBC や、Oracle データベース (バージョン 8 および 9) にアクセスするための標準インターフェイスである Oracle Call Interface 8 (OCI8) に対する拡張サポートが含まれます。

Silk Performer のデータベース サポートには、次の API が含まれます。

  • Oracle OCI 7.0

  • Oracle OCI 8.0
  • Microsoft ODBC
  • IBM DB2/CLI
データベース アプリケーションに対して、TrueLog Explorer は、Web ベース アプリケーションに利用できるものと同じスクリプト カスタマイズ機能を提供します。
  • ユーザー データのカスタマイズ
  • 検証関数
  • 入力と出力の相関関係のカスタマイズ(Web アプリケーションにおけるセッション処理のカスタマイズに相当する)
注: データベースに対する TrueLog On Error 分析は現在サポートされていません。

この章を読み進む前に、TrueLog Explorer の基本機能を熟知していることが不可欠です。

親トピック: データベース アプリケーションでの作業


データベース TrueLog の構造

TrueLog Explorer は、Web アプリケーション用の HTTP クライアント リクエストと HTTP/HTML サーバー レスポンスの視覚化をサポートするのと同じ方法で、データベースのリクエストとレスポンスの視覚化をサポートします。 ただし、データベース TrueLog の場合は、HTML TrueLog の場合の GUI の代わりに、読み取り可能なデータベース形式で表されます。

TrueLog Explorer は データベース ブラウザとして機能し、SQL 文およびそれに対応する入力パラメータと出力パラメータを同時に見ることができます。 サポートされる各データベース API は、同じ TrueLog 形式でデータを表します。

データベース TrueLog で提供される 5 つのウィンドウは次のとおりです。
  • メニュー ツリー - 関連するすべてのAPI 呼び出し(データを送信または取得する呼び出し)が一覧表示されます。
  • 入力パラメータ - データベースに送信された SQL 入力(バインド)データです。
  • SQL コマンド - 対応する SQL コマンドです。
  • 結果セット - クライアントが受信した出力 SQL データです。
  • 情報 - テスト実行に関するデータです。

データベース TrueLog に対してアクティブになり適用されるビュー タブは、SQL コマンド、情報、BDL のみです。

親トピック: データベース アプリケーションでの作業


相関関係

このセクションでは、データベースの入力パラメータと出力パラメータの相関関係を識別する方法を説明します。

  • 入力と出力の相関関係
    入力と出力の相関機能の概要について説明します。これを利用すると、記録 API 呼び出しと再生 API 呼び出しを並べてステップ スルーできます。
  • セッション データを変数に置き換える
    再生テスト実行と記録セッションを比較して、セッション関連データを変数に置き換えます。 その後、この差分値は、出力値と入力値の相関関係を検索する際の基礎として使用されます。
  • 手動相関
    入力値と出力値の相関を手動で検索する場合について説明します。
親トピック: データベース アプリケーションでの作業


入力と出力の相関関係

TrueLog Explorer の入力と出力の相関関係機能を利用すると、記録 API 呼び出しと再生 API 呼び出しを並べてステップ スルーできます。 また、データベースの入力パラメータと出力パラメータの相関関係を明らかにすることもできます。 Web アプリケーションでのセッション処理のカスタマイズと同様に、入力と出力の相関関係機能は、再生テスト実行と記録セッションを比較して、セッション関連の値を示す可能性のある差分を特定します。 その後、この差分値は、テスト実行スクリプト内の出力値と入力値の相関関係を検索するための基礎として使用されます。 最終的に、TrueLog Explorer を利用すると、テスト スクリプト内で特定された動的な値を変更できます。

入力と出力の相関関係機能は、TrueLog Explorer でデータベース TrueLog を開いているときのワークフロー バーから利用できます。

データベース エラーの種類は、テスト対象のデータベースの種類に固有です。 一意制約エラーは、通常、同じデータが繰り返しデータベースに送信されると発生します。 このようなエラーは、一般に、ユーザー ID や注文番号のようなデータベース テーブルの主キーとして使用される一意の値が送信された場合に発生します。 このような個人情報が複数回送信されると、エラーが発生します。 この種の重複は、テストスクリプト内で識別し、TrueLog Explorer を使用してカスタマイズできるセッション情報です。

次の 2 つの BDL コード例は、入力と出力の相関関係を示しています。 実行呼び出しの入力パラメータは [2288] です。 この値は、前の呼び出しの出力パラメータ テーブルに出現しているので、相関関係が明かになっています。

出力パラメータの値(2290)は、後のテスト実行で入力パラメータの値を設定する際に使用できるよう、解析された変数(sParam1)に格納されます。

親トピック: 相関関係


セッション データを変数に置き換える

  1. ファイル > TrueLog の追加 を選択します。 ファイルを開く ダイアログ ボックスが開きます。
  2. 再生データベース TrueLog を選択し、開く をクリックします。 再生 TrueLog が TrueLog Explorer で開きます。
  3. ワークフロー バーの 入力と出力の相関関係 をクリックします。 ワークフロー - 入力と出力の相関関係 ダイアログ ボックスが表示されます。
  4. 差分の検索 をクリックします。 関連する記録 TrueLog を自動的に開くかどうかを尋ねるメッセージ ボックスが表示されます。
  5. OK をクリックします。 比較モードが有効になります。 記録 TrueLog が開き、相関関係のステップ スルー ダイアログ ボックスが表示されます。
  6. デフォルトの選択(異なる結果セット および 記録 TrueLog の値)を使用し、次を検索 をクリックして、記録されている結果セット データと再生された結果セット データの間の最初の差分に進みます。 差分はデータベース サーバーによって返される動的なデータであり、相関関係の候補です。 動的なデータがさらに SQL コマンドまたはストアド プロシージャの入力パラメータとして使用される場合、そのデータは出力データと入力データの相関関係を構成します。
  7. 相関関係 をクリックします。 入力と出力の相関関係 ダイアログ ボックスが開きます。

    動的な値が別の SQL コマンドまたはストアド プロシージャの入力値として出現している場合、そのステートメント/プロシージャ名が 出力パラメータ値を次の呼び出しの入力として使用する ウィンドウに表示されます。 TrueLog Explorer は、後でこのような呼び出しの入力パラメータ値を出力パラメータ値で置き換えるための変数を作成できます。

    注: 出力パラメータ値を次の呼び出しの入力として使用する ウィンドウに <<相関する値が見つかりません>> と表示される場合は、相関関係は検出されなかったということです。 キャンセル をクリックして、相関関係のステップ スルー ダイアログ ボックスに戻ります。
  8. チェック ボックス をクリックして、特定されたステートメントの名前を選択します(複数存在する場合もあります)。
  9. 移動 をクリックして、テスト スクリプトのコンテキスト内で入力値を確認します。
  10. 入力値をカスタマイズする必要がある場合は、カスタマイズ をクリックし、テストスクリプト内の入力パラメータを変数に置き換えます。

スクリプトの試行を起動して、エラーなしでスクリプトが実行されることを確認します。

親トピック: 相関関係


手動相関

手動相関は、よくわかっているアプリケーションに対してのみ行うことをお勧めします。手動相関を実行するには、SQL コマンド ビューで再生パラメータを右クリックし、相関関係の検索 を選択します。

手動相関は、受信本文 ビュー(入力パラメータ)、送信本文 ビュー(結果セット)、および SQL コマンド ビューでのみ使用できます。受信本文 ビューで使用すると、TrueLog Explorer は SQL コマンドの前にある相関する値(送信本文 ビュー内)を検索します。送信本文 ビューで使用すると、TrueLog Explorer は SQL コマンドの後にある相関する値(受信本文 ビュー内)を検索します。SQL コマンド ビューで使用すると、パラメータが SQL コマンド内にハードコーディングされている場合に、TrueLog Explorer は SQL コマンドの前にある相関する値(送信本文 ビュー内)を検索します。

例：

INSERT INTO MY_PERSON (P_NO, P_FIRSTNAME, P_LASTNAME)
VALUES ( 2289, "Michael", "Smith" )
親トピック: 相関関係


データベース解析関数

データベース TrueLog に対して、TrueLog Explorer は単一の解析関数(Parse Element Value)を提供します。 この解析関数は、SQL ウィンドウの 出力データ ビューのコンテキスト メニューから利用できます。

この関数は、結果セットの 1 つの要素に対する解析文を生成します。 例：

Ora8StmtExecute(ghSvcCtx0, ghStmt0);
Ora8StmtFetch(ghStmt0, ORA_FETCH_ALL, 100); // rows fetched: 1
sParam2 := RsGetString("1", 4);
Print("sParam2: " + sParam2);

データ型(number、float、または string)に応じて、適切な解析関数が生成されます(RsGetInt、RsGetFloat、または RsGetString)。

親トピック: データベース アプリケーションでの作業


入力パラメータのカスタマイズ

効果的な負荷テストのためには、データベース テストを実行するたびに値が送信されるように、パラメータ化された入力データを SQL 文に割り当てることをお勧めします。 そうしないと、テストを実行するたびに、記録されている同じ入力パラメータ値が送信されます。これでは、実際のユーザー アクティビティの実践的なシミュレーションになりません。 TrueLog Explorer を利用すると、記録された入力パラメータ値をカスタマイズされた入力パラメータに置き換えるコードを、テスト スクリプト内にビジュアルに生成できます。

注: Web アプリケーション用のユーザー データのカスタマイズと同じメソッドが使われます。

サンプル データベース アプリケーションである Customer OCI を使用すると、ユーザー入力データをカスタマイズを実験できます。 記録された簡単なビジネス トランザクションを再生するスクリプトをカスタマイズして、元々固定データ フィールドだった所に、ランダムなデータを入力する変数を使用できます。 入力データ値としては、固定値、ランダム値、または構成済みのデータ ファイル(CSV ファイルなど)から取得した値を使用できます。

  • 複数列データ ファイルに基づく入力パラメータを作成する
    複数列データ ファイルを使ったパラメータ化は、データをパラメータ化する有効な方法です。 特定の文字列値の組み合わせを保存したファイルを定義します。
親トピック: データベース アプリケーションでの作業


複数列データ ファイルに基づく入力パラメータを作成する

複数列データ ファイルを使ったパラメータ化は、データをパラメータ化する有効な方法です。 特定の文字列値の組み合わせを保存したファイルを定義します。 データ ファイルの各列はそれぞれのパラメータに対応します。 複数列データ ファイルを使うと、データ駆動型テスト モデルが利用できるようになり、すべてのユーザー データ入力をただ 1 つのデータ ファイルでカバーできます。

  1. ファイル > TrueLog の追加 を選択します。 ファイルを開く ダイアログ ボックスが開きます。
  2. 再生データベース TrueLog を選択し、開く をクリックします。 再生 TrueLog が TrueLog Explorer で開きます。
  3. ワークフロー バーの 入力パラメータのカスタマイズ をクリックします。 ワークフロー - 入力パラメータのカスタマイズ ダイアログ ボックスが開きます。
  4. 入力パラメータのカスタマイズ をクリックします。 テスト スクリプトで入力パラメータを含む最初の API ノードが選択されて、TrueLog のステップ スルー ダイアログが表示されます(その際、入力パラメータ オプション ボタンが選択されています)。
    注: 選択されているノードの入力パラメータをカスタマイズしない場合は、次を検索 をクリックし、入力パラメータを含む次のノードに進みます。

    データのカスタマイズを示すグラフィック
  5. 入力パラメータ ビューまたは SQL コマンド ビューで、入力パラメータを右クリックし、値のカスタマイズ を選択します。 スクリプトで値を変更するには 2 つの方法があります。BDL スクリプトの dclparam セクションまたは dclrand セクションであらかじめ定義されている既存のパラメータを使用できます。新しいパラメータは、定数値、ランダム変数、または複数列データ ファイルのデータに基づく変数から作成できます。 パラメータ ウィザード - 値のカスタマイズ ダイアログ ボックスが開きます。
  6. 複数列データ ファイルからパラメータを作成 オプション ボタンをクリックし、次へ をクリックします。 パラメータ ウィザード - 複数列データ ファイルからのパラメータ作成 画面が開きます。
  7. 以下のいずれかのステップを実行します。
    • ファイル名 リスト ボックスから構成済みの複数列データ ファイルを選択します。
    • 新しい複数列 CSV(コンマ区切り値)ファイルを作成するには、新規作成 ボタンをクリックします。新規ファイルの名前を入力して OK をクリックします。
  8. 列名の編集、行の追加/削除、または列全体の追加/削除を行うには、列を右クリックします。
    注: 各列は(1 個の入力値に割り当て可能な)個別のパラメータを表します。
  9. 必要に応じて、データ フィールドにデータを入力します。 または、列ヘッダー名を直接選択して、データ フィールドをカスタマイズすることもできます。
  10. 必要に応じて ハンドル名 や パラメータ名 をカスタマイズします。
  11. 次へ ボタンをクリックしてファイルを保存します。 パラメータの挿入属性の選択 ページが開きます。
  12. 行選択の順序 グループ ボックスで、複数列データ ファイルから値を代入するときの順序を選択します。
    • ランダム - FileGetRndRow 関数を使用すると、パラメータがデータ ファイルのランダムな行から割り当てられます。
    • シーケンシャル (マシン全体) - FileCSVLoadGlobal 関数と FileGetNextRow 関数を使用すると、マシン全体で、パラメータがデータ ファイルの次のシーケンシャル行から割り当てられます。マシン上のすべての仮想ユーザーは、現在の行で同じグローバル行ポインタを使用するようになります。
    • シーケンシャル (テスト全体) - FileCSVLoadGlobal 関数と FileGetNextUniqueRow 関数を使用すると、テスト全体で、パラメータがデータ ファイルの次のシーケンシャル行から割り当てられます。すべてのマシン上のすべての仮想ユーザーは、現在の行で同じグローバル行ポインタを使用するようになります。使用したデータ行を削除する をチェックすると、一度使用したデータが、データ ファイルから自動的に削除されます。
      注: 削除されたデータを戻すことはできません。
  13. 属性 グループ ボックスで、新しい挿入をどのくらいの頻度で行うかを指定します。 たとえば、新規ユーザー名の挿入をトランザクションのたびに行うか、テストにつき 1 度だけ行うかを指定します。
    • トランザクションごと
    • テストごと

    使用可能なすべてのユーザー グループとトランザクションは、トランザクションごと ドロップダウン リストから選択できます。

  14. 完了 をクリックします。 TrueLog Explorer によってテスト スクリプトが変更され、複数列データ ファイルが保存されます。
カスタマイズされた入力パラメータは、緑で表示されます。

テスト スクリプトにランダム変数関数を追加した状態でスクリプトの試行を起動し、スクリプトがエラーなしに動作することを確かめます。

親トピック: 入力パラメータのカスタマイズ


結果セット データの検証

TrueLog Explorer では、SQL クエリなどのデータベース操作の結果セットに検証を適用できます。 検証を利用すると、テストの実行中に、予想されるテスト結果が返らない場合はエラーを発生させることによって、テスト結果を拡張できます。 出力データを選択して簡単なコマンドを適用することで、必要な検証関数がすべて生成されて、BDL スクリプトに自動的に挿入されます。

TrueLog Explorer には、2 つのデータベース操作検証オプションが用意されています。
  • 要素の値の検証
  • 結果セットの行数の検証
  • データベース操作の要素の値を検証する
    テストの実行中に、予想されたテスト結果が返らない場合はエラーを発生させることによって、テストの結果を拡張するために、結果セット データの要素の値を検証します。
  • データベースの結果セットの行数を検証する
    結果セット行数の検証では、返されたデータベース結果セットに、指定した行数が含まれることを確認します。
親トピック: データベース アプリケーションでの作業


データベース操作の要素の値を検証する

  1. ファイル > TrueLog の追加 を選択します。 ファイルを開く ダイアログ ボックスが開きます。
  2. 再生データベース TrueLog を選択し、開く をクリックします。 再生 TrueLog が TrueLog Explorer で開きます。
  3. 編集 > TrueLog のステップ スルー を選択します。 代替方法：ツールバーの TrueLog のステップ スルー をクリックします。 TrueLog のステップ スルー ダイアログ ボックスが開きます。
  4. 結果セット オプション ボタンをクリックします。
  5. 次を検索 をクリックして、結果セットを返す最初のデータベース コマンドに進みます。 たとえば、fetch などの Ora8StmtFetch コマンドを見つけることができます。 セット内の最初のデータ要素が選択されます。
  6. 以下の手順の 1 つを実行します。
    • 検証するデータ要素を右クリックし、要素値の検証 を選択します。
    • ワークフローバーの 検証の追加 をクリックし、要素値の検証 をクリックします。
    指定したデータ要素およびその行または列の仕様が 値 のテキスト ボックスに表示されます(その際、値 オプション ボタンが選択されます)。
  7. 省略可能: 既存のパラメータまたは新規のパラメータを検証するには、パラメータ値 をクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。 パラメータが存在しない場合は、パラメータ ウィザード が開き、新規パラメータを作成できます。
    2. OK をクリックします。
  8. 深刻度 グループ ボックスで、検証の結果、否定的な結果が返った場合の深刻度を指定します。
  9. 検証で大文字小文字を区別したり、それをスクリプト全体のルールとして適用するには、適切なチェックボックスをオンにします。 結果の変数名が 結果の変数名 テキスト ボックスに表示されます。
  10. OK をクリックします。 テスト スクリプトに関数が追加されます。

スクリプトの試行を起動して、エラーなしでスクリプトが実行されることを確認します。

親トピック: 結果セット データの検証


データベースの結果セットの行数を検証する

結果セット行数の検証では、返されたデータベース結果セットに、指定した行数が含まれることを確認します。 返された結果セットの行数が、指定した行数と異なる場合は、エラーが発生します。

  1. ファイル > TrueLog の追加 を選択します。 ファイルを開く ダイアログ ボックスが開きます。
  2. 再生データベース TrueLog を選択し、開く をクリックします。 再生 TrueLog が TrueLog Explorer で開きます。
  3. 編集 > TrueLog のステップ スルー を選択します。 代替方法：ツールバーの TrueLog のステップ スルー をクリックします。 TrueLog のステップ スルー ダイアログ ボックスが開きます。
  4. 結果セット オプション ボタンをクリックします。
  5. 次を検索 をクリックして、結果セットを返す最初のデータベース コマンドに進みます。 たとえば、fetch などの Ora8StmtFetch コマンドを見つけることができます。 セット内の最初のデータ要素が選択されます。
  6. 以下の手順の 1 つを実行します。
    • 検証するデータ要素を右クリックし、結果セット行数の検証 を選択します。
    • ワークフローバーの 検証の追加 をクリックし、行数の検証 をクリックします。
    現在のデータベースの行数が 値 のテキスト ボックスに表示されます(その際、値 オプション ボタンが選択されます)。
  7. 省略可能: 既存のパラメータまたは新規のパラメータを検証するには、パラメータ値 をクリックします。
    1. 参照 (...) ボタンをクリックし、パラメータを選択します。 パラメータが存在しない場合は、パラメータ ウィザード が開き、新規パラメータを作成できます。
    2. OK をクリックします。
  8. 行数が現在の行数と一致する程度を、[ちょうど]、[以上]、[以下] から選択します。
  9. 深刻度 グループ ボックスで、検証の結果、否定的な結果が返った場合の深刻度を指定します。
  10. OK をクリックします。 テスト スクリプトに関数が追加されます。

スクリプトの試行を起動して、エラーなしでスクリプトが実行されることを確認します。

親トピック: 結果セット データの検証


XML アプリケーションでの作業

このセクションでは、XML アプリケーションのテスト用に提供されているスクリプト カスタマイズ機能や TrueLog 分析機能について説明します。

  • XML アプリケーションでの作業 - 概要
    XML アプリケーションのテスト用に提供されているスクリプト カスタマイズ機能や TrueLog 分析機能について説明します。
  • XML TrueLog 構造
    XML TrueLog は、読みやすい XML メニュー ツリー形式を使って、XML の要素、属性、値を視覚化します。
  • XML 解析関数
    XML ドキュメント内の特定の要素や属性の値を XML 解析関数がどう解析するかを説明します。
  • XML アプリケーションのセッション処理のカスタマイズ
    サーバー レスポンスを操作して、XML アプリケーションの負荷テスト中に状態情報を保存する方法を説明します。
  • ユーザー入力データのカスタマイズ
    パラメータ化を行うことで、ハードコードされた要素や属性の値をカスタム値に置き換える方法を説明します。
  • XML アプリケーションの検証関数
    検証関数では、指定された XML 要素/属性のテスト実行時の値を検証します。
親トピック: TrueLog Explorer 21.0


XML アプリケーションでの作業 - 概要

TrueLog Explorer では、XML アプリケーションについても、HTML アプリケーションと同様に以下のサポートを行っています。

  • セッション処理
  • 入力データのカスタマイズ
  • 検証関数
  • TrueLog On Error の分析

TrueLog Explorer の Web サービス サポートの特徴に、XML TrueLog とのやり取りや分析を行いやすくするための、直感的な XML データ インターフェイスがあります。

TrueLog Explorer の XML API は、Web API と同様の機能を持っています。 クエリや検証のための XML データ アクセス関数は、値が複数回指定されている場合でも値の正確な場所を指定できるという点で、Web 関数より優れています。 Web API では、WebParseDataBound 関数を使って左右の境界を指定できるだけであり、これだけではサーバー データの変更に柔軟に対応しきれません。

この章を読み進む前に、TrueLog Explorer の基本機能を熟知していることが不可欠です。

サンプル Web サービス

本章で使用するサンプル スクリプトは、サンプル Web サービスの SOAP/XML メッセージが基になっています。 このスクリプトは、.NET Explorer で生成し、Silk Performer で使用できるようにエクポートしたものです。

.NET Explorer を使ってサンプル Web サービスを表示するには、次の URL にアクセスしてください。http://demo.borland.com/BorlandSampleService/BorlandSampleService.asmx?WSDL

親トピック: XML アプリケーションでの作業


XML TrueLog 構造

XML TrueLog は、読みやすい XML メニュー ツリー形式を使って、XML の要素、属性、値を視覚化します。

  • XML TrueLog の UI の概要
    XML TrueLog が TrueLog Explorer でどのように視覚化されるかについて説明します。
  • メニュー ツリー
    負荷テスト中にダウンロードされた TrueLog データを、展開/折りたたみが可能な API ノードに整理します。
  • [コンテンツ] ペイン
    受信したデータをさまざまな方法で表示します。
  • 情報ペイン
    BDL スクリプト、HTTP ヘッダー、タイミング統計など、テスト スクリプトおよびテスト実行に関するデータが表示されます。
親トピック: XML アプリケーションでの作業


XML TrueLog の UI の概要

XML TrueLog は、読みやすい XML メニュー ツリー形式を使って、XML の要素、属性、値を視覚化します。この XML コントロールは、選択した API 呼び出しのレスポンス データを、レンダリング ページの直感的な XML インターフェイスに表示します。受信本文 ページでは、サーバーから返されたデータがそのまま表示されます。送信本文 では、サーバーへ送られたデータがそのまま表示されます。

XML TrueLog の 3 つの主要要素の詳細については、以下のトピックを参照してください。

親トピック: XML TrueLog 構造


メニュー ツリー

インターフェイスの左側にあるメニュー ツリーでは、TrueLog API ノードを展開したり折りたたんだりすることができます。ノードをクリックすると、そのコンテンツが [コンテンツ] ペインに、履歴の詳細が 情報 ペインに表示されます。

親トピック: XML TrueLog 構造


[コンテンツ] ペイン

TrueLog Explorer は、受信したすべてのデータに対して複数のビューを提供します。テスト対象のアプリケーションの種類 (Web、XML、データベース、TCP/IP、UDP) によって、コンテンツ ペインの表示オプションは変化します。

項目 | 説明
レスポンス (HTML、XML) | レスポンス ページには、メニュー ツリーで選択した API ノードに対するサーバーからのレスポンスが、視覚的にレンダリングされて表示されます。HTML レスポンスは、レスポンス ページの背後で実行されている Internet Explorer コントロールによってレンダリングされます。XML レスポンスは、XML データをメニュー ツリー形式で表示する XML コントロールによって表示されます。HTML でも XML でもないレスポンスはレンダリングされないので、受信本文 ページを使って表示する必要があります。XML コントロール内で要素や属性を右クリックすると、メニュー ツリーを 1 レベル以上展開できます。
SQL コマンド | XML では利用できません。
差分 (HTTP アプリケーション) | 差分 ページには、選択したノード間の 受信本文 の差分が一覧表示されます。このページは、サーバー レスポンス内の動的情報を検索するのに役立ちます。セッション情報を探すには、まずここを検索します。 差分モード でのみ利用可能です。
リクエスト (HTML、XML) | サーバーから返されたリクエスト データを表示します。ポストされた XML データは、メニュー ツリー形式の XML コントロールに表示されます。要素は赤で、属性は青緑で表示されます。
親トピック: XML TrueLog 構造


情報ペイン

情報 ペインでは、BDL スクリプト、HTTP ヘッダー、タイミング統計など、テスト スクリプトおよびテスト実行に関するデータが表示されます。テスト対象のアプリケーションの種類 (Web、XML、データベース、Oracle Forms、SAPGUI、Citrix、TCP/IP、UDP など) によって、情報 ペインの表示内容は変化します。

項目 | 説明
情報

情報 ページには、開いている TrueLog ファイルと選択した API ノードについての一般情報が表示されます。
BDL

BDL ページには、開いている TrueLog に対応する BDL スクリプトが表示されます。この BDL スクリプトは、選択されている API ノードの行まで自動的に移動して表示されます。
参照 | XML では利用できません。
送信ヘッダー(HTTP)

送信ヘッダー ページには、アプリケーション (再生 TrueLog の場合は Silk Performer、記録 TrueLog の場合はブラウザ) がサーバーに送信する HTTP ヘッダーがそのまま表示されます。
受信ヘッダー(HTTP)

受信ヘッダー ページには、サーバーがアプリケーションに送信する HTTP ヘッダーがそのまま表示されます。
送信本文(HTTP、TCP/IP、UDP) | アプリケーションからサーバーへ HTTP-POST コマンドで送られたデータが表示されます。
受信本文(HTTP、TCP/IP、UDP)

受信本文 ページには、アプリケーションがサーバーから受信したデータが表示されます。このデータは、サーバーから受信したそのままの形式で表示されます (HTML のレンダリングや XML のメニュー ツリー表示は行われません)。
統計(HTTP)
Web ブラウザ駆動 - AJAX アプリケーションの場合には、統計 ページには Web ページのタイミング統計が表示されます。ここには、Web ページ コンポーネントや通信要素ごとのタイミング情報が含まれます。コンポーネントごとの内訳も含めて、正確なレスポンス時間がグラフで表示されます。これにより、エラーやページ ダウンロードの遅延の根本原因を突き止めることができます。統計 ページには、ページ コンポーネントごとに次のデータが表示されます。
  • DNS 検索時間：渡されたドメイン/ホスト名から IP アドレスを解決するのに要した時間
  • 接続時間：擬似ユーザーがサーバーに接続するのに要した時間
  • ネット ラウンドトリップ：クライアント リクエストの最初のバイトからサーバー レスポンスの最後のバイトまでの時間 (ドキュメントはすべて含むが埋め込みオブジェクトは含まない)
  • キャッシュ統計値
親トピック: XML TrueLog 構造


XML 解析関数

サーバーから返された XML コンテンツに対して、XML 解析関数を構造化された方法で適用することができます。 XML 解析関数は、XML ドキュメント内の特定の要素や属性の値を解析します。
注: XML 解析をお勧めできるのは、検証やカスタマイズを拡張する場合だけです。

セッション処理のカスタマイズにはお勧めしません。要素や属性には、XML ドキュメントの要素を指定するための標準言語である XML Path Language (XPath) を介してアクセスします。 XML 解析関数は、レンダリング ページで適用します。 Web API 型の解析は、ソース ページから XML に対して実行することができます。

XML 解析関数には次のものがあります。

  • WebXmlParseNodeValue
  • WebXmlParseNodeAttribute
注: 階層構造になった値は、XML コントロールを使って解析することができません。
親トピック: XML アプリケーションでの作業


XML アプリケーションのセッション処理のカスタマイズ

通常、セッション情報は XML コードに含まれないため、XML セッション処理のカスタマイズが必要になることはほとんどありません。

まれにセッション情報が XML コードに含まれる場合には、Web アプリケーションについて説明したセッション処理のカスタマイズの作業に進んでください。

親トピック: XML アプリケーションでの作業


ユーザー入力データのカスタマイズ

ユーザー入力データのカスタマイズの目的は、送信された XML データの要素や属性の値をカスタマイズすることです。 たとえば、記録された SOAP トラフィックのデータなどです。

HTML では、テスト スクリプトの DCLFORM セクションで宣言された、ハードコードされたフォーム フィールド値は、ランダム変数に置き換えられます。 この場合、form 宣言でパラメータ化が行われます。

XML では、対応する関数のポスト データ パラメータで宣言された、ハード コードされた要素や属性の値は、ランダム変数に置き換えられます。 パラメータ化は post data、WebUrlPostBin、WebCustomRequestBin の各呼び出しの WebPagePost パラメータで行われます (WebPagePost は .NET Explorer によって生成されます。 これは、HTTP-POST コマンド用に使用するページ レベルの API 呼び出しです)。

ユーザー入力データのカスタマイズは、以下の目的で使用することができます。

  • 特定のトランザクションを実行するたびに異なる値をサーバーに渡して機能テストを行う
  • 所定の確率分布に基づいて送信する値を選択することで、実世界のユーザーの動作をシミュレートする
注: 送信する XML データ要素/属性の値のパラメータ化を設定したい場合は、Web アプリケーションについて説明したユーザー入力データの作業に進んでください。
親トピック: XML アプリケーションでの作業


XML アプリケーションの検証関数

XML 検証関数は、指定された XML 要素/属性 (XPath クエリにより特定される) のテスト実行時の値を検証します。

  • XML アプリケーションの検証関数
    検証関数では、指定された XML 要素/属性のテスト実行時の値を検証します。
  • XML 検証関数を挿入する
    すべての解析関数および検証関数は、レスポンス データの解析/検証を開始する Web API 呼び出しの前に指定する必要があります。
親トピック: XML アプリケーションでの作業


XML アプリケーションの検証関数

XML 検証関数は、指定された XML 要素/属性 (XPath クエリにより特定される) のテスト実行時の値を検証します。 レンダリング ページで右クリックして、XML 検証関数を挿入することができます。

TrueLog Explorer には、次の XML 検証関数があります。
  • WebXmlVerifyNodeValue - 選択した要素の値を確認します。 この関数は、XML ツリー コントロールのコンテキスト メニューから 要素値の検証 を選択すると生成されます。
  • WebXmlVerifyNodeAttribute - 選択した属性の値を確認します。 この関数は、XML ツリー コントロールのコンテキスト メニューから 属性値の検証 を選択すると生成されます。

再生中の検証チェック

Silk Performer のプロファイル設定で、検証関数を有効化/無効化することができます。 Silk Performer で、設定 > アクティブ プロファイル を選択し、その後 再生 > Web > 検証 > HTML > XML を選択します。

XML 検証 チェックボックスを使って、WebXmlVerifyNodeValue 関数と WebXmlVerifyNodeAttribute 関数を有効化/無効化します。

スクリプトのプロファイル設定は、WebSetOption という BDL 関数を使って上書きできます。

親トピック: XML アプリケーションの検証関数
関連タスク
レンダリング XML ビューを使用した検証文の追加
プレーン テキスト ビューを使用した検証文の追加


XML 検証関数を挿入する

すべての解析関数および検証関数は、レスポンス データの解析/検証を開始する Web API 呼び出しの前に指定する必要があります。 各 Web API 呼び出しの前には、複数の解析/検証関数を指定できます。
注: 解析/検証関数をテスト スクリプトに挿入する順番は関係ありません。
  1. レンダリング ページで XML の要素または属性を選択して右クリックし、要素値の検証 を選択します。 代替方法: 属性の検証の場合には、コンテキスト メニューが 属性値の検証 コマンドになります。 XML 検証関数の挿入 ダイアログが開きます。 選択した要素値が 値 編集ボックスにあらかじめ設定され、値 オプション ボタンが自動的に選択されます。
  2. パラメータと照らして検証するには、パラメータ オプション ボタンを選択します。 定数値に対する検証だけでなく、既存または新規のパラメータと照らして検証することもできます。
    1. 参照 (...) ボタンをクリックします。
    • パラメータが既に存在する場合には、そのパラメータを参照して選択します。
    • パラメータが存在しない場合には、参照 (...) ボタンをクリックします。 パラメータ ウィザード が開いて、新しいパラメータを作成することができます。
  3. 選択された要素が出現する頻度を、以下のように指定します。
    • このページでの出現回数 リスト ボックスから、ちょうど、以上、以下 のいずれかを選択します。
    • 回 フィールドに数値を入力します。
    注: このダイアログの設定は、現在のページに対して正常な検証が保証される値に自動的に設定されています。 検証の許容度を上げたい場合にのみ、これらの設定を変更します (ちょうど 2 回を 以上 1 回に変える、あるいは、検証で大文字/小文字を区別しない、など)。
  4. 特定の Xpath でのみ要素を検証する場合は、正確な Xpath クエリ チェック ボックスをオンにします。
  5. 検証をスクリプト全体のルールとして適用するかどうか、大文字/小文字を区別するかどうかを、該当するチェック ボックスで指定します。 結果の変数名 テキスト ボックスには、結果変数名があらかじめ設定されています。必要に応じてこの名前を編集します。
  6. ダイアログの 深刻度 の部分で、検証から否定的な結果が返されたときに生成する深刻度を指定します (エラー、警告、情報、または カスタム)。
  7. OK をクリックして、関数をテスト スクリプトに追加します。 XML の属性検証は、属性名も指定しなければならないことを除いて、XML の要素検証と同じです。
  8. スクリプトの試行を行って、カスタマイズしたスクリプトが正しく実行されることを確認します。
親トピック: XML アプリケーションの検証関数


SAPGUI アプリケーションでの作業

SAPGUI ベースのアプリケーションに対して、TrueLog Explorer では、TrueLog の記録、TrueLog の再生、基本的な TrueLog 解析、データ解析、コンテンツ検証、およびユーザー入力データのカスタマイズが利用できます。

この章を読み進む前に、TrueLog Explorer の基本機能を熟知していることが不可欠です。

  • SAPGUI TrueLog の構造
    SAPGUI TrueLog の要素について説明します。
  • SAPGUI TrueLog の関数
    SapGuiActiveSetWindow 関数と SapGuiRoundTrip 関数について説明します。
  • SAPGUI TrueLog をステップ スルーする
    テスト実行を行ったら、その結果の TrueLog 内を移動するためのオプションを設定します。
  • SAPGUI テスト スクリプトを分析する
    テスト スクリプトの生成が終わったら、スクリプトの試行を実行して、そのスクリプトがエラーなしで実行されるかどうかを確認できます。
  • 再生 TrueLog と記録 TrueLog
    SAP の記録 TrueLog と再生 TrueLog の差分を分析する方法について説明します。
  • SAPGUI テストスクリプトのカスタマイズ
    検証関数、解析関数、およびパラメータ化された入力データによってテストスクリプトをカスタマイズする際に利用できるオプションについて説明します。
  • 検証および解析関数
    値検証関数によって、サーバーから送信されたコンテンツがクライアントで本当に受信されるかどうかを検証する方法、および SAPGUI 解析関数を追加することの有用性について説明します。
親トピック: TrueLog Explorer 21.0


SAPGUI TrueLog の関数

TrueLog Explorer には、上位レベルの SAPGUI 関数が 2 つあります。
  • SapGuiActiveSetWindow- 新しい GUI ウィンドウの生成を示す最上位の API ノードです。 ウィンドウで実行されたすべてのアクションが、SapGuiActiveSetWindow 関数の下にグループ化されます。
  • SapGuiRoundTrip- これは仮想ノードです。実際には、サーバーに送信される SapGuiRoundTrip という API 呼び出しはありません。 これらのノードは、サーバー ラウンドトリップの過程で発生するすべてのクライアント側アクションをグループ化するために使用されます。 ラウンドトリップ前とラウンドトリップ後の両方の状態を表示できます。 各 SapGuiSetActiveWindow ノードの下には、複数のラウンドトリップ ノードが含まれる場合があります。

SapGuiActiveSetWindow 関数を表すグラフィック
親トピック: SAPGUI アプリケーションでの作業


SAPGUI TrueLog をステップ スルーする

テスト後は、通常、複数の TrueLog On Error ファイルが TrueLog Explorer にロードされます(エラーを返した仮想ユーザーごとに 1 つの TrueLog)。 エラーが発生した順に、次々とエラーを移動できます。 この機能によって、開いているすべての TrueLog を手動で確認して次のエラーを検索する必要がなくなるので、エラー分析プロセスが簡単になります。

  1. 負荷テストが終了したら、Silk Performer の 結果の検討 をクリックします。
    注: TrueLog On Error ファイルが作成されるのは、Silk Performer の エラー時に TrueLog を生成する オプションが有効になっている場合だけです。
    結果の検討 ダイアログ ボックスが表示されます。
  2. TrueLog Explorer をクリックします。
    注: Silk TrueLog Explorer の起動 ボタンは、テスト時にエラーが検出されなかった場合や Truelog On Error が有効でない場合は、無効になっています。 そのような場合は、直接 Performance Explorer による結果の分析に進みます。
    TrueLog Explorer が起動されて、現在のテストで生成された TrueLog On Error ファイルがロードされ、TrueLog のステップ スルー ダイアログが表示されます。
  3. TrueLog のステップ スルー ダイアログ ボックスで、適切なオプション ボタンを選択します。 以下を選択できます。
    • すべての [API 呼び出し] (各API ノード)
    • すべての [ラウンドトリップ] (SapGuiRoundtrip 呼び出し)
    • すべての [ウィンドウ] (SapGuiSetActiveWindow ノード)
    • すべての [カスタマイズ可能な呼び出し] (フィールド値の変更をカスタマイズ可能な次のノード)
    • すべてのエラー
    TrueLog On Error ファイルは、記録された順に検索されます。
  4. 次を検索 をクリックして、最初の API 呼び出し、ラウンドトリップ、ウィンドウ、カスタマイズ可能な呼び出し、またはエラーに進みます。
エラー メッセージは、[情報] ペインに表示されます。 TrueLog メニュー ツリーでは、再生エラーを含む各 API ノードに赤い "X" が付加されています。
親トピック: SAPGUI アプリケーションでの作業


SAPGUI テスト スクリプトを分析する

テスト スクリプトの生成が終わったら、スクリプトの試行を実行して、そのスクリプトがエラーなしで実行されるかどうかを確認できます。 スクリプトの試行は、スクリプトが正確に意図したトランザクションを再作成するかどうかを判定します。

スクリプトの試行のデフォルトのオプション設定には、テスト時にダウンロードされたデータのリアルタイム表示や、ログ ファイルおよびレポート ファイルの作成などがあります。

スクリプトの試行では、1 人の仮想ユーザーのみが実行され、トランザクション間の思考時間遅延が発生しないストレス テスト オプションが有効になります。

  1. Silk Performer ワークフロー バーで、スクリプトの試行 をクリックします。 スクリプトの試行 ダイアログ ボックスが表示されます。
  2. スクリプトの試行中にレンダリングされたページのトランザクションを表示するには、TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします。
  3. 実行 をクリックします。
    注: ここでは、実際の負荷テストではなく、スクリプトのデバッグが必要かどうかを確認するためのテスト実行のみを実行します。
    スクリプトの試行が開始されます。 Silk Performer の 監視 ウィンドウが開き、実行の進捗についての詳細な情報が表示されます。

    TrueLog Explorer が開き、スクリプトの試行の実行中にダウンロードされたデータが表示されます。 記録中にアクセスされた主要な SAPGUI ウィンドウは、それぞれ TrueLog メニュー ツリーの上位の SapGuiSetActiveWindow API ノードとして表示されます。 記録されたすべてのサーバー ラウンドトリップとユーザー アクションは、対応する SapGuiSetActiveWindow ノードのサブノードとして表示されます。

親トピック: SAPGUI アプリケーションでの作業


再生 TrueLog と記録 TrueLog

このセクションでは、SAP の記録 TrueLog と再生 TrueLog の差分を分析する方法について説明します。

  • 再生 TrueLog と記録 TrueLog を比較する
    記録時にキャプチャされたコントロールやスクリーンショットの値と状態を再生時と比較して、差分があるかどうかを調べます。
  • 再生 TrueLog と記録 TrueLog を同期させる
    再生 TrueLog と記録 TrueLog の間で対応する API ノードを同期させて、TrueLog 間の差分を検索します。
親トピック: SAPGUI アプリケーションでの作業


再生 TrueLog と記録 TrueLog を比較する

SAPGUI アプリケーションをテストしたとき、再生 TrueLog と記録 TrueLog の間で、対応するコントロール値に差分が生じることがあります。 それらの一部は、再生エラーの原因となる場合があります。

  1. 再生 TrueLog を開き、テストの分析 をクリックします。 テストの分析 ダイアログ ボックスが表示されます。
  2. テスト実行の比較 をクリックします。 関連する記録 TrueLog が [比較ビュー] に表示されます。 TrueLog のステップ スルー ダイアログ ボックスが表示されます。
  3. TrueLog のステップ スルー ダイアログ ボックスで、適切なオプション ボタンを選択します。 以下を選択できます。
    • すべての [API 呼び出し] (各API ノード)
    • すべての [ラウンドトリップ] (SapGuiRoundtrip 呼び出し)
    • すべての [ウィンドウ] (SapGuiSetActiveWindow ノード)
    • すべての [カスタマイズ可能な呼び出し] (フィールド値の変更をカスタマイズ可能な次のノード)
    • すべてのエラー
    TrueLog On Error ファイルは、記録された順に検索されます。
  4. 次を検索 をクリックして、最初の API 呼び出し、ラウンドトリップ、ウィンドウ、カスタマイズ可能な呼び出し、またはエラーに進みます。
  5. コントロールおよびスクリーンショットの値と状態をビジュアルに比較して、差分があるかどうかを確認します。 見つかった差分に応じて、必要なカスタマイズを行います。
  6. スクリプトの試行 をクリックして、カスタマイズがエラーなしで実行されることを確認します。
  7. スクリプトが十分にカスタマイズされ、必要なカスタマイズがすべて追加されるまで、この手順を繰り返します。
  8. 次の手順を実行し、比較モードをオフにします。
    • 表示 > 比較モード を選択します。
    • 比較モード アイコンをクリックします。
親トピック: 再生 TrueLog と記録 TrueLog


SAPGUI テストスクリプトのカスタマイズ

Silk Performer を利用してテスト スクリプトを生成し、スクリプトの試行を実行したら、TrueLog Explorer では、以下の方法によってスクリプトをカスタマイズできます。
  • コンテンツ検証関数 - 検証の追加 ツールを使用して、サーバーが送信したコンテンツが実際に受信されたことを検証することによって、テスト中にダウンロードされたデータを分析できます。 検証は、システム開発後も、稼働中のパフォーマンス管理に役立ちます。
  • 解析関数 -TrueLog Explorer では、ソース ビューと コントロール ページで、SAPGUI 解析関数をビジュアルに挿入できます。 手動でコードを記述する必要はありません。TrueLog Explorer によって、自動的にスクリプト内に解析関数が生成されます。
  • パラメータ化されたユーザー データ - ユーザー入力データのカスタマイズを利用すると、静的なユーザー入力データを、トランザクションごとに変更されるパラメータ化された動的ユーザー データに置き換えることによって、テスト スクリプトを現実に近いものにできます。 このようなデータ駆動型テストを作成するために、手動でのスクリプト記述は必要ありません。

入力データを変更する各 SAPGUI 関数呼び出しに対して、戻り値の検証、値の解析、および入力データのカスタマイズができます。 これらの操作は、ソース ビュー (コントロール内を右クリック) と コントロール メニュー ツリーの両方から実行できます。

  • フォーム フィールド用のユーザー入力データをカスタマイズする
    静的なユーザー入力データを、トランザクションごとに変化するパラメータ化された動的なデータに置き換えることによって、テスト スクリプトを現実に近いものにします。
  • 複数列データ ファイル
    複数列データ ファイルを使用する利点を説明します。
  • SAPGUI の [コントロール] メニュー ツリー
    フォーム フィールドを表示したりカスタマイズするための便利な手段を提供する コントロール メニュー ツリーについて説明します。
  • コピー コントロール ID 機能
    選択した SAPGUI コントロールのコントロール ID をクリップボードにコピーする Copy Control ID 機能について説明します。 この機能によって、特殊な呼び出しの非ビジュアルのスクリプト記述が簡単になります。
親トピック: SAPGUI アプリケーションでの作業


フォーム フィールド用のユーザー入力データをカスタマイズする

現実の条件の下では、SAPGUI アプリケーションのユーザーは、予測できないような組み合わせのデータをフォームに投稿します。効果的な SAPGUI アプリケーション テストの目標は、テスト スクリプトによって、そのような変則的で多様なユーザーの動作をエミュレートすることです。

パラメータ ウィザード を使用すると、テスト中にフォームに入力されるユーザー入力データをカスタマイズできます。[パラメータ ウィザード] によって、フォーム フィールドに入力されるデータを指定できます。また、記録されたユーザー入力データをランダムなパラメータ化されたユーザー データに置き換えることによって、テスト スクリプトを現実に近いものにできます。

  1. TrueLog メニュー ツリーで TrueLog を選択します。 TrueLog の内容が レスポンス ページと 情報 ページに表示されます。
  2. 編集 > TrueLog のステップ スルー を選択します。 代替方法：ツールバーの TrueLog のステップ スルー をクリックします。 TrueLog のステップ スルー ダイアログ ボックスが開きます。
  3. カスタマイズ可能な呼び出し オプション ボタンをクリックし、次を検索 をクリックして、TrueLog にある入力のカスタマイズが可能なすべてのフォーム フィールドをステップ スルーします。
    注: カスタマイズ可能なコントロールは、オレンジ色の輪郭で表示されます。既にカスタマイズされているコントロールは、緑色の輪郭で表示されます。青色の輪郭で表示されるコントロールは、値の解析または検証は可能ですが、カスタマイズはできません。
  4. リクエスト ページで、カスタマイズしたいフォーム コントロールを右クリックし、値のカスタマイズ を選択します。 記録されている値を、さまざまな種類の入力データ（ファイルにあらかじめ定義した値や一般的なランダム値を含む）に置き換えることができます。また、記録された入力データをカスタマイズした値に置き換えるためのコードをテスト スクリプトに生成することもできます。 パラメータ ウィザード が開きます。
    パラメータ ウィザード では、次の 2 つの方法でスクリプトの値を変更できます。
    • スクリプトの dclparam または dclrand のセクションで定義されている既存のパラメータを使用する
    • 新しい定数値、ランダム値、複数列データ ファイル内の値に基づいた、新しいパラメータを作成する

    新しいパラメータを作成すると、そのパラメータは既存パラメータ群に追加され、以降のカスタマイズで利用できるようになります。

  5. パラメータを新規に作成する オプション ボタンをクリックし、それから 次へ をクリックして新しいパラメータを作成します。 パラメータの新規作成 ページが開きます。
  6. ランダム変数からパラメータを作成 オプション ボタンをクリックし、それから 次へ をクリックします。 ランダム変数 ページが開きます。
  7. テスト スクリプトに挿入したいランダム変数の種類をリストボックスから選択し、次へ をクリックします。 選択した変数の種類の簡単な説明が下部のウィンドウに表示されます。 変数の名前と属性の指定 ページが開きます。
  8. 変数の名前を 名前 テキスト ボックスに入力します。
  9. 完了 をクリックします。 これで、テスト スクリプトは、そのフォーム フィールドについて、記録された値ではなくランダム変数を使用するようになります。新しいランダム変数関数が BDL ページに追加されます。

テスト スクリプトにランダム変数関数を追加した状態でスクリプトの試行を起動し、スクリプトがエラーなしに動作することを確かめます。

親トピック: SAPGUI テストスクリプトのカスタマイズ


SAPGUI の [コントロール] メニュー ツリー

入力データを変更する各 SAPGUI 関数呼び出しに対して、ソース ビューと情報ペインの コントロール メニュー ツリーの両方から、戻り値の確認、値の解析、および入力データのカスタマイズができます。 コントロール メニュー ツリーは、フォーム フィールドを表示したりカスタマイズするための便利な手段を提供します。 コントロール メニュー ツリーは、BDL スクリプトのフォーム セクションと、それに含まれるすべての名前/値ペアをビジュアルに表現したものです。

カスタマイズ可能なコントロールは、オレンジ色または青色の輪郭で表示されます。 一般に、オレンジ色の輪郭で表示されるコントロールは、値の解析、値の検証、およびユーザー データのカスタマイズが可能です。 青色の輪郭で表示されるコントロールは、値の解析と値の検証は可能ですが、ユーザー データのカスタマイズはできません。 コントロールを右クリックし、実行したいスクリプト カスタマイズの種類を選択します。

ユーザー データが既にカスタマイズされているコントロールは、緑色の輪郭で表示されます。

親トピック: SAPGUI テストスクリプトのカスタマイズ


コピー コントロール ID 機能

Copy Control ID 機能を使用すると、選択した SAPGUI コントロールのコントロール ID をクリップボードにコピーできます。 この機能によって、Silk Performer 内の特殊な呼び出しの非ビジュアルのスクリプト記述が簡単になります。 コントロール ID をコピーするには、GUI コントロールを右クリックし、コンテキスト メニューから コントロール ID のコピー を選択します。 コントロール ID がクリップボードにコピーされます。

注: コントロールは、ソース ビューまたは コントロール メニュー ツリーから選択できます。
親トピック: SAPGUI テストスクリプトのカスタマイズ


値の検証を追加する

検証するコントロールを右クリックすることによって、必要な検証関数を生成して BDL スクリプトに挿入できます。 TrueLog Explorer には、SAPGUI アプリケーション用にあらかじめ有効になっている検証関数が 1 つあります。

  1. ソース ビューまたは コントロール メニュー ツリーで、戻り値を検証するコントロール フィールドを選択します。 検証可能なコントロールは、青色の輪郭で表示されます。 オレンジ色の輪郭で表示されるコントロールも、ほとんどのものは検証可能です。
  2. コントロール フィールド内を右クリックし、値の検証 を選択します。 値検証関数の挿入 ダイアログが表示されます。 このダイアログを使用すると、BDL スクリプトに挿入する検証関数のタイプを指定できます。
  3. 検証内容 選択したコントロールの値が以下に リストボックスから、(必要に応じて) 等しい または 等しくない を選択します。
  4. 定数値 または パラメータ値 のどちらに対する検証であるかを指定します。
  5. 検証で 大文字/小文字を区別する かどうかと、空白を無視するかどうかを指定します。
  6. 深刻度 グループ ボックスで、検証から否定的な結果が返されたときに生成する深刻度を指定します。
  7. OK をクリックします。 関数がテスト スクリプトに追加されます。

BDL スクリプトが正常に変更されたら、BDL スクリプトに追加するその他の検証についても、それぞれこの手順を繰り返します。

親トピック: 検証および解析関数


SAPGUI 解析関数を追加する

入力データが挿入される任意の SAPGUI 関数呼び出しに対して、値解析関数を挿入できます。 値の解析は、正確な再生ができるようにセッション固有の文字列をパラメータ化する必要がある場合に役立ちます。 たとえば、顧客 ID を解析して customer ID フィールドに挿入するパラメータにできます。

ツールバーとタイトル バーは解析できませんが、テキスト フィールド、フィールド ラベル、コンボ ボックス、ボタンなど、ほとんどの一般的なコントロールは解析できます。

  1. ソース ビューまたは コントロール メニュー ツリーで、値を解析するコントロール フィールドを選択します。 検証可能なコントロールは、青色の輪郭で表示されます。 オレンジ色の輪郭で表示されるコントロールも、ほとんどのものは値の解析が可能です。
  2. コントロール フィールド内を右クリックし、値の解析 を選択します。 値解析関数の挿入 ダイアログが開き、解析関数を調整する設定が表示されます。
  3. 省略可能： パラメータ名 テキスト ボックスに、解析関数の結果を受け取るパラメータの名前を入力します。
  4. 省略可能： 通知用の Print 文をスクリプトに挿入する場合は、スクリプトに出力文を挿入 領域で Print 文 をオンにします。
    解析関数の結果が Silk Performer の 仮想ユーザー 出力ウィンドウに出力されます。
  5. 省略可能： (Print 文によって 仮想ユーザー出力 ウィンドウに値を書き込むだけでなく)デバッグに役立つように解析結果を出力ファイルに書き込むには、スクリプトに出力文を挿入 領域で Writeln 文 (write line 文)をオンにします。
    出力ファイルを生成すると負荷テストの時間測定値が変化するので、これらのファイルはデバッグのためだけに使用し、完全な負荷テストでは生成しないでください。
  6. OK をクリックします。 解析文がテスト スクリプトに挿入されます。
スクリプトによるセッション情報およびユーザー入力データの処理方法のカスタマイズ、必要なすべての検証関数の追加、および Silk Performer を使用した BDL スクリプトの手動編集が完了したら、テスト スクリプトはエラーなしで動作します。
親トピック: 検証および解析関数


Oracle Forms アプリケーションでの作業

このセクションでは、スクリプトの試行の実行結果に基づいて Oracle Forms テスト スクリプトをカスタマイズする方法について説明します。

  • Oracle Forms アプリケーションでの作業 - 概要
    スクリプトの試行の実行結果に基づいて Oracle Forms テスト スクリプトをカスタマイズする方法について説明します。
  • Oracle Applications 12i のセッション情報をカスタマイズする
    TrueLog Explorer は、記録されたテスト スクリプトのハードコードされたセッション情報を、カスタマイズして再生できるようにするために利用できます。
  • Oracle Forms TrueLog の構造
    Oracle Forms TrueLog 構造および フォーム コントロール ウィンドウについて説明します。
  • Oracle Forms のユーザー入力データのカスタマイズ
    ユーザー入力データのカスタマイズを使用して、記録された静的ユーザー入力データを、トランザクションごとに変更されるパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成する方法について説明します。
  • Oracle Forms 用のコンテンツ検証関数
    テスト スクリプトにコンテンツ検証を追加することによって、サーバーから送信されたコンテンツが現実の条件下でクライアントによって本当に受信されるかどうかを確かめる方法について説明します。
  • Oracle Forms スクリプトへのカスタマイズの適用
    Oracle Forms テスト スクリプトを正常にカスタマイズするために完了する必要があるステップの概要を説明します。
親トピック: TrueLog Explorer 21.0


Oracle Forms TrueLog の構造 - 概要

Oracle Forms アプレットは一般に、Oracle Forms プロトコルと HTTP プロトコルの両方をベースに構築されたアプリケーションに組み込まれています。 このようなアプリケーションを記録するとき、生成される BDL スクリプトには、Oracle Forms と Web 関数呼び出しが含まれます。 Oracle Forms の TrueLog ではこのような混合プロトコルがサポートされます。 TrueLog メニュー ツリーには、アクティブな BDL スクリプトに含まれる Oracle Forms と HTTP 関数呼び出しの両方が一覧表示されます。 メニュー ツリーの各 API ノードは、一意の関数呼び出しを表します。

Oracle Forms の TrueLog には フォーム コントロール ウィンドウがあり、選択した Oracle Forms アプレット ウィンドウの要素が表形式のデータとして表示されます (他の場合には、このバイナリ プロトコルは読み取り不可)。 Oracle Forms アプレットが埋め込まれた HTML ページを呼び出す HTTP 呼び出しでは、フォーム コントロール ウィンドウには完全にレンダリングされた HTML が表示されます。

Oracle Forms TrueLogs には、一意の構造があります。 各 OraFormsSetWindow の呼び出しは、新しい上位レベル ノードで発生します。 OraFormsSetWindow の呼び出しでは、記録セッション中に起動される各ウィンドウで、スクリプト化されます。 ウィンドウで実行されるすべてのアクション (たとえば、テキスト コントロールの編集、リスト エントリの選択など) は、各 OraFormsSetWindow のサブノードに表示されます。

OraFormsInit は、Init トランザクションに含まれています。 OraFormsDestroy は、End トランザクションに含まれています。 メイン トランザクションの最初の Oracle API 呼び出しは OraFormsConnect です。

親トピック: Oracle Forms TrueLog の構造


Terminal メッセージ

Terminal メッセージは、クライアントとサーバー間の通信のラウンドトリップを終了させるために使用されます。次の 3 種類の Terminal メッセージがあります。

Terminal 1 メッセージ:
これは、一番直接的なメッセージ終了方法です。Terminal 1 メッセージは常にクライアントが開始します。たとえば、クライアントがサーバーに「ユーザーがこのボタンを押しました。UI に何を表示しますか」と問い合わせます。そこでサーバーはリクエストの回答を返し、Terminal 1 メッセージで通信を終了します。
Terminal 2 メッセージ:
場合により、クライアントとサーバー間の通信はさらに複雑になります。たとえば、クライアントが「ユーザーがこのボタンを押しました。UI に何を表示しますか」と問い合わせた場合、回答する前に、サーバーでさらにクライアントからの情報が必要なことがあります。サーバーは Terminal 2 メッセージで応答します。このとき「オプション ボタン XYZ の状態は」などと問い合わせます。クライアントがこのリクエストに対するスクリプト化レスポンスを準備している場合は、サーバーの問い合わせに対する回答が送信され、Terminal 2 メッセージで通信を終了します。サーバーはクライアントの最初の問い合わせに対するスクリプト化レスポンスを送信し、Terminal 1 メッセージで通信を終了します。
このようなメッセージ交換は次のとおり説明できます。
  1. クライアントからのリクエスト (Terminal 1、[送信本文] タブ)
  2. サーバーからのリクエスト (Terminal 2、[受信本文] タブ)
  3. クライアントからのレスポンス (Terminal 2、[送信本文] タブ)
  4. サーバーからのレスポンス (Terminal 1、[受信本文] タブ)
Terminal 3 メッセージ:
クライアントからの値をリクエストする Get 呼び出しをサーバーが自発的に開始することを示します。これらはクライアントで開始されないリクエストです。例：サーバーから「キャッシュが空です。オプション ボタン XYZ の値を再度送信してください。」と問い合わせます。クライアントは適切な回答を返信する必要があり、Terminal 3 メッセージで通信を終了します。
Terminal 3 メッセージでは結果として、再生スクリプトが正しく作成されないことがあります。これらのサーバーのリクエストは予測どおりでないので、クライアントはデフォルトの回答 (null など) のみを送信できます。サーバーでクライアントからのデフォルトの回答を受け入れる場合、たとえば、Get 呼び出しで特定の回答が本当には必要ない場合は、再生が続行されます (多くの場合に該当)。ただし、サーバーがデフォルト レスポンスを受け入れ不能とみなす場合は、OraFormsSet 関数と OraFormsOnMessageGet 関数を手動でスクリプト化し、サーバーの Get 呼び出しに対する正しいレスポンスを作成する必要があります。
例：
OraFormsSetRectangle("VISIBLERECT", 0, 0, 119, 24, ORA_SET_TYPE_MESSAGEGET);
OraFormsOnMessageGet("LINE_CUSTOMER_ITEM_DSP_0"); // Requested Item
OraFormsMouseClick("LINE_CUSTOMER_ITEM_DSP_0", 70, 18, 0); // Requested Item
Terminal -1 メッセージ:
クライアントとサーバー間の通信でのエラーを示します。サーバーがリクエストに対して受け入れ不能な回答を受信したので、再生は失敗します。
親トピック: Oracle Forms TrueLog の構造


Oracle Forms テストのエラーを分析する

Oracle Forms の負荷テストを完了します。

テストが終了すると、通常、TrueLog Explorer に複数の TrueLog On Error ファイルが開きます (エラーを返した仮想ユーザーごとに 1 つの TrueLog)。 TrueLog Explorer の エラーを検索 機能を利用すると、エラーがどの TrueLog に記録されているかにかかわらず、時間の経過順に 1 つずつ エラーをたどることができます。 これによって、エラー分析プロセスが簡単になります。開いているすべての TrueLog を手動で確認して、次のエラーを検索する必要がなくなるからです。

  1. Silk Performer で 結果の検討 ボタンをクリックします。
    注: TrueLog On Error ファイルが作成されるのは、Silk Performer の エラー時に TrueLog を生成する オプションが有効になっている場合だけです。
    ワークフロー - 結果の検討 ダイアログ ボックスが開きます。
  2. TrueLog Explorer をクリックします。
    注: 以下の状況では、Silk TrueLog Explorer の起動 ボタンは無効になります。
    • テスト時にエラーが検出されなかった
    • Truelog On Error が有効にされていない
    そのような場合は、直接 TrueLog Explorer による結果の分析に進みます。
    TrueLog Explorer が起動され、現在のテストに対して生成された TrueLog On Error ファイルが開いて、TrueLog のステップ スルー ダイアログ ボックスが開きます。
  3. すべての フォーム送信 (OraFormsSetWindow 呼び出し)、すべての API 呼び出し (各 API ノード)、またはすべての エラー 内を移動できます。
    1. ダイアログ ボックスで、適切な ラジオ ボタンを選択します。
    TrueLog On Error ファイルは、時間の経過順に検索されます。
  4. 次を検索 をクリックして、TrueLog 内を移動します。 エラー メッセージは、情報 タブに表示されます。 TrueLog メニュー ツリーでは、再生エラーが含まれている API ノードには、赤い "X" 印が付いています。
親トピック: Oracle Forms TrueLog の構造


Oracle Forms テスト スクリプトを分析する

テスト スクリプトを生成したら、スクリプトの試行を行うことによって、スクリプトがエラーなしで動作するかどうかを確認できます。 スクリプトの試行によって、記録された操作がスクリプトで正確に再現されるかどうかがわかります。

スクリプトの試行のデフォルトのオプション設定には、テスト時にダウンロードされるデータの実況表示や、ログ ファイルおよびレポート ファイルの作成などがあります。

スクリプトの試行では、1 人の仮想ユーザーのみが実行され、トランザクション間の思考時間遅延が発生しないストレス テスト オプションが有効になります。

  1. Silk Performer のワークフロー バーで、スクリプトの試行 をクリックします。 スクリプトの試行 ダイアログ ボックスが開きます。
  2. スクリプトの試行の実行中にページの遷移を表示するには、TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします。
  3. 実行 をクリックします。
    注: ここでは、実際の負荷テストではなく、スクリプトのデバッグが必要かどうかを確認するためのテスト実行のみを実行します。
    スクリプトの試行が開始されます。 監視 ペインが開き、スクリプトの試行の進行状況についての詳細な情報が表示されます。
  4. Silk Performer が開き、スクリプトの試行の実行中にダウンロードされたデータが表示されます。

    記録中にアクセスされた主要な Oracle Forms ウィンドウは、TrueLog Explorer のメニュー ツリーでそれぞれ上位の API ノードとして表示されます。 記録されたすべてのアクションは、サブノードとして表示されます。

  5. スクリプトの試行の実行中にエラーが発生した場合は、TrueLog Explorer を使用して、エラーの検索やスクリプトのカスタマイズを行うことができます。
親トピック: Oracle Forms TrueLog の構造


Oracle Forms の再生 TrueLog と記録 TrueLog を比較する

TrueLog Explorer で TrueLog を開きます。

Oracle Forms アプリケーションをテストしたとき、再生 TrueLog と記録 TrueLog の間で、対応するコントロール値に差分が発生していることがあります。 より深刻なエラーは、記録 TrueLog と再生 TrueLog の間に差分が発生する (たとえば、テスト スクリプトで入力データに対して必要なカスタマイズが行われていないために、重複レコードが入力されたことがメッセージ ボックスで示される) 原因になる可能性もあります。

  1. テストの分析 をクリックします。
    ワークフロー - テストの分析 ダイアログ ボックスが開きます。
  2. テスト実行の比較 をクリックします。 関連付けられた記録 TrueLog と再生 TrueLog が比較ビューに表示されます。 TrueLog のステップ スルー ダイアログ ボックスも開きます。
  3. 検索する対象を次の中から選択します。
    • [フォーム送信]
    • [API 呼び出し]
    • エラー
  4. 次を検索 をクリックします。 記録 TrueLog と再生 TrueLog の対応するフォーム送信、API 呼び出し、またはエラーの最初のセットが表示されます。
  5. コントロールの状態を比較して、相違があるかどうかを確認します。 記録と再生の間で変化した名前またはコントロール値は、 TrueLog Explorer で強調表示されます。 これによって、カスタマイズが必要な箇所や検証が役立つ箇所を特定しやすくなります。
  6. (検出された差分に基づいて) 必要なカスタマイズを完了します。
    1. スクリプトの試行 をクリックします。
    カスタマイズしたスクリプトがエラーなしで実行されるかどうかをテストします。
  7. 必要なカスタマイズがすべて追加されるまで、この手順を必要な回数繰り返します。
  8. 比較モード をクリックして、比較モードを無効にします。
親トピック: Oracle Forms TrueLog の構造


予期しない Get 呼び出し

サーバー リクエストの大部分は、予測可能であり、記録スクリプトにより正確に処理されます。スクリプトの再生中に、スクリプトの記録中に送信しなかった追加の Get 呼び出しをサーバーが自発的に送信することがあります。このような場合は、クライアントはデフォルトの回答のみをサーバーに送信できます。サーバーがデフォルト回答を受け入れる場合は、エラーなしで再生が続行されます。ただし、サーバーがデフォルトの回答を受け入れ不能とみなす場合は、手動で OraFormsSet 関数と OraFormsOnMessageGet 関数をスクリプト化し、サーバーの Get 呼び出しに対する正しいレスポンスを作成する必要があります。

たとえば、サーバーが UI コントロールの VALUE プロパティを問い合わせる Get リクエストを自発的に送る場合を考えます。スクリプトにはこの Get リクエストを処理するスクリプト化関数がないので、クライアントは文字列のデフォルト値 (null) を返信します。サーバーはこの回答を受け入れません。クライアントへの接続が異常終了し、再生スクリプトでエラーが発生します。

このような状況に対応するために追加の Get 関数をスクリプトに手動で追加するには、クライアントとサーバー間で交換される受信データと送信データを解析することが必要です。この解析を実行できるのは、Silk Performer のログ レベルに [デバッグ] を設定した場合のみです。

注: テストを実行する前に、ログ レベルに [デバッグ] を設定しなかった場合は、設定を変更してからテストを再実行し、必要なデバッグ データを生成する必要があります。
注: また、Oracle Forms サーバーでの record=names パラメータは、スクリプトの正確な記録を可能にするために有効にする必要があります。

スクリプト化した OraFormsOnMessageGet 関数では、関連する UI 要素に対する後続の Get 呼び出しに対して、デフォルトの回答とは異なる回答を用意する必要があります。

注: 実際に、スクリプトで回答を用意するのは、OraFormsSet 関数です (OraFormsOnMessageGet 関数呼び出しの前の行にある)。

次の BDL スクリプトの例で示すとおり、Get 呼び出しが処理されるとき、スクリプトを下から上に読む必要があります。

例

OraFormsSetRectangle("VISIBLERECT", 0, 0, 119, 24, ORA_SET_TYPE_MESSAGEGET);
OraFormsOnMessageGet("LINE_CUSTOMER_ITEM_DSP_0"); // Requested Item
OraFormsMouseClick("LINE_CUSTOMER_ITEM_DSP_0", 70, 18, 0); //
Requested Item

このコード例は次のように解釈できます。クライアントの UI 要素 LINE_CUSTOMER_ITEM_DSP_0 上でマウスがクリックされます。これは、OraFormsMouseClick 関数で表現されます。マウスがクリックされると、サーバーから Get 呼び出しを受信することが予測されます。マウスがクリックされる前に Get 呼び出しに対して準備するには、OraFormsOnMessageGet 関数を挿入します。ここで、サーバーがプロパティ VISIBLERECT を要求することを予測し、OraFormsSetRectangle 関数を使用して、rectangle タイプのプロパティ値を OraFormsOnMessageGet 関数の前のスタックに配置します。

親トピック: Oracle Forms TrueLog の構造


Silk Performer のログ レベルを [デバッグ] に設定する

予期しない get 呼び出しを受信した場合のスクリプトを手動で記述するには、クライアントとサーバー間で交換される受信データと送信データを解析することが必要です。この解析を実行できるのは、Silk Performer のログ レベルを [デバッグ] に設定した場合のみです。

  1. Silk Performer で、 設定 > システム を選択します。
  2. Oracle Forms グループ ボタンをクリックします。
  3. ログ レベル リスト ボックスから [デバッグ] を選択します。
親トピック: Oracle Forms TrueLog の構造


Oracle Forms のユーザー入力データのカスタマイズ

Silk Performer でテスト スクリプトを生成してスクリプトの試行を行うと、パラメータ化された入力データを使用して TrueLog Explorer でスクリプトをカスタマイズできます。

ユーザー データのカスタマイズでは、記録された静的ユーザー入力データを、トランザクションごとに変更されるパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。 このようなデータ駆動型テストの作成では、手動でのスクリプト記述は必要ありません。

  • 複数列データ ファイル
    複数列データ ファイルを使用する利点を説明します。
  • Oracle Forms のユーザー入力データをカスタマイズする
    現実の条件の下では、Web アプリケーションのユーザーは、予測できないような組み合わせのデータをフォームに送信します。 効果的な Web アプリケーション テストの目標の 1 つは、テスト スクリプト用のユーザー入力データをカスタマイズすることによって、そのような変則的で多様なユーザーの動作をエミュレートすることです。
  • カスタマイズできる入力データ関数
    カスタマイズできる入力データ関数の一覧を示します。
親トピック: Oracle Forms アプリケーションでの作業


Oracle Forms のユーザー入力データをカスタマイズする

現実の条件の下では、Web アプリケーションのユーザーは、予測できないような組み合わせのデータをフォームに送信します。 効果的な Web アプリケーション テストの目標の 1 つは、テスト スクリプトによって、そのような変則的で多様なユーザーの動作をエミュレートすることです。

TrueLog Explorer の [パラメータ ウィザード] を使用すると、テスト中にフォームに入力されるユーザー入力データをカスタマイズできます。 [パラメータ ウィザード] によって、フォーム フィールドに入力されるデータを指定できます。また、記録されているユーザー入力データをランダムなパラメータ化されたユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。

  1. TrueLog メニュー ツリーからユーザー データ入力を含むノードを選択します。 背景が黄色のコントロールの入力値をカスタマイズできます。
  2. コントロールの 値 列を右クリックして、値のカスタマイズ を選択します。 [パラメータ ウィザード] では、次のいずれかの方法でスクリプトの値を変更できます。
    • スクリプトの dclparam または dclrand のセクションで定義されている既存のパラメータを使用する
    • 新しい定数値、ランダム値、複数列データ ファイル内の値に基づいた、新しいパラメータを作成する
  3. パラメータを新規作成する オプション ボタンをクリックします。
    1. 次へ をクリックします。
    パラメータの新規作成 ダイアログ ボックスが開きます。
  4. ランダム変数からパラメータを作成 オプション ボタンをクリックします。
    1. 次へ をクリックします。
    パラメータ ウィザード - ランダム変数 が開きます。
  5. リスト ボックスから、テスト スクリプトに挿入するランダム変数の種類を選択します。 強調表示された変数タイプの簡単な説明が下部のペインに表示されます。
    1. 次へ をクリックします。
    変数の名前と属性の指定 ページが表示されます。 Strings from file というランダム変数タイプでは、指定されたファイルからランダムに選択または順次選択できるデータ文字列が生成されます。
  6. 変数の名前を 名前 フィールドに入力します。
    1. 変数が呼び出される順序として次のいずれかを選択します。
    • [ランダム]
    • [シーケンシャル]
  7. ファイル 領域の 名前 リスト ボックスから、構成済みのデータソースを選択します。 代替方法:新規作成 をクリックすると、ランダム変数ファイルを新規作成できます。
  8. テストごと というランダム変数生成を選択します。
    1. 終了 をクリックします。
    これにより、記録されている値の代わりにランダム変数を指定のフォーム フィールドに使用するようにテスト スクリプトの BDL フォーム宣言が変更されます。 新しいランダム変数関数が [BDL] ビューの下部に表示されます。

テスト スクリプトにランダム変数関数を追加した状態でスクリプトの試行を起動し、スクリプトがエラーなしに動作することを確かめます。

親トピック: Oracle Forms のユーザー入力データのカスタマイズ


Oracle Forms 用のコンテンツ検証関数

TrueLog Explorer には、Oracle Forms アプリケーション用のあらかじめ有効になっている検証関数があります。 検証するオブジェクトを右クリックして、検証関数を選択します。 それだけで、指定した検証関数が生成されて、BDL スクリプトに自動的に挿入されます。

TrueLog Explorer では、コンテンツ検証関数をテスト スクリプトに挿入することで、テスト中にアプリケーション サーバーから返されたコンテンツが正確かどうかを検証することができます。

TrueLog Explorer では、再生テスト実行と記録テスト実行を比較すること (クライアント/サーバー環境でエンド ユーザーが体験する事柄をテストするという難問に対する、類を見ない効果的なアプローチ) によって、埋め込みオブジェクトや、テキスト、グラフィックス、テーブル データ、SQL レスポンスなどが、実際にクライアントにダウンロードされて表示されるかを視覚的に確認できます (システムの負荷が高い場合)。 これにより、他の Web トラフィック シミュレーション ツールが検知できない種類のエラーを検知できます。つまり、標準的な負荷テスト スクリプトでは検出されない負荷がかかっている場合にのみ発生するエラーを検出できるようになります。

コンテンツ検証は、継続的なパフォーマンス管理に利用できるので、システムを配置した後にも役立ちます。

  • Oracle Forms 検証関数を挿入する
    TrueLog Explorer には、Oracle Forms アプリケーション用の検証関数があります。 指定した検証関数が生成されて、BDL スクリプトに自動的に挿入されます。
親トピック: Oracle Forms アプリケーションでの作業


Oracle Forms 検証関数を挿入する

Oracle Forms のスクリプトの試行をテスト実行します。 TrueLog Explorer で、作成された TrueLog を開きます。

  1. TrueLog Explorer で Oracle Forms の TrueLog を開いて、検証可能なデータのある TrueLog ノードを選択します。
  2. 検証可能な値を右クリックして、値の検証 を選択します。 フォーム コントロールの検証の追加 ダイアログ ボックスが開きます。
  3. 現在選択されているフォーム コントロールの値を検証 リンクをクリックします。 値検証関数の挿入 ダイアログ ボックスが表示されます。
  4. ドロップダウン リストから次の値のいずれかを選択します。
    • 等しい
    • 異なる
    • 含む
    • 含まない
  5. 検証での大文字/小文字の区別、および空白文字の詳細について指定します。
  6. 検証が否定的な結果を返した場合に発生させる深刻度を指定します。
  7. パラメータに対して検証を実行するかどうかを指定します。
  8. 値検証関数の挿入 ダイアログ ボックスで OK をクリックします。 検証関数がテスト スクリプトに追加されます。
  9. 検証の追加 ダイアログ ボックスで Yes をクリックして、スクリプトの試行を行います。
  10. 正常に検証されたことを確認します。 検証を含む API ノードには、青い "V" 印が表示されます。
親トピック: Oracle Forms 用のコンテンツ検証関数


Oracle Forms スクリプトへのカスタマイズの適用

以下のステップを完了すれば、Oracle Forms テスト スクリプトはエラーなしで動作します。
  • スクリプトがセッション情報およびユーザー入力データを処理する方法をカスタマイズします。
  • 必要な検証関数を追加します。
  • 必要であれば、Silk Performer での BDL スクリプトを手動で編集します。
親トピック: Oracle Forms アプリケーションでの作業


Citrix アプリケーションでの作業

Citrix サーバーをホストとするアプリケーションのテストに対する TrueLog 記録、TrueLog 再生、および基本的な TrueLog 分析のほかに、TrueLog Explorer では、ユーザー入力データのカスタマイズも提供されています。 ここで説明する機能は、Citrix NFuse セッションのテストにも適用できます。

この章を読み進む前に、TrueLog Explorer の基本機能を熟知していることが不可欠です。

注: Citrix サーバーをホストとするアプリケーションをテストする際の Silk Performer の使用方法の詳細については、『Citrix Tutorial』を参照してください。
  • Silk Performer Citrix Player
    Silk Performer は、再生には TrueLog Explorer ではなく独自の Citrix Player を使用します。
  • Citrix TrueLog
    TrueLog Explorer は、オプションで、スクリプトの試行の実行中に Citrix Player と一緒に開くことができます。
  • Citrix スクリプトでの同期の問題
    Citrix Player での再生中に、記録中にキャプチャされた値と異なる値が検出されると、ウィンドウがアクティブにならなかったり、画面の同期に失敗することがあります。
  • Citrix のユーザー入力データのカスタマイズ
    ユーザー入力データのカスタマイズを利用すると、記録された静的ユーザー入力データを、トランザクションごとに変更されるパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。
  • Citrix の解析関数と検証関数
    Silk Performer の光学文字認識(OCR)サポートを利用すると、キャプチャされたアプリケーション状態のスクリーンショット内のテキスト値が認識されるため、セッションに依存する検証や解析が容易になります。
  • OCR の検証と解析
    OCR によって生成される文字列を解析および検証する方法について説明します。
親トピック: TrueLog Explorer 21.0


Silk Performer Citrix Player

Silk Performer は、再生には TrueLog Explorer ではなく独自の Citrix Player を使用します。 Silk Performer Citrix Player は、スクリプトの試行が開始されたときに開き、記録されたすべてのアクションを完全なアニメーションで再生します。 マウスの移動や操作は、アニメーションのマウス アイコンでシミュレートされます。

Silk Performer Citrix Player には ログ ウィンドウがあり、スクリプトの試行のさまざまな側面を詳細に示す以下の 3 つのペインがあります。

[スクリプト]
このペインには、実行されたすべての BDL スクリプト関数および現在実行中の BDL 関数が一覧表示されます。
[ウィンドウ]
このペインには、現在のセッション中にアクセスされたすべてのクライアント ウィンドウのスタックが表示されます。ウィンドウのキャプション、スタイル、サイズ、および位置も表示されます。 最上位のウィンドウは、ウィンドウ アイコンで示されており、サブウィンドウの上部に表示されます。
[ログ]
このペインには、実行された BDL 関数やウィンドウの作成/アクティブ化/破棄を含む、すべての情報メッセージとイベントが一覧表示されます。
親トピック: Citrix アプリケーションでの作業


Citrix TrueLog

TrueLog Explorer は、オプションで、スクリプトの試行の実行中に Citrix Player と一緒に開くことができます (それには、スクリプトの試行 ダイアログ ボックスで TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします)。TrueLog Explorer は、スクリプトの試行の実行中に実際にダウンロードされたデータを表示します。記録中にアクセスされた主要なウィンドウは、TrueLog Explorer のメニュー ツリーの最上位 API ノードとしてそれぞれ表示されます。それらのウィンドウに対して記録されたアクションは、サブノードとして表示されます。

上位の同期ノードを選択すると、最後の同期関数の後に表示されたウィンドウ(再生中にキャプチャされたビットマップ)が表示されます。

ウィンドウ同期関数は、カラーの枠線で視覚化されます。ウィンドウの作成は、緑色の枠線で示され、ウィンドウのアクティブ化は、青色の枠線で示されます。ウィンドウの破棄は、黄色の枠線で示されます。

TrueLog は、画面の状態を視覚化することによって、Citrix Player を補完します。たとえば、Citrix Player の ログ ウィンドウに表示されている特定のウィンドウ ID で示されるウィンドウが不明な場合、それに対応する TrueLog 内の対応する同期関数を見つることによって、問題のウィンドウを示すビットマップにアクセスできます。

ユーザー入力ノード (CitrixUserInput とそれに関連する関数) には、キーボード入力とマウス入力が反映されます。 CitrixMouseClick 関数には、2 つの追跡ベクトル パラメータ (X 座標と Y 座標) があります。赤色の四角は、マウスをクリックした始点を示し、赤色の十字は、マウスを解放した点を示します。始点と終点の間の赤色の線は、マウスの経路を示します。ボタンが押されている間に移動がなかった場合は、赤色の十字だけが表示されます。オンスクリーン ツールチップには、補足情報(右クリック、左クリック、ダブルクリックなど)が表示されます。

値の文字列 (キーボード入力) は、対象のウィンドウ キャプションが (後続のノードで) 特定されるまで、赤色のフローティング テキストとして画面に視覚化され、文字列が入力される位置を示します。

親トピック: Citrix アプリケーションでの作業


Citrix スクリプトでの同期の問題

Citrix Player での再生中に、記録中にキャプチャされた値と異なる値が検出されると、ウィンドウがアクティブにならなかったり、画面の同期に失敗することがあります。同期に関する問題の原因は、常に明白とは限りません。画面の位置が 1 ピクセルだけ変化したことが原因の場合もあります。このような違いは、ビットマップ表示プログラムを使用して、視覚的に評価することが最良です。

画面の同期の失敗よりもよくあるのは、再生中にウィンドウがアクティブにならないことです。このような場合は、それ対応するユーザーアクションに関連するスクリーンショットが失敗の手がかりになることがあります。ユーザー エラーがないのに、ウィンドウがたまにしかアクティブにならないこともあります。このような場合は、関連する CitrixWaitForWindow 関数を削除する必要があります。

TrueLog Explorer は、エラーが発生するとスクリーンショットをキャプチャし(デフォルトの設定)、そのビットマップをディスクに書き込みます。TrueLog On Error のビットマップと、Silk Performer によって同期関数と一緒にキャプチャされたビットマップを比較することによって(デフォルトの設定)、記録画面と再生画面を視覚的に比較できます。デフォルトでは、スクリーンショットはレコーダによってプロジェクト ディレクトリ内のスクリーンショット ディレクトリに書き込まれます。再生では、現在の結果ディレクトリにスクリーンショットが保存されます。

注: Silk Performer の 画面の同期に失敗したらウィンドウ領域をダンプする Citrix オプションをアクティブにする必要があります(デフォルト)。
親トピック: Citrix アプリケーションでの作業


Citrix のユーザー入力データのカスタマイズ

ユーザー入力データのカスタマイズを利用すると、記録された静的ユーザー入力データを、トランザクションごとに変更されるパラメータ化された動的ユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。 このようなデータ駆動型のテストでは、手動によるスクリプト作成は必要ありません。

Citrix ターミナル サービスをホストとするアプリケーションに入力されるユーザー入力は、テスト中に以下の 2 つの方法でカスタマイズできます。

  • パラメータ ウィザード によって、キーボード イベントで入力される値を指定できます。また、記録されたユーザー入力データをランダムなパラメータ化されたユーザー データに置き換えることによって、現実に近いテスト スクリプトを作成できます。
  • 視覚的なカスタマイズによって、記録中にキャプチャされたレンダリング画面を右クリックすることによって、クリック、ドラッグ、リリースなどのマウス イベントをカスタマイズできます。
  • Citrix のユーザー入力データのカスタマイズ
    記録された静的な入力データを、パラメータ化された動的なデータて置き換えることによって、テストスクリプトを現実に近づけるには、パラメータ ウィザードを使用します。
  • マウス イベントをカスタマイズする
    記録されたマウス イベントの動作を視覚的にカスタマイズします。
親トピック: Citrix アプリケーションでの作業


Citrix のユーザー入力データのカスタマイズ

記録された静的な入力データを、パラメータ化された動的なデータて置き換えることによって、テストスクリプトを現実に近づけるには、パラメータ ウィザードを使用します。

  1. メニュー ツリーで、ユーザー データ入力を表すノードを選択します(たとえば、キーボードのデータ文字列を表す CitrixKeyString ノードを選択します)。
  2. 入力データ文字列(赤色のフローティング文字列)を右クリックし、ユーザー入力のカスタマイズ を選択します。
  3. パラメータ ウィザード が開きます。パラメータを新規作成する を選択し、次へ をクリックします。 [パラメータ ウィザード] では、次のいずれかの方法でスクリプトの値を変更できます。
    • スクリプトの dclparam または dclrand のセクションで定義されている既存のパラメータを使用する
    • 新しい定数値、ランダム値、複数列データ ファイル内の値に基づいた、新しいパラメータを作成する
  4. パラメータの新規作成 ダイアログ ボックスが開きます。ランダム変数からパラメータを作成 オプション ボタンを選択し、次へ をクリックします。
  5. 使用法の選択 ダイアログ ボックスが開きます。新しいランダム変数を [毎回]、[トランザクションごと]、[テストごと] のどのタイミングで使用するかを指定します。
  6. 完了 をクリックして、記録された値の代わりに、指定のフォーム フィールドにランダム変数を使用するように、テスト スクリプトの BDL フォーム宣言を変更します。新しいランダム変数関数が BDL ビューの下部に表示されます。
  7. テスト スクリプトにランダム変数関数を追加した状態でスクリプトの試行を起動し、スクリプトがエラーなしに動作することを確かめます。
親トピック: Citrix のユーザー入力データのカスタマイズ


マウス イベントをカスタマイズする

記録されたマウス イベントの動作は、視覚的にカスタマイズできます。

  1. メニュー ツリーで、マウス アクティビティを含む CitrixMouseClick ノードを選択します。 赤色の四角は、マウスをクリックした始点を示し、 赤色の十字は、マウスを解放した点を示します。 始点と終点の間の赤色の線は、マウスの経路を示します。 オンスクリーン ツールチップには、補足情報(右クリック、左クリック、ダブルクリックなど)が表示されます。
  2. 画面上の任意の場所を右クリックし、ユーザー入力のカスタマイズ を選択します。 マウス イベントのカスタマイズ ダイアログ ボックスが開きます。
  3. カスタマイズしたマウス移動の始点にしたい画面上の位置をクリックします。
  4. カスタマイズ をクリックしてカスタマイズを受け入れ、BDL スクリプトを変更します。
マウス イベントのカスタマイズ結果が、記録 TrueLog のビットマップに緑色で示されます。 マウスのカスタマイズ結果は、BDL スクリプトでも緑色のテキストで示されます。 CitrixMouseClick 関数には、2 つの追跡ベクトル パラメータ(X 座標と Y 座標)があります。 このスクリプトが次回実行されたとき、ここで指定した新しい画面座標が使用されます。
親トピック: Citrix のユーザー入力データのカスタマイズ


Citrix の解析関数と検証関数

Silk Performer の光学文字認識(OCR)サポートを利用すると、キャプチャされたアプリケーション状態のスクリーンショット内のテキスト値が認識されるため、セッションに依存する検証や解析が容易になります。 ほかの TrueLog 形式(Web、データベースなど)の場合と同様に、検証関数や解析関数は、スクリプトの記録後に TrueLog Explorer を使用して追加されます。

注: TrueLog Explorer で、解析関数や検証関数用の OCR を有効にするには、Silk Performer のシステム設定を使用して、事前にフォント データベースを生成する必要があります。

ウィンドウの位置と状態

ウィンドウの位置と状態(最大化/最小化)は、正確な再生を保証するために非常に重要です。TrueLog Explorer では、選択されているテキストが、個々のウィンドウではなくデスクトップに対する相対座標で読み取られるように画面座標がスクリプト記述されるからです。 したがって、再生時に、記録時と異なる位置にウィンドウが表示されると、指定したテキストを OCR 操作で見つけることはできません。 変換領域の絶対位置を指定することができない場合は、ウィンドウに対する相対座標を使用して、手動でスクリプトを更新する必要があります。

  • 検証関数
    Silk Performer は、Citrix サーバーをホストとするアプリケーションのビットマップとウィンドウの検証をサポートしています。
  • OCR 検証関数を挿入する
    Citrix のテストでセッションに依存する検証を実行するために OCR 検証関数を生成します。
  • OCR 解析関数を挿入する
    Silk Performer は、Citrix サーバーをホストとするアプリケーションに対するテキスト解析をサポートします。
親トピック: Citrix アプリケーションでの作業


検証関数

Silk Performer では、Citrix に対する入力値検証とレスポンス データ検証はサポートされていませんが、Citrix サーバーをホストとするアプリケーションのビットマップとウィンドウの検証はサポートされています。

親トピック: Citrix の解析関数と検証関数


OCR 検証関数を挿入する

Citrix サーバーをホストとするアプリケーションのビットマップとウィンドウの検証は、セッションに依存するデータ (ログイン名など) の検証には対応していません。ただし、OCR 技術を利用すると、Silk Performer は認識可能なテキスト値を変数に格納できるようになり、Citrix 負荷テストでのセッション依存の検証が容易になります。

  1. Silk Performer を使用して、Citrix セッションを記録します。
  2. スクリプトの試行 ダイアログ ボックスの TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにしてスクリプトの試行を実行します。TrueLog Explorer が開きます。
  3. スクリプトの試行が完了したら、テキスト検証の対象となる画面のビットマップ画面キャプチャを含む API ノードを選択します。
  4. 画面上でクリックしてカーソルをドラッグし、検証に使用するテキストが含まれている画面領域を選択します。
  5. 選択した領域を右クリックして、テキストの検証 を選択します。
  6. テキスト検証関数の挿入 ダイアログ ボックスが開きます。選択されたテキストが 定数値 テキスト ボックスにプリロードされ、定数値 オプション ボタンがデフォルトで選択されます。
    ヒント: 定数値の検証に加えて、パラメータ (既存のパラメータまたは新しいパラメータのいずれか) を検証することもできます。パラメータを検証するには、パラメータ値 オプション ボタンを選択します。パラメータが既に存在する場合は、参照 (...) ボタンをクリックすると、パラメータを選択できます。パラメータが存在しない場合は、参照 (...) ボタンをクリックすると パラメータ ウィザード が起動され、新規パラメータを作成できます。
  7. テキストを検証するために使用する OCR 技術を指定します。フォントベースの OCR はリソースの消費は比較的少ないですが、あいまい一致 OCR はフォント スムージング技術を使用してテキストが表示されている場合に、より良い認識結果を得られます。テキストの言語を指定することによって、あいまい一致 OCR の結果はより良くなります。
  8. 選択した四角形内のテキストが以下に リスト ボックスから [等しい] または [等しくない] を選択します。
  9. 検証が、[大文字/小文字を区別する] かどうか、[空白を無視する] かどうかを指定します。
  10. ダイアログ ボックスの 深刻度 エリアで、検証が否定的な結果を返した場合に発生させる深刻度を指定します([エラー]、[警告]、[情報]、または [カスタム])。OK をクリックします。
  11. 確認ダイアログ ボックスが開きます。OK をクリックして、Citrix テスト スクリプトに OCR 検証関数を追加します。
親トピック: Citrix の解析関数と検証関数


OCR 解析関数を挿入する

  1. Silk Performer を使用して、Citrix セッションを記録します。
  2. スクリプトの試行 ダイアログ ボックスの TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにしてスクリプトの試行を実行します。TrueLog Explorer が開きます。
  3. スクリプトの試行が完了したら、テキスト解析の対象となる画面のビットマップ画面キャプチャを含む API ノードを選択します。
  4. 画面上をクリックしてカーソルをドラッグし、解析したいテキストを含む画面領域を選択します。
  5. 選択した領域を右クリックして、テキストの解析 を選択します。
  6. 解析関数の挿入 ダイアログ ボックスには、解析関数を構成するためのパラメータがあります。デフォルトの設定で適切な場合がほとんどですが、以下の設定を調整できます。
    パラメータ名
    解析関数の結果を受け取るパラメータの名前を入力します。
    スクリプトに出力文を挿入
    • Web ページ呼び出しの後に、通知のための Print 文をスクリプトに挿入するには、Print 文 をオンにします。これによって、解析関数の結果が Silk Performer の 仮想ユーザー出力 ウィンドウに出力されます。
    • (Print 文によって 仮想ユーザー出力 ウィンドウに値を書き込むだけでなく) デバッグに役立つように解析結果を出力ファイルに書き込むには、Writeln 文 ("write line" 文) をオンにします。出力ファイルの生成によって時間測定値が変化するので、これらのファイルはデバッグのためだけに使用し、完全な負荷テストでは生成しないでください。
    OCR 技術
    テキストを検証するために使用する OCR 技術を指定します。フォントベースの OCR はリソースの消費は比較的少ないですが、あいまい一致 OCR はフォント スムージング技術を使用してテキストが表示されている場合に、より良い認識結果を得られます。テキストの言語を指定することによって、あいまい一致 OCR の結果はより良くなります。
  7. OK をクリックします。
  8. 確認ダイアログ ボックスが開きます。OK をクリックして、Citrix スクリプトに OCR 解析関数を追加します。
親トピック: Citrix の解析関数と検証関数


OCR の検証と解析

このセクションでは、OCR によって生成される文字列を解析および検証する方法について説明します。

  • OCR による検証と解析の動作
    OCR による文字列検証は、CitrixVerifyText および CitrixVerifyTextFuzzy API 呼び出しを使用して実現されます。
  • OCR を使用するために Silk Performer を構成する
    Citrix の解析関数と検証関数用に OCR を有効にするには、フォント データベースを生成します。
  • テキスト同期関数の生成
    指定したテキストやテキスト パターンが、指定した画面位置に表示されるまで、スクリプトの実行を一時停止する CitrixWaitForText を生成します。
親トピック: Citrix アプリケーションでの作業


OCR による検証と解析の動作

OCR による文字列検証は、CitrixVerifyText または CitrixVerifyTextFuzzy API 呼び出しを使用して実現されます。これらの関数は、スクリプトのカスタマイズ時に TrueLog Explorer によって挿入されます。CitrixVerifyText および CitrixVerifyTextFuzzy 関数は、再生ビットマップ内のテキスト文字列を比較して、それらが同じかどうかを判別します。

CitrixParseText 関数および CitrixParseTextFuzzy 関数は、テキストを解析するために使用できます。

Silk Performer は、2 種類の異なる OCR 技術を提供します。

  1. フォントベースの OCR 手法：フォントベースの手法は、テキスト ビットマップをシステム フォントのビットマップと比較します。この手法では、さまざまなフォントやテキスト スタイルを認識するためにパターン データベースが使用されます。フォント データベースは、フォントベースの OCR を使用する前に生成しておく必要があります。文字がシステム フォントとそのスタイルによって正確に再現できる場合にのみ認識できます。アンチエイリアスや ClearType などのフォント スムージング技術が使用されている場合、OCR の結果はあまり期待できません。フォントベースの OCR 手法は、パフォーマンスとリソース消費の点では最適化されています。
  2. 言語に密接なあいまい一致 OCR 手法：あいまい一致テキスト認識を使用した手法では、文字と言語の知識ベースを使用してテキスト イメージを分析します。イメージをフォント ビットマップと比較するよりも、あいまい一致 OCR は専用のテキストと言語認識アルゴリズムを使用します。
Citrix TrueLog でのみ、検証および解析の API 呼び出しがメニュー ツリーに表示されます。その他の TrueLog モード(Web、データベースなど)では、新しい API ノードはメニュー ツリーに追加されません。
注: OCR 操作は静的なコンテンツに対して実行する必要があります。ウィンドウ イベントでの同期を行うと、画面の更新がわずかに遅れることがあります。これによって、タイミングに依存した結果が生じます。画面があまりに頻繁に変更される場合は、タイミングがずれて、比較のための正しい画像が選択されないことがあります。したがって、すべての OCR 検証関数や解析関数の前に、待機、つまり CitrixWaitForScreen 関数の呼び出しをするようにスクリプトを記述する必要があります。
親トピック: OCR の検証と解析


OCR を使用するために Silk Performer を構成する

Citrix の解析関数と検証関数用に OCR を有効にするには、Silk Performer のシステム設定を使用して、フォント データベースを生成する必要があります。

フォントベースの OCR は、ビットマップ内のフォントやテキスト スタイルを認識するために、フォント データベース ("パターン" データベース) を使用します。デフォルトのフォント セットでほとんどのシナリオはカバーできますが、状況によっては、ほかのフォントやフォント スタイルの追加が必要になることがあります。新しいフォントを追加したり、システムからフォントを削除したときは、毎回、新しいデータベースを生成する必要があります。

データベース内のフォントが多すぎると、処理が遅くなったり、読み取り間違いをする場合があります。このため、テキスト文字列の取得対象となるビットマップで使用されるフォントのみを含めることをお勧めします。

  1. Silk Performer で、設定 > システム... を選択し、Citrix アイコンを選択します。
  2. フォントベースの OCR ページで、追加 >> または すべて追加 を使用して、OCR で使用するフォントを システム フォント リスト ボックスから 選択済みのフォント リスト ボックスに移動します。
  3. 選択済みのフォント リスト ボックスから不要なフォントを削除するには、すべて削除 または << 削除 を使用します。
  4. サイズ テキスト ボックスで、使用するフォント サイズの範囲を指定します(例、[8-20])。
  5. イタリック、太字、および 下線 の各チェック ボックスをオンにして、含めるフォント スタイルを定義します。
  6. フォント データベースの生成 をクリックします。
  7. フォント ベースの構築 ダイアログ ボックスが開きます。OK をクリックして、既存のフォント データベースを新しいデータベースで置き換えることを確認します。
  8. あいまい一致 OCR タブをクリックして、言語を選択します。言語によっては、あいまい一致 OCR エンジンの方が、結果が良くなる場合があります。
  9. システム設定 ダイアログ ボックスで、OK をクリックして、変更を受け入れます。
親トピック: OCR の検証と解析


テキスト同期関数の生成

TrueLog Explorer には、指定したテキストやテキスト パターンが、指定した画面位置に表示されるまで、スクリプトの実行を一時停止する CitrixWaitForText 同期関数が用意されています。 この機能を使用して、画面とユーザー入力を同期させることができます。 たとえば、OK を押す前に、指定したダイアログ テキストに "処理中" ではなく "準備完了" と表示されるまで、スクリプトの実行を一時停止する必要があるとします。 処理にかかる時間が不明な場合、このようなアクションを同期させるのは困難です。 この関数のスクリプトでは CitrixWaitForText(... "ready", ...) 関数の前に、CitrixMouseClick(...) が読み取られます。

  1. Silk Performer を使用して、Citrix セッションを記録します。
  2. スクリプトの試行 ダイアログ ボックスの TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにしてスクリプトの試行を実行します。 TrueLog Explorer が起動します。
  3. スクリプトの試行が完了したら、特定のテキスト文字列を待つ画面のビットマップ画面キャプチャを含む API ノードを選択します。
  4. 画面上をクリックしてカーソルをドラッグし、同期させたいテキストを含む画面領域を選択します。
  5. 選択した領域を右クリックして、テキストの同期 を選択します。
  6. テキスト同期関数の挿入 ダイアログ ボックスが開きます。 スクリプトが待機する時間を指定する定数値を入力するか、パラメータ値を選択します。 OK をクリックして、この関数をスクリプトに挿入します。
親トピック: OCR の検証と解析


TCP/IP および UDP ベースのアプリケーションでの作業

TrueLog On Error とテスト スクリプトの分析機能を TCP/IP および UDP プロトコル ベースのアプリケーションに適用する方法について説明します。

TrueLog Explorer は、TCP/IP および UDP ベースの TrueLog (たとえば、SMTP、POP3、カスタム プロトコルなど) に対する効果的なビューアとしての役割を果たします。 TrueLog Explorer を利用すると、再生 TrueLog と記録 TrueLog を比較できます。 スクリプトのカスタマイズ(セッションの処理、ユーザー入力データのパラメータ化、および検証機能)は TCP/IP と UDP の TrueLog では利用できません。

この章を読み進む前に、TrueLog Explorer の基本機能を熟知していることが不可欠です。

  • TCP/IP と UDP の TrueLog の構造
    TCP/IP と UDP の TrueLog で利用できるビュー タイプについて説明します。
  • ASCII 表示オプションと 16 進表示オプションを設定する
    自動表示モード を利用すると、最適なデータ表示モードが自動的に選択されますが、TrueLog Explorer には、TCP/IP 関数と UDP 関数の表示を ASCII 形式と 16 進形式の間で切り替えるオプションがあります。
  • TCP/IP と UDP の再生 TrueLog と記録 TrueLog を比較する
    TCP/IP と UDP の再生 TrueLog をそれに対応する記録 TrueLog と比較して、プロトコルの動的要素を明らかにする場合は、今後のテスト実行のためにこれらの動的要素をカスタマイズする必要があります。
親トピック: TrueLog Explorer 21.0


TCP/IP と UDP の TrueLog の構造

TCP/IP と UDP の TrueLog は、HTML TrueLog と同様に構成され、表示されます。1 つだけ異なるのは、TCP/IP と UDP には HTML のような高度なレンダリング インターフェイスがない点です。

TCP/IP と UDP の TrueLog に対しては、Web API 呼び出しが含まれている場合以外は、レスポンス ページは利用できません。

[コンテンツ] ペイン

TCP/IP および UDP ベースの TrueLog では、TrueLog Explorer の コンテンツ ペインに次のデータ ビューがあります。

項目 | 説明
レスポンス | Web API 呼び出しが含まれている場合以外は、TCP/IP と UDP では利用できません。
差分 | 差分 ページには、選択したノード間の 受信本文 の差分が一覧表示されます。このページは、サーバー レスポンス内の動的情報を検索するのに役立ちます。セッション情報を探すには、まずここを検索します。 注: 差分 ページが利用可能になるのは 差分モードのときのみです。
リクエスト | TCP/IP と UDP では利用できません。

情報ペイン

情報 ペインには、TCP/IP と UDP のテスト スクリプトとテスト実行に関連するデータが表示されます。このペインには次のビューがあります。

項目 | 説明
情報 | 情報 ページには、開いている TrueLog ファイルと選択した API ノードについての一般情報が表示されます。
BDL | BDL ページには、開いている TrueLog に対応する BDL スクリプトが表示されます。この BDL スクリプトは、選択されている API ノードの行まで自動的に移動して表示されます。
参照 | TCP/IP と UDP では利用できません。
送信ヘッダー | TCP/IP と UDP では利用できません。
受信ヘッダー | TCP/IP と UDP では利用できません。
送信本文 | TCP/IP と UDP の場合は、アプリケーションからサーバーへ WebTcpipSend 関数で送られるデータが表示されます。
受信本文 | サーバーからアプリケーションに送信されたレスポンスを含みます (WebTcpipRecv 関数など)。
統計 | TCP/IP と UDP では利用できません。
親トピック: TCP/IP および UDP ベースのアプリケーションでの作業


ASCII 表示オプションと 16 進表示オプションを設定する

自動表示モード を利用すると、最適なデータ表示モードが自動的に選択されますが(たとえば、画像は バイナリ にし、HTML ドキュメントは テキスト にする)、TrueLog Explorer には、TCP/IP 関数と UDP 関数の表示を ASCII 形式と 16 進形式の間で切り替えるオプションがあります。

  1. 設定 > オプション > 表示 を選択します。
  2. ダイアログの データ形式 の 自動表示モード チェック ボックスをオフにします。
  3. バイナリ データを表示 チェック ボックスをオンにします。
  4. OK をクリックします。
親トピック: TCP/IP および UDP ベースのアプリケーションでの作業


TCP/IP と UDP の再生 TrueLog と記録 TrueLog を比較する

TCP/IP と UDP の再生 TrueLog をそれに対応する記録 TrueLog と比較して、プロトコルの動的要素を明らかにする場合は、後のテスト実行のためにこれらの動的要素をカスタマイズする必要があります。さもないと、テスト中にセッション関連のデータが渡されてエラーが発生します。これらのプロトコルの動的要素をカスタマイズするために、TrueLog Explorer では TCP/IP と UDP の記録ルールが提供されています。

注: 自動セッション処理のカスタマイズは、TCP/IP および UDP ベースのアプリケーションでは利用できません。動的 BDL 構文解析機能は Silk Performer を利用して手動でコーディングする必要があります。
  1. 比較モードで、TCP/IP または UDP の再生 TrueLog とそれに対応する記録 TrueLogを開きます。
  2. レスポンス タブをクリックします。
    注: バイナリの場合には差分テーブルは有効になりません。したがって 差分 ビューは利用できません。
  3. TrueLog のステップ スルー をクリックします。 TrueLog のステップ スルー ダイアログ ボックスが開きます。
  4. API 呼び出し オプション ボタンをクリックします。 記録レスポンスを含む TrueLog API 呼び出しが、それに対応する再生レスポンスと並んで表示されます。動的要素がテスト スクリプトに含まれていることを示すこのような差分は、Silk Performer の記録ルールによってカスタマイズする必要があります。
親トピック: TCP/IP および UDP ベースのアプリケーションでの作業


ターミナル エミュレーション アプリケーションでの作業

このセクションでは、スクリプトの試行の結果に基づいてターミナル エミュレーション テスト スクリプトをカスタマイズする方法について説明します。

  • ターミナル エミュレーション アプリケーションでの作業 - 概要
    ターミナル エミュレーション アプリケーションの場合、TrueLog Explorer では、TrueLog の記録、TrueLog の再生、TrueLog の基本分析のほか、解析、コンテンツ検証、および入力パラメータのカスタマイズも可能です。
  • ターミナル エミュレーション TrueLog の構造
    ターミナル エミュレーション TrueLog で利用できるビューについて説明します。
  • ホスト画面表示のカスタマイズ
    テスト対象のアプリケーションで受信された文字を定義済みのフォントで正しく表示できない場合、ホスト画面 ビューに表示されるテキストのフォントまたはフォント サイズを変更できます。
  • ターミナル エミュレーション TrueLog のステップ スルーを行う
    エラーがどの TrueLog に記録されているかにかかわらず、エラーが発生した順番に、1 つずつ エラーをたどることができます。 これによりエラーの分析作業を単純化できます。
  • ターミナル エミュレーション テスト スクリプトを分析する
    テスト スクリプトを生成したら、スクリプトの試行を行って、スクリプトがエラーなしで動作するかどうかを確認します。 スクリプトの試行を行うことによって、記録された操作がスクリプトで正確に再現されるかどうかがわかります。
  • 再生 TrueLog と記録 TrueLog を比較する
    ターミナル エミュレーション アプリケーションをテストする場合、再生 TrueLog と記録 TrueLog の間で、対応するフィールド値に差異が発生することがあります。 それらの一部は、再生エラーの原因となる場合があります。
  • ターミナル エミュレーション TrueLog 関数
    6 種類のターミナル エミュレーション関数をテスト スクリプトに挿入できます。
  • ユーザー入力データをカスタマイズする
    ターミナル エミュレーション スクリプトでユーザー入力データを視覚的にカスタマイズして、スクリプトをより現実的にできます。
  • ターミナル エミュレーション アプリケーションの検証関数
    ターミナル エミュレーションの API 呼び出しにおいて、コンテンツとフィールドを検証する方法について説明します。
  • ターミナル エミュレーション アプリケーションの解析関数
    セッション固有の文字列をパラメータ化する必要がある場合に、値の解析を使用して正確な再生を可能にする方法について説明します。
親トピック: TrueLog Explorer 21.0


ターミナル エミュレーション アプリケーションでの作業 - 概要

ターミナル エミュレーション アプリケーションの場合、TrueLog Explorer では、TrueLog の記録、TrueLog の再生、TrueLog の基本分析のほか、解析、コンテンツ検証、および入力パラメータのカスタマイズも可能です。 TrueLog 機能は、VT100+、IBM 3270、および IBM 5250 の各プロトコルに対してサポートされています。

この章を読み進む前に、TrueLog Explorer の基本機能を熟知していることが不可欠です。

ユーザー データのカスタマイズ

TrueLog Explorer によるユーザー データのカスタマイズと [パラメータ ウィザード] は、TN3270 と TN5250 の両方のプロトコルのターミナル エミュレーション アプリケーションでサポートされています。

画面上のイベントの同期

記録/再生シナリオで画面上のイベントの同期に使用できる関数はありますが、TrueLog Explorer を通じてそれらの関数を挿入することはできません。

注: ターミナル エミュレーション アプリケーションに対する Silk Performer のサポートの詳細については、Miscellaneous Tutorials (PDF) を参照してください。 このファイルは Silk Performer の ドキュメント > チュートリアル にあります。
親トピック: ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション TrueLog の構造

TrueLog Explorer では、HTTP クライアント リクエストと HTTP/HTML サーバー レスポンスの視覚化の場合と同じように、ターミナル エミュレーションのリクエストとレスポンスの視覚化をサポートしています。

ターミナル エミュレーション TrueLog で表示される 3 種類のウィンドウを以下に示します。

  • TrueLog メニュー ツリー - テスト実行に含まれていたすべてのターミナル エミュレーション API 呼び出しが一覧表示されます。
  • [コンテンツ] ペイン - 各 API ノードでのターミナル エミュレーション アプリケーションの状態が表示されます。
  • [情報] ペイン - 最新のテスト実行に関するデータが表示されます。このペインで、アクティブかつターミナル エミュレーション TrueLog に適用されるビュー タブは、情報、BDL、受信本文、送信本文、および ホスト画面情報 です。

親トピック: ターミナル エミュレーション アプリケーションでの作業


ホスト画面表示のカスタマイズ

([コンテンツ] ペイン内の) ホスト画面 ビューに表示されるテキストのフォントやフォント サイズを変更できます。 テスト対象のアプリケーションで受信された文字が、定義済みのフォント (lucida console) で正しく表示されない場合は、この変更が必要な可能性があります。

フォント タイプ：

フォントを変更するには、Windows レジストリで以下のキーを変更する必要があります。
HKEY_CURRENT_USER\Software\Silk\Silk Performer\21.0\SystemSettings\Layout\GreenScreen Font Name

フォント サイズ：

表示される文字のサイズを変更するには、Windows レジストリで以下のキーを変更する必要があります。
HKEY_CURRENT_USER\Software\Silk\Silk Performer\21.0\SystemSettings\Layout\GreenScreen Font Size
フォントのサイズを入力します (デフォルトは 10)。
親トピック: ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション TrueLog のステップ スルーを行う

テストが終了すると、通常、TrueLog Explorer に複数の TrueLog On Error ファイルが表示されます (エラーを返した仮想ユーザーごとに 1 つの TrueLog)。 TrueLog Explorer の [エラーを検索] 機能を利用すると、エラーがどの TrueLog に記録されているかにかかわらず、エラーが発生した順番に、1 つずつ エラーをたどることができます。 これによりエラーの分析作業を単純化できます。 開いている TrueLog をすべて手動で確認して、次のエラーを検索する必要はありません。

  1. テストが終了したら、Silk Performer で 結果の検討 をクリックします。
    注: TrueLog On Error ファイルが作成されるのは、Silk Performer の エラー時に TrueLog を生成する オプションが有効になっている場合だけです。

    ワークフロー - 結果の検討 ダイアログ ボックスが開きます。

  2. TrueLog Explorer をクリックします。
    注: TrueLog Explorer は、テスト時にエラーが検出されなかった場合や [エラー時に TrueLog を生成する] が有効でない場合は、無効になっています。 そのような場合は、直接 Performance Explorer による結果の分析に進みます。
    TrueLog Explorer が起動され、現在のテストに対して生成された TrueLog On Error ファイルが開いて、TrueLog のステップ スルー ダイアログ ボックスが開きます。
  3. TrueLog のステップ スルー ダイアログで該当するオプション ボタンをクリックすると、すべての [安定な画面] (WebTelnetRecvCommand 呼び出し)、[API 呼び出し] (各 API ノード)、または [エラー] をたどることができます。 TrueLog On Error ファイルは、記録された順に検索されます。
    注: 複数の WebTelnetRecvCommand 呼び出しが 1 つのシーケンスにまとめられている場合、安定な画面 オプションを選択して 次を検索 をクリックすると、そのシーケンスの最後にある WebTelnetRecvCommand 呼び出しにフォーカスが自動的に移動します。
  4. 次を検索 をクリックして、最初の安定な画面、API 呼び出し、またはエラーに進みます。 エラー メッセージは、情報 タブに表示されます。 メニュー ツリーでは、再生エラーが含まれている API ノードには、赤い "X" 印が付いています。

開いている再生 TrueLog に対応する元の記録 TrueLog を表示するには、メニュー ツリーで再生 TrueLog の仮想ユーザー ノードを右クリックし、関連する記録 TrueLog を開く を選択します。 これにより、各サーバー レスポンスが ホスト画面 ビューに表示されます。

親トピック: ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション テスト スクリプトを分析する

テスト スクリプトを生成したら、スクリプトの試行を行って、スクリプトがエラーなしで動作するかどうかを確認します。 スクリプトの試行を行うことによって、記録された操作がスクリプトで正確に再現されるかどうかがわかります。

スクリプトの試行のデフォルトのオプション設定には、テストの実行中にダウンロードされるデータの実況表示や、ログ ファイルおよびレポート ファイルの作成などがあります。

スクリプトの試行では、トランザクション間の思考時間による遅延が発生しないように、1 人の仮想ユーザーのみが実行され、ストレス テスト オプションが有効になります。

  1. ワークフロー バーで、スクリプトの試行 をクリックします。 スクリプトの試行 ダイアログ ボックスが開きます。
  2. スクリプトの試行中にレンダリングされたページのトランザクションを表示するには、TrueLog Explorer によるアニメーション実行 チェック ボックスをオンにします。
  3. 実行 をクリックします。
    注: ここでは、実際の負荷テストではなく、スクリプトのデバッグが必要かどうかを確認するためのテスト実行のみを実行します。

    スクリプトの試行が開始されます。 監視 ウィンドウが開き、実行の進捗についての詳細な情報が表示されます。

    TrueLog Explorer が開き、スクリプトの試行の実行時に実際にダウンロードされたデータが表示されます。 記録時にアクセスされた主要なターミナル エミュレーション ウィンドウはそれぞれ、上位レベルの WebTelnetRecvCommand API ノードとしてメニュー ツリーに一覧表示されます。

親トピック: ターミナル エミュレーション アプリケーションでの作業


再生 TrueLog と記録 TrueLog を比較する

ターミナル エミュレーション アプリケーションをテストする場合、再生 TrueLog と記録 TrueLog の間で、対応するフィールド値に差異が発生することがあります。 それらの一部は、再生エラーの原因となる場合があります。

  1. 再生 TrueLog を開いて、ワークフロー バーの テストの分析 をクリックします。 ワークフロー - テストの分析 ダイアログ ボックスが開きます。
  2. テスト実行の比較 をクリックします。
  3. 関連する記録 TrueLog が 比較ビュー に表示されます。 TrueLog のステップ スルー ダイアログ ボックスも開きます。
  4. 検索の間隔 ([安定な画面]、[API 呼び出し]、[エラー] のいずれか) を選択します。
  5. 次を検索 をクリックして、記録 TrueLog と再生 TrueLog 内の対応する安定な画面、API 呼び出し、またはエラーの最初のセットに進みます。 コントロールおよびスクリーンショットの値と状態をビジュアルに比較して、差分があるかどうかを確認します。
  6. (検出した差分に基づいて) 必要なカスタマイズを完了したら、スクリプトの試行 をクリックして、カスタマイズ結果がエラーなしで動作することを確認します。
  7. その後のテスト実行の結果を分析して、カスタマイズが成功したかどうか、さらなるカスタマイズが必要かどうかを判断します。
  8. 比較モード をクリックして、比較モードを無効にします。
  9. スクリプトが十分にカスタマイズされ、必要なカスタマイズがすべて追加されるまで、この手順を繰り返します。
親トピック: ターミナル エミュレーション アプリケーションでの作業

記録 TrueLog と再生 TrueLog を同期させる

比較モードでは、再生 TrueLog と記録 TrueLog の間で、対応する API ノードを同期させることができます。

  1. 比較モードを有効にします。
  2. 一組の記録/再生 TrueLog をロードします。
  3. 同期させる API ノードを右クリックします。
  4. TrueLog の同期 を選択します。 TrueLog Explorer は、対応する TrueLog 内で、選択された API ノードと最も相関がある API ノードを見つけます。


ターミナル エミュレーション TrueLog 関数

6 種類のターミナル エミュレーション関数をテスト スクリプトに挿入できます。

WebTelnetScreenVerifyText
画面上のテキスト (ホスト画面 ビューで参照できます) を検証します。
WebTelnetScreenGetText
画面上のテキスト (ホスト画面 ビューで参照できます) を解析します。
WebTelnetScreenVerifyField
テキスト フィールド (ホスト画面情報 ビューで参照できます) を検証します。
WebTelnetScreenGetField
フィールドのテキスト (ホスト画面情報 ビューで参照できます) を解析します。
WebTelnetScreenVerifyStatus
フィールドのステータス (両方のビューで参照できます) を検証します。
WebTelnetScreenGetStatus
フィールドのステータス (両方のビューで参照できます) を解析します。
親トピック: ターミナル エミュレーション アプリケーションでの作業


ユーザー入力データをカスタマイズする

注: ターミナル エミュレーションのユーザー入力データのカスタマイズは、TN3270 と TN5250 の両方のプロトコルのスクリプトでサポートされています。
  1. ターミナル エミュレーション TrueLog が TrueLog Explorer にロードされた状態で、カスタマイズするユーザー入力データが含まれる WebTelnetSendRecordExecute API 呼び出し (API ノードのツリー メニュー) を選択します。
  2. ホスト画面 タブを選択します。 ホスト画面 タブには、ユーザー入力画面の画面キャプチャが表示されます。
  3. ホスト画面情報 タブを選択します。 ホスト画面情報 タブには、選択した画面にあるすべてのユーザー入力データ フィールドのリストが表示されます。 各入力フィールドは、画面に表示される順序で番号が付けられ、表示されます。 ホスト画面情報 タブで入力フィールドのエントリを選択すると、ホスト画面 タブの画面キャプチャで、対応するフィールドが強調表示されます。
    注: 記録時にデータが入力された入力フィールドだけが強調表示され、カスタマイズが可能です。
  4. ホスト画面情報 タブで、カスタマイズするフィールド エントリを右クリックし、ユーザー入力のカスタマイズ を選択します。 パラメータ ウィザード が起動します。
  5. パラメータ ウィザード を使用して、入力データのパラメータをスクリプトに含める方法を定義します。 パラメータ ウィザード の操作方法については、Silk Performer のヘルプを参照してください。 パラメータ ウィザード を使用してスクリプトに適用した変更は、[BDL] タブで確認できます。

Try Script の試行を実行して、新しいパラメータによって、ユーザー入力データが適切に挿入されることを確認します。

親トピック: ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション アプリケーションの検証関数

このセクションでは、ターミナル エミュレーションの API 呼び出しにおいて、コンテンツとフィールドを検証する方法について説明します。

  • ターミナル エミュレーション アプリケーションの検証関数
    コンテンツ検証関数は、任意のターミナル エミュレーション API 呼び出しに対して挿入できます。 たとえば、入力データが入力される WebTelnetSendCommand 関数呼び出しの場合は、戻り値検証関数を挿入できます。
  • コンテンツ検証関数を挿入する
    ターミナル エミュレーションのテキスト フィールドに検証関数を定義すると、ホスト画面 ビューで画面上のテキスト文字列を検証できます。
  • ステータス検証関数を挿入する
    ステータスは名前と値のペアです。 ステータス検証関数を使用すると、ターミナル エミュレーションの入力フィールドのステータス値を検証できます。
  • フィールド検証関数を挿入する
    ターミナル エミュレーションの入力フィールドにフィールド検証関数を定義すると、フィールド内のテキストを検証できます。
親トピック: ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション アプリケーションの検証関数

TrueLog Explorer では、テスト スクリプトにコンテンツ検証を追加することにより、サーバーから送信されたコンテンツが現実の条件下でクライアントによって本当に受信されるかどうかを簡単に確かめることができます。 コンテンツ検証関数は、任意のターミナル エミュレーション API 呼び出しに対して挿入できます。 たとえば、入力データが入力される WebTelnetSendCommand 関数呼び出しの場合は、戻り値検証関数を挿入できます。 ホスト画面 ビューおよび ホスト画面情報 ビューのどちらからでも、コンテキスト メニューから検証関数を挿入できます。

TrueLog Explorer では、再生テスト実行と記録テスト実行を比較することによって、ターミナル エミュレーション アプリケーションの負荷が重い場合でも、入力データが実際にクライアントにダウンロードされて表示されるかどうかを確認できます。これは、クライアント/サーバー環境でのエンドユーザーの状況をテストするという課題に対する他に類を見ないほど強力なアプローチです。 これにより、他のターミナル エミュレーション トラフィック シミュレーション ツールでは検出できないようなエラー、つまり、標準的な負荷テスト スクリプトでは検出されない負荷がかかっている場合にのみ発生するエラーを検出できるようになります。

コンテンツの検証は、稼働中のパフォーマンス管理に利用できるので、システムを配置した後にも役立ちます。

ホスト画面 ビューまたは ホスト画面情報 ビューで検証する入力フィールドを右クリックすることで、必要な検証関数を生成し BDL スクリプトに挿入できます。 TrueLog Explorer には、あらかじめ有効になっている検証関数が 3 つあります (WebTelnetScreenVerifyText、WebTelnetScreenVerifyField、および WebTelnetScreenVerifyStatus)。

コンテンツ検証と フィールド検証の比較

コンテンツ検証では、画面上のテキスト文字列の検証を、その画面上の位置にかかわらず、ホスト画面 ビューで選択および設定できます。 フィールド検証を利用すると、ターミナル ビュー内の定義済み領域 (フィールド) の検証を設定できます。 アプリケーションで画面全体が単一のフィールドとして定義されていたり、ページがヘッダー フィールド、フッター フィールド、ボディ フィールドなどで構成されている場合があります。 フィールドは、入力領域として使用される場合が多いものの、必ずしも入力を受け取らなければならないわけではありません。 画面上の文字は、必ずしもフィールド内に存在しなければならないわけではありません。

親トピック: ターミナル エミュレーション アプリケーションの検証関数


コンテンツ検証関数を挿入する

  1. ホスト画面情報 ビューで、戻り値を検証する入力フィールドを右クリックします。
  2. 選択したテキストの検証 を選択します。
  3. テキスト検証関数の挿入 ダイアログ ボックスが開きます。 このダイアログを使用すると、BDL スクリプトに挿入する検証関数のタイプを指定できます。 検証内容: 列 x、行 x から始まる一連の文字が以下に リスト ボックスから、[等しい] または [等しくない] を選択します。
  4. [定数値] または [パラメータ値] のどちらに対する検証であるかを指定します。
  5. 検証で [大文字/小文字を区別する] かどうかと、空白を無視するかどうかを指定します。
  6. ダイアログ ボックスの 深刻度 エリアで、検証が否定的な結果を返した場合に発生させる深刻度を指定します([エラー]、[警告]、[情報]、または [カスタム])。
  7. OK をクリックすると、検証関数がテスト スクリプトに追加されます。 BDL スクリプトが正常に変更されたら、BDL スクリプトに追加する検証ごとに、この手順を繰り返します。
親トピック: ターミナル エミュレーション アプリケーションの検証関数


ステータス検証関数を挿入する

ステータス検証関数を使用すると、ターミナル エミュレーションの入力フィールドのステータス値を検証できます。 ステータスは名前と値のペアです (検証が可能なのはステータス名の値です)。

  1. ホスト画面情報 ビューで、入力フィールドを右クリックします。
  2. ステータス値の検証 を選択します。
  3. ステータス値検証関数の挿入 ダイアログ ボックスが開きます。 このダイアログを使用すると、BDL スクリプトに挿入する検証関数のタイプを指定できます。 検証内容: ステータス リスト ボックスから、検証するステータスの名前を選択します。
  4. [等しい] または [等しくない] を選択して、検証するステータスの状態を定義します。
  5. [定数値] または [パラメータ値] のどちらに対する検証であるかを指定します。
  6. 検証で [大文字/小文字を区別する] かどうかと、空白を無視するかどうかを指定します。
  7. ダイアログ ボックスの 深刻度 エリアで、検証が否定的な結果を返した場合に発生させる深刻度を指定します([エラー]、[警告]、[情報]、または [カスタム])。
  8. OK をクリックすると、ステータス検証関数がテスト スクリプトに追加されます。 BDL スクリプトが正常に変更されたら、BDL スクリプトに追加するステータス検証ごとに、この手順を繰り返します。
親トピック: ターミナル エミュレーション アプリケーションの検証関数


フィールド検証関数を挿入する

ターミナル エミュレーションの入力フィールドにフィールド検証関数を定義すると、フィールド内のテキストを検証できます。

  1. ホスト画面情報 ビューでフィールドを右クリックして、フィールド テキストの検証 を選択します。
  2. フィールド検証関数の挿入 ダイアログ ボックスが開きます。 このダイアログを使用すると、BDL スクリプトに挿入する検証関数のタイプを指定できます。
  3. 検証の演算子として [等しい] (または [等しくない]) を選択します。
  4. [定数値] または [パラメータ値] のどちらに対する検証であるかを指定します。
  5. 検証で [大文字/小文字を区別する] かどうかと、空白を無視するかどうかを指定します。
  6. ダイアログ ボックスの 深刻度 エリアで、検証が否定的な結果を返した場合に発生させる深刻度を指定します([エラー]、[警告]、[情報]、または [カスタム])。
  7. OK をクリックすると、検証関数がテスト スクリプトに追加されます。 BDL スクリプトが正常に変更されたら、BDL スクリプトに追加するその他の検証ごとに、この手順を繰り返します。
親トピック: ターミナル エミュレーション アプリケーションの検証関数


ターミナル エミュレーション アプリケーションの解析関数

このセクションでは、セッション固有の文字列をパラメータ化する必要がある場合に、値の解析を使用して正確な再生を可能にする方法について説明します。

  • ターミナル エミュレーション アプリケーションの解析関数
    セッション固有の文字列をパラメータ化する必要がある場合に、値の解析を使用して正確な再生を可能にする方法について説明します。
  • コンテンツ解析関数を挿入する
    コンテンツ解析関数を挿入し、記録済みの TrueLog に含まれているテキスト値を解析してパラメータにします。
  • ステータス解析関数を挿入する
    ステータス解析関数を挿入し、記録済みの TrueLog に含まれているステータス値を解析してパラメータにします。
  • フィールド解析関数を挿入する
    フィールド解析関数を挿入し、記録済みの TrueLog に含まれているフィールド テキストを解析してパラメータにします。
親トピック: ターミナル エミュレーション アプリケーションでの作業


ターミナル エミュレーション アプリケーションの解析関数

ターミナル エミュレーション TrueLog 内の画面上の任意のテキスト、フィールド、またはステータスに対して解析関数を挿入できます。 値の解析は、正確な再生のためにセッション固有の文字列をパラメータ化する必要がある場合 (たとえば、新たに作成された顧客 ID を解析して、請求書の顧客 ID フィールドに挿入されるパラメータにするような場合)、再生を可能にするのに役立ちます。

コンテンツ解析と フィールド解析の比較

コンテンツ解析関数を利用すると、画面上のテキスト文字列の解析を、その画面上の配置にかかわらず、ホスト画面 ビューで選択および設定することができます。 フィールド解析関数を利用すると、ターミナル ビュー内の定義済み領域 (フィールド) の解析を設定できます。 アプリケーションで画面全体が単一のフィールドとして定義されていたり、ページがヘッダー フィールド、フッター フィールド、ボディ フィールドなどで構成されている場合があります。 フィールドは、入力領域として使用される場合が多いものの、必ずしも入力を受け取らなければならないわけではありません。 画面上の文字は、必ずしもフィールド内に存在しなければならないわけではありません。

親トピック: ターミナル エミュレーション アプリケーションの解析関数


コンテンツ解析関数を挿入する

  1. ホスト画面 ビューで、値を解析するテキストを選択します。
  2. 右クリックして 選択したテキストの解析 を選択します。
  3. テキスト解析関数の挿入 ダイアログ ボックスには、解析関数を調整するための設定があります。 デフォルト設定で適切と思われますが、以下の設定を調整することもできます。
    • パラメータ名: 解析関数の結果を受け取るパラメータの名前を入力します。
    • スクリプトに出力文を挿入: 通知用の Print 文をスクリプトに挿入する場合は、Print 文をオンにします。 これによって、解析関数の結果が Silk Performer の 仮想ユーザー 出力ウィンドウに出力されます。 (Print 文を実行して 仮想ユーザー出力 ウィンドウに値を書き込むほかに) デバッグしやすくするために解析値を出力ファイルに書き込む場合は、Writeln 文 をオンにします。 出力ファイルを生成すると負荷テストの時間測定値が変化するので、これらのファイルはデバッグのためだけに使用し、完全な負荷テストでは生成しないでください。
  4. OK をクリックすると、解析関数がテスト スクリプトに挿入されます。
親トピック: ターミナル エミュレーション アプリケーションの解析関数


ステータス解析関数を挿入する

  1. ホスト画面情報 ビューでステータスを右クリックして、ステータス値の解析 を選択します。
    注: この関数には、ホスト画面 ビューでフィールドを右クリックすることでもアクセスできます。
  2. ステータス値解析関数の挿入 ダイアログ ボックスには、解析関数を調整するための設定があります。 デフォルト設定で適切と思われますが、以下の設定を調整することもできます。
    • これはステータス:既存のステータス名のリスト ボックスから、挿入する解析関数の対象となるステータスを選択します。
    • パラメータ名: 解析関数の結果を受け取るパラメータの名前を入力します。
    • スクリプトに出力文を挿入: 通知用の Print 文をスクリプトに挿入する場合は、Print 文をオンにします。 これによって、解析関数の結果が Silk Performer の 仮想ユーザー 出力ウィンドウに出力されます。 (Print 文を実行して 仮想ユーザー出力 ウィンドウに値を書き込むほかに) デバッグしやすくするために解析値を出力ファイルに書き込む場合は、Writeln 文 をオンにします。 出力ファイルを生成すると負荷テストの時間測定値が変化するので、これらのファイルはデバッグのためだけに使用し、完全な負荷テストでは生成しないでください。
  3. OK をクリックすると、解析関数がテスト スクリプトに挿入されます。
親トピック: ターミナル エミュレーション アプリケーションの解析関数


フィールド解析関数を挿入する

  1. ホスト画面情報 ビューでフィールドを右クリックして、フィールド テキストの解析 を選択します。
  2. フィールド解析関数の挿入 ダイアログ ボックスには、解析関数を調整するための設定があります。 デフォルト設定で適切と思われますが、以下の設定を調整することもできます。
    • パラメータ名: 解析関数の結果を受け取るパラメータの名前を入力します。
    • スクリプトに出力文を挿入: 通知用の Print 文をスクリプトに挿入する場合は、Print 文をオンにします。 これによって、解析関数の結果が Silk Performer の 仮想ユーザー 出力ウィンドウに出力されます。 (Print 文を実行して 仮想ユーザー出力 ウィンドウに値を書き込むほかに) デバッグしやすくするために解析値を出力ファイルに書き込む場合は、Writeln 文 をオンにします。 出力ファイルを生成すると負荷テストの時間測定値が変化するので、これらのファイルはデバッグのためだけに使用し、完全な負荷テストでは生成しないでください。
  3. OK をクリックすると、解析関数がテスト スクリプトに挿入されます。
親トピック: ターミナル エミュレーション アプリケーションの解析関数


AJAX 対応 Web アプリケーションでの作業

このセクションでは、JSON データや XML データを "きれいに" 整形する方法と、AJAX 技術を使ったアプリケーションのテストに TrueLog Explorer のスクリプト カスタマイズ機能を適用する方法について説明します。

Silk Performer Recorder は、AJAX (Asynchronous JavaScript and XML) リクエストを利用する Web アプリケーションを記録し、(TrueLog Explorer の助けにより) 再生することができます。 これが可能なのは、HTML レスポンス内の XML や JSON の形式で受信した AJAX 同期リクエスト/レスポンスを Silk Performer が認識しているからです。

AJAX の詳細については、Silk Performer のヘルプを参照してください。

  • AJAX サポートの概要
    スクリプトのカスタマイズ、データの解析、セッションに依存する情報のカスタマイズといった目的で、AJAX リクエスト内の値にアクセスする方法を説明します。
  • TrueLog Explorer で JSON および XML 表示の書式整形を有効化する
    TrueLog Explorer が JSON データや XML データを検出できない場合には、レンダリング ページで JSON および XML を表示する際の書式整形を有効化します。
親トピック: TrueLog Explorer 21.0


AJAX サポートの概要

TrueLog Explorer および Silk Performer では、AJAX リクエスト内の値にアクセスすることができます。 これを利用すると、AJAX レスポンス内での入力データのパラメータ化、検証関数、解析関数、セッション情報のカスタマイズなど、TrueLog Explorer スクリプトのカスタマイズが簡単にできるようになります。

JSON データと XML データの書式整形

JSON および XML は、AJAX アプリケーションや REST 技術などの環境で一般に使われるデータ構造形式です。 TrueLog Explorer は、記録されたスクリプト内に含まれる XML 形式や JSON 形式のバイト ストリームを、書式整形して表示する機能をサポートしています。 JSON 形式のデータのレンダリングを拡張することで、文字列の検証や解析など、TrueLog Explorer のカスタマイズ機能を利用した文字列値のカスタマイズができるようになっています。

JSON ビューの書式整形は比較モードでもサポートされていて、記録セッションと再生セッションを並べて比較し、自動的に差分を検出することができます。

注: TrueLog Explorer には、JSON データを書式整形された JSON レンダリング ビューで表示するか、手を加えないそのままの JSON バイト ストリームとして表示するかを選択するオプションがあります。ただし、検証や解析などのスクリプト カスタマイズ機能は、JSON データをそのまま表示するビューではサポートされません。

書式整形したデータ表示は Silk Performer でも可能で、可読性の向上や B.F. スクリプトのカスタマイズに役立ちます。

親トピック: AJAX 対応 Web アプリケーションでの作業


TrueLog Explorer をカスタマイズする

このセクションでは、TrueLog Explorer のカスタマイズ、表示、および TrueLog 生成の各機能を、特定のニーズに適合させる方法について説明します。TrueLog Explorer オプション設定では、データの表示、差分検出に使用するデリミタの定義、仮想ユーザー レポートの生成などを構成できます。カスタマイズ機能を使用すると、UI コマンドおよびツールバーの表示をカスタマイズできます。

比較モードを使用すると、一度に 1 API ノードずつ、記録 TrueLog と再生 TrueLog を直接比較できます。一方、差分モードを使用すると、差分 ビューを介して、Web、XML、およびデータベース アプリケーションの記録 TrueLog と再生 TrueLog の相違を自動的に識別して一覧表示できます。また、差分モードでは、受信本文、送信本文、受信ヘッダー、送信ヘッダー、および BDL の各ページにおけるテキスト ベースの形式での相違も、異なるテキストを緑と赤で示すことで表示されます。

TrueLog Explorer のアニメーションを有効にすると、ダウンロードされている再生コンテンツ (グラフィックス、テキスト、SQL コマンドなど) をリアルタイムで表示できます。

最後に、TrueLog ファイルの生成には CPU/メモリが大量に使用される場合があるので、Silk Performer を使用して TrueLog の特性およびファイルが生成される基準を調整する方法を説明します。

  • TrueLog Explorer のオプションの設定
    オプション ダイアログ ボックスで設定できるオプション設定について説明します。
  • ツールバーとコマンドのカスタマイズ
    このセクションでは、ツールバーとそこに表示されるコマンドをカスタマイズする方法について説明します。
  • 表示モード
    このセクションでは、TrueLog の表示に利用できる表示モードについて説明します。
  • データのアニメーション
    アニメーションを有効にして、仮想ユーザー実行の間にサーバーから受信するコンテンツを、ユーザーが見るのと同じようにリアルタイムで表示する方法について説明します。
  • スケーラビリティに対する TrueLog の影響
    TrueLog の生成が、テスト環境でのパフォーマンスとメモリ使用量にどのように影響するかについて説明します。
  • カスタム コンテンツ タイプとファイル拡張子
    カスタム コンテンツ タイプおよびファイル拡張子をいくつかのレジストリ値に追加する方法について説明します。
  • TrueLog 生成の設定
    パフォーマンスとメモリへの影響が最低限になるように、TrueLog の記録レベルを調整する方法について説明します。
  • TrueLog ツリー フィルタ
    TrueLog ツリー フィルタを使用して、ノードを非表示にしたり、ツリーを短く簡潔に表示する方法について説明します。
親トピック: TrueLog Explorer 21.0


TrueLog Explorer のオプションの設定

オプション ダイアログ ボックスで設定できる TrueLog Explorer のオプション設定を使用すると、HTML ドキュメントや受信/送信データの表示、TrueLog 間の相違を特定する区切り文字の定義、仮想ユーザー レポートの生成などのアプリケーション設定を構成できます。

  • 表示オプションを設定する
    HTML ドキュメントのレンダリング、データ形式の表示、およびフィルタの適用を行うためのオプションを設定できます。
  • 区切り文字を挿入する
    TrueLog 間の相違を区切るために、文字またはテキストを挿入します。 区切り文字は、あるシーケンスを単一の相違として扱うのか、それとも複数の相違として扱うのかを決定します。
  • HTML 区切り文字を挿入する
    HTML 区切り文字は、HTML TrueLog 間の相違を区切るための文字またはテキストです。 区切り文字は、あるシーケンスを単一の相違として扱うのか、それとも複数の相違として扱うのかを決定します。
  • ワークスペース オプションの設定
    仮想ユーザー レポートの表示を自動的に有効化する方法と、XML やプロジェクト ツリーの自動展開レベルを設定する方法について説明します。
親トピック: TrueLog Explorer をカスタマイズする


表示オプションを設定する

  1. 設定 > オプション を選択します。 表示 タブが開きます。
  2. HTML ドキュメントをレンダリングする方法を指定します。
    • HTML ドキュメントをレンダリングするときにクライアント側スクリプトの実行を有効にするには、スクリプトを実行 チェック ボックスをオンにします。
    • HTML ドキュメントをレンダリングするときに画像またはフレームを表示するには、フレームと画像をロード チェック ボックスをオンにします。
    • HTML ドキュメントをレンダリングするときにアプレットまたは ActiveX コントロールの実行を有効にするには、アプレットを実行 チェック ボックスをオンにします。
  3. 送信ヘッダー、送信本文、受信ヘッダー、および 受信本文 ビューで、受信データおよび送信データを表示する方法を指定します。
    • テキスト書式設定のシンボル (たとえば、復帰改行の場合は \r\n、空白文字の場合は ".") を表示するには、空白を表示 チェック ボックスをオンにします。

      このオプションは、データをテキスト形式で表示する場合にのみ関係します。

    • データをバイナリ形式で表示するには、バイナリ データを表示 チェック ボックスをオンにします。
  4. OK をクリックします。
親トピック: TrueLog Explorer のオプションの設定


区切り文字を挿入する

TrueLog Explorer の一般比較タグを使用すると、区切り文字を定義できます。区切り文字は、TrueLog 間の相違を区切るための文字またはテキストです。 区切り文字は、あるシーケンスを単一の相違として扱うのか、それとも複数の相違として扱うのかを決定します。 区切り文字は、HTML を除くすべてのドキュメント タイプに使用されます。

  1. 設定 > オプション を選択して、比較タグ タブをクリックします。 比較タグ ページが開きます。
  2. 一般比較タグ テーブルに、区切り文字 (文字またはテキスト) を入力します。
    ヒント: 変更を破棄してデフォルトの設定に戻すには、デフォルト をクリックします。
  3. OK をクリックします。
親トピック: TrueLog Explorer のオプションの設定


HTML 区切り文字を挿入する

HTML 区切り文字は、HTML TrueLog 間の相違を区切るための文字またはテキストです。 区切り文字は、あるシーケンスを単一の相違として扱うのか、それとも複数の相違として扱うのかを決定します。

  1. 設定 > オプション を選択して、HTML 比較タグ タブをクリックします。 HTML 比較タグ ページが開きます。
  2. HTML 比較タグ テーブルに、区切り文字 (文字またはテキスト) を入力します。
    ヒント: 変更を破棄してデフォルトの設定に戻すには、デフォルト をクリックします。
  3. OK をクリックします。
親トピック: TrueLog Explorer のオプションの設定


ワークスペース オプションの設定

  1. 設定 > オプション をクリックして、ワークスペース タブをクリックします。
  2. アニメーションを指定したスクリプトの試行が終了したときや、ツリーで TrueLog ファイルのルート ノードを選択したときに、自動的に仮想ユーザーレポートが表示されるようにするには、 仮想ユーザー レポートを表示する チェック ボックスをオンにしてください。
  3. 特定のレベル数で XML ツリーを自動的に展開するには、XML ツリーの自動展開レベル を設定してください。
  4. 特定のレベル数でプロジェクト ツリーを自動的に展開するには、ログ ツリーの自動展開レベル を設定してください。
  5. プロジェクト ツリーの展開レベルを保存して、次に TrueLog を開いたときに自動的に適用するには、展開の状態を保持する チェック ボックスをオンにします。
  6. OK をクリックします。
親トピック: TrueLog Explorer のオプションの設定


ツールバーとコマンドのカスタマイズ

このセクションでは、ツールバーとそこに表示されるコマンドをカスタマイズする方法について説明します。

  • どのツールバーを表示するかを指定する
    TrueLog Explorer インターフェイスにどのツールバーを表示するかをカスタマイズできます。
  • カスタム ツールバーを作成する
    カスタム ツールバーを TrueLog Explorer インターフェイスに追加します。
  • ツールバーのコマンド ボタンをカスタマイズする
    特定のツールバーにどのコマンド ボタンを表示するかを定義することができます。
親トピック: TrueLog Explorer をカスタマイズする


どのツールバーを表示するかを指定する

TrueLog Explorer インターフェイスにどのツールバーを表示するかをカスタマイズできます。

  1. 設定 > カスタマイズ を選択します。 ツールバー ページが開きます。
  2. 表示したいツールバーの横のチェック ボックスをオンにします。
  3. 省略可能: ツールチップ (マウスを重ねたときに表示される UI コントロールの説明) を有効化したい場合には、ツールチップを表示 チェック ボックスをオンにします。
  4. 省略可能: TrueLog Explorer の "クールな外見" を有効化したい場合には、クールな外見 チェック ボックスをオンにします。
    クールな外見を指定すると、Windows 3.1 形式の影の付いたボタンが影のないボタンに置き換えられます。
  5. OK をクリックします。 代替方法:適用 をクリックして、選択した内容を即座に UI に適用します。
親トピック: ツールバーとコマンドのカスタマイズ


カスタム ツールバーを作成する

  1. 設定 > カスタマイズ を選択します。 ツールバー ページが開きます。
  2. ツールバー タブをクリックします。
  3. 新規作成 をクリックします。 ツールバーの新規作成 ダイアログ ボックスが開きます。
  4. ツールバーの名前を入力して OK をクリックします。
  5. OK をクリックします。

新しいツールバーに表示されるコマンド ボタンをカスタマイズします。

親トピック: ツールバーとコマンドのカスタマイズ


ツールバーのコマンド ボタンをカスタマイズする

特定のツールバーにどのコマンド ボタンを表示するかを定義することができます。
注: メニュー バー ツールバーはカスタマイズできません。
  1. 設定 > カスタマイズ を選択します。 ツールバー ページが開きます。
  2. コマンド タブをクリックします。
  3. カテゴリ リスト ボックスで、コマンド ボタンをカスタマイズしたいツールバーを選択します。
  4. ボタン ボックスに表示されているコマンドをクリックすると、説明 ボックスでその説明を見ることができます。
  5. ツールバーに追加したいコマンドを、カテゴリ リスト ボックスに表示されたそのツールバーの名前にドラッグします。
  6. OK をクリックします。
親トピック: ツールバーとコマンドのカスタマイズ


表示モード

比較モードおよび差分モードを使用すると、TrueLog の相違を表示できます。比較モードを使用すると、一度に 1 API ノードずつ、記録 TrueLog と再生 TrueLog を直接比較できます。一方、差分モードを使用すると、差分 ビューを介して、Web、XML、およびデータベース アプリケーションの記録 TrueLog と再生 TrueLog の相違を自動的に識別して一覧表示できます。また、差分モードでは、受信本文、送信本文、受信ヘッダー、送信ヘッダー、および BDL の各ページにおけるテキスト ベースの形式での相違も、異なるテキストを緑と赤で示すことで表示されます。

  • 比較モード
    再生 TrueLog とアプリケーションの記録中に生成された対応する TrueLog が比較される比較モードについて説明します。
  • 差分モード
    記録 TrueLog と再生 TrueLog 間で検出された差分が自動的に一覧表示される差分モードについて説明します。
親トピック: TrueLog Explorer をカスタマイズする


比較モード

比較モードでは、再生 TrueLog とアプリケーションの記録中に生成された対応する TrueLog が比較されます。 デフォルト ビューには再生 TrueLog が表示されます (左上隅に緑の三角形が付いています)。 比較ビューには記録 TrueLog が表示されます (左上隅に赤い三角形が付いています)。

対応する記録 TrueLog を開いている場合、または ファイルを開く ダイアログ ボックスで 比較ビューで開く チェック ボックスをオンにした場合、TrueLog は比較ビューで表示されます。

注: ワークフロー - セッション処理のカスタマイズ ダイアログ ボックスから 差分の検索 を実行すると、TrueLog は自動的に比較モードで開かれます。
  • 比較モードを有効にする
    再生 TrueLog と対応する記録 TrueLog を比較して再生エラーを分析するには、比較モードを使用します。
親トピック: 表示モード


比較モードを有効にする

再生 TrueLog と対応する記録 TrueLog を比較して再生エラーを分析するには、比較モードを使用します。 ファイルを開く ダイアログ ボックスで 比較ビューで開く チェック ボックスをオンにすると、TrueLog が自動的に比較モードで表示されます。 オフにすると、TrueLog はデフォルト ビューで表示されます。

注: 比較モードでは、記録と再生の ソース ビューを、左右ではなく上下に配置できます。 ソース ビューを左右に並べて比較するには、表示 > 左右に並べて比較 を選択します。
  1. TrueLog メニュー ツリーで TrueLog を選択します。
  2. 以下の手順の 1 つを実行します。
    • 比較モード をクリックします。
    • 表示 > 比較モード を選択します。
注: TrueLog の比較には、複数のエントリ ポイントやアプローチが利用可能です。
親トピック: 比較モード


差分モード

スクリプトの試行の実行中に生成された TrueLog とアプリケーションの記録中に生成された対応する TrueLog を比較することは、負荷テスト スクリプトの問題を特定する有効な手段です。

差分 ページから使用できる差分テーブルには、再生 TrueLog とそれに対応する記録 TrueLog の間で検出された差分の一覧が自動的に表示されます。

デフォルトで有効になる差分モードは特別な種類の比較モードであり、受信本文、送信本文、受信ヘッダー、送信ヘッダー ページで、テキストの差分が色付きでマーキングされます (赤と緑およびグレーの背景)。

  • 差分モードを有効にする
    受信本文、送信本文、受信ヘッダー、送信ヘッダー ページ上のテキストの差分を色分けして表示します（赤と緑およびグレーの背景）。
  • 差分テーブルを表示する
    再生 TrueLog と対応する記録 TrueLog の間で検出された差分を自動的に一覧表示します。
親トピック: 表示モード


差分モードを有効にする

差分モードはデフォルトで有効になります。

次のいずれか 1 つのステップを行います：
  • 表示 > 差分モード を選択します。
  • 差分モード アイコンをクリックします。
親トピック: 差分モード


差分テーブルを表示する

このタスクを開始する前に、差分モードが有効になっていることを確認してください (差分モードはデフォルトで有効になります)。

  1. 対応する記録 TrueLog と再生 TrueLog のペアを開きます。
  2. 表示 > 比較モード を選択して比較モードを有効にします。
  3. 差分 タブをクリックします。 再生 TrueLog と対応する記録 TrueLog の間で検出された差分が、自動的に一覧表示されます。
親トピック: 差分モード


データのアニメーション

アニメーションを有効にすると、仮想ユーザー実行の間にサーバーから受信するコンテンツが、ユーザーが見るのと同じようにリアルタイムで表示されます。 Web アプリケーションのテストの場合、これは、仮想ユーザーと同じように、ページ コンテンツのロード (グラフィックス、テキスト、および埋め込みオブジェクト) を見ることができることを意味します。 アニメーションはデフォルトで有効になっています。

TrueLog アニメーションは、TrueLog On Error を有効にして負荷テストを実行し、個別のユーザーに関するエラーを Silk Performer の 監視 ウィンドウ内の 仮想ユーザー ビューに表示されるエラー数で検出する場合に役に立ちます。 仮想ユーザー ビューのコンテキスト メニューで TrueLog の検討 をクリックすると、すぐに TrueLog On Error ファイルを見ることができます。 ただし、この機能はコントローラ マシンで実行している仮想ユーザーに対してのみ使用できます。負荷テストの間は、リモート エージェントの TrueLog にはアクセスできません。

アニメーションの一時停止、再開、および停止

アニメーションを一時停止または再開するには、アニメーション > アニメーションの一時停止 を選択します。 代替方法: キーボードで Ctrl+P を押します。

アニメーションを停止するには、アニメーション > アニメーションの中止 を選択します。

親トピック: TrueLog Explorer をカスタマイズする


スケーラビリティに対する TrueLog の影響

TrueLog の生成は、負荷テストの環境に適合できる場合にのみ役に立ちます。 したがって、メモリとパフォーマンスの要件を最小限に留める必要があります。

TrueLog のスケーラビリティに影響を与える要因として次の 2 つがあります。
  • パフォーマンスのダウングレード
  • メモリ使用量

パフォーマンスのダウングレード

TrueLog の生成に伴ってパフォーマンスがダウングレードする可能性は、0 から 10% の範囲です。 これは、ランタイムはすべての関連データをメモリに保持し、必要なメモリ割り当てを最低限に維持しようと試みるためです。 TrueLog On Error によるパフォーマンスへの影響はごくわずかです。

メモリ使用量

スケーラビリティに関して、TrueLog と TrueLog On Error の間には大きな違いがあります。 TrueLog 機能は、個々のリクエストとレスポンスを TrueLog ファイルにすぐに書き込みます。 TrueLog ファイルの書式設定のために内部 CPU 使用量は多くなり、TrueLog ファイルへの書き込みのために大量の IO が実行されます。

このため、多くの場合、TrueLog の生成は負荷テストには適していません。

TrueLog はサイズが大きくなることがあるため、テストの間にエラーが発生した場合にのみ TrueLog を生成するように、Silk Performer を構成することができます。 システムが正確に動作している間は何も記録されません。 このような対象を絞った TrueLog の生成は TrueLog On Error と呼ばれ、その結果、TrueLog ファイルはより小さい限定的なものになります。

TrueLog On Error の場合のメモリ要件は、利用する BDL スクリプトによって大きく異なります。 したがって、一般的な割合を示すことはできません。特に、完全なトランザクションのログを取得するように TrueLog On Error が構成されている場合は不可能です。 これが当てはまるのは、TrueLog On Error ファイルに対してデフォルトではない 1 トランザクションごと の TrueLog の保存の設定が選択されている場合だけであることに注意してください。 このような場合、メモリの使用量は、トランザクションに含まれるリクエストされた Web ページの数とサイズに関連します。 デフォルトの設定である コンテンツ履歴ベース の場合は、トランザクションの長さによる影響はありません。 通常、コンテンツの履歴は 5 ページ分の Web ページを超えることはなく、保存する必要があるのはこれらのページのみです。

親トピック: TrueLog Explorer をカスタマイズする


カスタム コンテンツ タイプとファイル拡張子

TrueLog Explorer では、特殊なコンテンツ タイプおよび URL ファイル拡張子のカスタム処理がサポートされます。 カスタム コンテンツ タイプおよびファイル拡張子をいくつかのレジストリ値に追加することによって、製品の動作を変更できます。 関連する設定は、レジストリ (HKEY_CURRENT_USER\Software\Silk\Silk TrueLog Explorer\15.5\) にあります。

この中に、次の 4 つのレジストリ値があります。
  • MaskContentTypes
  • MaskExtensions
  • SuppressContentTypes
  • SuppressExtensions

これらの値には、特殊な処理を必要とするコンテンツ タイプとファイル拡張子の一覧が含まれます。 Mask* の値はテキスト データに適用され、これらは HTML 表示でプレーン テキストとしてレンダリングできます。 Suppress* の値はバイナリ (テキスト以外の) データに適用され、これらは正しくレンダリングできません。

  • ファイル ダウンロード ダイアログ ボックスを非表示にする
    特定のコンテンツ タイプ (不要なダイアログ ボックスなど) を表示しないようにレジストリ設定を調整する方法について説明します。
親トピック: TrueLog Explorer をカスタマイズする


ファイル ダウンロード ダイアログ ボックスを非表示にする

  1. TrueLog Explorer で、ファイル ダウンロード ダイアログ ボックスが開くノードを選択します。
  2. 受信ヘッダー タブをクリックして、内容を調べます。
  3. コンテンツ タイプが見慣れないものの場合は (app/fireclick.x-hint.1 など)、以下の手順を実行します。
    1. TrueLog Explorer を閉じます。
    2. 見慣れないコンテンツ タイプを MaskContentTypes の値に追加します。 複数の文字列はセミコロンで区切ります。
    3. TrueLog Explorer を起動します。 レジストリの設定は起動時にのみ読み取られます。
    4. ダウンロード ボックスがまだ開く場合は、同じコンテンツ タイプを SuppressContentTypes の値に追加します。 ファイル ダウンロード ダイアログ ボックスは開かなくなります。
  4. コンテンツ タイプに問題がない場合は、URL を調べます。
    1. 拡張子が .html、.js、.pl、.chtml、.jar、.class、または .vbs 以外の場合は、 を閉じ、受信本文 ページを調べて、レスポンス本文がテキスト データまたはバイナリ データのどちらで構成されているかを確認します。
    2. 受信本文 ビューにテキスト データがある場合は、URL ファイル拡張子を MaskExtensions の値に追加します。
    3. データがバイナリの場合は、そのファイル拡張子を SuppressExtensions の値に追加します。 複数の拡張子はセミコロンで区切ります。
    4. TrueLog Explorer を起動します。 レジストリの設定は起動時にのみ読み取られます。
親トピック: カスタム コンテンツ タイプとファイル拡張子


TrueLog 生成の設定

概要

TrueLog は CPU と I/O を大量に使用するので、通常、負荷テストの間は有効にはしません。 一般に、TrueLog はスクリプト開発/検証の間のみ有効にされます。 一方、TrueLog On Error ファイルは、パフォーマンスに対して最適化されており、CPU への影響がわずかなので、負荷テストの間も通常は有効になっています。 TrueLog On Error ファイルは、平均的な数のエラーが予想される場合であっても、大規模なテストに対してアクティブにすることができ、再生パフォーマンスに大きな影響はありません。

ただし、 Silk Performer による TrueLog On Error の生成は、スケーラビリティに対して若干の影響を及ぼします。 Silk Performer の TrueLog 記録レベルを次の方法で調整することにより、この影響を可能な限り低く抑えておくことができます。
  • TrueLog の長さ
  • TrueLog が記録されるインシデントの深刻度
  • 埋め込みオブジェクトを含めるかどうか

以下のセクションで詳細に説明する TrueLog 生成オプションは、Silk Performer の 設定 > アクティブ プロファイル > 結果 > TrueLog を選択することによって構成できます。 この同じページを使用して、テストでの仮想ユーザーごとの TrueLog On Error ファイル (.xlg) の生成も有効にできます (TrueLog On Error ファイル (.xlg) チェック ボックス)。

TrueLog の長さ

TrueLog On Error の追跡は、一度に 1 トランザクションずつ完全なトランザクションを保存するように、または Web アプリケーションの場合はコンテンツ履歴の最新の 5 ページを保存するように構成できます。

1 トランザクションごと - この設定は、関連するすべてのページ (コンテンツ履歴) ではなく、エラーのある個々のトランザクションを追跡します。 メモリの消費は各トランザクションの長さに依存するので、このオプションは、メモリを心配しなくてよい場合、またはトランザクションが短い場合にのみ使用します。

コンテンツ履歴ベース - この設定は、最近のページの履歴のみを保存し、関連のないページはメモリから削除します。 この方法では、メモリの消費量の予測と管理が容易になります。 ただし、消費量がメモリに保存されるページのサイズに依存することに変わりはありません。

深刻度

ディスクへの TrueLog データの書き込み (最初は RAM に保存されます) をトリガするインシデントの深刻度を、TrueLog On Error の生成対象 の設定で定義できます。

埋め込みオブジェクト

すべての埋め込みオブジェクトを記録する - TrueLog には、すべての埋め込みオブジェクトのレスポンス ボディが含まれます。 リクエストおよびレスポンスのヘッダーが履歴に含まれなくなっても、埋め込みオブジェクトのコンテンツをブラウザに表示できます。 これは、キャッシュ ヒットであるためにページがサーバーに画像をリクエストしない場合、またはサーバーが「304 変更なし」エラーで応答した場合は、問題になる可能性があります。 すべての埋め込みオブジェクトを表示するため、Silk Performer は各埋め込みオブジェクトのコンテンツを、プロセス全体を対象とするグローバル キャッシュに保存します。

キャッシュされた埋め込みオブジェクトを除外する - キャッシュされたオブジェクトに対するグローバル ストアが有効になっていないと、一部の画像はロードされません。 この設定を選択すると、パフォーマンスがわずかに向上し、メモリの消費が減ります。

すべての埋め込みオブジェクトを除外する - 埋め込みオブジェクトのボディがまったくログに格納されない場合、埋め込みオブジェクトはロードされません。 この設定を選択すると、メモリの消費は大幅に減少します。 ただし、この方法で提供されるビジュアル情報には大きな欠損が発生します。

TrueLog On Error 情報がコンテンツ履歴に基づいて記録される場合は、仮想ユーザーごとのメモリ使用量に対する影響を、サンプル テストに基づいて予測できます。 次に示す値は、Amazon.com や IBM.com などのよく知られた Web サイトに対して実行したサンプル テストに基づいて計算されています。
設定 | メモリ消費の増加
すべての埋め込みオブジェクトを除外する | 80%
キャッシュされた埋め込みオブジェクトを除外する | 125%
すべての埋め込みオブジェクトを記録する | 130%
注: 必要なメモリの量が最低限の設定 ([TrueLog の保存] を [コンテンツ履歴ベース] とし、かつ [すべての埋め込みオブジェクトを除外する] を選択) は、すべての関連データのログ取得には十分です。 ただし、含まれるビジュアル情報は大きく損なわれます。
親トピック: TrueLog Explorer をカスタマイズする


TrueLog ツリー フィルタ

TrueLog ツリー フィルタを使用すると、ノードを非表示にしたり、ツリーを短く簡潔に表示することができます。この機能は、大規模な TrueLog ファイルで作業する際に、特に便利です。たとえば、セッションのカスタマイズ中には、画像ノードを非表示にしたい場合などに使用します。

フィルタは、指定した TrueLog に対して適用されます。いくつかのフィルタを作成して、さまざまな TrueLog にさまざまな設定を適用できます。フィルタの有効／無効を切り替えるには、ツリーで TrueLog を選択して、ツリー フィルタ ツールバーの ツリー フィルタの切り替え をクリックします。このツールバーが表示されていない場合は、表示 > ツールバーとドッキング ウィンドウ から選択して有効にします。フィルタが提供されているときには、TrueLog のルート ノードに フィルタ済み キーワードが表示され、表示ノードにフィルタ アイコンが表示されます。

TrueLog ツリー フィルタを設定するには、表示 > ツリー フィルタの設定 をクリックするか、ツールバーの対応するボタンをクリックします。全般設定とタイプに固有の設定を指定できます。TrueLog タイプを選択してから、特定のノードの表示／非表示をチェック ボックスをクリックして選択します。

フィルタを適用するには、次の 2 つの方法があります。

  • フィルタを適用：選択した TrueLog にフィルタを適用します。フィルタ設定は、TrueLog と同じフォルダにある .view ファイルに保存されます。TrueLog ファイルを移動する場合は、この設定ファイルも一緒に移動してください。
  • フィルタを適用してデフォルトとして保存：フィルタを適用して、設定をデフォルトとして保存します。同じプロジェクトのほかの TrueLog を開き、フィルタを有効にすると、このデフォルトの設定が適用されます。デフォルトのフィルタ設定は、プロジェクト フォルダにある .view ファイルに保存されます。

比較モード では、TrueLog Explorer に 2 つのツリー（メイン ビューと比較ビュー）が表示されます。両方のツリーでフィルタを同期させる場合は、表示 > ツリー フィルタの同期を保つ をクリックします。

親トピック: TrueLog Explorer をカスタマイズする


Performance Explorer21.0

Performance Explorer 21.0 へようこそ。

Performance Explorer では、リアルタイム監視を通じて取得した測定値を参照したり、完了した負荷テストの結果を分析できます。さまざまなツールと機能によって、キャプチャしたすべてのデータに対して包括的な分析、レポート、処理を行うことができます。

  • 入門
    Performance Explorer の概要について説明します。
  • 結果の分析
    Performance Explorer で結果の分析がどのように機能するかの概要を説明します。
  • レポートを作成する
    Performance Explorer が提供するレポートの種類を一覧し、レポートで作業する方法について説明します。
  • リアルタイム監視
    Performance Explorer を使用して、システムのパフォーマンスをリアルタイムに表示するグラフを作成/設定して、システムを監視する方法の概要について説明します。
  • 組み込みの測定値
    測定値の概要と、測定値および測定値グループのリストについて説明します。
  • コマンド ライン パラメータ
    コマンド ライン インターフェイスから実行できるパラメータを紹介します。
  • 表示をカスタマイズする
    Performance Explorer には、グラフ、グラフの時系列、およびレポートの表示をカスタマイズするためのさまざまなオプションがあります。


入門

  • Performance Explorer の概要
    Performance Explorer の 2 つの主要な機能である結果の分析とリアルタイム監視の概要について説明します。
  • 用語
    Performance Explorer および Performance Explorer ヘルプ全体で使用される重要な用語について説明します。
  • 時系列データ ファイル
    時系列ファイルの種類について説明します。
  • Performance Explorer を起動する
    Performance Explorer を起動するいくつかの方法を説明します。
  • UI のツアー
    Performance Explorer ユーザー インターフェイスの主要なセクションを紹介します。
親トピック: Performance Explorer21.0


Performance Explorer の概要

Performance Explorer には 2 種類の主要な機能があります。
  • 結果の分析
  • リアルタイム監視

結果の分析

Performance Explorer の結果の分析機能を使用すると、完了した負荷テストの結果をグラフ、表、レポートを利用して分析できます。グラフを使用すると、負荷テスト中に収集したデータを可視化でき、レポートや表は、重要なデータをまとめたり見つけたりするのに役立ちます。すべてのグラフ、表、レポートの基礎をなすのが .tsd ファイルのデータです。各負荷テスト中に、 Silk Performer は大量のデータをキャプチャし、いくつかの時系列データ (.tsd) ファイルに保存します。負荷テストが完了すると、Performance Explorer でデータ (.tsd ファイル) を読み込み、要求に従って編集できます。すべてのグラフが完全にカスタマイズ可能で、必要な数の測定値を含めることができます。1 つまたは複数のテストからの測定値を使用して、複数のグラフを開き、類似性や差異を表示できます。 Performance Explorer は、グラフ、表、レポートのさまざまなテンプレートを提供します。さらに、クライアントとサーバー パフォーマンスに関する情報を 1 つのグラフに置くことができるので、サーバー パフォーマンスがクライアントの動作に与える影響を直接見ることができます。変更をテンプレートとして保存すれば、個々の設定を再利用できます。

リアルタイム監視

Performance Explorer のリアルタイム監視機能を使用すると、システムのパフォーマンスをリアルタイムに表示するグラフを作成、設定することにより、幅広いシステムを監視できます。同時に複数のグラフを開き、複数のシステム (Web サーバーのパフォーマンスとオペレーティング システムのパフォーマンスなど) のパフォーマンスを同時に監視することができます。グラフに測定値を追加することは、Performance Explorer では直感的で簡単です。追加する測定値 (複数でも可) を、ツリーからグラフにドラックするだけです。

親トピック: 入門


用語

以下の用語は、Performance Explorer および Performance Explorer ヘルプ全体で使用されます。誤解を避け、説明を明確かつ分かりやすくするため、これらの用語をここで定義します。
用語 | 説明
グラフ | グラフは測定値をグラフで視覚的に表現する描画領域です。グラフは、すべての表示されるグラフの線をまとめたもの示すこともあります。
グラフの線 | グラフの線は測定値をグラフィカルに表現したものです。グラフに測定値をドラッグすると、特定の色、スタイル、幅を持つグラフの線として表示されます。
時系列 | 時系列は、ある測定値の一連の値です。例：測定値 アクティブ ユーザー数 は、2、4、6、8 の値を持ちます。このような一連の値が時系列です。
測定値 | 測定値は負荷テスト中、または特定の測定ポイントに対する監視セッション中に収集される値をグループ化した最小のエンティティです。測定値は名前と型を持ちます。測定値に関連して測定された一連の値が時系列データ (.tsd) ファイルに格納されます。例：送信されたリクエスト や トランザクション (ビジー) OK [秒] は測定値です。
レポート | レポートには、負荷テストの特定の結果や重要な所見をまとめることができます。レポートは、説明テキストを持つ表とグラフで構成されます。Performance Explorer では、 HTML 概要レポート、Word 概要レポート、比較レポート (地域、ユーザー タイプ、カスタム比較レポート) の各種レポートを作成できます。
表 | 表は、負荷テスト中や監視セッション中に収集したデータを表形式で表示します。
監視グラフ | 監視グラフにはリアルタイムで更新されるグラフを表示します。動的な監視グラフは監視セッションで使用され、静的なグラフは完了した負荷テストの結果分析で使用されます。
監視出力 | 監視出力は、監視セッションのテキストを含んだグラフィカルな要約です。
システム | システムは、監視可能なマシン、テクノロジ、アプリケーションです。Performance Explorer は、監視対象として幅広い種類のシステムをサポートします。
親トピック: 入門


時系列データ ファイル

TSD ファイル | ファイル名のパターン | 説明
ユーザー ファイル | u@<...>.tsd | ユーザー ファイルには、1 人の仮想ユーザーから得られた時系列データが含まれています。負荷テスト中に、ユーザー ファイルはエージェント上で生成されます。
エージェント ファイル | a@<...>.tsd | エージェント ファイルには、1 つのエージェントから得られた時系列データが含まれています。負荷テスト中に、エージェント ファイルはエージェント上で生成されます。
中間ファイル | i@<...>.tsd | 中間ファイルには、1 つのエージェントから得られたすべての時系列データ (そのエージェントで動作しているすべての仮想ユーザーから得られた時系列データを含む) が含まれています。負荷テストが完了すると、エージェント上で、ユーザー ファイルとエージェント ファイルがマージされて中間ファイルが生成されます。マージされると、中間ファイルはコントローラに転送されます。
マージされたファイル | m@<...>.tsd | マージされたファイルには、すべてのエージェントから得られた時系列データが含まれています。コントローラ上で、中間ファイルがマージされて生成されます。マージされたファイルは、マスター ファイルであり、負荷テストのすべての時系列データが含まれています。
ユーザー タイプごとのエージェント ファイル | t@<...>.tsd | ユーザー タイプごとのエージェント ファイルには、1 つのエージェントの 1 つのユーザー タイプから得られた時系列データが含まれています。ユーザー ファイルと混同しないようにしてください。いくつかの仮想ユーザーを 1 つのユーザー タイプに割り当てることができます。つまり、ユーザー タイプごとのエージェント ファイルには、通常、いくつかのユーザー ファイルから得られた時系列データが含まれています。負荷テストが完了すると、エージェント上で、同じユーザー タイプのユーザー ファイルがマージされてユーザー タイプごとのエージェント ファイルが生成されます。マージされると、ユーザー タイプごとのエージェント ファイルはコントローラに転送されます。
ユーザー タイプごとのマージされたファイル | k@<...>.tsd | ユーザー タイプごとのマージされたファイルには、すべてのエージェントの 1 つのユーザー タイプから得られた時系列データが含まれています。コントローラ上で、同じユーザー タイプのエージェント ファイルがマージされて生成されます。
地域ファイル | n@<...>.tsd | 地域ファイルには、1 つのクラウド地域から得られた時系列データが含まれています。コントローラ上で、同じ地域のクラウド エージェントの中間ファイルがマージされて生成されます。
リアルタイム ファイル | r@<...>.tsd | リアルタイム ファイルには、サーバー側監視中に収集され計算された時系列データが含まれています。

親トピック: 入門


Performance Explorer を起動する

Silk Performer での作業を始める前に、アプリケーションがどのようにセットアップされ、配置されているかを知っておく必要があります。たとえば、どのマシンでデータベース サーバーやアプリケーション サーバーを実行するかを確認します。

Performance Explorer を起動する方法は、いくつかあります。
  • Windows スタート メニューから：スタート > すべてのプログラム > Silk > Silk Performer <バージョン> > 分析ツール > Silk Performance Explorer をクリックします。
  • Silk Performer から：結果 > サーバーの監視 をクリックします。
  • Silk Performer から：結果 > 時系列の検討 をクリックします。
  • Silk Performer から：ツール > Silk Performance Explorer をクリックします。
  • コマンド ライン ツールから。

新しいテンプレートを編集するか、Silk Performer の結果メニューから Performance Explorer を起動すると、プログラムでは定義済みの監視グラフをいくつかと、定義済みのデータ ソースを 1 つ開きます (ローカル マシン)。

親トピック: 入門


UI のツアー

Performance Explorer ユーザー インターフェイスの主要なセクションを以下に示します。

(1) リボン

Performance Explorer のリボンには、4 つの固定タブと、2 つのコンテキスト タブがあります。固定タブは常に表示されますが、コンテキスト タブはグラフやレポートが開かれ、アクティブな場合にのみ表示されます。固定タブは次の通りです。

  • 結果：このタブには、結果の表示と分析に関するすべてのコマンドがあります。
  • レポート：このタブには、レポートの作成と作業に関するすべてのコマンドがあります。
  • リアルタイム監視：このタブには、Performance Explorer のリアルタイム監視機能に関するすべてのコマンドがあります。
  • ウィンドウ：このタブには、ウィンドウの表示方法 (並べて表示、重ねて表示) やレイアウトのリセットなどの、いくつかのウィンドウ コマンドがあります。

コンテキスト タブは次の通りです。

  • グラフ：このタブは、グラフがアクティブな場合に表示されます。ここには、グラフやグラフの線の表示を制御するすべてのコマンドがあります。
  • 時系列：このタブは、グラフがアクティブな場合に表示されます。ここには、時系列の表示を制御するすべてのコマンドがあります。

(2) グラフ/レポート

この領域には、グラフやレポートが表示されます。ツリーからグラフに測定値を簡単にドラッグできます。コンテキスト タブのコマンドをしようして、グラフ、時系列、レポートの表示を調整できます。例：グラフの色や線の幅、スタイルを変更したり、倍率の有効化、マーカーや NULL 値や測定値の限界の表示などを行えます。

(3) ツリー

ツリー領域は、次の 4 つのツリーで構成されます (ツリー タブは、ツリー領域の下部に表示されます)。検討 ツリーには、負荷テストまたは単一の .tsd ファイルの測定値が表示されます。監視 ツリーには、監視されているシステムの測定値が表示されます。Silk Central ツリーには、Silk Central から呼び出され管理されている負荷テストの測定値が表示されます。クライアント側測定値 ツリーには、クライアント側測定値が表示されます。

ツリーからグラフに測定値をドラッグできます。ツリーの余白をダブルクリックして負荷テストやシステムを追加することができます。

(4) 測定値リスト

測定値リストは、グラフが開かれ、アクティブな場合に表示されます。グラフに表示されているすべての測定値を一覧できます。チェック ボックスをクリックして、測定値のグラフ上での表示を切り替えることができます。このリストでは複数選択もサポートされているため、複数またはすべての測定値の表示を切り替えることも可能です。

(5) ログ ウィンドウ

ログ ウィンドウには、エラーやクエリ状態など、パフォーマンス監視中に発生するイベントがすべて一覧表示されます。ウィンドウ タブでログ ウィンドウの表示を切り替えることができ、また、ログ ウィンドウを右クリックして、ログのコピーやクリアを行うことができます。

親トピック: 入門


結果の分析

Performance Explorer の結果の分析機能を使用すると、完了した負荷テストの結果をグラフ、表、レポートを利用して分析できます。グラフを使用すると、負荷テスト中に収集したデータを可視化でき、レポートや表は、重要なデータをまとめたり見つけたりするのに役立ちます。すべてのグラフ、表、レポートの基礎をなすのが .tsd ファイルのデータです。各負荷テスト中に、 Silk Performer は大量のデータをキャプチャし、いくつかの時系列データ (.tsd) ファイルに保存します。負荷テストが完了すると、Performance Explorer でデータ (.tsd ファイル) を読み込み、要求に従って編集できます。すべてのグラフが完全にカスタマイズ可能で、必要な数の測定値を含めることができます。1 つまたは複数のテストからの測定値を使用して、複数のグラフを開き、類似性や差異を表示できます。 Performance Explorer は、グラフ、表、レポートのさまざまなテンプレートを提供します。さらに、クライアントとサーバー パフォーマンスに関する情報を 1 つのグラフに置くことができるので、サーバー パフォーマンスがクライアントの動作に与える影響を直接見ることができます。変更をテンプレートとして保存すれば、個々の設定を再利用できます。

Performance Explorer には特別なワークフローはありませんが、通常、次のような手順で行います。
  • 追加：Performance Explorer ワークスペースに結果を追加します。
  • 可視化：読み込んだ結果を基にして、グラフ、表、レポートを作成します。
  • 分析：結果を分析します (エラーの分析、グラフの比較、根本原因の特定によって)。
  • 処理：結果のリサンプルまたはマージ、およびデータをエクスポートします。
  • 結果を追加する
    Performance Explorer に結果を追加するさまざまな方法について説明します。
  • 結果を可視化する
    グラフ、表、レポートを用いて Performance Explorer で結果を可視化する方法について説明します。
  • 結果を分析する
    負荷テストの結果を分析するための機能について説明します。
  • 結果を処理する
    Performance Explorer での結果の処理方法 (リサンプル、マージ、エクスポート) について説明します。
  • 結果を表示する
    結果を HTML ドキュメントに変換して、Web ブラウザで表示できます。
親トピック: Performance Explorer21.0


結果を追加する

結果の表示、分析、処理を始める前に、Performance Explorer に結果を追加する必要があります。一般的な方法は、Silk Performer の 負荷テストの要約 ページにあるグラフやボタンをクリックして、直接結果を開くことです。

しかし、Performance Explorer ワークスペースを空の状態で起動して、次のように結果を追加することもできます。
  • 指定した負荷テストのすべての結果を追加する
  • Silk Central から結果をインポートする
  • 単一の .tsd ファイルを追加する
  • 負荷テストの結果を追加する
    負荷テストの結果を Performance Explorer に追加する方法について説明します。
  • Silk Central から結果を追加する
    負荷テストの結果を Silk Central から Performance Explorer にインポートする方法について説明します。
  • 単一の結果ファイルを追加する
    Performance Explorer に単一の結果ファイル (.tsd ファイル) を追加する方法いついて説明します。
親トピック: 結果の分析


負荷テストの結果を追加する

負荷テストの結果を追加する場合、結果フォルダを指定して、すべての .tsd ファイルを Performance Explorer ワークスペースに追加できます。
  1. Performance Explorer を開きます。
  2. 結果 タブの 追加 グループで、負荷テストの結果 をクリックします。
  3. プロジェクト ディレクトリと負荷テストを指定して、追加 をクリックします。
追加した結果は 検討 ツリーに表示されます。
ヒント: ツリーの余白をダブル クリックしたり、ツリーを右クリックしてコンテキスト メニューのコマンドを使用して、結果を追加することもできます。
親トピック: 結果を追加する


Silk Central から結果を追加する

Silk Central から結果をインポートしたり (以下で説明します)、Silk Central から直接 Performance Explorer を起動できます。
  1. Performance Explorer を開きます。
  2. 結果 タブの 追加 グループで、Silk Central から をクリックします。
  3. ウィザードの指示に従って、結果ファイルをワークスペースに追加します。
追加した結果は Silk Central ツリーに表示されます。
ヒント: ツリーの余白をダブル クリックしたり、ツリーを右クリックしてコンテキスト メニューのコマンドを使用して、結果を追加することもできます。
親トピック: 結果を追加する


単一の結果ファイルを追加する

単一の .tsd ファイルを選択して (他の負荷テストからでも可)、Performance Explorer ワークスペースに結果を追加できます。
  1. Performance Explorer を開きます。
  2. 結果 タブの 追加 グループで、結果ファイル をクリックします。
  3. ウィザードの指示に従って、結果ファイルをワークスペースに追加します。
追加した結果は 検討 ツリーに表示されます。
ヒント: ツリーの余白をダブル クリックしたり、ツリーを右クリックしてコンテキスト メニューのコマンドを使用して、結果を追加することもできます。
親トピック: 結果を追加する


結果を可視化する

Performance Explorer ワークスペースに結果を追加すると、グラフ、表、レポートを用いてそれらを可視化することができます。

  • グラフを作成する
    グラフを Performance Explorer で作成する方法について説明します。
  • 表を作成する
    表を Performance Explorer で作成する方法について説明します。
  • レポートを作成する
    レポートを Performance Explorer で作成する方法について説明します。
親トピック: 結果の分析


グラフを作成する

  1. Performance Explorer を開きます。
  2. 結果 タブの 新規 グループで、グラフ をクリックして、空のグラフを作成します。
  3. ダイアログで .tsd ファイルを選択します。 このダイアログは、ワークスペースに結果を追加していない場合にのみ表示されます。
  4. ツリーからグラフに測定値をドラッグします。
ヒント: グラフ ドロップダウン矢印をクリックし、定義済みのグラフ をクリックして、テンプレートからグラフを作成するか、または 空の仮想ユーザー ベースのグラフ をクリックして、X 軸上に仮想ユーザー数を表示する空のグラフを作成することもできます。
親トピック: 結果を可視化する


表を作成する

  1. Performance Explorer を開きます。
  2. 結果 タブの 新規 グループで、表 をクリックして、空の表を作成します。
  3. ダイアログで .tsd ファイルを選択します。 このダイアログは、ワークスペースに結果を追加していない場合にのみ表示されます。
  4. ツリーから表に測定値をドラッグします。
ヒント: 表 ドロップダウン矢印をクリックして、定義済みの表 をクリックすると、テンプレートから表を作成することもできます。
親トピック: 結果を可視化する


レポートを作成する

  1. Performance Explorer を開き、結果をワークスペースに追加します。
  2. レポート タブの 概要レポート および 比較レポート グループで、次のボタンのいずれかをクリックします。
    • Word
    • HTML
    • 地域
    • ユーザー タイプ
    • カスタム
各種レポートについての詳細は、「レポートを作成する」セクションの対応するトピックを参照してください。
親トピック: 結果を可視化する


結果を分析する

Performance Explorer には、負荷テストの結果を分析するために使用できる複数の機能があります。エラーの分析 機能を使用すると総合的なエラー分析を実行でき、グラフの比較 機能を使用するとさまざまな負荷テストの測定値を比較できます。また、根本原因の特定 機能を使用することもできます。

  • エラーを分析する
    すべてのエラーをグラフィックで表示し、詳細情報を見つけるために詳しく調べます。
  • エラー分析グラフ
    エラー分析グラフに表示される情報について説明します。
  • 根本原因を特定する
    サーバー側の問題をうまく特定するためにクライアント側の測定値とサーバー側の測定値を相関させます。
  • グラフを比較する
    Performance Explorer の グラフの比較 機能を使用する方法について説明します。
親トピック: 結果の分析


エラーを分析する

Performance Explorer には、負荷テスト中に発生したエラーの分析に役立つ機能があります。概要レポートにはエラーの情報が表示されますが、エラーの分析 機能では、総合的なエラー グラフにすべてのエラーが表示され、詳細な情報が一覧できます。

以下の手順を実行する前に、Silk Performer で負荷テストを設定し、実行してください。

  1. 負荷テストが完了すると、 負荷テストの要約 ページが表示されます。次のステップ 領域にある エラーの分析 をクリックします。 Performance Explorer が開き、エラー グラフが表示されます。
  2. 負荷テストの結果 グラフをクリックしたり、次のステップ 領域にある 負荷テストの分析 をクリックすることもできます。 Performance Explorer が開きます。その後、結果 タブの 分析 グループで、エラーの分析 をクリックします。 エラー グラフが開きます。グラフを拡大して、必要な特定の情報を掘り下げることができます。
ヒント: Performance Explorer ワークスペースを空の状態で起動することもできます。この場合、結果 タブの 分析 グループで、エラーの分析 をクリックして、.tsd ファイルを指定します。
親トピック: 結果を分析する


エラー分析グラフ

エラー分析グラフには、以下の情報が表示されます。
表示 | 説明
エラー グループ | エラー グループ ペインには、分析対象の負荷テスト中に発生したすべてのエラーのグループ情報が表示されます。 ズーム機能とシフト機能を利用すれば、特定の時間枠における情報を表示できます。
エラーの詳細 | エラーの詳細 ペインには、選択した時間枠内に発生したエラーがすべて一覧表示されます。 エラーをダブルクリックするか、右クリックしてコンテキスト メニューから TrueLog の表示 を選択すると、そのエラーの視覚的情報が含まれているそれぞれの TrueLog ファイルを用いて TrueLog Explorer が起動され、選択したエラーの根本原因を突き止めるのに役立ちます。
凡例 | 凡例 ペインには、グラフに表示されている曲線が一覧表示されます。これは、デフォルトではエラー分析グラフのエラー要約にすぎません。 また、発生回数、最小値、最大値などに関する詳細な情報も表示されます。 カーソルをグラフの上に置くと、特定の時間枠でのエラーの発生回数が表示されます。 カーソルをグラフの上で移動させると、それに合わせて 値 列が更新されます。
親トピック: 結果を分析する


根本原因を特定する

この作業を行う前に、グラフのデータ ソースとして使用される時系列データ (TSD) ファイルを指定します。

Performance Explorer の自動結果相関機能は、クライアント側の問題を、対応するサーバー側の測定値と相関させることによって、ネットワークとサーバーのボトルネックに関する根本原因の分析を容易にします。自動結果相関は、特定のクライアント側のエラーに最も関連が深いサーバー側測定値を識別します。それによって、サーバー側の問題が容易に特定され、デバッグ作業が迅速になります。結果相関は、逆の場合も機能します。つまり、サーバー側の問題をクライアント側の測定値と相関させることもできます。

自動結果相関は、主要測定値を従属測定値と統計的に相関させます。たとえば、サーバー レスポンス時間の大幅な増加がクライアント側の 18 時 20 分 (午後 6 時 20 分) の測定値によって検知されると、クライアント側のパフォーマンスの落ち込みに寄与したサーバー側の測定値を、自動結果相関によって特定できます。

  1. 分析する測定値のグラフ内でクリックして、カーソルを右にドラッグして、分析する時間枠を選択します。
    注: 時間枠を時間軸上で前後に移動させるには、時間枠を右クリックしマウスを右または左にドラッグします。時間枠は、Y 軸にそって垂直方向にも移動できます。
    注: 分析のためにより短い期間を選択する場合は、時間枠を右にドラッグします。分析のためにより長い期間を選択する場合は、時間枠を左にドラッグします。
  2. ワークフロー バー の 根本原因の特定 をクリックします。 代替方法：グラフを右クリックして、根本原因の分析 を選択します。 根本原因の特定 - 相関関係の設定 ダイアログ ボックスが開きます。基本測定値が、基本測定値 ボックスに表示されます。
  3. 相関先 リスト ボックスで、基本測定値と相関を算出する測定値の種類を選択します。
  4. 適切なリスト ボックスで新しい [開始日時] および [終了日時] を選択して、[日時の選択] 設定を調整します。 時間軸で選択した時間枠に基づいて、[日時の選択] 設定が自動的に定義されます。
  5. 結果 領域で、一致する度合いに基づいて測定値をフィルタ処理する方法を指定します。 以下のオプションのいずれかを選択します。
    • 相関の最も強い測定値 をクリックして、テキスト ボックスに返される測定値数を指定します。
    • 相関関係度の下限 をクリックして、テキスト ボックスに値を入力して最小相関関係度を指定します。
  6. 次へ をクリックします。
    注: [クライアントおよびサーバーの測定値]、[クライアントの測定値]、または [サーバーの測定値] に対して相関させる場合は、ステップ 10 に進みます。
    相関関係にある測定値 ページが開きます。
  7. [カスタム] 測定値に相関させる場合は、相関させる測定値グループを定義する必要があります。測定値グループ チェック ボックスで、相関させる対象のグループをオンにします。
  8. 省略可能：ファイルの追加 をクリックし、時系列データ ファイルを参照して選択すると、その他の測定値を追加できます。 測定値を選択して、ファイルの削除 をクリックすると、測定値を削除できます。
  9. 次へ をクリックして、相関を実行します。 相関関係付けの結果 ページが開きます。

    デフォルトでは、返された測定値は相関関係の度合いの順序で一覧表示され、すべての相関が選択されます。

  10. 相関グループ および 名前 列見出しをクリックして、返った測定値をソートします。
  11. 相関グラフから除外する測定値のチェック ボックスをオフにします。
  12. 完了 をクリックして、相関関係グラフを生成します。
親トピック: 結果を分析する


グラフを比較する

関心のある測定値に対するグラフをカスタマイズして作成するとき、さまざまなユーザー タイプ、エージェント、地域あるいは負荷テストの測定値に対して、これらの測定値を比較したい場合があります。Performance Explorer では、この目的のために グラフの比較 機能を提供します。グラフの比較 をクリックすると、Performance Explorer は選択した測定値に対する新しいグラフを作成し、比較対象の測定値を自動的に追加します。

  1. 新しいグラフを作成します。結果 タブの 新規 グループで、グラフ をクリックします。
  2. 負荷テストの結果ファイルを Performance Explorer にまだ読み込んでいない場合には、ダイアログで .tsd ファイルを選択します。
  3. ツリーから調べたい測定値をグラフにドラッグします。
  4. 結果 タブの 分析 グループで、グラフの比較 の下にあるドロップダウン矢印をクリックし、次のオプションから 1 つを選択します。
    • 他のユーザー タイプ：作業中のグラフで選択中の測定値で新しいグラフを作成して、すべてのユーザー タイプから同じ測定値を追加します。
    • 他のエージェント：作業中のグラフで選択中の測定値で新しいグラフを作成して、すべてのエージェントから同じ測定値を追加します。
    • 他の地域：作業中のグラフで選択中の測定値で新しいグラフを作成して、すべての地域から同じ測定値を追加します。
    • 他の TSD ファイル：作業中のグラフで選択中の測定値で新しいグラフを作成して、異なる TSD ファイルの同じ測定値を追加します。
  5. 他の .tsd ファイルとグラフを比較することを選択した場合は、Performance Explorer は .tsd ファイルを選択するためのダイアログを表示します。
親トピック: 結果を分析する


結果を処理する

Performance Explorer を使用して、さまざまな方法で結果を処理できます。
  • 間隔を変更したり時間枠を再定義して、結果をリサンプルできます。
  • 複数の負荷テストの結果をマージできます。
  • 結果をエクスポートして、表計算ソフトなどのサードパーティ ツールで処理できます。
  • 負荷テストの結果をリサンプルする
    間隔を変更したり時間枠を再定義して、負荷テストの結果ファイルをリサンプルします。
  • 単一の結果ファイルをリサンプルする
    間隔を変更したり時間枠を再定義して、結果ファイルをリサンプルします。
  • 負荷テストの結果をマージする
    2 つ以上の負荷テストの結果 (同一プロジェクト内) を 1 つの結果フォルダにマージします。これにより、単一のレポートですべての結果を分析できるようになります。
  • 単一の結果ファイルをマージする
    コントローラがエージェントとの接続を失った場合にファイルを手動でマージします。
  • TSD ファイルを CSV ファイルとしてエクスポートする
    .tsd ファイルの内容を .csv ファイルにエクスポートするために必要なすべての設定を指定する方法について説明します。
  • TSD File Export Tool を使用する
    TSD File Export Tool は、.tsd ファイルの内容を .cvs ファイルにエクスポートするのを自動化できるコマンドライン ツールです。
親トピック: 結果の分析


負荷テストの結果をリサンプルする

負荷テストの結果フォルダを指定して、含まれている .tsd ファイルのデータを間隔を変更したり、時間枠を再定義してリサンプルできます。

  1. 結果 タブの データ処理 グループで、負荷テスト結果のリサンプル をクリックします。
  2. リサンプルする .tsd ファイルを含む負荷テストの ソース ディレクトリ を指定します。ターゲット フォルダの名前を指定し、次へ をクリックします。
  3. 出力間隔 を指定します。長時間実行した負荷テストの場合、出力間隔を大きくすると対象ファイルが小さくなるので好都合な場合があります。
  4. 以下のマージ タイプのいずれかを選択します。
    • 相対 をクリックすると、すべての時系列が同時に開始することを指定できます。
    • 絶対 をクリックすると、時系列ごとに開始時刻が異なることを指定できます。

      別々の負荷テストから得られたファイルをマージする場合、それらのファイルの開始時間は異なるため、相対 マージ タイプを使用します。

      絶対 を選択した場合は、時間枠を指定できます。この時間枠内のデータのみ、出力ファイルにマージされます。

  5. 新しい開始日時と終了日時を選択して、日時の設定を変更します。 時間軸で選択した時間枠に基づいて、[日時の選択] 設定が自動的に定義されます。
  6. 次へ または 完了 をクリックすると、リサンプル処理が開始されます。
親トピック: 結果を処理する


単一の結果ファイルをリサンプルする

結果ファイルを指定して、含まれているデータを間隔を変更したり、時間枠を再定義してリサンプルできます。出力間隔を増加させると、結果ファイルのサイズが小さくなり、対応するグラフが滑らかになります。

  1. 結果 タブの データ処理 グループで、単一結果ファイルのリサンプル をクリックします。
  2. ソース ファイル を指定します。これは、リサンプルする .tsd ファイルです。ターゲット ファイルの名前を指定し、次へ をクリックします。 ターゲット ファイルの書式は次のようになります：m@@<sourcefilename>_r.tsd
  3. 出力間隔 を指定します。長時間実行した負荷テストの場合、出力間隔を大きくすると対象ファイルが小さくなるので好都合な場合があります。
  4. 以下のマージ タイプのいずれかを選択します。
    • 相対 をクリックすると、すべての時系列が同時に開始することを指定できます。
    • 絶対 をクリックすると、時系列ごとに開始時刻が異なることを指定できます。

      別々の負荷テストから得られたファイルをマージする場合、それらのファイルの開始時間は異なるため、相対 マージ タイプを使用します。

      絶対 を選択した場合は、時間枠を指定できます。この時間枠内のデータのみ、出力ファイルにマージされます。

  5. 新しい開始日時と終了日時を選択して、日時の設定を変更します。 時間軸で選択した時間枠に基づいて、[日時の選択] 設定が自動的に定義されます。
  6. 次へ または 完了 をクリックすると、リサンプル処理が開始されます。
親トピック: 結果を処理する


負荷テストの結果をマージする

大規模な負荷テストを実行するには、複数のコントローラから負荷テストを開始する必要があります。結果として、Silk Performer は複数の結果フォルダ (コントローラごとに 1 つのフォルダ) を生成します。結果のマージ 機能を使用して、複数の結果を 1 つの結果フォルダにマージできます。これにより、単一の包括的レポートにすべての測定値を表示することができるようになります。

注: 異なるプロジェクトからの結果をマージすることはできません。
  1. 結果 タブの データ処理 グループで、結果のマージ をクリックします。
  2. 2 つ以上の負荷テスト結果フォルダをファイル エクスプローラからテーブルにドラッグするか、追加 をクリックして結果フォルダを参照します。
  3. マスター 列で、マスター負荷テストを指定します。結果ファイルからの値にはマージできないものもあります (プロジェクトの説明など)。この場合、Performance Explorer は、マスター負荷テストの値を使用します。
  4. マージ タイプ を選択します。
    • 絶対：レポートのタイムラインで実際の開始時間が結果に表示されます。たとえば、コントローラ A で負荷テストを開始した 10 秒後に、コントローラ B で負荷テストを開始した場合、結果はその結果に基づいてタイムライン上に表示されます。
    • 相対：負荷テストの実際の開始時間に関わらず、レポートのタイムライン上に同じ開始時間ですべての結果が表示されます。
  5. マージされた .tsd ファイル用の 間隔 を指定します。最小の間隔 (間隔 リストに表示される) は、指定した結果フォルダにあるすべての .tsd ファイルの間隔の最小公倍数です。
  6. ターゲット フォルダ を指定します。マージ結果がこのフォルダに保存されます。
  7. マージ をクリックします。
結果が正しくマージされると、Performance Explorerは概要レポートを表示します。この新しく作成されたレポートのワークロード タイプは Merged Workload であり、すべての実行したユーザー グループを含みます。
親トピック: 結果を処理する


単一の結果ファイルをマージする

単一の結果ファイルのマージは、次の状況において有用です。
  • 選択したソース .tsd ファイル群をもとにしてカスタム .tsd ファイルを作成する。
  • マージした .tsd ファイル (m@...tsd) を再作成して、負荷テスト中に接続が失われたエージェントの結果を取り込む。コントローラとエージェントの接続が失われた場合、エージェント ファイルはローカルの結果ディレクトリにあります。接続を失ったタイミングにより、ユーザー ファイルのみ、またはマージされたエージェント ファイルが残っています。これらの結果を負荷テスト コントローラの中間ファイルに取り込むには、手動でこれらのファイルをマージする必要があります。
  1. 必要に応じて、マージするすべてのファイルを単一のディレクトリにコピーします。
  2. ウィザード > カスタム マージ ウィザード を選択します。 カスタム マージ ウィザード が開きます。
  3. すべてのファイルが保存されているディレクトリを選択し、マージするファイルをすべて選択します。
  4. 完了 をクリックします。
すべてのデータを含む新しいマージされたファイルが生成されます。
注: 同じまたは依存したデータを含む .tsd ファイル群を選択しないでください。たとえば、ユーザー タイプ .tsd ファイルとマージしたユーザー タイプ .tsd ファイルをマージすると、同じ時系列に対して複数の集計が行われるため、通常、意味のあるシナリオではありません。
親トピック: 結果を処理する


TSD ファイルを CSV ファイルとしてエクスポートする

TSD から CSV 機能を使用して、.tsd (時系列データ： Time Series Data) ファイルの内容を .csv (カンマ区切り値： Comma Separated Values) ファイルにエクスポートできます。その後、外部の表計算ソフトでデータを分析したり、編集したりできます。

コマンド ライン ツールの TSD File Export Tool を使用することもできます。これにより、エクスポート処理を自動化できます。

  1. 結果 タブの データ処理 グループで、TSD から CSV をクリックします。
  2. ソース ファイル を選択し、エクスポート ファイル の名前と場所を指定して、次へ をクリックします。
  3. エクスポートする測定値を選択し、次へ をクリックします。
  4. エクスポート タイプ を選択します。
    • 標準 をクリックした場合、.csv ファイルに含める必要がある結果ファイルのデータ ソース要素を指定します。
    • ダンプ をクリックした場合は、すべてのメタ データが .csv ファイルに含まれます。
  5. .csv ファイルにヘッダーを含める場合は、ヘッダー情報を含める をオンにします。.csv ファイルで使用する区切り文字として、カンマまたはセミコロンのいずれかを選択し、小数点として使用する文字を選択します。
  6. 完了 をクリックし、データをエクスポートして .csv ファイルを生成します。
  7. 出力ファイルを表示する場合は、その後に表示されるダイアログで はい をクリックします。
親トピック: 結果を処理する


TSD File Export Tool を使用する

TSD File Export Tool は、.tsd ファイルの内容を .cvs ファイルにエクスポートするのを自動化できるコマンドライン ツールです。エクスポート設定のユーザー インターフェイスを提供する Performance Explorer の TSD から CSV 機能を使用することもできます。

  1. Microsoft Windows のスタート メニューからツールを開きます：スタート > すべてのプログラム > Silk > Silk Performer <バージョン> > 分析ツール > TSD File Export Tool。
  2. コマンド プロンプトで、以下に示された構文に基づいてファイル エクスポートの指定を入力します。
    Tsd2Csv tsdFile [csvFile] [-Delimiter char] [-DecimalPoint
                char] [-dump]
    コマンド | 説明
    tsdFiles | エクスポートする .tsd ファイルのパスと名前を入力する。
    [csvFile] | 作成する .csv ファイルのパスと名前を入力する。
    [-Delimiter char] | 区切り文字を定義する。
    [-DecimalPoint char] | 出力ファイルで小数点を表す記号を定義する。
    [-dump] | -DecimalPoint パラメータを無視する。
  3. Enter を押して .csv ファイルを生成します。

例

Tsd2Csv "input.tsd" "output.csv" -Delimiter "," -DecimalPoint "."
親トピック: 結果を処理する


結果を表示する

Performance Explorer は、グラフ、レポート、表を HTML ドキュメントに変換して、Web ブラウザで表示できます。これにより、グラフ、レポート、表の各種ドキュメントへの取り込み、オンラインでの公開、または便利な形式での印刷を行うことができます。

  • Web ブラウザでグラフを表示する
    Web ブラウザにグラフを表示し、Web での公開を準備します。
  • Web ブラウザでレポートと表を表示する
    Web ブラウザに HTML 概要レポートと表を表示し、Web での公開を準備します。
  • グラフをエクスポートする
    外部プログラムで使用したり、公開したり、電子メールで送信したりするために、グラフまたはグラフ データをエクスポートできます。
  • レポートと表をエクスポートする
    外部プログラムで使用したり、公開したり、電子メールで送信したりするために、レポートや表をエクスポートできます。
  • コマンドライン インターフェイスでレポートをエクスポートする
    レポートに簡単にアクセスできるようにコマンドライン インターフェイスでレポートをエクスポートします。
親トピック: 結果の分析


Web ブラウザでグラフを表示する

Web ブラウザに表示するグラフを作成するか、開きます。

  1. Web ブラウザに表示するグラフを作成するか、開きます。
  2. グラフ タブの データ グループで、ブラウザで表示 をクリックします。
  3. グラフの タイトル と 説明 を入力し、OK をクリックします。 タイトルと説明は、ブラウザでグラフの上部に表示されます。
親トピック: 結果を表示する


Web ブラウザでレポートと表を表示する

Web ブラウザに表示するレポートを作成するか、開きます。

  1. Web ブラウザに表示する　HTML 概要レポートまたは表を作成するか、開きます。
  2. レポート タブの タスク グループで、ブラウザで開く をクリックします。
  3. レポートまたは表の タイトル と 説明 を入力し、OK をクリックします。 タイトルと説明は、ブラウザでグラフの上部に表示されます。
親トピック: 結果を表示する


グラフをエクスポートする

Performance Explorer にアクセスできない人に見せるために、さまざまな形式でグラフをエクスポートできます。

  1. エクスポートするグラフを作成または開きます。
  2. グラフ タブの グラフ グループで、エクスポート の下にあるドロップダウン矢印をクリックします。
    • グラフ データを .csv ファイルにエクスポートするには、CSV ファイル をクリックします。表示されるダイアログで、.htm、.mht、.jpg などの種々のファイル形式から選択します。.csv 形式がデフォルト値です。
    • グラフ データを Microsoft Excel 文書にエクスポートするには、Excel 文書 をクリックします。グラフは、Excel で自動的に作成されます。
ヒント: .mht 形式は、電子メールでグラフを送信するのに適しています。.html 形式は、Web でグラフを公開するのに適しています。.csv 形式は、外部の表計算ソフトでデータを処理するのに適しています。画像形式で保存すると、他のドキュメントに画像としてグラフを挿入できます。
親トピック: 結果を表示する


レポートと表をエクスポートする

Performance Explorer にアクセスできない人に見せるために、さまざまな形式でレポートや表をエクスポートできます。

  1. エクスポートするレポートや表を作成または開きます。
  2. レポート タブの タスク グループで、名前をつけて保存 をクリックします。
  3. 開いたダイアログで、ディレクトリを選択し、ファイル名を入力し、ファイルの形式を選択してから、保存 をクリックします。
ヒント: .mht 形式は、電子メールでレポートや表を送信するのに適しています。.html 形式は、Web でレポートや表を公開するのに適しています。.csv 形式は、外部の表計算ソフトでデータを処理するのに適しています。
ヒント: コマンド ライン インターフェイスからレポートをエクスポートすることもできます。これにより、エクスポート処理を自動化することができます。
親トピック: 結果を表示する


コマンドライン インターフェイスでレポートをエクスポートする

HTML レポートは、コマンドライン インターフェイスを使って Web アーカイブ (MHT ファイル) としてエクスポートすることもできます。 レポートのエクスポートには、コマンドライン パラメータ /EXPORTOVR:<target file> を使います。

このパラメータは、対象ファイルのファイル拡張子の指定に従って、アクティブな OVR を HTML または MHT ファイルとして保存します。

注: 最後にロードされた TSD ファイル、つまりコマンド ライン (/TSD:<tsd file>) で指定された最後の TSD ファイルがエクスポートに使用されます。

/ACTION:OVERVIEWREPORT[:<template>] パラメータでは、レポートのテンプレート ファイルを指定できます。

コマンド ラインによる Web アーカイブ ファイルのエクスポートの例を次に示します。

/TSD:<tsdFile> /ACTION:OVERVIEWREPORT /EXPORTOVR:c:\test.mht

親トピック: 結果を表示する


レポートを作成する

レポートを作成することは、負荷テスト中に収集したデータを要約し、分析するための 1 つの手段です。Performance Explorer が提供するレポートの種類と、レポートを作成して作業する方法について学びます。

  • Word 概要レポート
    Word 概要レポートには、負荷テスト結果についての重要な情報が Microsoft Word 文書で表示されます。
  • HTML 概要レポート
    HTML 概要レポートには、負荷テスト結果についての重要な情報が表示されます。
  • 比較レポート
    Performance Explorer が提供する 3 種類の比較レポートについて説明します。
親トピック: Performance Explorer21.0


Word 概要レポート

Performance Explorer では、Microsoft Word 文書で負荷テスト結果を表示できます。プレゼンテーション用に結果をさらに加工したり、カスタマイズした書式設定を追加する場合に特に有用です。

  • Word 概要レポートを作成する
    Word 概要レポートを作成し、表示する方法について説明します。
  • Word 概要レポートのテンプレートを作成する
    Word 概要レポートを作成する際に使用できるテンプレートを作成する方法について説明します。
親トピック: レポートを作成する


Word 概要レポートを作成する

  1. Performance Explorer ワークスペースに負荷テストの結果を追加します。
  2. レポート タブの 概要レポート グループで、次のボタンのいずれかをクリックします。
    • Word または Word 概要レポート をクリックして、結果を Word 文書で表示します。
    • Word 概要レポート (テンプレートから) をクリックして、.docx ファイルを選択し、作成 をクリックします。
    • カスタム Word 概要レポート をクリックして、Word 概要レポートに含まれるべき情報を選択し、作成 をクリックします。
注: 今後のすべてのレポートにテンプレートを使用する を有効にすると、常にテンプレートに基づいて Word 概要レポートが作成されます。このオプションを無効にするには、Performance Explorer のアプリケーション ボタン (左上にある) をクリックし、オプション をクリックします。レポート作成 タブをクリックし、Word 概要レポートの新規作成時にテンプレート (.docx) を使用する をオフにします。
親トピック: Word 概要レポート


Word 概要レポートのテンプレートを作成する

テンプレートを保存して使用する前に、レポートに表示したいすべての情報を含む Word 概要レポートを作成します。

  1. レポート タブの 概要レポート グループで、カスタム Word 概要レポート をクリックします。
  2. テンプレートに含まれるべき情報を選択し、作成 をクリックします。 Microsoft Word が開き、指定した情報が表示されます。
  3. 必要に応じて Word ドキュメントの内容や体裁を適用します。情報やコメントの追加、フィールドの再配置、要素のスタイルの変更、ヘッダー、フッター、ロゴの変更、不要な内容の削除などを行うことができます。
  4. Word 文書を .docx ファイルとして保存して閉じます。 これで、テンプレートが作成されました。
  5. Performance Explorer に戻ります。レポート タブの 概要レポート グループで、Word 概要レポート (テンプレートから) をクリックします。
  6. 定義した .docx ファイルを参照し、作成 をクリックします。
注: 今後のすべてのレポートにテンプレートを使用する を有効にすると、常にテンプレートに基づいて Word 概要レポートが作成されます。このオプションを無効にするには、Performance Explorer のアプリケーション ボタン (左上にある) をクリックし、オプション をクリックします。レポート作成 タブをクリックし、Word 概要レポートの新規作成時にテンプレート (.docx) を使用する をオフにします。
親トピック: Word 概要レポート


HTML 概要レポート

負荷テストが完了すると、負荷テストの要約 ページが Silk Performer に表示され、概要レポートが自動的に生成されます。概要レポートは、Silk Performer の 結果 ツリーにあります。Performance Explorer で概要レポートを開くには、ツリーでレポートをダブルクリックするか、負荷テストの要約 ページにある 負荷テストの分析 をクリックします。また、空の Performance Explorer ワークスペースを開き、レポート タブの 概要レポート グループで HTML をクリックします。

  • HTML 概要レポートを作成する
    負荷テストの完了後に HTML 概要レポートを作成して表示する方法について説明します。
  • HTML 概要レポートのテンプレートを作成する
    HTML 概要レポートを作成する際に使用できるテンプレートを作成する方法について説明します。
  • 概要レポート テンプレートをプロジェクトに割り当てる
    Silk Performer プロジェクトに対して概要レポート テンプレートを指定します。テンプレートは、HTML 概要レポートを自動または手動で生成する際に使用されます。
親トピック: レポートを作成する


HTML 概要レポートを作成する

以下の手順を実行する前に、Silk Performer で負荷テストを設定し、実行してください。負荷テストが完了すると、 負荷テストの要約 ページが表示されます。次のいずれか 1 つのステップを行います：

  • 次のステップ 領域にある 負荷テストの分析 をクリックします。
  • ツリーの下部にある 結果 をクリックし、負荷テスト ノードを展開して 概要レポート をダブルクリックします。

Performance Explorer が開き、概要レポートが表示されます。

Performance Explorer から HTML 概要レポートを開くには、以下の手順を実行します。

  1. Performance Explorer ワークスペースに負荷テストの結果を追加します。
  2. レポート タブの 概要レポート グループで、次のボタンのいずれかをクリックします。
    • HTML または HTML 概要レポート をクリックして、結果を HTML 概要レポートで表示します。
    • HTML 概要レポート (テンプレートから) をクリックして、.ovt ファイル (概要レポート テンプレート) を選択し、作成 をクリックします。
    • カスタム HTML 概要レポート をクリックして、HTML 概要レポートに含まれるべき情報を選択し、作成 をクリックします。
注: 今後のすべてのレポートにテンプレートを使用する を有効にすると、常にテンプレートに基づいて HTML 概要レポートが作成されます。このオプションを無効にするには、Performance Explorer のアプリケーション ボタン (左上にある) をクリックし、オプション をクリックします。レポート作成 タブをクリックし、HTML 概要レポートの新規作成時にテンプレート (.ovt) を使用する をオフにします。
注: デフォルトでは、概要レポートは自動的に生成されます。自動生成を無効化するには、Performance Explorer アプリケーション ボタン (左上にある) をクリックし、オプション をクリックしてから、レポート作成 タブをクリックして、概要レポートを自動的に生成する をオフにします。
親トピック: HTML 概要レポート


HTML 概要レポートのテンプレートを作成する

HTML 概要レポートのテンプレートは、.ovt ファイルとして保存されます。
  1. Performance Explorer で、HTML 概要レポートを作成または開きます。
  2. レポート タブの 概要レポート グループで、カスタマイズ をクリックします。
  3. テンプレートに含まれるべき情報を選択し、カスタマイズ をクリックします。
  4. レポート タブの 概要レポート グループで、テンプレートとして保存 をクリックします。
  5. テンプレートを .ovt ファイル（概要レポート テンプレート）として保存します。
注: HTML 概要レポートを Performance Explorer で作成するときに、常にこのテンプレートを使うように設定することができます。Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。レポート作成 タブをクリックし、HTML 概要レポートの新規作成時にテンプレート (.ovt) を使用する をオンにして、ファイルを指定します。
親トピック: HTML 概要レポート


比較レポート

Performance Explorer は、3 種類の比較レポートを提供します。
  • 地域比較レポート
  • ユーザー タイプ比較レポート
  • カスタム比較レポート

比較レポートを使用すると、テスト実行の結果を最大 8 件まで並べて比較できます。その構造は、標準のベースライン レポートの構造とよく似ています。つまり、比較レポートには、要約、トランザクション、エラー、ページ、アクション タイマーに関する統計情報、Web フォーム、順位、その他多くの測定値が含まれます。

比較レポートの下部に、ベースライン ペイン が表示されます。このペインには、特定の地域またはユーザーの名前、または全体という名前の列（行がすべてのテスト結果を含む場合）のいずれかの列が含まれます。エージェント 列には、指定した各地域でテストに使用されたエージェントの数が表示されます。

任意のテスト結果をベースラインとして定義できます。ほかのすべての結果は、このベースラインをリファレンスとして使用し、ベースラインと比較されます。レポート順位では、ベースライン結果は常に 1 番目にリストされます。b アイコンまたは ベースライン タグによって、ベースライン地域を識別します。ベースラインに対して評価されたすべての測定値は、温度分布グラフで確認できます（レポートの色つき棒グラフ）。カーソルを温度分布グラフの上に移動すると、詳細な情報が表示されます。結果をベースラインとして設定するには、それを右クリックして ベースラインとして設定 をクリックします。

  • 地域比較レポート
    地域比較レポートを使用すると、クラウド ベースの負荷テストの結果をクラウド地域の結果を並べて表示することによって比較することができます。
  • ユーザー タイプ比較レポート
    ユーザー タイプ比較レポートによって、複数のユーザー タイプを並べて比較することができます。
  • カスタム比較レポート
    カスタム比較レポートを使用すると、テスト実行の結果を最大 8 件まで並べて比較できます。
  • 地域比較レポートを作成する
    地域比較レポートの作成やベースラインの設定について、典型的な手順を説明します。
  • ユーザー タイプ比較レポートを作成する
    ユーザー タイプ比較レポートの作成やベースラインの設定について、典型的な手順を説明します。
  • カスタム比較レポートを作成する
    カスタム比較レポートを作成する典型的な手順について説明します。
親トピック: レポートを作成する


地域比較レポート

地域比較レポートを使用すると、クラウド ベースの負荷テストの結果を比較できます。これらは、クラウド エージェントを使用して負荷を生成した負荷テストです。さまざまな地域の結果をならべて比較できます。1 行ごとに 1 つの地域がレポートに表示されます。最大 8 つの地域を 1 つの地域比較レポートに含めることができます。

結果全体と地域固有の結果の両方を比較することができます。ツリーから測定値をレポートにドラッグして追加することもできます。全体 ノードをレポートにドラッグして、結果全体を追加できます。

親トピック: 比較レポート


ユーザー タイプ比較レポート

ユーザー タイプ比較レポートによって、複数のユーザー タイプを並べて比較することができます。1 行ごとに 1 つのユーザー タイプがレポートに表示されます。最大 8 つのユーザー タイプを 1 つのユーザー タイプ比較レポートに含めることができます。

結果全体とユーザー タイプ固有の結果の両方を比較することができます。ツリーから測定値をレポートにドラッグして追加することもできます。全体 ノードをレポートにドラッグして、テストの結果全体を追加できます。データ セットは、ベースライン ペインのユーザー タイプ列で、全体 とマークされます。

親トピック: 比較レポート


カスタム比較レポート

カスタム比較レポートを使用すると、テスト実行の結果を最大 8 件まで並べて比較できます。さらに、負荷テストのユーザー タイプまたは地域での実行を比較することもでき、ユーザーのシナリオによっては役立てることができます。

親トピック: 比較レポート


地域比較レポートを作成する

以下の手順を行う前に、Silk Performer でさまざまな地域のクラウド エージェントを使用するクラウド ベースの負荷テストを構成し、負荷テストを実行してください。

  1. クラウド ベースの負荷テストが完了すると、 負荷テストの要約 ページが表示されます。負荷テストの結果 グラフをクリックすると、グラフが Performance Explorer で開かれます。 結果が Performance Explorer に読み込まれ、ツリーに表示されます。
  2. 地域 ノードが表示されるまで、ツリーのノードを展開します。結果データ (時系列データ) は、負荷テストに含まれたクラウドの地域それぞれに対して利用できます。
    注: データは、単一のクラウド エージェントに対してではなく、クラウド地域に対して利用できます。
  3. 地域を選択し、レポート タブの 比較レポート グループで 地域 をクリックします。選択した地域を表示するレポートが表示されます。ツリーから他の地域をレポートにドラッグすることもできます。
    • すべての地域を一度にレポートに表示するには、地域 ノードを選択してから、地域 をクリックします。
    • レポートにすべての地域と 全体 列を表示するには、クライアントの測定値 ノードを選択し、地域 をクリックします。
    ヒント: ツリーのノードを右クリックして、コンテキスト メニューのコマンドを使用することもできます。
    注: 地域比較レポート追加できるのは、同じ負荷テストからの地域だけです。
  4. ある地域の結果をベースラインとして定義するには、レポートの下部にあるベースライン ペインで地域を右クリックし、ベースラインとして設定 をクリックします。
親トピック: 比較レポート


ユーザー タイプ比較レポートを作成する

  1. Performance Explorer を開き、結果を追加します。結果が Performance Explorer に読み込まれ、ツリーに表示されます。
  2. ユーザー タイプ ノードが表示されるまで、ツリーのノードを展開します。
  3. ユーザー タイプを選択し、レポート タブの 比較レポート グループで ユーザー タイプ をクリックします。選択したユーザー タイプを表示するレポートが表示されます。ツリーから他のユーザー タイプをレポートにドラッグすることもできます。
    • すべてのユーザー タイプを一度にレポートに表示するには、ユーザー タイプ ノードを選択してから、ユーザー タイプ をクリックします。
    • すべてのユーザー タイプとワークロードの 全体 列を表示するには、クライアントの測定値 ノードを選択し、ユーザー タイプ をクリックします。
    ヒント: ツリーのノードを右クリックして、コンテキスト メニューのコマンドを使用することもできます。
    注: ユーザー タイプ比較レポート追加できるのは、同じ負荷テストからのユーザー タイプだけです。
  4. あるユーザー タイプの結果をベースラインとして定義するには、レポートの下部にあるベースライン ペインでユーザー タイプを右クリックし、ベースラインとして設定 をクリックします。
親トピック: 比較レポート


カスタム比較レポートを作成する

  1. Performance Explorer を開き、結果を追加します。 結果が Performance Explorer に読み込まれ、ツリーに表示されます。
  2. ツリーのプロジェクト ノードを選択し、レポート タブの 比較レポート グループで カスタム をクリックします。 Performance Explorer に読み込まれているすべての負荷テストを使用してレポートが作成されます。負荷テストは、ツリーのプロジェクト ノードの下に表示されているものです。
  3. さらに、負荷テストの結果を、ツリーからレポートにドラッグして追加できます。負荷テストだけでなく、さまざまなプロジェクトのユーザー タイプまたは地域の結果を 1 つのカスタム比較レポートに追加することもできます。最大 8 つのデータ セットを 1 つのカスタム比較レポートに含めることができます。
    ヒント: ツリーのノードを右クリックして、コンテキスト メニューのコマンドを使用することもできます。
  4. ある負荷テストの結果をベースラインとして定義するには、レポートの下部にあるベースライン ペインで負荷テストを右クリックし、ベースラインとして設定 をクリックします。
親トピック: 比較レポート


リアルタイム監視

Performance Explorer のリアルタイム監視機能を使用すると、システムのパフォーマンスをリアルタイムに表示するグラフを作成、設定することにより、幅広いシステムを監視できます。同時に複数のグラフを開き、複数のシステム (Web サーバーのパフォーマンスとオペレーティング システムのパフォーマンスなど) のパフォーマンスを同時に監視することができます。グラフに測定値を追加することは、Performance Explorer では直感的で簡単です。追加する測定値 (複数でも可) を、ツリーからグラフにドラックするだけです。

  • 監視技術
    Performance Explorer は、このセクションで説明する広範な監視テクノロジをサポートします。
  • データ ソースを監視する
    サーバーやアプリケーションからパフォーマンス データを収集するためのデータ ソースを定義する方法について説明します。
  • 負荷テストを監視する
    クライアント側測定値用のデータ ソースを追加したり削除する方法を説明します。
  • 監視グラフと監視出力
    監視グラフと監視出力について説明します。
  • ホスト データ
    ホストの変更、名前の変更、複製方法、およびホストの資格情報の更新方法について説明します。
  • CSV から TSD にデータを変換する
    .csv ファイルのデータを .tsd 形式に変換する目的について説明します。
親トピック: Performance Explorer21.0


監視技術

Performance Explorer は、このセクションで説明する広範な監視テクノロジをサポートします。

  • Windows マシンの監視
    Windows マシンの要件とセットアップについて説明し、トラブルシューティングのヒントを示します。
  • JMX 監視
    JMX 監視について説明し、その前提条件を一覧します。
  • Easy JMX クエリ
    JMX MBeanServer にホストされている MBean の属性値に対するアクセス可能性について説明します。
  • REXEC と UNIX データ ソース
    リモート実行 (REXEC) プロトコルを用いて UNIX ベース システムに対するクエリを実行する方法について説明します。
  • SNMP サポート
    SNMP 測定値がオブジェクト ID とインスタンス ID の組み合わせを使用してアクセスされることについて説明します。
  • Secure Shell (セキュア シェル) を介したパフォーマンス監視
    Secure Shell を使用したパフォーマンス指標の取得について概要を説明します。
  • BDL 監視プロジェクトを生成する
    Silk Performer プロジェクト (具体的には BDL スクリプト) を使用して、監視対象システムのパフォーマンス データを収集できます。
親トピック: リアルタイム監視


Windows マシンの監視

このセクションでは、Windows マシンの要件とセットアップについて説明し、トラブルシューティングのヒントを示します。

  • Windows マシン監視の要件
    Windows マシンを監視する場合の要件について説明します。
  • Windows パフォーマンス監視のトラブルシューティング
    Windows ベース マシンの監視時に発生するエラー メッセージについて説明します。
親トピック: 監視技術


Windows マシン監視の要件

Windows Vista 以降のクライアント OS で動作しているマシン

それぞれのリモート システムを監視するために、次の前提条件を満たしていることを確認してください。

リモート レジストリ サービスが、監視するマシンで実行されている必要があります。Windows Vista および Windows 7 のマシンでは、このサービスはデフォルトで実行されません。

親トピック: Windows マシンの監視


Windows パフォーマンス監視のトラブルシューティング

Windows ベース マシンの監視時には、以下のエラー メッセージが発生する場合があります。

エラー メッセージ | 考えられる原因 | 解決策
コンピュータ名が見つかりません | 管理者でないアカウントからリモート コンピュータを監視しようとすると、このエラー メッセージを受け取る場合があります。 | Windows NT コンピュータでリモート監視を行えるようにします。

Error=AGENT_ERROR_TCP_SEND_REQUEST_FAILED

この問題は、組織でプロキシ自動構成ファイルを使用してプロキシ サーバーにリクエストを送信するときに、そのプロキシ サーバーの登録名ではなく自動構成スクリプト アドレスを指定している場合に発生する可能性があります。

組織でパッシブでないプロキシを使用する場合は、ほとんどの場合ポート番号も指定する必要があります。

 以下のプロキシ設定を確認します。
  • プロキシ サーバーの名前、ユーザー名、およびパスワードが正しく入力されていること
  • RSM コンピュータからプロキシ サーバーに ping できること
  • RSM コンピュータからポータル コンピュータに接続できること
SYSTEM: 5 - アクセスが拒否されました CUSTOM / PERFMON オプションを使用して Windows 2008 以降のマシンを監視する際に、管理者グループに追加されたユーザーの認証情報を使用してログインすると SYSTEM: 5 - アクセスが拒否されました エラーが生成されます。 Performance Explorer を実行するユーザーは、監視対象のリモート コンピュータの管理者グループに追加する必要があります。Performance Explorer の データ ソース ウィザード で異なるユーザーの認証情報を指定する場合、リモート コンピュータ上の管理者グループにも追加する必要があります。リモート マシンを問題なく監視するためには、リモート マシンへの接続に使用したのと同じユーザー アカウントで Performance Explorer (PerfExp.exe) を起動する必要があります。
ヒント: 特定のユーザー アカウントで PerfExp.exe を起動するには、Shift + 右クリック を押し、別のユーザーとして実行 を選択します。
親トピック: Windows マシンの監視


JMX 監視

Silk Performer では JMX (Java Management Extensions) 監視がサポートされているため、Java アプリケーション サーバーで公開される MBean 属性を監視することができます。 数値データを返す MBean 属性は、Performance Explorer 監視にデータ ソースとして追加されます。

JMX 監視の前提条件

JMX 監視の前提条件は以下のとおりです。
  • Java Runtime (JVM) バージョン 1.5 以上
  • 監視対象となる JVM アプリケーションには監視用のオープン ポートが必要
  1. JMX データ ソースに接続する
    Java アプリケーション サーバーへの接続を確立して、MBean 属性を監視します。
  2. 監視する MBean を指定する
    Java アプリケーション サーバーで公開される MBean 属性を監視します。
  3. Bean 属性プールに属性を追加する
    監視する MBean 属性を選択します。
親トピック: 監視技術


JMX データ ソースに接続する

Java アプリケーション サーバーへの接続を確立して、MBean 属性を監視します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。
  2. 定義済みのデータ ソースから選択する をクリックし、次へ をクリックします。
  3. 次のいずれか 1 つのステップを行います：
    • アプリケーション サーバー上の使用可能なすべての MBean 属性を検討するには、Application Server フォルダを展開して、ベンダー固有のフォルダから JMX 記録プロファイルを選択します。プロファイル名の終わりには、拡張子 .jmx が付いています。
    • 監視する一般的属性を含んでいる一群の MBean を検討するには、Application Server フォルダを展開して、ベンダー固有のフォルダから JMX 記録プロファイルを選択します。プロファイル名の終わりには、拡張子 .ejmx が付いています。
    • 汎用の JMX 監視データ ソースを作成するには、Custom Data フォルダを展開して、JMX Data を選択します。
  4. ホスト名 テキスト ボックスで、JMX サーバーを指定します。
  5. 省略可能：エイリアス ボックスで、エイリアス名を指定します。 エイリアスは、監視対象サーバーをよく説明する別名にする必要があります。個々のマシン上で測定値をグループ化することをお勧めします。 たとえば、WebLogic と IIS が両方とも同じコンピュータにインストールされているとしましょう。どちらのサーバーも監視が必要ですが、2 つのパフォーマンス測定値は別々のメニュー ツリーに表示されなければなりません。
  6. [ポート]、[ユーザー名]、およびそのユーザーの [パスワード] を指定します。
  7. 汎用の JMX 監視データ ソースの作成を選択した場合は、アプリケーション リスト ボックスから、サポートされているアプリケーション構成を選択します。
  8. サーバー設定 をクリックします。 JMX Connection Configuration ダイアログ ボックスが開きます。
  9. アプリケーション サーバーの通信ライブラリが置かれている、アプリケーション サーバーのインストール ディレクトリを指定します。 指定したアプリケーション サーバー インストール ディレクトリと、アプリケーション構成ファイルの相対クラスパス エントリから、JMX クライアントがその下で実行されるクラスパスが形成されます。その結果アクセス対象となるクラスパスは、Resulting classpath テキスト ボックスに表示されます。
    注: UNC パスを使用するか、または、サーバーのアプリケーション ライブラリ ディレクトリをローカル マシンにコピーして、そのローカル コピーをアプリケーション サーバーのインストール ディレクトリとして指定することをお勧めします。それには、App. server install directory テキスト ボックスの横の参照 (...) ボタンをクリックします。
    注: WebSphere の JMX 監視を行うには、IBM JDK を指定する必要があります。WebSphere サーバーで管理セキュリティが無効化または有効化されていて、インバウンド CSIv2 トランスポート層が TCP/IP の場合は、SUN JDK を指定することができます。
  10. Java home directory テキスト ボックスに、クライアントの通信ライブラリが置かれているインストール ディレクトリを指定します。 代替方法：参照 (...) ボタンをクリックして、適切なディレクトリに移動して指定します。
  11. Additional classpath テキスト ボックスに、その他のライブラリを指定します。
  12. Additional JVM parameters テキスト ボックスに、その他の仮想マシン パラメータを指定します。 Connection タブと Visualization タブのパラメータが各サーバーについて再構成されます。
  13. OK をクリックします。 接続パラメータ ページが開きます。
  14. 次へ をクリックしてから、完了 をクリックします。 Performance Explorer が JMX サーバーに接続されます。
  15. JMX Data Source Browser に表示された Bean を調べます。
  16. 完了 をクリックします。
親トピック: JMX 監視
次のトピック: 監視する MBean を指定する


監視する MBean を指定する

アプリケーション設定プロファイルは、XML ファイルとして C:\Program Files\Silk\Silk Performer 21.0\include\jmx-config\ に保存されます。 必要に応じて、XML ファイル ディレクトリ内のデフォルト構成を変更し、追加のプロファイルをこのディレクトリに作成します。 新しく作成したアプリケーション構成プロファイルは、データ ソースとして使用できます。

  1. JMX Data Source browser を開きます。 Type Tree タブには、MBean の使用可能なすべてのカテゴリがツリー構造で表示されます。 Type List タブには、使用可能なすべてのカテゴリが一覧形式で表示されます。 選択したカテゴリの使用可能なすべての MBean が、Beans テキスト ボックスに表示されます。 各 MBean はオブジェクト名で識別されますが、そのオブジェクト名はドメイン名と 1 つ以上のプロパティ タイプと値のペアで構成されています。
  2. 必要な MBean を選択し、その MBean ノードを展開して使用可能な属性を表示します。
  3. 省略可能: Numeric Attributes をクリックして、非数値属性をフィルタリングします。
    非数値属性は、JMX 監視ではサポートされません。
  4. 省略可能: 属性を右クリックして Get Value を選択し、任意の属性の値を検索します。
  5. 省略可能: オブジェクト名を表す属性を右クリックし、Follow Reference を選択して、参照されている MBean へジャンプします。

Bean 属性プールに適切な属性を追加します。

親トピック: JMX 監視
前のトピック: JMX データ ソースに接続する
次のトピック: Bean 属性プールに属性を追加する


Bean 属性プールに属性を追加する

この手順を開始する前に、以下のいずれかの手順を実行します。
  • 監視する適切な MBean を指定する。
  • 簡易 JMX またはカスタム クエリを実行して、必要な MBean を特定する。
  1. JMX Data Source Browser を開きます。
  2. Beans テキスト ボックスで監視する属性を選択します。
    注: 複数の Bean を選択するには、Shift または Ctrl を押します。
    注: MBean によっては (JSR-77 ベースのものなど)、複数のサブ測定値や統計で構成されている複合属性が含まれている場合があります。 再帰性の一定の深度までは、監視するサブ測定値を選択できます。
  3. 選択した属性を右クリックして、Add As を選択します。 サブメニューが開きます。
  4. 属性値を監視する、次のいずれかのオプションを選択します。
    • Average：カウント値に便利です。 デフォルトでは、このオプションが選択されます。
    • Sum：Average と同じですが、監視 GUI 内では別のラベルが表示されます。
    • Incremental：増えていく値に便利です。 属性値の代わりに、監視間隔範囲内での値の変化が計算されます。
  5. 閉じる をクリックします。 表示する測定値の選択 ページが開きます。
  6. 省略可能: MBean を選択して、Add をクリックします。
    Performance Explorer によって、表示可能なすべての MBean 属性がデータ ソースとして追加されます。
  7. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: JMX 監視
前のトピック: 監視する MBean を指定する


Easy JMX クエリ

Easy JMX クエリを使用することで、JMX MBeanServer にホストされている MBean の最も重要な属性値にアクセスすることができます。 Easy JMX クエリは、あらかじめ構成された詳細クエリで、アプリケーション サーバーの MBeanServer への接続が確立すると自動的に実行されます。 Easy JMX クエリの条件に一致する MBean がすべて、JMX データ ソース ブラウザの Beans ボックスに自動的に表示されます。 Easy JMX プロファイルは、システムの選択 ダイアログ ボックスの システム メニュー ツリーにおいて、プロファイル名の後ろに (EJMX) タグが付いていることで識別できます。

  • JMX クエリ言語を使用して Bean をフィルタリングする
    特定のフィルタ条件に一致する MBean のみを表示することによって、JMX クエリを絞り込みます。
  • 詳細 JMX クエリを実行する
    簡易クエリの組み合わせを作成して、お使いの環境のデータを監視します。
  • 保存したクエリを実行する
    既存の JMX クエリを実行して、JMX MBeanServer にホストされている MBean の最も重要な属性値にアクセスします。
親トピック: 監視技術


JMX クエリ言語を使用して Bean をフィルタリングする

特定のフィルタ条件に一致する MBean のみを表示することによって、JMX クエリを絞り込みます。

  1. JMX Data Source Browser を開きます。 選択した JMX MBeanServer 上の使用可能なすべての MBean が、Beans テキスト ボックスに表示されます。
  2. Simple Query タブをクリックします。
  3. Domain リスト ボックスからドメインを選択します。 すべてのドメインを検索するには、このフィールドは <All> にしておきます。
  4. 省略可能:Property フィールド リスト ボックスからプロパティを選択します。
    このリストには、ロードされた Bean に含まれているすべてのプロパティが表示されます。
  5. 省略可能: Property フィールド リスト ボックスの右側にあるリスト ボックスから、選択したプロパティの値を選択します。
    [Query] テキスト ボックスには JMX 1.2 (JSR-003) 標準に基づいた JMX クエリで使用されるオブジェクト名が表示されます。
  6. 省略可能: 指定した属性に基づいてリストを絞り込むには、Attribute filter テキスト ボックスに属性名を入力します。
    指定した属性を含む MBean のみが表示されます。
  7. Run をクリックすると、クエリが実行されます。 Beans テキスト ボックスには、フィルタ条件に合う MBean のみが表示されます。
親トピック: Easy JMX クエリ


詳細 JMX クエリを実行する

簡易クエリの組み合わせを作成して、お使いの環境のデータを監視します。

  1. [JMX Data Source Browser] を開きます。
  2. Advanced Query タブをクリックします。 使用可能なクエリ タイプが、ウィンドウの上部に表示されます。 たとえば、Object Name Query が表示されます。
  3. クエリのリスト ボックスから、クエリに使用できる演算子を 1 つ選択します。 たとえば、OR 演算子を選択します。
  4. 下位のリスト ボックスから、演算子の値を選択します。 たとえば、True を選択します。 参照 (...) ボタンが表示され、[JMX Object Name Query] ダイアログ ボックスを表示してドメイン リストを参照できます。
  5. 参照 (...) ボタンをクリックして、ドメイン リストから適切なドメイン名を選択します。 たとえば、jboss.cache を選択します。
  6. クエリが完成するまで、要素を追加していきます。 たとえば、*:J2EEServer =local を追加します。
  7. OK をクリックします。
  8. Query メニュー ツリーのルート要素をクリックします。
  9. Advanced Query タブの下のペインに、クエリの説明を入力します。
  10. 実行 をクリックします。 クエリの条件と一致するすべての MBean が表示されます。
  11. Save をクリックします。 このステップでは、クエリの保存先と名前を指定できます。 JMX データ クエリのファイル拡張子は .jdq です。
    注: C:\Program Files\Silk\Silk Performer 21.0\include\jmx-config ディレクトリに保存されたクエリは、Easy JMX ページにも表示され、そこから直接実行できます。
親トピック: Easy JMX クエリ


保存したクエリを実行する

既存の JMX クエリを実行して、JMX MBeanServer にホストされている MBean の最も重要な属性値にアクセスします。

  1. [JMX Data Source Browser] を開きます。
  2. Advanced Query タブをクリックします。
  3. Load > Load From File > Load を選択します。
  4. 事前にインストールされているクエリと自分で保存したカスタム クエリのリストを参照します。 事前にインストールされたクエリ タイプは、さまざまなサーバー タイプに対して使用できます。 簡易 JMX プロファイルで使用可能なものと同じクエリ タイプがあります。
  5. 実行 をクリックします。
    注: C:\Program Files\Silk\Silk Performer 21.0\include\jmx-config に保存されたクエリは、Easy JMX ページにも表示され、そこから直接実行できます。
    Performance Explorer によって、クエリが実行されます。
親トピック: Easy JMX クエリ


REXEC と UNIX データ ソース

リモート実行 (REXEC) プロトコルを用いて UNIX ベース システムに対するクエリを実行する方法について説明します。

  • REXEC と UNIX データ ソースの概要
    リモート実行 (REXEC) プロトコルを用いて UNIX ベース システムに対するクエリを実行する方法について説明します。
  • REXEC を使用して UNIX を検索する
    リモート実行プロトコルを使用する UNIX ベースのシステムへの接続を確立し、監視する測定値を追加します。
  • 空きメモリのカスタム例
    MemFree のカスタム値の例について説明します。
親トピック: 監視技術


REXEC と UNIX データ ソースの概要

UNIX ベース システム上のデータ ソースに対しては、多くの場合、リモート実行プロトコルを用いてクエリを実行することができます。 確認済みのデータ ソースが定義済みデータ ソース リストに表示されます。 たとえば、Solaris システム上で Context Switches/sec (コンテキスト スイッチ回数/秒) を監視するとしましょう。 定義済みリストからこのエントリを選択することで、リモート実行の詳細を指定しなくてもよくなります。 該当するデータ ソースがリストに見つからない場合は、カスタム データ ソースを作成します。

リモート実行

リモート実行とは、コマンドライン インターフェイスを使ってリモート ホスト上でコマンドを実行することです。 シェル スクリプトを実行することもできます。 シェル スクリプトを確認するには、telnet クライアントを使用して UNIX システムに接続し、コマンドやスクリプトをいくつか実行します。

単独実行

単独実行の場合は、新しいデータ ポイントが要求されるたびに、プライマリ ドメイン コントローラ エミュレータ (PDCE) がリモート マシンに接続しコマンドを実行します。 実行間隔が短いと、この設定ではリモート マシンに負荷をかけるおそれがあります。 ただし、PDCE は、最後に実行したコマンドが終了するまで、リモート マシン上で新しいコマンドを起動しません。

単独実行でない場合、PDCE は監視セッションの初めにリモート マシンに接続し、コマンドを起動して、コマンドの出力をパーサーに転送します。 パーサーは、所定の監視間隔で起動され、使用可能なデータを解析します。 コマンドは 1 回だけ実行され、リモート マシンへの接続は監視セッション全体を通して有効なままです。 (たとえば、リモート マシン上のコマンドが終了したために) 接続が失われると、PDCE は一定の間隔を空けて再接続を試みます。

単独実行の例

ps -ef | egrep -c ".*"

上記のコマンドは、UNIX システム上で動作しているプロセスの数を数えるものです。 telnet セッション中にこのコマンドを入力します。 コマンドは値 (実行中のプロセスの数) を出力した後、終了します。 このような動作を "単独実行" と呼びます。

このようなコマンドを ‘while’ ループで囲むことができます。

複数実行の例

while [ true ]; do	// Mind the spaces
   ps -ef | egrep -c ".*";
   sleep 5;
done

上記の例では、プロセス数が 5 秒間隔で継続的に出力されます。 このような動作を "複数実行" と呼びます。

親トピック: REXEC と UNIX データ ソース


REXEC を使用して UNIX を検索する

リモート実行プロトコルを使用する UNIX ベースのシステムへの接続を確立し、監視する測定値を追加します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。
  2. 定義済みのデータ ソースから選択する をクリックし、次へ をクリックします。
  3. Custom Data フォルダを展開し、Rexec Data をクリックしてから、次へ をクリックします。
  4. ホスト名 ボックスで、監視対象となるマシンを指定します。
  5. 省略可能：エイリアス ボックスで、エイリアス名を指定します。 エイリアスは、監視対象サーバーをよく説明する別名にする必要があります。個々のマシン上で測定値をグループ化することをお勧めします。 たとえば、WebLogic と IIS が両方とも同じコンピュータにインストールされているとしましょう。どちらのサーバーも監視が必要ですが、2 つのパフォーマンス測定値は別々のメニュー ツリーに表示されなければなりません。
  6. [ポート]、[ユーザー名]、およびそのユーザーの [パスワード] を指定します。
  7. 次へ をクリックします。 Rexec 測定値の追加 ページが開きます。
  8. 以下のように適切な値を指定して、監視する測定値を作成します。
    オプション | 説明
    測定値タイプ | 指定したコマンドについて、タイプ名を入力します。同じタイプ名を持つすべての測定値が、1 つのグループにアセンブルされます。
    測定値名 | 指定した rexec コマンドの測定値名を入力します。この名前は、Performance Explorer のグラフに表示されます。
    平均測定値 | rexec コマンドに対してこのチェック ボックスをオンにすると、平均測定値とみなされます。このオプションは、生成された TSD ファイルにのみ影響します。
    説明 | 指定した rexec コマンドの追加情報を入力します。この情報は Performance Explorer に表示されます。
    コマンド | リモート マシン上でデータ収集を実行する次のような rexec コマンドを指定します：ps -ef | egrep -c “.*”
    単独実行 このチェック ボックスをオンにすると、PDCE はリモート マシンと接続し、新しいデータ ポイントがリクエストされるたびにコマンドを実行します。実行間隔が短いと、この設定ではリモート マシンに負荷をかけるおそれがあります。しかし PDCE は、最後に実行したコマンドが終了していなければ、リモート マシン上で新しいコマンドを開始しません。

    単独実行 チェック ボックスをオフにすると、複数実行が有効になります。
    正規表現 リモート マシンから返されるデータを、所定の正規表現を使用して 1 行ずつフィルタリングします。正規表現と一致しない行は破棄されます。残りの行のみがその先のステップで使用されます。デフォルトでは、^.*$ が入力されます。
    たとえば、コマンドのレスポンスが各間隔で次のように表示されるとします。
    XXXXXXXX XXXXXXXX XXXXXXXXX
         123400   103093   121092
    意味があるのは、数字の入っている行のみです。次の正規表現により、数字と空白からなる行のみが許可されます。
    [1234567890 ].*
    その他の行は無視されます。
    フィールド インデックス データ生成に使用された行は、フィールドに分割されます。分割を行うには、空白文字かカスタム区切り文字のいずれかを使用します。

    このテキスト ボックスを使用して、フィールド インデックスを指定します。これは数値に変換され、次の測定値として使用されます。

    このインデックスは、1 から始まるインデックスです。
    区切り文字 このテキスト ボックスを使用して、カスタム区切り文字を指定します。この文字を使用してデータ生成用の行をフィールドに分割します。

    デフォルトでは、空白を区切り文字とする チェック ボックスがオンになっています。
    空白を区切り文字とする | このチェック ボックスをオンにすると、空白があるたびに区切り文字が挿入されます。
    スキップする行数 | このテキスト ボックスを使用して、リモート マシンでコマンドを開始した後で PDCE が無視する行数を指定します。このオプションは、開始時にコマンドが返す不要なデータをフィルタリングして除外するのに便利です。与えられた正規表現と一致する行だけが、この設定を使用します。ある間隔で複数の行が与えられる場合、データの計算には最後の行が使用されます。
  9. 追加 をクリックします。
  10. 測定値の収集に必要なコマンドをすべて入力するまで、前のステップを繰り返した後、閉じる をクリックします。 表示する測定値の選択 ページが開きます。
  11. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。

例

複数実行を定義したときに使用されていたコマンドを、少し修正した形で入力します。
while [true]; do
  ps -ef | egrep -c “.*”;
  sleep {%Interval};
done
注: コマンド sleep {%Interval} は、Performance Explorer が提供する数が入るプレースホルダです。この数は収集間隔を表します。たとえば、Performance Explorer は 5 秒ごとに新しいデータを収集します。
コマンドのレスポンスが各間隔で次のように表示されるとします。
XXXXXXXX XXXXXXXX XXXXXXXXX
         123400   103093   121092

フィールド インデックス 値には、定義済みの測定値に関連する列を指定します。フィールド インデックス に 1 を指定すると、テーブルから値 123400 が返されます。フィールド インデックス に 2 を指定すると、値 103093 が返されます。

上記の例の列は、空白文字で区切られていますただし、他の文字 (コロンなど) も使用できます。そのような値は、区切り文字 テキスト ボックスで指定します。空白は、デフォルトの区切り文字です。

親トピック: REXEC と UNIX データ ソース


空きメモリのカスタム例

Linux コンピュータに次のコマンドを入力します。

cat /proc/meminfo

次のテーブルが返ったとします。

 | total: | used: | free: | shared: | buffers: | cached:
Mem: | 131084288 | 54214656 | 76869632 | 26947584 | 7938048 | 28471296
Swap: | 70148096 | 3387392 | 66760704 |  |  |
MemTotal: | 128012 kB |  |  |  |  |
MemFree: | 75068 kB |  |  |  |  |
MemShared: | 26316 kB |  |  |  |  |
Buffers: | 7752 kB |  |  |  |  |
Cached: | 27804 kB |  |  |  |  |
SwapTotal: | 68504 kB |  |  |  |  |
SwapFree: | 65196 kB |  |  |  |  |

次の表では、前のテーブルから MemFree の値を取得するために使用するフィールド値を示します。

コマンド | cat /proc/meminfo
単独実行 | オン
正規表現 | ^MemFree:.*$
フィールド インデックス | 2
区切り文字 | 空白を区切り文字とする をオンにします。
スキップする行数 | 0
親トピック: REXEC と UNIX データ ソース


SNMP サポート

標準 SNMP サポートは、MIB が提供するすべての SDMP データ ソースに対する汎用インターフェイスを含みます。特定の測定値がオブジェクト ID (OID) とインスタンス ID (オブジェクトに複数のインスタンスがある場合) の組み合わせを使用してアクセスされます。このアプローチの課題は、どのカウンター インスタンスが適用されるかを正確に知る必要があることです。インスタンスはインスタンス名ではなく、インスタンス ID でのみ区別されます。この課題をさらに難しくするのは、サーバーを再起動したときに、監視中のオブジェクトが動的に作成されるためインスタンス番号が変更される可能性があるとい事実です。よって、監視スクリプトは、監視中の対象を動的に扱うことができなければなりません。

Silk Performer の強化した SNMP サポートの値は、OID とインスタンス ID によってではなく、OID とインスタンス名によって値にアクセスすることができます。

次の例では、Silk Performer で利用可能な強化した SNMP サポートについて説明します。この例は、事前定義された ESNMP 測定値がどのように定義されるか、そしてどのように使用されるか、さらに、追加の測定値をどのように事前定義した測定値のリストに追加するかです。

インスタンス ID と OID によって識別する

事前定義された ESNMP で作業している最初のステップは、OID とインスタンス ID 、およびインスタンス名 (WebLogic　カウンターの名前) を識別することです。あるインスタンスに対する JDBC Connection Pool Runtime Active Connections Current Count は、OID でアクセスできます：

1.3.6.1.4.1.140.625.190.1.25 + <Instance ID>

強化した SNMP サポートがないと、値と現在のインスタンス ID を含むテーブルの OID を提供しなければなりません。

JDBC Connection Pool Runtime Object Name と JDBC Connection Pool Runtime Name は、人間が読める形式のインスタンスの名前を含み、OID でアクセスできます：

1.3.6.1.4.1.140.625.190.1.5 + <Instance ID> for “Object Names”

および...

1.3.6.1.4.1.140.625.190.1.15 + <Instance ID> for “Names”

ESNMP サポートは、インスタンス名を指定する、 (object-) name テーブルを使ってインスタンス ID を取得する、そしてそれから、現在のカウンターに対する値を取得するという選択肢を提供します。ESNMP サポートでは、以下のものが提供される必要があります。

  • 値を含んでいるテーブルの OID
  • インスタンス名
  • インスタンス名を含んでいるテーブルの OID
  • SNMP を介してサーバーのパフォーマンスを監視する
    SNMP プロトコルを介してサーバーのパフォーマンス データを収集し、結果を Performance Explorer に表示します。
  • MIB を新規にコンパイルする
    Silk Performer で MIB の内容を使用するには、まず MIB をコンパイルする必要があります。よく使用される MIB がコンパイル済み形式で多数用意されています。必要に応じて、新しい MIB をコンパイルできます。
  • SNMP データ ソースの定義
    データ ソースのヘッダーと定義をセットアップする方法について説明します。
親トピック: 監視技術


SNMP を介してサーバーのパフォーマンスを監視する

Performance Explorer では、サーバー監視用のデータ ソースとして使用するために、さまざまなソースからの MIB (Management Information Base) の OID (オブジェクト ID) を選択できるようになっています。 たとえば、Oracle などのデータベース システムは、SNMP プロトコルを介して収集できる幅広いパフォーマンス データを提供します。

  1. Performance Explorer ワークフロー バーの サーバーの監視 をクリックします。 データ ソース ウィザード が開き、システムの選択 ダイアログ ボックスが表示されます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックして、次へ をクリックします。 システムの選択 ダイアログ ボックスが開きます。
  3. システム メニュー ツリーで、Custom Data フォルダを展開します。
  4. SNMP Data を選択して、次へ をクリックします。 接続パラメータ ダイアログ ボックス が開きます。
  5. 接続パラメータ 領域で、該当するサーバー システムのホスト名または IP アドレス、ポート番号、その他のデータなど、データ ソースへの接続に必要な接続パラメータを指定します。 指定したサーバーへのアクセス権を所有している必要があります。また、サーバー システム上で SNMP サービスが正しく構成されている必要があります。
  6. 次へ をクリックします。 SNMP 測定値の追加 ダイアログ ボックスが開きます。
  7. Performance Explorer に付属のコンパイル済みの MIB の中から 1 つを選択するか、MIB の新規コンパイル を選択してサーバー システムに同梱されていた MIB を使用します。 Silk Performer で MIB の内容を使用するには、まず MIB をコンパイルする必要があります。よく使用される MIB がコンパイル済み形式で多数用意されています。必要に応じて、新しい MIB をコンパイルできます。 コンパイル済みの MIB を選択すると、その内容がメニュー ツリーに表示されます。
  8. 関心のある OID をクリックし、値の取得 をクリックします。 サーバーへの接続が確立され、実際のデータ項目が表示されます。
  9. 対応するデータ項目をクリックし、追加 をクリックします。
  10. 必要な OID をすべて選択するまで、上記 2 つの手順を繰り返します。
  11. 閉じる をクリックします。 表示する測定値の選択 ダイアログ ボックスが開きます。
  12. 監視する要素を選択して、完了 をクリックします。 監視グラフには、指定した要素のサーバー パフォーマンスがリアルタイムで色分けされて表示されます。
親トピック: SNMP サポート


MIB を新規にコンパイルする

ハードウェア システムやソフトウェア システムのベンダーは、MIB (Management Information Base) によって、それぞれのシステムの特徴についての情報を提供します。 この情報は、SNMP プロトコルを利用して、適切な OID (オブジェクト ID) を指定することによって取得できます。 MIB ブラウザは、MIB に保存されている適切な OID を選択する際に役立ちます。

  1. SNMP 測定値の追加 ダイアログ ボックスで、サーバー システムに付属の MIB に対して MIB の新規コンパイル をクリックします。 MIB の新規コンパイル ダイアログ ボックスが開きます。
  2. コンパイル対象の MIB ファイルを参照して 開く をクリックします。
  3. コンパイル をクリックします。 コンパイルが正常に終了すると、コンパイル済みの MIB のリストに、新しい名前が追加されます。
  4. メッセージ <名前>-MIB をインポートできませんでした が返された場合は、このエラー メッセージで参照されている MIB をコンパイルします。
  5. 閉じる をクリックします。 これで、SNMP を介してサーバーのパフォーマンスを監視するために、この新しい MIB を使用できます。
親トピック: SNMP サポート


SNMP データ ソースの定義

新しいデータ ソースを定義するには、REALTIME.INI ファイルを編集してはいけません。編集すると、次に Silk Performer をアップグレードするときに、変更が失われます。これを避けるために、<インストール パス>\Silk\Silk Performer 15.0\Include\DataSrcWzd サブフォルダに新しいファイル (myESNMP_realtime.ini など) を作成します。このファイルには、データ ソースを定義する行 S= と M= lを含む必要があります。

"WebLogic" と "ESNMP" を REALTIME.INI ファイルで検索すると、次のエントリが見つかります：
S= Application Server\BEA WebLogic preconfigured\SNMP, ESNMP:BEA-WEBLOGIC-MIB,
M= ESNMP:1.3.6.1.4.1.140.625.340.1.25, BEA WebLogic\JVM Runtime\HeapFreeCurrent, eAvgOnlyCounter, 0, kbytes, 0, 1, 2, 3, 4, 5, Current Heap Free, measureMatchName=Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.340.1.5;
M= ESNMP:1.3.6.1.4.1.140.625.340.1.30, BEA WebLogic\JVM Runtime\HeapSizeCurrent, eAvgOnlyCounter, 0, kbytes, 0, 1, 2, 3, 4, 5, Current Heap Size, measureMatchName=Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.340.1.5;
M= ESNMP:1.3.6.1.4.1.140.625.180.1.25, BEA WebLogic\Queue Runtime\ExecuteThreadCurrentIdleCount, eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5, Thread Idle Count, measureMatchName=Queue Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.180.1.5;
M= ESNMP:1.3.6.1.4.1.140.625.180.1.35, BEA WebLogic\Queue Runtime\PendingRequestCurrentCount, eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5, Current Requests, measureMatchName=Queue Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.180.1.5;
M= ESNMP:1.3.6.1.4.1.140.625.180.1.40, BEA WebLogic\Queue Runtime\ServicedRequestTotalCount, eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5, Total Requests, measureMatchName=Queue Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.180.1.5;
M= ESNMP:1.3.6.1.4.1.140.625.430.1.50, BEA WebLogic\WebApp Component Runtime\OpenSessionsCurrentCount, eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5, Open sessions, measureMatchName=Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.430.1.25;
M= ESNMP:1.3.6.1.4.1.140.625.430.1.55, BEA WebLogic\WebApp Component Runtime\OpenSessionsHighCount, eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5, Session High Count, measureMatchName=Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.430.1.25;
M= ESNMP:1.3.6.1.4.1.140.625.550.1.25, BEA WebLogic\Execute Queue\ThreadCount, eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5, Thread Count, measureMatchName=Queue Object Name;measureMatchOID=1.3.6.1.4.1.140.625.550.1.5;

S= で始まる最初の行は、データ ソース定義ヘッダーです。データ ソースごとに 1 つの定義ヘッダーだけが必要となります。つまり、既存の WebLogic ESNMP データ ソースを強化したい場合には、データ ソース定義ヘッダーはそのままにしておくことができます

それ以降の行は、個々の測定値用の定義です。

  • M= に続くのは OID で、インスタンス ID なしにクエリするためのものです (1.3.6.1.4.1.140.625.190.1.25 など)。
  • 次に、GUI に表示される測定値の名前が続きます。バックスラッシュは、階層を作成するために使用されることに注意してください (BEA\JDBC Connection Pool\Active Connections など)。
  • そして、標準エントリが続きます： measure class、scale、unit、 scale factor,、および 5 個の未使用フィールド (eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5 など)。
  • 次のフィールドは、Performance Explorer のツールチップ ヘルプでの説明です。「Current count of active connections in the JDBC connection pool runtime.」のように記述できます。測定値の名前自身は短くすることができます。
  • 最後のエントリは、2 つの部分に分割されます。
    • omeasureMatchName= これは、インスタンスを説明するためにデータ ソース ウィザードで使用されます (「JDBC Connection Pool Runtime Object Name」など)。
    • omeasureMatchOID= これは、インスタンス名を含むテーブルの OID です (1.3.6.1.4.1.140.625.190.1.15 など)。
注: 最終的な測定値名は、ここで指定した測定値名 (BEA WebLogic\JDBC Connection Pool\Active Connections) と丸括弧で囲ったインスタンス名から構成されます。
つまり、測定値に対するキーは、次のようになります。
M= ESNMP:1.3.6.1.4.1.140.625.190.1.25, BEA WebLogic\JDBC Connection Pool\Active Connections, eAvgOnlyCounter, 0, , 0, 1, 2, 3, 4, 5, Current count of active connection in the JDBC connection pool runtime, measureMatchName=JDBC Connection Pool Runtime Object Name;measureMatchOID=1.3.6.1.4.1.140.625.190.1.15;
親トピック: SNMP サポート


Secure Shell (セキュア シェル) を介したパフォーマンス監視

Performance Explorer を使用すると、Secure Shell を用いてパフォーマンス指標を取得できます。 たとえば、CPU 使用率やメモリ使用率の統計データを SunOS システムから取得します。 Performance Explorer には、Secure Shell を使った任意の監視のスクリプトを作成できる高度に構成可能なパフォーマンス監視プロジェクトが付属しています。 この処理には、Silk Performer 内から Performance Explorer プロジェクトを操作します。 この機能では、システムのパフォーマンスをリアルタイムで追跡することもできます。

Silk Performer プロジェクトは、Ssh.sep という名前の SilkEssential パッケージにあり、これは C:\Program Files\Silk\Silk Performer 21.0\Monitors にあります。

  • セキュア シェルを使用してパフォーマンスを監視する
    Performance Explorer で、セキュア シェルを使用したパフォーマンスの監視を有効にします。
親トピック: 監視技術


セキュア シェルを使用してパフォーマンスを監視する

セキュア シェルを使用して監視するシステムは、セキュア シェル デーモンを実行している必要があります。監視に使用するユーザーが、複数回ログオンする権限を持っていることを確認します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. Miscellaneous フォルダを展開して、Secure Shell をクリックします。
  5. 次へ をクリックします。

    接続パラメータ ページが開きます。

  6. ホスト名 テキスト ボックスに、監視するホストを指定します。
  7. 次へ をクリックします。 属性設定 ページが開きます。
  8. 以下の監視固有の属性を定義します。
    • Username：セキュア シェルを使用してリモート システムにログオンするときに使用するユーザー。
    • Password：ユーザーのパスワード。
    • Command(x)：前に定義されたパッケージにより、セキュア シェルを使用して、5 つまでパフォーマンス測定値を取得できます。次の表に示します。
      属性 | タイプ | 値
      Command1 | string | ps -ef | egrep -c \”.*\”
      Command1.Active | boolean | true
      Command1.Column | number | 1
      Command2 | string | mpstat | head -n 2 | tail -1
      Command2.Active | boolean | true
      Command2.Column | number | 13
  9. OK をクリックします。 表示する測定値の選択 ページが開きます。
  10. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。

例 Command2

この例は、SunOS システムで機能します。次のコマンドがサーバーに送信されます。
mpstat | head -n 2 | tail -1
このコマンドからは、次の形式のレスポンスが 1 行返されます。
0 0 0 0 228 25 106 1 0 0 0 219 0 0 0 99

属性 Command2.Column で、パフォーマンス カウンタを追跡するために Performance Explorer に渡す列を指定します。この場合は、列 13 を渡しますが、SunOS システムでのユーザー時間比率を表します。

Command2.Active は、この測定値を収集するかどうかを指定するだけです。

例 Command1

次のコマンドがサーバーに送信されます。
ps -ef | egrep -c \".*\"
このコマンドは、SunOs システム上で動作しているプロセスの数を数えるものです。このコマンドからは、次の形式のレスポンスが 1 行返されます。
87

この場合、1 行には 1 列しかありません。

属性 Command1.Column では、Performance Explorer に転送する列を指定します。この場合、この列は 1 です。

Command1.Active は、この測定値を収集するかどうかを指定するだけです。

親トピック: Secure Shell (セキュア シェル) を介したパフォーマンス監視


BDL 監視プロジェクトを生成する

Silk Performer プロジェクト (具体的には BDL スクリプト) を使用して、監視対象システムのパフォーマンス データを収集できます。 このセクションでは、Performance Explorer で使用する BDL 監視プロジェクトを組み立て、収集したデータのリアルタイム表示を有効にするために必要な手順について説明します。

  • Silk Performer BDL 監視プロジェクト
    Performance Data Collection Engine (PDCE) は、BDL スクリプトで収集されるパフォーマンス データを処理します。このようなスクリプトで収集されるパフォーマンス データは、Performance Explorer にリアルタイムで表示できます。
  • BDL 監視プロジェクトを作成する
    Silk Performer を使用して、Performance Explorer 用の BDL 監視プロジェクトを生成するために必要なワークフローを紹介します。
  • Silk Performance Manager インフラストラクチャ監視を作成する
    Silk Performance Manager インフラストラクチャ監視を生成するために必要なワークフローを説明します。
  • Performance Data Collection Engine (PDCE)
    オンライン監視に使用されるエンジンについて説明します。
  • チュートリアル
    このチュートリアルは、(1) 初歩的な簡易ユース ケースと (2) 詳細なユース ケースという 2 つのユース ケースから構成されます。
  • ベスト プラクティス
    このセクションでは、監視スクリプトの書き込みに関連するリアルタイム監視プロジェクトでの作業に関する提案について、概要を示します。
親トピック: 監視技術


Silk Performer BDL 監視プロジェクト

Performance Data Collection Engine (PDCE) は、BDL スクリプトで収集されるパフォーマンス データを処理します。このようなスクリプトで収集されるパフォーマンス データは、Performance Explorer にリアルタイムで表示できます。PDCE で収集されるエンティティは測定値と呼ばれ、次の関数を使用して BDL に指定することができます。

  • MeasureInc
  • MeasureIncFloat
  • MeasureStart および MeasureStop
  • MeasureSetTimer
  • MeasureSet

これらの関数はトランザクション内で呼び出されます。各トランザクション内では、1 対多の測定値を使用できます。また、監視プロジェクトでは、ユーザー グループを 1 つだけ定義するスクリプトを 1 つだけ使用できます。このユーザー グループでは、1 つの init トランザクション、1 つの end トランザクション、および 1 つの main トランザクションを定義できます。

bdlMonitor.bdh で定義されるラッパー関数は、BDL リアルタイム監視に必要な追加機能を配布するために使用されます。次の関数の使用の詳細については、補足チュートリアルを参照してください。

  • MonitorInc
  • MonitorIncFloat
  • MonitorStart および MonitorStop
  • MonitorSet
  • MonitorSetFloat
  • MonitorSetTimer
親トピック: BDL 監視プロジェクトを生成する


BDL 監視プロジェクトを作成する

  1. Silk Performer を起動し、BDL 監視プロジェクトを作成します。
    1. ワークフロー バーの プロジェクトの概要設定 ボタンをクリックします。ワークフロー - プロジェクトの概要設定 ダイアログ ボックスが開きます。
    2. 名前 テキスト ボックスにプロジェクトの名前を入力し、 説明 テキスト ボックスにオプションの説明を入力します。
    3. アプリケーションの種類 リストから、Monitoring > Bdl Monitor for Performance Explorer を選択します。
    4. 次へ をクリックします。
  2. スクリプトの作成 ダイアログ ボックスで、 既存のスクリプトを開く オプション ボタンを選択します。
  3. BdlMonitorSample.bdf スクリプトを選択して、 OK をクリックします。
    これにより、テンプレートとして使用できる構成済みの監視スクリプトが起動します。
  4. プロジェクト > プロジェクト属性を選択し、プロジェクト属性を定義します。 Performance Explorer にエクスポートされた各測定値には、プロジェクト属性の固定セットが必要です。

    Performance Explorer で表示されるようにするため、各測定値には少なくとも次の 3 つのプロジェクト属性が必要です。

    • Name： Performance Explorer に表示される名前。
    • Type： 平均値または累積値。
    • Enabled： 予約済み。常に True に設定します。
  5. サンプル監視スクリプトを確認する

    プロジェクト属性の指定に従って、プロジェクトはリアルタイムに Performance Explorer で表示できる 2 つの測定値をエクスポートします。

    TMon トランザクションで MonitorInc および MonitorIncFloat を検索します。これは、Performance Explorer に最後のスナップショットが提供される場所です。

    use "bdlMonitor.bdh"

const
  nMeasure1 := 1;
  nMeasure2 := 2;

dclrand
  rRand   : RndExpN  (1..10000: 100.000000);
  rRandf  : RndExpF  (5.500000);

var
  fScale : float;

dcluser
  user
    VMon
  transactions
    TInit           : begin;
    TMon            : 1;
    TEnd            : end;

dcltrans
  transaction TInit
  begin
    fScale := AttributeGetDouble("scale");
  end TInit;

  transaction TMon
  var
    n : number;
    f : float;
  begin
    n := rRand;
    MonitorInc(1, n);

    f := rRandf;
    f := f * fScale;
    MonitorIncFloat(2, f);
  end TMon;
  6. .conf ファイルを編集します。 サンプル .conf ファイルは、プロジェクト ツリーの データ ファイル ノードで利用できます。.conf ファイルをダブルクリックして開き、Type エントリの値を変更します。これは、プロジェクトが Performance Explorer 階層のどこに配置されているかを示します。たとえば、<Type>Monitoring\Sample Project</Type> を使用して、場所 Monitoring\Sample Project で、 監視 > データソースの追加 > 定義済みのデータ ソース にある Performance Explorer の監視プロジェクトを探します。
  7. プロジェクトを単一の ZIP アーカイブにエクスポートします。 ファイル > プロジェクトのエクスポート を選択します。Zip を使用して 1 つのアーカイブ ファイルに圧縮する チェック ボックスをオンにします。 エクスポート場所 に C:\Program Files\Silk\Silk Performer <バージョン>\Monitors\BdlMonitorSample.sep を設定します。
    注: .sep 拡張子でファイルを保存します。
  8. リアルタイム BDL 監視プロジェクトを開始する
    1. Performance Explorer を起動します。監視 タブの 監視 グループで、システム をクリックします。定義済みのデータ ソースから選択する オプション ボタンを選択して、 次へ をクリックします。
    2. 新しく作成した監視プロジェクト (たとえば、 監視 > サンプル プロジェクト) を選択し、 次へ をクリックします。
    3. 監視対象のホストの名前を入力します (localhost を選択するか、Performance Explorer によって推奨されたホストを選択し、 次へ をクリックします)。 これにより、プロジェクト属性を変更できるダイアログが開きます (このインスタンスでは、1 つの属性だけを変更できます)。
    4. 0 よりも大きい値を入力します。この値は、監視プロジェクトで使用されます。詳細については、サンプル スクリプトを参照してください。
    5. OK をクリックします。これにより、BDL 監視プロジェクトで指定された測定値を選択できるようになります。
    6. 両方の測定値を選択し、 終了 をクリックします。これにより、監視プロジェクトが起動します。これで、監視グラフを使用してリアルタイムで値を表示できるようになりました。
親トピック: BDL 監視プロジェクトを生成する


Performance Data Collection Engine (PDCE)

Performance Data Collection Engine (PDCE) は、オンライン監視に使用される Performance Explorer エンジンです。この機能には、BDL (Benchmark Descirption Language) を介してアクセスすることもできます。PDCE の BDL インターフェイスは、pdce.bdh インクルード ファイルで説明されています。

Performance Explorer が監視する各測定値は、BDL スクリプトを使用して Silk Performer 経由で監視することもできます。対象とする測定値を登録すると、PDCE API のポーリング機能を介して、PDCE から監視データ セットを取得できます。この機能により、データおよびステータス情報、ある場合は測定値の説明、を取得できます。

親トピック: BDL 監視プロジェクトを生成する
関連資料
PDCE Functions Overview


チュートリアル

このチュートリアルは、(1) 初歩的な簡易ユース ケースと (2) 詳細なユース ケースという 2 つのユース ケースから構成されます。 最初のユース ケースには、1 つのトランザクションと 1 つの測定値を含む 1 つのユーザー グループから構成される監視プロジェクトがあります。

2 番目のユース ケースでは、1 つのプロジェクトに複数のユーザー グループ、トランザクション、測定値を含める方法について説明します。

  • 基本ユース ケース
    このユース ケースでは、SunOS で実行されるプロセス数を追跡するプロジェクトを作成します。
  • 高度なユース ケース
    このユース ケースには、以前のユース ケースからのユーザー グループ、および HTTP リクエストを測定する新しいユーザー グループの 2 つのユーザー グループがあるプロジェクトが含まれます。 2 つの URL とホストは、プロジェクト属性から構成可能です。
親トピック: BDL 監視プロジェクトを生成する


基本ユース ケース

このユース ケースでは、SunOS で実行されるプロセス数を追跡するプロジェクトを作成します。 一般的に、SunOS にはリモート実行でアクセスできます。 Win2000 コマンド ライン ツール rexec と対比してください。 SunOS で実行されるプロセス数をカウントするには、X-Terminal、Telnet セッション、rexec、または他の望ましいツール内で 'ps -ef | egrep -c ".*"' を実行します。 たとえば、DOS プロンプト タイプで次を入力します：c:\>rexec yourSunHost -l username "ps -ef | egrep -c \".*\""

これは、SunHost で実行されるプロセス数を返します。 ここでは、Performance Explorer リアルタイム グラフでこの値を継続的に追跡および表示することを目的としています。

  • 新しいプロジェクトを作成する
    このセクションで前述したように、アプリケーション タイプ Monitoring/Bdl Monitor for Performance Explorer の新しいプロジェクトを作成します。
  • プロジェクト属性の計画
  • BDL 監視スクリプトを作成する
    BDL で特定のコマンド ライン ツールをリモートから実行するには、3 つの関数が必要であることを説明します。
  • BDL 監視スクリプトのパッケージ化
  • Performance Explorer 内部での監視プロジェクトの使用
    プロジェクトの開き方、および変更対象のホストと測定値の指定方法について説明します。
親トピック: チュートリアル


新しいプロジェクトを作成する

このセクションで前述したように、アプリケーション タイプ Monitoring/Bdl Monitor for Performance Explorer の新しいプロジェクトを作成します。 Performance Explorer に表示される監視プロジェクトの目的全体を反映する、シンプルなプロジェクトの説明 (たとえば、「SunOS システムで実行されているプロセスの数を収集するために使用する強力なプロジェクト」) を入力します。

親トピック: 基本ユース ケース


プロジェクト属性の計画

CountNrOfProcesses など、プロジェクト属性における測定値の名前を最初に入力します。 この名前は Performance Explorer 階層でも使用されます。 階層は '\' で作成されます。

たとえば、以下の階層を作成するには、次の手順を実行します。

OS
  Processes
     CountNrOfProcesses
     Another Counter

測定値の名前を SunOs\Processes\CountNrOfProcesses として指定します。

これは AvgCounter (平均の場合) カウンターとなり、デフォルトで収集される必要があります。

これらの値はプロジェクトの属性に転送される必要があります。 プロジェクト > プロジェクト属性 の順に選択して属性エディタを開きます。

プロジェクト属性の値によって単一の測定値が識別されます。 ただし、測定値を作成するために複数の属性 (ダイアログ内の複数の行) が必要になる場合があります。 たとえば、上記の例では #BDLMonitor1 で始まるすべてのエントリが該当します。 これは、測定値に対してどのように設定を定義するかを示しています。

これで、測定値は名前、タイプ、有効な設定によって定義されました。 2 番目の測定値は #BDLMonitor2 で始まります (高度なユースケースでカバーされます)。

親トピック: 基本ユース ケース


BDL 監視スクリプトを作成する

SunOS の「ps」など、BDL で特定のコマンド ライン ツールをリモートから実行するには、3 つの関数が必要です。

  • リモート マシンの「exec」サーバーに接続します。
  • リモート マシンで実行されるコマンドを送信します。
  • 接続を切断します。
// hCon will be assigned the connection handle
function Connect(/*inout*/hCon : number; sHost : string)
begin
  WebTcpipConnect(hCon, sHost, 512);
end Connect;

// Send a request to the remote execution server
// remote execution protocol:
// What does a request look like in binary:
// 00username00password00shellCommandToExecute00
// What does the response look like
// 00responseData
// sample request:
//   00root00labpass00ps -ef | egrep -c ".*"00
function Request(hCon: number; sUser: string; sPwd: string;
               sCmd: string):number
var
  sSend : string;
  sBuf  : string;
  nSize : number;
  nRec  : number;
begin
  sSend := "\h00";
  SetString(sSend, 2, sUser);
  SetString(sSend, Strlen(sUser) + 3, sPwd);
  SetString(sSend, Strlen(sUser) + Strlen(sPwd) + 4, sCmd);

  nSize := 3 + Strlen(sUser) + Strlen(sPwd)
             + Strlen(sCmd) + 1;

  WebTcpipSendBin(hCon, sSend, nSize);
  WebTcpipRecvExact(hCon, NULL, 1);
  WebTcpipRecv(hCon, sBuf, sizeof(sBuf), nRec);
  Request := number(sBuf);
end Request;

// Closes the connection to the remote exec server
function Close(hCon : number)
begin
  WebTcpipShutdown(hCon);
end Close;

Silk Performer MeasureInc の関数には、ラッパー関数が必要です。 この関数は、すべての監視プロジェクトで使用できます。 プロジェクト属性にアクセスするため、MonitorInc という名前の関数が作成されます。 この関数は、以前に指定した属性にアクセスします。

また、MonitorInc 関数を既存の bdh である bdlMonitor.bdh からインポートすることもできます。

function MonitorInc(nMon : number; nVal : number)
var
  sMeasure : string;
begin
  // This will check whether the attribute
  // "#BDLMonitor1.Enabled" was set to true
  if AttributeGetBoolean("#BDLMonitor" + string(nMon)
                         + ".Enabled") then
      // If yes then let's read the name of the measure.
      // To do this we read the the project attribute
      // "#BDLMonitor1.Name" and store it
      // to a local variable named sMeasure.
      // sMeasure will have the value:
      // "SunOs\Processes\CountNrOfProcesses"
      AttributeGetString("#BDLMonitor" + string(nMon)
              + ".Name", sMeasure, sizeof(sMeasure));

      //   Set a new value for
      // "SunOs\Processes\CountNrOfProcesses"
      MeasureInc(sMeasure, nVal, MEASURE_KIND_AVERAGE);
    end;
end MonitorInc;

これで、定義されているすべての関数を使用してスナップショットを取得するトランザクションをコーディングすることができます。 また、このトランザクションは、プロジェクト ファイル属性にもアクセスします。 目標は、これらの属性を後から Performance Explorer で設定することです。 ただし、ここでは、スクリプトが機能することを確認するため、4 つの属性をプロジェクト属性に追加する必要があります。

注: 属性の名前は、大文字小文字が区別されます。
  • ホスト：sunserver などのサンプル値を割り当てます。
  • コマンド：ps -ef | egrep -c ".*" などのサンプル値を割り当てます。
  • ユーザー：root などのサンプル値を割り当てます。
  • パスワード：テストのためサンプル値を割り当てます。

プロジェクト > プロジェクト属性を選択してプロジェクト属性エディタを開き、これらの追加属性を追加します。 これらは、パスワード型の属性パスワードを除いて、すべて文字列型です。 テストのため属性に値を割り当てます。 属性の目的を示す各属性の説明を選択します。

const
  nMeasure := 1;

dcluser
  user
    VMonitor
  transactions
    TSnap : 1;

dclfunc
.... // your functions here

dcltrans
  transaction TSnap
  var
    hCon  : number init 0;
    sHost : string;
    sCmd  : string;
    sUser : string;
    sPwd  : string;
    nVal  : number;
  begin
    AttributeGetString("host", sHost, sizeof(sHost));
    AttributeGetString("command", sCmd, sizeof(sCmd));
    AttributeGetString("user", sUser, sizeof(sUser));
    AttributeGetString("password", sPwd, sizeof(sPwd));

    Connect(hCon, sHost);
    nVal := Request(hCon, sUser, sPwd, sCmd);
    MonitorInc(nMeasure, nVal);
    Close(hCon);
  end TSnap;

これで、プロジェクトが新しく作成されたスクリプトによって構成されます。 プロジェクトを保存し、TryScript の実行を開始して、機能することを検証します。 nVal を印刷するかログ ファイルに書き込むことにより、スクリプトが機能することを検証します。 スクリプトが機能した場合は、プロジェクトを保存して閉じます。

親トピック: 基本ユース ケース
親トピック: 高度なユース ケース


BDL 監視スクリプトのパッケージ化

プロジェクトを単一の ZIP ファイルとしてエクスポートするには、 ファイル > プロジェクトのエクスポート に進みます。 Zip を使用して 1 つのアーカイブ ファイルに圧縮する チェック ボックスをオンにして、ファイルを C:\Program Files\Silk\Silk Performer 10.0\Monitors\CountProcess.sep にエクスポートします (.sep 拡張子に注意してください)。

.sep ファイルが Performance Explorer で使用できるようにするには、.sep の .conf ファイルを変更しておく必要があります。 .conf ファイルの例を次に示します。

<?xml version='1.0' encoding='UTF-8'?>
<Project>
  <Type>Sample\Remote</Type>
  <Copyright>Borland</Copyright>
  <Author>Borland</Author>
  <Version>5.1</Version>
</Project>

タイプの設定では、「\」で区切られた階層を指定してください。 この階層は Performance Explorer に反映されます。

親トピック: 基本ユース ケース


Performance Explorer 内部での監視プロジェクトの使用

  1. Performance Explorer を起動します。リアルタイム監視 タブの 監視 グループで、システム をクリックします。定義済みのデータ ソースから選択する オプション ボタンを選択して、 次へ をクリックします。
  2. 新たに作成された監視プロジェクトを選択して 次へ をクリックします。
  3. 監視対象のホストを指定します。SunOs が稼働中のコンピュータを指定することをお勧めします。次へ をクリックしてプロジェクト属性を設定するダイアログを開きます。このダイアログに、設定した属性 (すでに指定済みのホストを除く) が表示されます。

    そのため、ダイアログには次の属性が表示されます。

    • user
    • password
    • command
  4. 測定値 (この場合は測定値が 1 つだけです) を選択して OK をクリックします。測定値はデータ収集メカニズムにすぐに引き渡されます。
親トピック: 基本ユース ケース


高度なユース ケース

このユース ケースには、以前のユース ケースからのユーザー グループ、および HTTP リクエストを測定する新しいユーザー グループの 2 つのユーザー グループがあるプロジェクトが含まれます。 2 つの URL とホストは、プロジェクト属性から構成可能です。

  • Silk Performer プロジェクトを作成する
    Performance Explorer に表示されるシンプルなプロジェクトの説明を入力します。
  • プロジェクト属性の計画
  • BDL 監視スクリプトを作成する
    BDL で特定のコマンド ライン ツールをリモートから実行するには、3 つの関数が必要であることを説明します。
  • プロジェクトのパッケージ化
    プロジェクトを ZIP アーカイブしてエクスポートする方法と、CONF ファイルを変更する方法について説明します。
  • Performance Explorer での監視プロジェクトの使用
    必要な Performance Explorer プロジェクト属性を定義する方法について説明します。
親トピック: チュートリアル


Silk Performer プロジェクトを作成する

Performance Explorer に表示されるシンプルなプロジェクトの説明を入力します。 説明は、監視プロジェクトの目的全体を表すものにする必要があります。 たとえば、SunOS システムで実行されているプロセス数、および 2 つの設定可能な HTTP リクエストの測定値を収集するために使用する強力なプロジェクトなどです。

親トピック: 高度なユース ケース


プロジェクト属性の計画

このチュートリアルでは 3 つの測定値を計画します。 階層と測定値の目的を示す測定値名を選出します。 この例では、測定値は SunOs システム上のプロセス数をカウントし、HTTP 要求を測定する 2 つの測定値が含まれます (WebUrl を使用して実行されます)。

  • SunOs\Processes\CountNrOfProcesses
  • SunOs\Http Server\URI1
  • SunOs\Http Server\URI2

階層の例は次のとおりです。

  SunOs
    Processes
      CountNrOfProcesses
    Http Server
      URI1
      URI2

2 つのユーザー グループと 2 つのトランザクションを持つ BDL スクリプトが記述されます。 測定値がトランザクションにどのように割り当てられ、トランザクションがユーザー グループにどのように関係しているかについては、下記のテーブルを参照してください。

ユーザー グループ | トランザクション | 測定値
VMonitor | TSnap | CountNrOfProcesses
VWebMon | TWebSnap | URI1
VWebMon | TWebSnap | URI2

多数のトランザクションとユーザー グループの一方または両方を含むプロジェクトでは、測定値は対応するユーザー グループと、割り当て済みの測定値を使用して指定される必要があります。 これは、以前概要を説明した、1 つのトランザクションと 1 つのユーザー グループを含む基本的なユース ケースとは異なります。

プロジェクト > プロジェクト属性 でプロジェクト属性エディタを開き、次のデータを入力します。

名前 | タイプ | 値
#BDLMonitor1.Name | 文字列 | SunOs\Processes\CountNrOfProcesses
#BDLMonitor1.Type | 文字列 | AvgCounter
#BDLMonitor1.Enabled | 論理値 | True
#BDLMonitor1.Script | 文字列 | remote.bdf
#BDLMonitor1.Usergroup | 文字列 | VMonitor
#BDLMonitor1.Transaction | 文字列 | TSnap
#BDLMonitor2.Name | 文字列 | SunOs\Http Server\URI1
#BDLMonitor2.Type | 文字列 | AvgCounter
#BDLMonitor2.Enabled | 論理値 | true
#BDLMonitor2.Script | 文字列 | remote.bdf
#BDLMonitor2.Usergroup | 文字列 | VWebMon
#BDLMonitor2.Transaction | 文字列 | TWebSnap
#BDLMonitor3.Name | 文字列 | SunOs\Http Server\URI2
#BDLMonitor3.Type | 文字列 | AvgCounter
#BDLMonitor3.Enabled | 論理値 | True
#BDLMonitor3.Script | 文字列 | remote.bdf
#BDLMonitor3.Usergroup | 文字列 | VWebMon
#BDLMonitor3.Transaction | 文字列 | TWebSnap
-host | sunserver | sunserver
command | 文字列 | ps -ef | egrep -c ".*"
user | 文字列 | root
password | password | ***********
URI1 | 文字列 | /
URI2 | 文字列 | /manual/ibm/index.html
親トピック: 高度なユース ケース


プロジェクトのパッケージ化

プロジェクトを単一の ZIP ファイルにエクスポートします。 ファイル > プロジェクトのエクスポート に進みます。 Zip を使用して 1 つのアーカイブ ファイルに圧縮する チェック ボックスをオンにして、ファイルを C:\Program Files\Silk\Silk Performer\Monitors\Advanced.sep にエクスポートします (SEP ファイル拡張子に注意してください)。

SEP ファイルが Performance Explorer で使用できるようにするには、SEP の CONF ファイルを変更しておく必要があります。 CONF ファイルの例を次に示します。

<?xml version='1.0' encoding='UTF-8'?>
<Project>
  <Type>Sample\Advanced\HttpHit</Type>
  <Copyright>Borland</Copyright>
  <Author>Borland</Author>
  <Version>5.1</Version>
</Project>

タイプの設定では、バックスラッシュ (「\」) で区切られた階層を指定してください。この階層は Performance Explorer に反映されます。

親トピック: 高度なユース ケース


Performance Explorer での監視プロジェクトの使用

  1. Performance Explorer を起動します。リアルタイム監視 タブの 監視 グループで、システム をクリックします。定義済みのデータ ソースから選択する を選択します。
  2. 新たに作成された監視プロジェクトを選択して 次へ をクリックします。
  3. 監視対象のサーバー名を入力します。たとえば、sunserver と入力して 次へ をクリックします。ダイアログ ボックスが表示されます。次の属性を定義します。
    • command： このチュートリアルですでに設定した基本的なテスト ケースと同様に、プロセスの数を数えるコマンド。
    • user： リモート コンピュータにアクセスするための有効なユーザー アカウント。
    • password： パスワード。
    • URI1： レスポンス時間が測定される URI。
    • URI2： レスポンス時間が測定される 2 番目の URI。
  4. 測定値 (この場合 1 つだけ) を選択して OK をクリックします。測定値はデータ収集メカニズムにすぐに引き渡されます。選択項目はプロジェクト属性で定義された階層に対応します。
親トピック: 高度なユース ケース


ベスト プラクティス

このセクションでは、監視スクリプトの書き込みに関連するリアルタイム監視プロジェクトでの作業に関する提案について、概要を示します。

  • ループ
    Performance Explorer が、トランザクションは単一インターバル内で実行されると見なすことについて説明します。 これ以外の場合、Performance Explorer は警告メッセージを戻します。
  • 思考時間と待機
    監視トランザクションは所定のインターバル内に実行する必要があることについて説明します。
  • 初期化
    ランタイムを停止させる可能性のある TInit トランザクションに、関数呼び出しを配置すべきではありません。そのことについて説明します。
  • その他のベスト プラクティス
    名前の長さ、スクリプト実行の試行、特別なプロジェクト属性に関連したその他のベスト プラクティスについて説明します。
親トピック: BDL 監視プロジェクトを生成する


ループ

Performance Explorer は、標準インターバルでスナップショットを実行するトランザクションを実行します。 たとえば、スナップショット トランザクションは 10 秒ごとに実行される場合があります。 このようなケースで、Performance Explorer は、トランザクション全体がこの 1 つのインターバルで実行されると見なします。 そうでない場合、Performance Explorer はインターバルのスナップショットを収集できないことを意味する警告を戻します。

次のような無限ループを使用しないでください：

// Forbidden
transaction TSnap
begin
  while true do
    Snap();
  end;
end TSnap;
親トピック: ベスト プラクティス


思考時間と待機

待機文に注意してください。 思考時間は無視されます。 監視トランザクションは所定のインターバル内に実行する必要があります。 待機文により実行がブロックされ、トランザクションが時間内に戻らないことがあります。

例

// Forbidden
transaction TSnap
begin
  wait 500000.0;
end TSnap;
親トピック: ベスト プラクティス


初期化

ランタイムを停止させる可能性のある TInit トランザクションに、関数呼び出しを配置しないでください。 たとえば、ログオンが失敗すると、OraLogon によって ProcessExit が生成されることがあります。 Performance Explorer はこのメッセージを捕捉せず、プロジェクトが引き続き実行されていると見なします。 当然ながら、Performance Explorer はデータを収集できないことをレポートしますが、これが発生した理由をレポートすることはできません。

親トピック: ベスト プラクティス


その他のベスト プラクティス

名前の長さ

属性値の長さが 79 文字を超えてはいけません。

プロジェクトに対するスクリプトの試行を実行する

スクリプトの試行を実行して、SEP ファイルを作成する前に、プロジェクトが動作していることを確認します。

特別なプロジェクト属性

監視プロジェクト属性 host は、次の関数呼び出し：AttributeGetString("host", sHost, sizeof(sHost)); を使用して BDL スクリプト内にアクセスできます。

host の代わりに、#MonitorHost という属性が照会されることもあります。 これらの 2 つの属性は均等に取り扱われます。

Performance Explorer で、この属性の値は次のダイアログを使用して設定されます。

親トピック: ベスト プラクティス


データ ソースを監視する

Performance Explorer を使用してシステムの監視を開始する前に、システムや測定値を指定する必要があります。この方法は 2 通りあります。
  • 定義済みのデータ ソースを選択する。

    Performance Explorer には、最も普及している Web サーバー、アプリケーション サーバー、データベース サーバー、オペレーティング システム用の定義済みデータ ソースが用意されています。なお、使用するデータ ソースがこれらに限られるわけではありません。これらのデータ ソースが付属しているのは、監視対象となる測定値を手早く選択できるようにするためです。

  • データ ソース スキャナを使用してデータ ソースを検出する。

    データ ソース スキャナでは、お使いのシステムを調べて、さまざまなプラットフォームでよく見かけるさまざまなデータ ソースを探し、使用可能なデータ ソースの一覧を返します。

システムを指定するには、リアルタイム監視 タブの 監視 グループで システム をクリックし、ウィザードの指示に従います。

  • 定義済みのデータ ソース
    Performance Explorer では、Performance Explorer で監視可能なサーバーの種類に従って、設定をアシストするウィザードを利用できます。
  • カスタム データ ソース
    Performance Explorer に使用できるカスタム監視インターフェイスを一覧します。
  • データ ソースの自動検出
    監視可能なデータ ソースを Performance Explorer が自動的に検出する方法について説明します。
親トピック: リアルタイム監視


定義済みのデータ ソース

Performance Explorer では、Performance Explorer で監視可能なサーバーの種類に従って、設定をアシストするウィザードを利用できます。

  • Apache サーバーの監視を有効にする
    Apache サーバーについて、詳細情報を監視し、特定のドメインからのステータス レポートを有効にします。
  • Silverstream サーバーへの SNMP サポートを有効にする
    SNMP を使用して、Windows NT 上の Silverstream アプリケーション サーバーを監視します。
  • Silk Central パフォーマンスを監視する
    Silk Central アプリケーション サーバーおよびフロントエンド サーバー を監視するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
  • IBM DB2 のパフォーマンス監視
    IBM DB2 データベース システムからのパフォーマンス指標の取得について概要を説明します。
  • IBM WebSphere Application Server の監視
    監視可能な IBM WebSphere Application Server を列挙します。
  • Internet Information Server (IIS) のパフォーマンス監視
    Internet Information Server からのパフォーマンス指標の取得について概要を説明します。
  • Microsoft SQL Server のパフォーマンス監視
    Microsoft SQL Server からのパフォーマンス指標の取得について概要を説明します。
  • Oracle Forms のパフォーマンス監視
    Oracle Forms データベース システムからのパフォーマンス指標の取得について概要を説明します。
  • Oracle のパフォーマンスを監視する
    Oracle データベース システムからのパフォーマンス指標の取得について概要を説明します。
  • SAP のパフォーマンス監視
    SAP システムを監視するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
  • WebLogic (SNMP) の監視
    SNMP を使った BEA WebLogic の監視サポートの概要と、WebLogic の重要なパフォーマンス測定値について説明します。
  • WebLogic (JMX) を監視する
    このセクションでは、IIOP および JMX 管理サーバの設定を含む、WebLogic (JMX) Server の監視の前提条件について説明します。
親トピック: データ ソースを監視する


Apache サーバーの監視を有効にする

Apache Web Server では、組み込みのステータス レポート機能の使用を選択できます。 この機能を利用するには、mod_status モジュールを組み込む必要があります (これはデフォルトで行われます)。

  1. コンパイル オプションの ExtendedStatus On オプション ボタンをクリックすると、詳細情報が表示されます。
  2. 構成ファイル access.conf にコードを追加し、foo.com ドメインからのブラウザについてのみステータス レポートを有効にします。 Apache の構成は、一連のファイルで管理されます。これらのファイルは、一般に、/usr/local/apache/etc 、または /usr/local/apache/conf (Solaris)、/etc/httpd/conf (Linux) に置かれています。
  3. 次のコードを Apacheのメイン構成ファイル httpd.conf に追加します。
    <Location /server-status> SetHandler server-status
order deny, allow deny from all allow from .foo.com
</Location>
    既存のこのコードがコメント アウトされている場合は、コメントを解除してください。
    注: 監視が適切に機能するには、すべての allow 文が正しく設定されていることが必要です。
  4. サーバーを再起動します。
  5. サーバーのパフォーマンス モジュールを確認するため、ブラウザに http://<ホスト名>/server-status?auto と入力します。 次のメッセージのようなレスポンスが返れば、監視機能は有効です。
    Total Accesses: 210
Total kBytes: 94
CPULoad: .000278279
Uptime: 366539
ReqPerSec: .000572927
BytesPerSec: .262608
BytesPerReq: 458.362
BusyServers: 1
IdleServers: 6
Scoreboard: ______W.................................................................................
    注: デフォルトの Apache 監視は、Telnet が有効になっている場合にのみ機能します。 Telnet が無効の状態で Apache サーバーを監視するには、デフォルトの Rexec コマンドの代わりに、次の例に示すような WGet コマンドを使用する必要があります。
    wget -q -O - http://<hostname>/server-status | grep
"requests/sec" | cut -c5- | cut -d\ -f1
親トピック: 定義済みのデータ ソース


Silverstream サーバーへの SNMP サポートを有効にする

  1. SilverStream デザイナを実行します。
  2. SilverMaster3 database > Objects を選択します。
  3. AgSNMPGetStats をデザイン モードで開きます。
  4. トリガ アイコンをダブルクリックします。 プロパティ ページが開きます。
  5. Enabled オプションを true に設定します。
  6. 変更を保存して、ファイルを閉じます。
親トピック: 定義済みのデータ ソース


Silk Central パフォーマンスを監視する

Performance Explorer を使用して、Silk Central アプリケーション サーバーおよびフロントエンド サーバーのパフォーマンスと信頼性指標を監視します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. 監視するバージョンで Silk フォルダおよび Silk Central フォルダを展開し、次にアプリケーション サーバーまたはフロントエンド サーバーを選択します。
  5. 次へ をクリックします。

    接続パラメータ ページが開きます。

  6. 以下の設定を指定します。
    • ホスト名 テキスト ボックスに、Silk Central が実行されているホスト名または IP アドレスを指定します。
    • 省略可能：エイリアス テキスト ボックスに、監視されるサーバーのエイリアスを指定します。
    • Silk Central がデフォルト ポートでリスンしない場合は、ポート テキスト ボックスで JMX ポート番号を指定します。
    • JMX 認証が有効の場合、ユーザー名 と パスワード を入力します。デフォルト JMX 認証が無効の場合は、ユーザー名 および パスワード は空である必要があります。
    注: ローカル ファイアウォールがオフになっているか、またはポート 19140 および 19142 がファイアウォール経由で通信できることを確認します。
  7. 次へ をクリックします。 JMX Data Source Browser が開きます。
  8. 初期監視ビューに表示する測定値を選択し、Add をクリックします。測定値の追加を終了したら、閉じる をクリックします。
    ヒント: Simple Query タブを選択し、borland.com による測定値にフィルタを適用して、Silk Central 測定値にすばやくアクセスします。
    表示する測定値の選択 ページが開きます。
  9. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: 定義済みのデータ ソース


IBM DB2 のパフォーマンス監視

Performance Explorer を使用すると、データベース プラットフォームを問わず、IBM DB2 データベース システムからパフォーマンス指標を取得することができます。 たとえば、データベースは SunOS、Linux、Windows システムのいずれでも稼働できます。

Performance Explorer では、プラットフォームに依存しない形で DB2 データベース システムを監視できます。 それには、Silk Performer 内から、データベースのパフォーマンスと利用状況の測定値を取得するための DB2 固有のコマンドを実行し、Performance Explorer プロジェクトを操作します。 これにより、Performance Explorer ではデータベース システムのパフォーマンスをリアルタイムに追跡することもできます。

Silk Performer プロジェクトは、DB2Monitor.sep という名前の Essential パッケージに格納されています。このパッケージは、C:\Program Files\Silk\Silk Performer 21.0\Monitors にあります。

  • DB2 監視の前提条件
    DB2 監視の前提条件を列挙します。
  • DB2 スナップショット監視をテストする
    DB2 コマンドライン プロセッサまたは DB2 Command Center を使用して DB2 スナップショット監視をテストします。
  • IBM DB2 パフォーマンス指標を取得する
    IBM DB2 DBMS システムを監視するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
親トピック: 定義済みのデータ ソース


DB2 監視の前提条件

DB2 を監視するには、お使いの環境が以下の要件を満たす必要があります。
  • Performance Explorer を実行する予定のコンピュータに IBM DB2 クライアント ソフトウェア (DB2 Connect) がインストールされていること。
  • クライアント インストールの一環として、DB2 コマンドライン プロセッサ db2cmd.exe がインストールされていること。 これはデフォルトでの前提条件となります。
  • 該当する DB2 データベース ユーザーが次の権限のいずれかを所有していること。
    • sysadm
    • sysctrl
    • sysmaint
  • DB2 スナップショット モニタが正しくセットアップされていること。
親トピック: IBM DB2 のパフォーマンス監視


DB2 スナップショット監視をテストする

  1. DB2 データベースに接続します。 DB2 コマンド:

    => connect to sample user <dbusername> using <password>

  2. DB2 インスタンスにアタッチします。 DB2 コマンド:

    => attach to <db2instancename> user <dbusername> using <dbusername>

  3. 監視スイッチがオンになっているか確認します。 DB2 コマンド:

    => get monitor switches

    監視記録スイッチ

    ノード 0 のスイッチ リスト

    Buffer Pool Activity Information (BUFFERPOOL) = ON 02-06-2002
18:27:48.722132
Lock Information (LOCK) = ON 02-06-2002
18:28:00.095212
Sorting Information (SORT) = ON 02-06-2002
18:28:12.263183
SQL Statement Information (STATEMENT) = ON 02-06-2002
18:28:24.323446
Table Activity Information (TABLE) = OFF
Unit of Work Information (UOW) = OFF
  4. スイッチをオンにします。 DB2 コマンド:

    => update monitor switches using bufferpool on

    => update monitor switches using lock on

    => update monitor switches using sort on

  5. DB2 UDB システム監視スナップショットからデータを取得します。 DB2 コマンド:

    => get snapshot for all databases

    データベース スナップショット:

    Database name = SAMPLE
Database path = /home/db2inst1/db2inst1/
NODE0000/SQL00001/
Input database alias =
Database status = Active
Catalog node number = 0
Catalog network node name =
Operating system running at database server= LINUX
Location of the database = Remote
First database connect timestamp = 02-06-2002 18:01:31.198883
Last reset timestamp =
Last backup timestamp =
Snapshot timestamp = 02-06-2002 18:37:39.254985
High water mark for connections = 1
Application connects = 1
Secondary connects total = 0
Applications connected currently = 1
Appls. executing in db manager currently = 0
Agents associated with applications = 1
Maximum agents associated with applications= 1
Maximum coordinating agents = 1
Locks held currently = 0
Lock waits = 0
Time database waited on locks (ms) = 0
Lock list memory in use (Bytes) = 792
Deadlocks detected = 0
Lock escalations = 0
Exclusive lock escalations = 0
Agents currently waiting on locks = 0
Lock Timeouts = 0
Total sort heap allocated = 0
Total sorts = 0
Total sort time (ms) = 0
Sort overflows = 0
Active sorts = 0
Buffer pool data logical reads = 0
Buffer pool data physical reads = 0
Asynchronous pool data page reads = 0
Buffer pool data writes = 0
Asynchronous pool data page writes = 0
Buffer pool index logical reads = 0
Buffer pool index physical reads = 0
Asynchronous pool index page reads = 0
Buffer pool index writes = 0
Asynchronous pool index page writes = 0
Total buffer pool read time (ms) = 0
Total buffer pool write time (ms) = 0
Total elapsed asynchronous read time = 0
Total elapsed asynchronous write time = 0
Asynchronous read requests = 0
LSN Gap cleaner triggers = 0
Dirty page steal cleaner triggers = 0
Dirty page threshold cleaner triggers = 0
Time waited for prefetch (ms) = 0
Direct reads = 0
Direct writes = 0
Direct read requests = 0
Direct write requests = 0
Direct reads elapsed time (ms) = 0
Direct write elapsed time (ms) = 0
Database files closed = 0
Data pages copied to extended storage = 0
Index pages copied to extended storage = 0
Data pages copied from extended storage = 0
Index pages copied from extended storage = 0
Host execution elapsed time = 0.000000
Commit statements attempted = 1
Rollback statements attempted = 0
Dynamic statements attempted = 0
Static statements attempted = 1
Failed statement operations = 0
Select SQL statements executed = 0
Update/Insert/Delete statements executed = 0
DDL statements executed = 0
Internal automatic rebinds = 0
Internal rows deleted = 0
Internal rows inserted = 0
Internal rows updated = 0
Internal commits = 1
Internal rollbacks = 0
Internal rollbacks due to deadlock = 0
Rows deleted = 0
Rows inserted = 0
Rows updated = 0
Rows selected = 0
Rows read = 9
Binds/precompiles attempted = 0
Log space available to the database (Bytes)= 20400000
Log space used by the database (Bytes) = 0
Maximum secondary log space used (Bytes) = 0
Maximum total log space used (Bytes) = 0
Secondary logs allocated currently = 0
Log pages read = 0
Log pages written = 0
Appl id holding the oldest transaction = 0
Package cache lookups = 0
Package cache inserts = 0
Package cache overflows = 0
Package cache high water mark (Bytes) = 51824
Application section lookups = 0
Application section inserts = 0
Catalog cache lookups = 0
Catalog cache inserts = 0
Catalog cache overflows = 0
Catalog cache heap full = 0
Number of hash joins = 0
Number of hash loops = 0
Number of hash join overflows = 0
Number of small hash join overflows = 0
親トピック: IBM DB2 のパフォーマンス監視


IBM DB2 パフォーマンス指標を取得する

IBM DB2 DBMS システムを監視するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. Database System フォルダを展開して、IBM Universal Database DB2 (snapshot dll) を選択します。
  5. 次へ をクリックします。

    接続パラメータ ページが開きます。

  6. ホスト名 テキスト ボックスに、DB2 データベースが実行されているホストを指定します。
  7. 次へ をクリックします。 属性設定 ページが開きます。
  8. 以下の監視固有の属性を定義します。
    • Alias：データベース エイリアスは、監視プロジェクトにより"connect to 'alias' user 'user' using 'password'" という DB2 固有のコマンドの中で使用されます。
    • Instance：インスタンス名は、監視プロジェクトにより"attach to 'Instance' user 'user' using 'password'" という DB2 固有のコマンドを実行するために使用されます。
    • User：次の DB2 権限を持つユーザーを指定します。
      • sysadm
      • sysctrl
      • sysmaint
    • Password：ユーザーのパスワード。
  9. OK をクリックします。 表示する測定値の選択 ページが開きます。
  10. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: IBM DB2 のパフォーマンス監視


IBM WebSphere Application Server の監視

Performance Explorer では、以下の IBM WebSphere Application Server を監視できます。
  • IBM WebSphere Application Server 6.1 (JMX)
  • IBM WebSphere Application Server 7.0 (JMX)
  • IBM WebSphere Application Server 8.0 (JMX)
  • IBM WebSphere Application Server 8.5 (JMX)
  • WebSphere Application Server 6.1 に関する代表的なパフォーマンス測定値
    WebSphere Application Server の代表的なパフォーマンス測定値および定義を示します。
  • IBM WebSphere Application Server を監視する
    Java ホーム ディレクトリ設定の指定方法と、追加の JVM パラメータを定義方法について説明します。
親トピック: 定義済みのデータ ソース


WebSphere Application Server 6.1 に関する代表的なパフォーマンス測定値

以下の表で、WebSphere Application Server の代表的なパフォーマンス測定値および定義を示します。

パフォーマンス測定値 | 説明
BeanModule | 作成された Bean の数などの配置済みの EJB に関する固有のデータ。
ConnectionPoolModule | 現在プールにある JDBC 接続の数など、JDBC 接続に関するパフォーマンス カウンタを含む。
JvmRuntimeModule | Java 仮想マシン固有のパフォーマンス カウンタ。
ServletSessionModule | アクティブなセッションの数やセッションの平均継続時間などのサーブレット セッションに関するパフォーマンス カウンタを含む。
TransactionModule | 実行中のトランザクションの数や 1 件のトランザクションの実行に必要な平均時間に関する情報を提供するパフォーマンス カウンタを含む。
WebApplicationModule | サーブレットがリクエストを処理するのにかかる平均時間などの配置済みのサーブレットや JSP に関する情報を提供。
親トピック: IBM WebSphere Application Server の監視


IBM WebSphere Application Server を監視する

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。システムの選択 ページが開きます。
  4. Application Server フォルダ、IBM WebSphere Application Server フォルダの順に展開します。
  5. IBM WebSphere <バージョン> (JMX MBean Server) をクリックし、 次へ をクリックします。 接続パラメータ ページが開きます。
  6. ホスト名 フィールドに、WebSphere が実行されているホストを指定します。
  7. ユーザー名 および パスワード フィールドで、上で指定したホストに対して管理者権限を持つユーザーを指定します。
  8. 省略可能：エイリアス フィールドに、監視されるサーバーのエイリアスを指定します。
  9. サーバー設定 をクリックします。JMX Connection Configuration ウィンドウが開きます。
  10. Java ホーム ディレクトリ および アプリケーション サーバーのインストール ディレクトリ を指定します。UNC パスを使用してください (\\<サーバー名>\c$\IBM\WebSphere\AppServer\java など)。
    注: UNC パスを指定できない場合は、Application Server のインストール ディレクトリをローカル コンピュータにコピーして、ローカル パスを指定します。
  11. WebSphere のセキュリティ設定に基づき、追加の JVM パラメータを指定します。
    JVM ベンダー

    セキュリティ設定

             IBM SUN
    無効な管理セキュリティ 追加の JVM パラメータなし 追加の JVM パラメータなし
    有効な管理セキュリティ

    インバウンド CSIv2 トランスポート層 = TCP/IP

             追加の JVM パラメータ： -Dcom.ibm.CORBA.ConfigURL

    (すでに定義済み)

             追加の JVM パラメータ：-Dcom.ibm.CORBA.ConfigURL

    (定義済み)
    有効な管理セキュリティ

    インバウンド CSIv2 トランスポート層 = SSL サポート

             追加の JVM パラメータ：-Dcom.ibm.CORBA.ConfigURL (定義済み)-Dcom.ibm.SSL.ConfigURL 機能しない
    有効な管理セキュリティ

    インバウンド CSIv2 トランスポート層 = SSL 必須

             追加の JVM パラメータ：-Dcom.ibm.CORBA.ConfigURL (すでに定義済み)

    -Dcom.ibm.SSL.ConfigURL

            機能しない
    注: WebSphere サーバーで管理セキュリティが有効になっていて、インバウンド CSIv2 トランスポート層が SSL サポート (または SSL 必須) の場合、Application Server のインストール ディレクトリをローカル コンピュータにコピーします。上記の表に従い Additional JVM parameters (追加の JVM パラメータ) を指定します。Additional JVM parameters フィールドは、定義済みパラメータ -Dcom.ibm.CORBA.ConfigURL のままになります。

    -Dcom.ibm.CORBA.ConfigURL パラメータの値は、sas.client.props ファイルへの URL パスにする必要があります。デフォルトの sas.client.props ファイルは、%INSTALL_DIR%/Include/jmx-config/WebSphere%MAJOR_VERSION% フォルダにあります。例： WebSphere 7 の場合、URL パスは C:\Program%20Files%20(x86)\Silk\Silk%20Performer%2010.0\Include\jmx-config\WebSphere7 になります。サーバーに特定の設定がある場合、WebSphere プロファイルの properties フォルダから sas.client.props ファイルを使用できます。例： file:/C:\Program%20Files%20(x86)\IBM\WebSphere\AppServer1\profiles\AppSrv01\properties\sas.client.props

    sas.client.props ファイルにある次の 2 つの変数とその値 com.ibm.CSI.performTransportAssocSSLTLSRequired=false および com.ibm.CSI.performTransportAssocSSLTLSSupported=true に注意してください。

    -Dcom.ibm.SSL.ConfigURL パラメータの値は、WebSphere プロファイルの properties フォルダにある ssl.client.props ファイル への URL パスにする必要があります。例：file:/C:\Program%20Files%20 (x86)\IBM\WebSphere\AppServer1\profiles\AppSrv01\properties\ssl.client.props。

    ssl.client.props ファイルの変数 user.root に注意してください。これには key- および trust- ファイルが格納された etc ディレクトリを含む profile フォルダへの有効なパスが含まれている必要があります。sas.client.props ファイル および ssl.client.props ファイルへの URL パスに含まれるブランクは %20 で置き換える必要があります。

  12. OK をクリックします。
  13. 次へ をクリックします。 JMX Data Source Browser を開きます。
  14. 初期監視ビューに表示する測定値の MBean を選択します。測定のタイプ (Average、 Sum、 Incremental) を選択して 追加 をクリックします。
  15. 閉じる をクリックします。表示する測定値の選択 ページが開きます。
  16. 初期監視ビューに表示する測定値のチェック ボックスをオンにします。
  17. 完了 をクリックします。
親トピック: IBM WebSphere Application Server の監視


Internet Information Server (IIS) のパフォーマンス監視

  • Internet Information Services (IIS) を監視する
    System Statistics (PERFMON) データ ソースの選択に必要な IIS の監視を設定するには、ホストのログイン資格情報を入力し、監視する測定値を選択します。
  • 利用可能な IIS パフォーマンス測定値
    IIS に対して使用できる Web サービスと Web サービス キャッシュのパフォーマンス測定値の一覧を示します。
  • IIS 監視のトラブルシューティング
    x64/x86 カウンタおよび W3SVC_W3WP での問題の解決策を見つける方法について説明します。
親トピック: 定義済みのデータ ソース


Internet Information Services (IIS) を監視する

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. Web サーバー フォルダ、IIS <バージョン> フォルダの順に展開します。
  5. System Statistics (PERFMON) ノードをクリックして、次へ をクリックします。接続パラメータ ページが開きます。
  6. ホスト名 テキスト ボックスに、IIS が実行されているホストを指定します。
  7. ユーザー名 および パスワード テキスト ボックスで、上で指定したホスト上で管理者権限を持つユーザーを指定します。
  8. 省略可能：エイリアス テキスト ボックスに、監視されるサーバーのエイリアスを指定します。
  9. 次へ をクリックします。 表示する測定値の選択 ページが開きます。
  10. 初期監視ビューに表示する測定値のチェック ボックスをオンにします。
  11. 完了 をクリックします。
親トピック: Internet Information Server (IIS) のパフォーマンス監視


利用可能な IIS パフォーマンス測定値

IIS 6.0 に関するパフォーマンス測定値

測定値は、perfmon オブジェクトに基づいて複数のグループに分類できます。

Web サービスの測定値
  • Web Service(_Total)\Bytes Received/sec

    サービスによって転送された合計バイト数の速度(受信)

  • Web Service(_Total)\Bytes Sent/sec

    サービスによって転送された合計バイト数の速度(送信)

  • Web Service(_Total)\Bytes Total/sec

    サービスによって転送された合計バイト数の速度(送信バイト数と受信バイト数の合計)

  • Web Service(_Total)\Current Connections

    サービスへの現在の接続数

  • Web Service(_Total)\Get Requests/sec

    WWW サービスが受信した HTTP GET リクエストの合計数

  • Web Service(_Total)\Post Requests/sec

    POST メソッドを使用した HTTP リクエストの数

Web サービス キャッシュの測定値
  • Web Service Cache(_Total)\Current Files Cached

    コンテンツがユーザー モード キャッシュに格納されているファイルの現在の数

  • Web Service Cache(_Total)\Current Metadata Cached

    現在ユーザー モード キャッシュに格納されているメタデータ情報ブロックの現在の数

  • Web Service Cache(_Total)\Current URIs Cached

    現在ユーザー モード キャッシュに格納されている URI 情報ブロック

  • Web Service Cache(_Total)\File Cache Hits %

    キャッシュ リクエストの合計数に対するユーザー モード ファイル キャッシュ ヒットの比率 (サービス起動時から)。 注：カーネル URI キャッシュ ヒット率が高い場合、この値は低くなる可能性があります。

  • Web Service Cache(_Total)\Metadata Cache Hits

    キャッシュ リクエストの合計数に対するユーザー モード メタデータ キャッシュ ヒットの比率 (サービス起動時から)

  • Web Service Cache(_Total)\URI Cache Hits %

    キャッシュ リクエストの合計数に対するユーザー モード URI キャッシュ ヒットの比率 (サービス起動時から)

  • Web Service Cache(_Total)\Kernel:URI Cache Hits %

    静的非認証コンテンツとキャッシュに格納可能としてマークされた動的コンテンツに適用

IIS 7.0、7.5 に関するパフォーマンス測定値

すべての IIS 6.0 測定値は IIS 7.0/7.5 でも使用できます。IIS7 では、実行時のワーカー プロセスのレベルを深く理解するための追加のパフォーマンス カウンタが用意されています。

Web サービスの測定値 - IIS 6.0 と同じ

Web サービス キャッシュの測定値 - IIS 6.0 と同じ

W3SVC_W3WP キャッシュの測定値
  • W3SVC_W3WP(_Total)\Requests / Sec

    ワーカー プロセスによって処理されている HTTP リクエスト数/秒

  • W3SVC_W3WP(_Total)\Active Requests

    ワーカー プロセスによって処理されているリクエストの現在の数

  • W3SVC_W3WP(_Total)\Active Threads Count

    ワーカー プロセスでリクエストをアクティブに処理しているスレッドの数

  • W3SVC_W3WP(_Total)\Current File Cache Memory Usage

    ユーザー モード ファイル キャッシュが使用している現在のバイト数

  • W3SVC_W3WP(_Total)\Current Files Cached

    コンテンツがユーザー モード キャッシュに格納されているファイルの現在の数

  • W3SVC_W3WP(_Total)\Current URIs Cached

    現在ユーザー モード キャッシュに格納されている URI 情報ブロック

  • W3SVC_W3WP(_Total)\Current Metadata Cached

    現在ユーザー モード キャッシュに格納されているメタデータ情報ブロックの現在の数

  • W3SVC_W3WP(_Total)\Metadata Cache Hits

    ユーザー モード メタデータ キャッシュで成功した検索の合計数 (サービス起動時から)

  • W3SVC_W3WP(_Total)\Metadata Cache Misses

    ユーザー モード メタデータ キャッシュで失敗した検索の合計数 (サービス起動時から)

  • W3SVC_W3WP(_Total)\Metadata Cache Flushes

    ユーザー モード メタデータ キャッシュのフラッシュの合計数 (サービス起動時から)

  • W3SVC_W3WP(_Total)\File Cache Hits / sec

    最後のサンプル期間中にファイル キャッシュで成功した検索の速度

  • W3SVC_W3WP(_Total)\File Cache Misses / sec

    最後のサンプル期間中にファイル キャッシュで失敗した検索の速度

  • W3SVC_W3WP(_Total)\Metadata Cache Hits / sec

    最後のサンプル期間中にメタデータ キャッシュで成功した検索の速度

  • W3SVC_W3WP(_Total)\Metadata Cache Misses / sec

    最後のサンプル期間中にメタデータ キャッシュで失敗した検索の速度

  • W3SVC_W3WP(_Total)\Uri Cache Hits / sec

    最後のサンプル期間中に URI キャッシュで成功した検索の速度

  • W3SVC_W3WP(_Total)\Uri Cache Misses / sec

    最後のサンプル期間中に URI キャッシュで失敗した検索の速度

親トピック: Internet Information Server (IIS) のパフォーマンス監視


IIS 監視のトラブルシューティング

x64/x86 カウンタの問題

サポートについては、http://support.microsoft.com/kb/891238 を参照してください。

W3SVC_W3WP での問題

カウンタのこのグループでは、ランタイム時のワーカー処理が監視されます。 ワーカーが実行されていない場合、このグループのカウンタは NULL 値を返します。

親トピック: Internet Information Server (IIS) のパフォーマンス監視


Microsoft SQL Server のパフォーマンス監視

  • Microsoft SQL Server を監視する
  • 利用可能な Microsoft SQL Server パフォーマンス測定値
    Microsoft SQL Server
親トピック: 定義済みのデータ ソース


Microsoft SQL Server を監視する

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. Database System フォルダ、SQL Server <version> フォルダの順に展開します。
  5. System Statistics (PERFMON) ノードをクリックして、次へ をクリックします。接続パラメータ ページが開きます。
  6. ホスト名 テキスト ボックスに、SQL Server が実行されているホストを指定します。
  7. ユーザー名 および パスワード テキスト ボックスで、上で指定したホスト上で管理者権限を持つユーザーを指定します。
  8. 省略可能：エイリアス テキスト ボックスに、監視されるサーバーのエイリアスを指定します。
  9. 次へ をクリックします。 表示する測定値の選択 ページが開きます。
  10. 初期監視ビューに表示する測定値のチェック ボックスをオンにします。
  11. 完了 をクリックします。
親トピック: Microsoft SQL Server のパフォーマンス監視


利用可能な Microsoft SQL Server パフォーマンス測定値

Microsoft SQL Server 2005 に関するパフォーマンス測定値

次の指標は、Microsoft SQL Server 2005 システムで監視できます。

  • Process(sqlservr)\% Processor Time

    % Processor Time は、このプロセスのすべてのスレッドが命令を実行するためにプロセッサを使用した経過時間の割合です。

  • SQLServer:Access Methods\Full Scans/sec

    制限されていないフル スキャンの数です。 ベース テーブルまたはフル インデックス スキャンのどちらかです。

  • SQLServer:Access Methods\Index Searches/sec

    インデックス検索の数です。 インデックス検索は、範囲スキャンの開始、1 つのインデックス レコードのフェッチ、インデックス内での位置変更を実行するために使用されます。

  • SQLServer:Access Methods\Table Lock Escalations/sec

    テーブルのロックがエスカレートされた回数です。

  • SQLServer:Buffer Manager\Buffer cache hit ratio

    ディスクから読み取ることなく、バッファ キャッシュで見つかったページの割合です。

  • SQLServer:Buffer Manager\Checkpoint pages/sec

    すべてのダーティー ページをフラッシュする必要があるチェックポイントなどの操作によってフラッシュされたページの数です。

  • SQLServer:Buffer Manager\Lazy writes/sec

    バッファ マネージャのレイジー ライターによって書き込まれたバッファの数です。

  • SQLServer:Buffer Manager\Page lookups/sec

    バッファ プールでページを検索するように要求するリクエストの数です。

  • SQLServer:Buffer Manager\Page reads/sec

    発行された物理データベース ページ読み取りの数です。

  • SQLServer:Buffer Manager\Page writes/sec

    発行された物理データベース ページ書き込みの数です。

  • SQLServer:Buffer Manager\Readahead pages/sec

    使用されると予想して、読み取られたページの数です。

  • SQLServer:Cursor Manager by Type\Active cursors

    アクティブなカーソルの数です。

  • SQLServer:Cursor Manager by Type\Cursor memory usage

    カーソルが消費したメモリの量 (キロバイト (KB) 単位) です。

  • SQL Server:Databases\ Active Transactions

    データベースのアクティブな更新トランザクションの数です。

  • SQL Server:Databases\ Shrink Data Movement Bytes/sec

    自動圧縮、DBCC SHRINKDATABASE、または SHRINKFILE によって移動されているデータの 1 秒当たりの量です。

  • SQL Server:Databases\ Transactions/sec

    データベースに対して開始されたトランザクションの数です。

  • SQLServer:General Statistics\User Connections

    このシステムに接続しているユーザーの数です。

  • SQLServer:Locks(_Total)\Average Wait Time (ms)

    待機することになった各ロック リクエストの平均待ち時間 (ミリ秒) です。

  • SQLServer:Locks(_Total)\Lock Waits/sec

    すぐに満たすことができず、呼び出し側はロックが許可されるまで待機する必要があったロック リクエストの数です。

  • SQLServer:Locks(_Total)\Number of Deadlocks/sec

    デッドロックとなったロック リクエストの数です。

  • SQLServer:Memory Manager\Target Server Memory (KB)

    サーバーが使用できる動的メモリの総量です。

  • SQLServer:Memory Manager\Total Server Memory (KB)

    サーバーが現在使用している動的メモリの総量です。

  • SQLServer:SQL Statistics\Batch Requests/sec

    サーバーが受信した SQL バッチ リクエストの数です。

  • SQLServer:SQL Statistics\SQL Compilations/sec

    1 秒当たりの SQL コンパイル数です。

  • SQLServer:SQL Statistics\SQL Re-Compilations/sec

    1 秒当たりの SQL 再コンパイル数です。

  • SQLServer:Transactions\Free Space in tempdb (KB)

    tempdb の使用可能な領域 (キロバイト単位) です。 スナップショット分離レベルのバージョン ストアと、このデータベース エンジン インスタンスで作成されたすべての新しい一時オブジェクトの両方を保持できる十分な空き領域が必要です。

  • SQLServer:Transactions\Transactions

    すべての種類の現在アクティブなトランザクションの数です。

Microsoft SQL Server 2008、2008 R2 に関するパフォーマンス測定値

すべての Microsoft SQL Server 2005 カウンタは Microsoft SQL Server 2008 と 2008 R2 システムでも使用できます。 それ以外に次の指標も使用できます。

  • SQL Server:Databases\Tracked transactions/sec

    データベースのコミットテーブルに記録されたコミットされたトランザクションの数です。

  • SQL Server: Databases\Write Transactions/sec

    最後の 1 秒でデータベースに書き込まれたトランザクションの数です。

  • SQL Server: General Statistics\Connection reset/sec

    1 秒当たりの接続リセットの合計数です。

  • SQL Server: General Statistics\Tempdb rowset id

    生成された重複する tempdb 行セット ID の数です。

  • SQL Server: SQL Statistics\Misguided plan executions/sec

    プラン生成時にプラン ガイドを受け付けることができなかったプラン実行の 1 秒当たりの数です。

  • SQL Server: SQL Statistics\Guided plan executions/sec

    プラン ガイドを使用してクエリ プランが生成されたプラン実行の 1 秒当たりの数です。

親トピック: Microsoft SQL Server のパフォーマンス監視


Oracle Forms のパフォーマンス監視

Performance Explorer を使用すると、Oracle Forms Dynamic Monitoring System (DMS) からパフォーマンス指標を取得できます。 Performance Explorer では、DMS モジュールがインストールされると、Oracle Forms HTTP サーバーを通じて提供される DMS パフォーマンス Web ページを監視できます。

Web ページ リクエストとパフォーマンス指標解析は、Silk Performer を通じて Performance Explorer プロジェクトを操作することで実現されます。 これにより、アプリケーション サーバーのパフォーマンスをリアルタイムに追跡できます。

Silk Performer プロジェクトは、OraFormsDMS.sep という名前の SilkEssential パッケージにあり、これは C:\Program Files\Silk\Silk Performer 21.0\Monitors にあります。

Oracle Forms アプリケーションには、次の 3 つの階層が含まれます。
  • Oracle データベース
  • Oracle アプリケーション サーバー
  • Client アプレット

Performance Explorer を使用して、データベース サーバーとアプリケーション サーバーからサーバー側測定値を収集する必要があります。

データベース サーバーを監視するために、事前定義 Oracle データベース測定値のセットが使用可能です。

  • Oracle Forms 監視の前提条件
    Oracle Forms 監視の前提条件を列挙します。
  • Oracle Forms を監視する
    Oracle Forms DMS を監視するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
  • Oracle Forms クライアント側測定値
    クライアント側測定値は、Oracle Forms の負荷テスト中に負荷テスト エージェントによって自動的に生成されることを説明します。
親トピック: 定義済みのデータ ソース
関連概念
Oracle Forms / Oracle Applications のサポート
Oracle Forms のパフォーマンス監視


Oracle Forms 監視の前提条件

Oracle Forms を監視するには、お使いの環境が以下の要件を満たす必要があります。
  • Oracle Forms アプリケーション サーバーに Oracle Forms Dynamic Monitoring System がインストールされていること。
  • 監視を行っているコンピュータからパフォーマンス ページにアクセスできること。
親トピック: Oracle Forms のパフォーマンス監視


Oracle Forms を監視する

注: アプリケーション サーバーのデフォルト測定値に加え、Performance Explorer では、Oracle Forms Dynamic Monitoring System (DMS) からパフォーマンス データを問い合わせることができる BDL 監視が提供されます。 使用している Oracle Application Server の DMS での設定については、Oracle Technology Network の説明 (http://otn.oracle.com) を確認してください。
  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。

    省略可能：アプリケーション サーバーを監視するには、アプリケーション サーバーが実行されるプラットフォームで提供される測定値を使用できます。 定義済みセットから選択するか、PERFMON、SNMP または REXEC を使用し、該当する測定値を手動で定義します。

  4. Application Server フォルダ、Oracle フォルダの順に展開します。
  5. Oracle Forms AS を選択し、次へ をクリックします。 接続パラメータ ページが開きます。
  6. ホスト名 テキスト ボックスに、Oracle Application Server が実行されているホストを指定します。 必要に応じて、アプリケーション サーバーの エイリアス 名を追加できます。
  7. 次へ をクリックします。 属性設定 ページが開きます。
  8. 以下の設定を指定します。
    • DMS-Site の URL。 標準的な形式は、http://server:port/dms0 です。
    • Proxy：プロキシ (HTTP プロキシを使用して接続する必要がある場合)。
    • HTTP プロキシの Proxy-Port。
    • Username：ユーザー名 (DMS サイトにアクセスするために Web サーバーに対して認証が必要な場合)。
    • Password：DMS サイトにアクセスするためのパスワード。
    この監視では、次のような、DMS によって提供される該当の測定値が提供されます。
    • 共通の Apache 測定値
    • HTTP、OC4J、および PLSQL のモジュール情報
    • データベース接続の統計情報
  9. OK をクリックします。 表示する測定値の選択 ページが開きます。
  10. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: Oracle Forms のパフォーマンス監視


Oracle Forms クライアント側測定値

クライアント側測定値は、Oracle Forms の 負荷テスト中に負荷テスト エージェントによって自動的に生成されます。 これらは、負荷テスト コントローラによって 1 つの結果ファイルに集約されます。

エージェントでは、次のような測定値が作成されます。
  • コントロールでアクション (たとえば、ボタンを押すアクションまたはコントロールの編集など) が行われた時刻
  • アクションで受信したバイト数
  • アクションに送信したバイト数
  • アクションで受信したメッセージ数
  • アクションに送信したメッセージ数
  • アクションのラウンドトリップの回数
親トピック: Oracle Forms のパフォーマンス監視


Oracle のパフォーマンスを監視する

Performance Explorer を使用すると、データベース プラットフォームを問わず、Oracle データベース システムからパフォーマンス指標を取得することができます。 たとえば、データベースは SunOS、Linux、Windows システムのいずれでも稼働できます。

  • Perfmon を介して Oracle データベースを監視する
    前提条件など、Oracle データベースのパフォーマンスを監視する方法について説明します。 使用できるパフォーマンス カウンタについても説明します。
  • V$SYSSTAT を介して Oracle データベースを監視する
    前提条件など、Oracle データベースのパフォーマンスを監視する方法について説明します。
親トピック: 定義済みのデータ ソース


Perfmon を介して Oracle データベースを監視する

  • Oracle データベース監視の前提条件
    Windows 版の Oracle クライアントと Oracle カウンタのインストール方法を説明します。 Oracle カウンタを Windows パフォーマンス モニタに追加する方法についても説明します。
  • Oracle のパフォーマンスを監視する (Perfmon)
  • パフォーマンス カウンタ
    Oracle データベース監視のために使用できるカウンタをリストに示します。
  • 既知の問題
    Silk Performer では、32 ビットおよび 64 ビット版 Oracle データベースのパフォーマンスを監視できますが、サポートされているのは 32 ビット版の Oracle クライアント (Windows パフォーマンス モニタ対応 Oracle カウンタ) だけであることを説明します。
親トピック: Oracle のパフォーマンスを監視する


Oracle データベース監視の前提条件

  • Windows 版の Oracle クライアントと Oracle カウンタをインストールする
    Perfmon を使用して Oracle データベースを監視するためのインストール要件を説明します。
  • Windows パフォーマンス モニタへの Oracle カウンタの追加
    Oracle カウンタを追加する前に、どのデータベースを監視対象にするか構成し、接続文字列を追加する必要があります。
親トピック: Perfmon を介して Oracle データベースを監視する


Windows 版の Oracle クライアントと Oracle カウンタをインストールする

Oracle データベースを監視するには、以下の要件が満たされている必要があります。

  • Performance Explorer を実行するコンピュータに SQL*NET クライアント ソフトウェアがインストールされていること。
  • Performance Explorer を実行するマシン上で SQL*Plus を使用できること。
  • Windows パフォーマンス モニタ対応の Oracle カウンタを使用できること。
  • Oracle クライアントは、DB 管理者権限を持ち、目的とするデータベース サーバーを認識できること。
    注: Windows パフォーマンス モニタ対応の Oracle カウンタが、デフォルトのインストール オプションでインストールされていないこと (たとえば、InstantClient や管理者インストール)。 カスタム インストール オプションでのみ使用できます。
親トピック: Oracle データベース監視の前提条件


Windows パフォーマンス モニタへの Oracle カウンタの追加

  1. ファイル <Oracle Home>\network\admin\tnsnames.ora を開き、監視するデータベースに、接続文字列を追加します。
  2. コマンド ラインを起動し、コマンドsqlplus <user>/<password>@<database>を使用して接続をテストします。
  3. 次のoperfcfgコマンドを使用して監視するデータベースを構成します: <Oracle Home>\bin\operfcfg [-U username] [-P password] [-D TNS_Alias_for_database]

    成功すると、operfcfg: New registry values have been successfully set というメッセージを受信します。

  4. Windows パフォーマンス モニタ > を起動します。スタートファイル名を指定して実行 > Perfmon
  5. これで、Windows パフォーマンス モニタ用の Oracle カウンタを、カウンタの追加 ダイアログ ボックスから追加できます。
親トピック: Oracle データベース監視の前提条件


Oracle のパフォーマンスを監視する (Perfmon)

  1. 監視 > データ ソースの追加 を選択します。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。
    システムの選択 ページが開きます。
  4. データベース システム フォルダと Oracle 9/10/11 (perfmon) フォルダを展開します。
  5. System Statistics ( PERFMON ) ノードをクリックして、次へ をクリックします。 接続パラメータ ページが開きます。
  6. ホスト名 テキスト ボックスで、Oracle クライアントと Windows パフォーマンス モニタ対応のカウンタが実行されているホストを指定します。
  7. ユーザー名 および パスワード テキスト ボックスで、上で指定したホスト上で管理者権限を持つユーザーを指定します。
  8. 省略可能: エイリアス テキスト ボックスに、Oracle データベースが実行されているホストのエイリアスを指定します。
  9. 次へ をクリックします。
  10. 表示する測定値の選択 ページが開きます。
  11. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
親トピック: Perfmon を介して Oracle データベースを監視する


パフォーマンス カウンタ

Oracleデータベース バッファ キャッシュ

カウンタはphyrds/gets %です。 「phyrds/gets %」 (物理的読込み/取得) の割合は、ミス率として計算されます。 Miss カウンタの値が低いほど、よい状態です。 パフォーマンスを向上させるには、コンピュータ上に使用できるメモリーがあれば、バッファ キャッシュ内のバッファの数を増やします。 この値は、時間に基づいて算出される値ではありません。

Oracle データベースやり直しログバッファ

カウンタはredo log space requestsです。 このカウンタの値は、ゼロに近い値である必要があります。 この値が継続して増加する場合、REDO ログ バッファ内の領域を探すためにプロセスが待機していることを示しています。 この場合、REDOログ バッファのサイズを大きくすることが必要な場合があります。

Oracle データベース データ ディクショナリ キャッシュ

カウンタはgetmisses/gets %です。 頻繁にアクセスされるデータ ディクショナリ キャッシュの場合、このカウンタの値は 10から15% 未満である必要があります。 アプリケーション実行中にこの割合が継続的にしきい値を超える場合は、データ ディクショナリ キャッシュで使用できるメモリーのサイズを大きくします。

キャッシュが使用できるメモリーを増やすには、初期化パラメータ SHARED_POOL_SIZE の値を増やします。 この値は、時間に基づいて算出される値ではありません。

Oracle データベース ライブラリ キャッシュ

カウンタはreloads/pins %です。 これは、再解析を必要とする SQL 文、PL/SQL ブロックおよびオブジェクト定義の割合です。 再ロードの合計は、ゼロに近い数である必要があります。 確保に対する再ロードの割合が 1% を超える場合は、ライブラリ キャッシュ ミスを減らします。 この値は、時間に基づいて算出される値ではありません。

Oracle データベース DBWR stats1

使用できる2つのカウンタ、「buffers scanned/sec」 (スキャン済バッファ/秒) および「LRU scans/sec」 (LRUスキャン/秒) は、バッファ キャッシュのチューニングに有効です。 スキャン済バッファ/秒は、DBWRによって1秒間にスキャンされるバッファの数です。 スキャンされるバッファは、LRU (最低使用頻度) リスト内にあります。 LRUスキャン/秒は、DBWRによって、LRU (最低使用頻度) バッファ リストが1秒間にスキャンされた回数です。

Oracle データベース DBWR stats2

使用できる 2 つのカウンタ、「timeouts/sec」 (タイムアウト/秒) および「checkpoints/sec」 (チェックポイント/秒) は、DBWR が実行を要求されている作業量の判断に有効です。 タイムアウト/秒は、DBWR が1秒間にタイムアウトする回数です。 DBWR のタイムアウトは、3 秒間隔です。 DBWR が 3 秒間ポストされない場合、タイムアウトします。

チェックポイント/秒は、データベース ライターによって 1 秒間に処理されるチェックポイント メッセージの数です。 チェックポイントに達するたびに、使用済バッファをディスクに書き込むように求めるメッセージがDBWRに送られます (ポストされます)。

Oracle データベース動的容量管理

カウンタはrecursive calls/secです。 動的拡張により、ユーザー プロセスによって発行された SQL 文以外の SQL 文も Oracle データベースによって実行されます。 これらの SQL 文は、再帰的呼び出しと呼ばれます。

Oracle データベース空きリスト

カウンタはfree list waits/requests %です。 空きリストの競合は、バッファ キャッシュ内の空きデータ ブロックの競合により影響されます。 V$WAITSTAT を検索すると、空きリストの競合によりパフォーマンスが低下しているかどうかを判断できます。

空きブロックを待機する空きリストの数が、要求の総数の 1% を超える場合は、空きリストを追加することで競合を減らすことを検討してください。

Oracle データベース ソート

使用可能カウンタは、「sorts in memory/sec」 (メモリー ソート/秒) と「sorts on disk/sec」 (ディスク ソート/秒) です。 ほとんどのソートの場合、すべてのデータを保持するにはデフォルトのソート領域サイズで十分です。 ただし、ソート領域に収まらないデータに対する大規模ソートをアプリケーションで行うことが多い場合は、ソート領域サイズを増やすことを検討してください。

親トピック: Perfmon を介して Oracle データベースを監視する


既知の問題

Silk Performer では、32 ビットおよび 64 ビット版 Oracle データベースのパフォーマンスを監視できますが、サポートされているのは 32 ビット版の Oracle クライアント (Windows パフォーマンス モニタ対応 Oracle カウンタ) だけです。

注: 32 ビット版 Oracle クライアントは 64 ビット OS 上で良好に動作し、64 ビット OS が実行されているクライアント マシンから、問題なく 64 ビット データベースを監視できます。
親トピック: Perfmon を介して Oracle データベースを監視する


V$SYSSTAT を介して Oracle データベースを監視する

Oracle データベースの V$SYSSTAT テーブルからパフォーマンス情報を取得することで、プラットフォームに依存しない形で DB2 データベース システムを監視できます。

  • Oracle 監視の前提条件
    Oracle 監視の前提条件を列挙します。
  • Oracle のパフォーマンスを監視する
    Oracle DBMS を監視するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
親トピック: Oracle のパフォーマンスを監視する


Oracle 監視の前提条件

Oracle を監視するには、以下の要件が満たされている必要があります。
  • Performance Explorer を実行するコンピュータに Oracle Net (Oracle Net Services の一部) クライアント ソフトウェアがインストールされていること。
  • Oracle クライアントは 32 ビット バージョンである必要があり、DB 管理者権限を有していて目標のデータベース サーバーを認識できる必要があります。
  • 関係のあるプロジェクト属性が、インストールされている Oracle に合わせて既に変更されていること (メニューから プロジェクト > プロジェクト属性 を選択)。
  • Performance Explorer を実行するコンピュータで SQL*Plus が使用可能であること。
  • 指定されたユーザー名、パスワード、サーバー情報を使ってログオンし、クエリ SELECT * FROM V$SYSSTAT を実行します。

    このログオンの試みが成功すれば、環境はおそらく正しくセットアップされていると思われます。

    このログオンの試みが失敗した場合、SQL*Plus で生成されるエラー メッセージから、問題の原因を判断できます。

親トピック: V$SYSSTAT を介して Oracle データベースを監視する


Oracle のパフォーマンスを監視する

Silk Performer プロジェクトを Performance Explorer 内から操作すると、データベース システムのパフォーマンスをリアルタイムに追跡できます。 Silk Performer プロジェクトは、OracleMonitoring.sep という名前の Essential パッケージにあり、これは C:\Program Files\Silk\Silk Performer 21.0\Monitors にあります。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. Database System フォルダ、Oracle (v$sysstat) フォルダの順に展開します。
  5. System Statistics (v$sysstat) ノードを選択して、次へ をクリックします。 接続パラメータ ページが開きます。
  6. ホスト名 テキスト ボックスに、Oracle データベースが実行されているホストを指定します。
  7. 省略可能: エイリアス テキスト ボックスに、Oracle データベースが実行されているホストのエイリアスを指定します。
  8. 次へ をクリックします。 属性設定 ページが開きます。
  9. 必要に応じて、属性値を変更します。 通常、これらの設定には、Oracle TNS 名、ユーザー ID、およびパスワードが含まれます。
  10. OK をクリックします。 表示する測定値の選択 ページが開きます。
  11. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: V$SYSSTAT を介して Oracle データベースを監視する


WebLogic (SNMP) の監視

この節では、Performance Explorer を使用して BEA WebLogic を監視する方法について説明します。また、重要な WebLogic パフォーマンス測定値についても説明します。

デフォルトでは、WebLogic SNMP エージェントは稼働していません。SNMP サポートは、WebLogic Administration Console を使って有効にすることができます。このコンソールを開くには、ブラウザに http://weblogichost:port/console という URL を入力します。左側のメニュー ツリーで [SNMP] ノードを選択します。SNMP コンフィグレーション ページが開きます。このページで、SNMP エージェントが有効になっているかどうか確認します。SNMP サポートを有効にするには、WebLogic を再起動する必要があります。

  • BEA WebLogic (SNMP) を監視する
    BEA WebLogic を SNMP 経由で検索するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
親トピック: 定義済みのデータ ソース


BEA WebLogic (SNMP) を監視する

BEA WebLogic を SNMP 経由で検索するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. Application Server フォルダ、BEA WebLogic (SNMP) フォルダの順に展開します。
  5. SNMP ノードを選択し、次へ をクリックします。 接続パラメータ ページが開きます。
  6. ホスト名 テキスト ボックスに、WebLogic が実行されているホストを指定します。
  7. 次へ をクリックします。 SNMP 測定値の追加 ページが開きます。使用可能な MIB のリスト ボックスで、BEA-WEBLOGIC-MIB が選択されています。
    WebLogic Server のパフォーマンスを監視するエントリとして、次のエントリが使用可能です。
    • bea.wls.jdbcConnectionPoolRuntimeTable
    • bea.wls.servletRuntimeTable
    • bea.wls.ejbEntityHomeRuntimeTable
    • bea.wls.ejbStatelessHomeRuntimeTable
    • bea.wls.executeQueueRuntimeTable
  8. 使用可能な JDBC 接続プールをすべて取得するには、jdbcConnectionPoolRuntimeEntry を選択し、値の取得 をクリックします。 たとえば、サンプル アプリケーションの Pet Store の監視の場合、ServerRuntime:petstoreServer という名前の接続プールが返されます。 接続プールに表示される興味深いパフォーマンス カウンタには、次のカウンタがあります。
    • JdbcConnectionPoolRuntimeActiveConnectionsCurrentCount：現在使用されている接続数を返します。
    • JdbcConnectionPoolRuntimeWaitingForConnectionCurrentCount：接続待ちの数を返します。この数は、すべての接続が使用中で、それを超える接続リクエストが接続プールに送られている場合に 0 より大きくなります。
    • JdbcConnectionPoolRuntimeWaitSecondsHighCount：接続プールから接続をチェックアウトするためにクライアントが待つ必要のある最大秒数を返します。
  9. アクティブな接続数を監視するには、以前返されたテーブルから jdbcConnectionPoolRuntimeActiveConnectionsCurrentCount 列を検索し、セルを選択します。
    注: 接続プールには、大量のパフォーマンス カウンタがあります。関心のある列を表示するには、いくつかの列のサイズ変更が必要な場合があります。
  10. 追加 をクリックします。
  11. 測定値の収集に必要なコマンドをすべて入力するまで、前のステップを繰り返した後、閉じる をクリックします。 表示する測定値の選択 ページが開きます。
  12. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: WebLogic (SNMP) の監視


WebLogic (JMX) を監視する

このセクションでは、IIOP および JMX 管理サーバの設定を含む、WebLogic (JMX) Server の監視の前提条件について説明します。

  • JMX 管理サーバの有効化
    WebLogic (JMX) を監視できるようにするには、Oracle WebLogic のコンソールで JMX 管理サーバを有効にする必要があります。
  • IIOP の有効化と構成
    WebLogic (JMX) を監視できるようにするには、Oracle WebLogic 11g R1 で IIOP プロトコルを有効にし、構成する必要があります。
  • WebLogic (JMX) を監視する
親トピック: 定義済みのデータ ソース


JMX 管理サーバの有効化

Oracle WebLogic のコンソールで、コンフィグレーション > 全般 > 詳細 を選択し、JMX 管理サーバを有効にします。 MBean サーバの互換性を有効化 と 管理 EJB を有効化 両方をオンにします。 これにより、新旧両方の JMX インターフェイスが有効になります。

この変更を有効にするにはシステムを再起動する必要があります。

親トピック: WebLogic (JMX) を監視する


IIOP の有効化と構成

WebLogic (JMX) を監視できるようにするには、Oracle WebLogic 11g R1 で IIOP プロトコルを有効にし、構成する必要があります。

  1. Oracle WebLogic 管理コンソールのチェンジ センターで、ロックして編集 をクリックします。
  2. コンソールの左ペインで、環境 を展開し、サーバー を選択します。
  3. プロトコル タブを選択し、IIOP を選択します。
  4. IIOP を有効化 チェック ボックスをオンにして、IIOP プロトコルを有効にします。
  5. デフォルトの構成を変更するには、詳細 をクリックします。
  6. デフォルトの IIOP ユーザー名とパスワードを指定するには：
    1. デフォルト IIOP ユーザー名 フィールドに、ユーザー名を入力します。
    2. デフォルト IIOP パスワード フィールドに、パスワードを入力します。
  7. この変更を有効にするには、管理コンソールのチェンジ センターで、Activate Changes をクリックします。

この変更を有効にするにはシステムを再起動する必要があります。

親トピック: WebLogic (JMX) を監視する


WebLogic (JMX) を監視する

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。 データ ソース ウィザード が開きます。
  2. 定義済みのデータ ソースから選択する オプション ボタンをクリックします。
  3. 次へ をクリックします。 システムの選択 ページが開きます。
  4. Application Server を展開し、監視される WebLogic サーバーのバージョンを選択します。 EJXM または JMX のいずれかを選択します。
  5. 次へ をクリックします。
    接続パラメータ ページが開きます。
  6. ホスト名 テキスト ボックスに、WebLogic が実行されているホストを指定します。
  7. WebLogic ポート を指定します (デフォルトは 7001 です)。
  8. ユーザーまたはパスワードは指定しないでください。
  9. サーバー設定 をクリックします。
  10. Java ホーム ディレクトリ および アプリケーション サーバーのインストール ディレクトリ を指定します。 フォルダ lib を含む UNC パスを使用します。 例：\\<server name>\Oracle\Middleware\wlserver_10.3\server\lib。
    注: UNC パスを指定できない場合は、フォルダ <WL_HOME>\server\lib からローカル マシンへ wljmxclient.jar をコピーし、それをクラスパスに追加します。
  11. OK をクリックします。
  12. 次へ をクリックします。 JMX Data Source Browser を開きます。
  13. 初期監視ビューに表示する測定値を選択します。
  14. 終了 をクリックします。
親トピック: WebLogic (JMX) を監視する


カスタム データ ソース

定義済みのデータ ソースに加えて、Performance Explorer には以下の監視インターフェイスも用意されています。
  • PerfMon： すべての Windows 監視データにアクセスできるようにします。
  • REXEC： リモート実行プロトコルを介して UNIX ベース システム上のデータ ソースにアクセスできるようにします。
  • SNMP： SNMP (Simple Network Management Protocol) を用いて公開される監視データにアクセスできるようにします。
  • PerfMon のデータ ソースを監視する
    PerfMon のデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
  • SNMP 経由で検索する
    SNMP 経由で検索するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。
  • MIB ファイルを追加して SNMP エージェントを参照する
    使用可能なパフォーマンス カウンタを求めて SNMP エージェントを参照するには、パフォーマンス カウンタをテキストで記述した MIB ファイルを持つことが必要です。
親トピック: データ ソースを監視する


PerfMon のデータ ソースを監視する

PerfMon は、パフォーマンス カウンタを問い合わせる、Microsoft 固有の監視インターフェイスです。PerfMon のデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。
  2. 定義済みのデータ ソースから選択する をクリックし、次へ をクリックします。
  3. Custom Data フォルダを展開して、NT Performance Monitor Data をクリックし、次へ をクリックします。
  4. ホスト名 ボックスで、監視対象となるマシンを指定します。
    監視対象となるホストは、別の NT ドメインに存在する場合もあります。
  5. 省略可能：エイリアス ボックスで、エイリアス名を指定します。 エイリアスは、監視対象サーバーをよく説明する別名にする必要があります。個々のマシン上で測定値をグループ化することをお勧めします。 たとえば、WebLogic と IIS が両方とも同じコンピュータにインストールされているとしましょう。どちらのサーバーも監視が必要ですが、2 つのパフォーマンス測定値は別々のメニュー ツリーに表示されなければなりません。
  6. ユーザー名 テキスト ボックスに、管理セキュリティ権限を持つユーザーを指定します。
  7. パスワード テキスト ボックスに、そのユーザーの適切なパスワードを指定します。
  8. 次へ をクリックします。
  9. システムで使用可能なパフォーマンス カウンタを検討し、それらを監視テンプレートに追加します。 リストから複数のカウンタを選択するには、Ctrl または Shift を押します。
    1. カウンタを選択します。
    2. インスタンスの数を選択します。
    3. 追加 をクリックします。 カウンタ使用 ページが開きます。
    4. 平均測定値 チェック ボックスがオンになっていることを確認します。
    5. 次へ をクリックします。
    6. 上記手順を繰り返して、さらにカウンタを追加します。
    7. 作業を終えたら、閉じる をクリックします。
  10. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: カスタム データ ソース


SNMP 経由で検索する

Performance Explorer は、SNMP 経由で検索する定義済みデータ ソースのセットを提供します。ただし、ORADB-MIB のエントリを SNMP データ ソースに追加できます。

SNMP 経由で検索するためにデータ ソースへの接続を確立し、監視する測定値を含む初期ビューを作成します。

SNMP は SNMP エージェントを必要としますが、これは通常、アプリケーション ベンダーから提供されます。たとえば、Oracle データベースは、SNMP エージェントを使用してデータ ソースを公開します。クライアント側のカウンタ パートは Performance Explorer で、これがパフォーマンス データを収集します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。
  2. 定義済みのデータ ソースから選択する をクリックし、次へ をクリックします。
  3. Custom Data フォルダを展開し、Snmp Data をクリックしてから、次へ をクリックします。
  4. ホスト名 フィールドに、SNMP エージェントを実行しているホストを指定します。
  5. 省略可能：エイリアス ボックスで、エイリアス名を指定します。 エイリアスは、監視対象サーバーをよく説明する別名にする必要があります。個々のマシン上で測定値をグループ化することをお勧めします。 たとえば、WebLogic と IIS が両方とも同じコンピュータにインストールされているとしましょう。どちらのサーバーも監視が必要ですが、2 つのパフォーマンス測定値は別々のメニュー ツリーに表示されなければなりません。
  6. 適切な [ポート]、[コミュニティ]、および [バージョン] を指定して、次へ をクリックします。バージョン 3 を選択した場合は、コミュニティ フィールドは表示されません。
  7. バージョン 3 を選択した場合、SNMPv3 の詳細な認証情報を指定し、次へ をクリックします。
  8. 以下のように適切な値を指定して、監視する測定値を作成します。
    1. MIB、オブジェクトを 1 つ選択し、オブジェクトの値 (複数) を取得する リスト ボックスから MIB を選択します。 MIB を選択すると、オブジェクトおよびオブジェクト値がリスト ボックスの下の階層ツリーに表示されます。
    2. 測定するオブジェクトを選択します。 オブジェクトのプロパティが、リスト ボックスの横のテキスト ボックスに表示されます。
    3. 値の取得 をクリックして、オブジェクトを使用できるかどうかを確認します。
    パフォーマンス カウンタの問い合わせに成功すると、オブジェクトの値がリスト ボックスの下のグリッドに表示されます。
  9. 追加 をクリックして、SNMP 測定値を追加します。
  10. 測定値の収集に必要なコマンドをすべて入力するまで、前のステップを繰り返した後、閉じる をクリックします。 表示する測定値の選択 ページが開きます。
  11. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: カスタム データ ソース


MIB ファイルを追加して SNMP エージェントを参照する

使用可能なパフォーマンス カウンタを求めて SNMP エージェントを参照するには、パフォーマンス カウンタをテキストで記述した MIB ファイルを持つことが必要です。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。
  2. 定義済みのデータ ソースから選択する をクリックし、次へ をクリックします。
  3. Custom Data フォルダを展開し、Snmp Data をクリックしてから、次へ をクリックします。
  4. ホスト名 フィールドに、SNMP エージェントを実行しているホストを指定します。
  5. 省略可能：エイリアス ボックスで、エイリアス名を指定します。 エイリアスは、監視対象サーバーをよく説明する別名にする必要があります。個々のマシン上で測定値をグループ化することをお勧めします。 たとえば、WebLogic と IIS が両方とも同じコンピュータにインストールされているとしましょう。どちらのサーバーも監視が必要ですが、2 つのパフォーマンス測定値は別々のメニュー ツリーに表示されなければなりません。
  6. 適切な [ポート]、[コミュニティ]、および [バージョン] を指定して、次へ をクリックします。
  7. MIB、オブジェクトを 1 つ選択し、オブジェクトの値 (複数) を取得する リストから 新規 MIB のインポート... を選択します。
  8. コンパイルする MIB ファイルの名前を MIB ソース ファイル フィールドに入力します。 代替方法：参照 (...) ボタンをクリックして、ファイルを検索して選択します。

    一般的に使用される MIB ファイルは、<パブリック ユーザー ドキュメント>\Silk Performer21.0\Data\Mibs\VendorMibs にあります。

  9. インポート をクリックします。 MIB ファイルが コンパイル済み MIB リストに追加されます。
親トピック: カスタム データ ソース


データ ソースの自動検出

データ ソース スキャナは、マシンを調べて監視可能なデータ ソースを検出します。つまり、ユーザーが手動で検索する必要はありません。自動検出は、定義済みのデータ ソースに良く似た設定に基づいて行われるため、すべての使用できるデータ ソースを見つけることができない可能性があります。定義済みのデータ ソースのリストを調べて、それが使用できるかどうかを確認します。

たとえば、データ ソース スキャナは、マシンを調べて、プロセッサの数、ネットワーク インターフェイスの数、データベース インスタンスの数、およびこれらの構成要素の監視方法を確認します。

お使いのシステムが稼働するプラットフォーム (NT、AIX、Linux のいずれか) などの詳細は重要ではありません。CPU やハード ディスクの使用率などの監視対象コンポーネントはプラットフォームに依存しないからです。

  • データ ソース スキャナを使用する
    データ ソース スキャナの使用方法について説明します。
親トピック: データ ソースを監視する


データ ソース スキャナを使用する

データ ソース スキャナは、マシンを調べて監視可能なデータ ソースを検出します。

  1. リアルタイム監視 タブの 監視 グループで、システム をクリックします。
  2. データ ソースを検出させる をクリックして、次へ をクリックします。
  3. ホスト名 フィールドで、スキャン対象となるマシンを指定します。
  4. 省略可能：エイリアス ボックスで、エイリアス名を指定します。 エイリアスは、監視対象サーバーをよく説明する別名にする必要があります。個々のマシン上で測定値をグループ化することをお勧めします。 たとえば、WebLogic と IIS が両方とも同じコンピュータにインストールされているとしましょう。どちらのサーバーも監視が必要ですが、2 つのパフォーマンス測定値は別々のメニュー ツリーに表示されなければなりません。
  5. 次へ をクリックします。 データ ソース スキャナは、システムを調べてさまざまなプラットフォーム上で次のデータ ソースの検出を始めます。
    • .NET
    • Active Server Pages
    • Apache
    • Coldfusion
    • IBM Universal Database DB2
    • IIS
    • iPlanet Directory Servers
    • Microsoft Proxy Servers
    • Microsoft SQL Servers
    • Netscape Directory Servers
    • Netscape Enterprise 3.0
    • Netscape/iPlanet Directory Server
    • オペレーティング システムのデータ (ハード ディスク、CPU、ネットワーク インターフェイスなど)
    • Oracle データベース
    • Rstat (多くの UNIX ベースのシステムで問い合わせ可能で、オペレーティング システム関連のデータを多数提供します)
    • SilkPerformer エージェント
    • SilkPerformer コントローラ
    • Silverstream

    システムがスキャンされている間、データ ソース スキャナが特定のデータ ソースに対する資格情報を要求するダイアログ ボックスが表示される場合があります。

    スキャナは、システムがリモート NT ドメインにあるかどうかもチェックします。そのような場合、指定されたホストのドメイン名を入力する必要がでてきます。

    注: 指定されたユーザーは、管理セキュリティ権限を持つ必要があります。NT ベースのシステムの監視にはこの権限が必要です。
  6. 進行状況 セクションに 完了 が表示されたら、次へ をクリックします。
  7. 初期監視ビューに表示する測定値のチェック ボックスをオンにした後、完了 をクリックします。
指定したホストへの接続が確立され、選択した測定値が初期ビューに表示されます。
親トピック: データ ソースの自動検出


負荷テストを監視する

Performance Explorer では、サーバー データの他に、クライアント側の監視のためのデータを収集することができます。

  • 負荷テストの監視を構成する
    組み込みグラフや監視出力で、リアルタイムのクライアント側測定値を利用するには、クライアント側データ ソースの接続エントリを追加します。
  • クライアント側測定値を削除する
    組み込みグラフや監視出力の、リアルタイムのクライアント側測定値を削除するには、クライアント側データ ソースの接続エントリを削除します。
親トピック: リアルタイム監視


負荷テストの監視を構成する

組み込みグラフや監視レポートで、リアルタイムのクライアント側測定値を利用するには、クライアント側データ ソースの接続エントリを追加します。

  1. リアルタイム監視 タブの 監視 グループで、負荷テスト をクリックします。
  2. ホスト名 フィールドに、負荷テスト コントローラのホスト名を指定します。
  3. エイリアス フィールドに、クライアント側測定値を提供するコントローラのエイリアスを指定します。エイリアスは、クライアント側測定値 ツリーに表示されます。
  4. 完了 をクリックします。
ツリーにホストが表示されます。このデータ ソースで利用可能なクライアント側測定値が、ツリー内のフォルダに一覧表示されます。
注: ワークロードの設定 ダイアログで リアルタイム測定値を有効にする チェック ボックスをオンにして、ランタイム システムがホストの測定値を提供するように指示します。クライアント側測定値 ツリーにある緑色のアイコンは、データ ソースに正常に接続していることを示します。赤色のアイコンは、データ ソースに接続されていないことを示します。
親トピック: 負荷テストを監視する


クライアント側測定値を削除する

ツリーからクライアント側測定値ノードを削除できます。ただし、Silk Performer は、その測定値の更新情報を受信した場合、その測定値ノードを置き換えます。
  1. ツリー領域から クライアント側測定値 タブをクリックします。
  2. 削除する測定値ノードを右クリックし、クライアント側データ ソースの削除 をクリックします。
  3. はい をクリックします。
親トピック: 負荷テストを監視する


監視グラフと監視出力

Performance Explorer は、測定した値を表示、保存するために監視グラフと監視レポートを提供します。
  • 監視グラフは、データ ソースの測定した値をリアルタイムに表示します。監視グラフのポーリング間隔を調整できます。
  • 監視出力は、データ ソースの測定した値を記録し、.tsd ファイルに保存します。監視出力は、負荷テストが完了したときに、サーバー側測定値とクライアント側測定値を比較するためにも有用です。
注: ポーリング間隔を短くすると、コンピュータのパフォーマンスを低下させ、結果としてテストの結果に影響を及ぼす可能性があります。規模の大きな負荷テストの場合、間隔は 60 秒以上に設定してください。
注: 監視グラフに表示した値を、後から .tsd ファイルに書き出すことはできません。
  • 監視グラフを作成する
    監視グラフを作成して、測定された値をグラフで分析します。
  • 監視出力を作成する
    監視出力を作成して、測定した値を .tsd ファイルに書き出します。
親トピック: リアルタイム監視


監視グラフを作成する

監視グラフは、システムの状態を視覚的に把握する場合に便利です。

  1. リアルタイム監視 タブの 新規 グループで、監視グラフ をクリックします。
  2. 監視 ツリーからグラフに測定値をドラッグします。
  3. 測定値リスト内の測定値を右クリックし、プロパティ をクリックします。
  4. 全般 タブで、タイトルと説明を設定できます。
  5. 監視 タブでは、監視と表示に関するオプションを設定できます。間隔 では、新しい値を取得する更新間隔を定義します。ページ サイズ では、各ページに表示する間隔の数を定義します。履歴サイズ では、グラフの履歴に保存する間隔の数を指定します。
  6. OK をクリックします。
ヒント: トランザクション レート監視 を作成することもできます。 Performance Explorer は、このグラフに自動的にトランザクション測定値を追加します。監視を開始する前に、ワークロードの設定 ダイアログの リアルタイム測定値を有効にする を確認してください。
親トピック: 監視グラフと監視出力


監視出力を作成する

監視出力を定義すると、負荷テスト中の測定値をキャプチャすることができます。監視出力は、時系列データ (.tsd) ファイルを書き出します。このファイルは、概要レポートに含めたり、グラフのベースとして使用できます。
  1. リアルタイム監視 タブの 新規 グループで、監視出力 をクリックします。
  2. 監視 ツリーから監視出力に測定値をドラッグします。
  3. リアルタイム監視 タブの コントロール グループで、記録 をクリックします。
  4. .tsd ファイルのディレクトリを指定して、保存 をクリックします。 Performance Explorer はキャプチャしたすべての値を .tsd ファイルに書き出します。
    注: 負荷テストの実行中で、プロファイルに割り当てたワークスペースに監視出力が含まれている場合、すべての監視出力は、テストが開始したときに自動的に書き出しを始め、テストが完了すると停止します。
すべての監視出力は負荷テストの結果ディレクトリに保存されます。
注: SAPGUI データ ソースについては、監視間隔を 20 秒以上にすることをお勧めします。間隔を変更するには、レポート タブの レポート グループで、プロパティ をクリックします。そして、TSD 出力 タブをクリックして、間隔を変更します。
親トピック: 監視グラフと監視出力


ホスト データ

ホストの変更、名前の変更、複製を行ったり、ホストにアクセスするための資格情報を更新することができます。

  • ホストの変更
    リアルタイム監視のために指定したホストやホストのエイリアスを変更する方法について説明します。
  • ホストを複製する
    リアルタイム監視のために指定したホストを複製する方法について説明します。
  • ホストの資格情報を編集する
    リアルタイム監視のために指定したホストの資格情報を編集する方法について説明します。
親トピック: リアルタイム監視


ホストの変更

指定したホストを変更したり、ホストのエイリアスを変更することができます。どちらの場合でも、ツリーに表示されている指定した測定値は失われません。

  1. 監視 ツリーでホスト (トップレベルのノード) を選択します。
  2. リアルタイム監視 タブの ホスト グループで、変更 をクリックします。
  3. ホストを変更する場合は、ホスト名 に新しいホストの名前を入力し、エイリアス を入力して、次へ をクリックします。
  4. ホストのエイリアス (監視 ツリーに表示される名前) を変更するには、ホスト名 に現在のホストを入力し、エイリアス に新しい名前を入力して、次へ をクリックします。
  5. ユーザー名 と パスワード を入力して、完了 をクリックします。
親トピック: ホスト データ


ホストを複製する

ホストを複製するとき、Performance Explorer は 監視 ツリーに新しいホスト ノードを作成し、選択したホストに対して指定されているすべての測定値を追加します。

  1. 監視 ツリーでホスト (トップレベルのノード) を選択します。このホストが複製されます。
  2. リアルタイム監視 タブの ホスト グループで、複製 をクリックします。
  3. ホスト名 に新しいホストの名前を入力し、エイリアス を入力して、次へ をクリックします。エイリアスは、監視 ツリーで新しいホストの名前として表示されます。 指定されたデータ ソースに応じて、さまざまな接続パラメータを持つフィールドが表示されます。これらのフィールドには、元の値が自動的に入力されます。

    指定されたデータ ソースに構成可能な属性がある場合、属性の変更 ボタンが表示されます。

  4. ホストの資格情報を入力し、完了 をクリックします。 これらの測定値は有効性が確認されます。無効な測定値が検出されると、接続パラメータを変更するか、測定値を無視するかどうかを選択できます。
    注: 無効な測定値の複製や名前の変更はできません。
注: 測定値は、データ ソースおよび接続パラメータが同じ場合に、測定値グループとしてグループ化されます。たとえば、異なる資格情報を持つ PerfMon 測定値がある場合は、別々の測定値グループができます。
親トピック: ホスト データ


ホストの資格情報を編集する

多くの企業のセキュリティ ポリシーでは、一定期間を過ぎるとユーザー パスワードが無効になることを要求します。このようなポリシーは、Performance Explorer のようなツールの自動アクセスの妨げになります。そのような環境に対応して、Performance Explorer では既存のホストのユーザー名とパスワードを変更できます。

  1. 監視 ツリーでホスト (トップレベルのノード) を選択します。
  2. リアルタイム監視 タブの ホスト グループで、資格情報の編集 をクリックします。
  3. 選択したホストの ホスト名 と エイリアス は、あらかじめ指定されています。次へ をクリックします。
  4. 必要に応じて 属性の変更 をクリックします。
  5. 必要に応じて ユーザー名 と パスワード を入力して、完了 をクリックします。
親トピック: ホスト データ


CSV から TSD にデータを変換する

Silk Performer は、コマンド ライン ツール (csv2tsd.exe) を提供しており、.csv ファイル (Comma-Separated Values： カンマ区切り値) を .tsd ファイル (Time Series Data： 時系列データ) に変換できます。

.tsd 形式へのデータの変換は、セキュリティ上の理由で Silk Performer から監視できない外部 Windows データを監視する際に役に立ちます。.csv データを .tsd 形式に変換することで、外部データも内部 Silk Performer 監視データと一緒に Performance Explorer 内で分析することができます。

たとえば、パフォーマンス カウンタでリモート サーバーの動作を測定し、そのモニタの結果を .csv ファイルに保存した場合は、その結果を Performance Explorer にインポートして、同じサーバーを必要とする Silk Performer 負荷テストの結果と一緒に分析することができます。Silk Performer を使用すると、2 つのデータ セット間の相関関係を見つけることができます。

  • Windows 7/2008 R2 で CSV ファイルをリモート サーバー上で生成する
    コマンドライン変換ツールで指定するパフォーマンス カウンタ ログ (CSV) ファイルはすべて、Windows のパフォーマンス モニタ ツールで生成される形式にしてください。
  • パフォーマンス カウンタ ログ データを取得する
    リモート サーバーのログ データを取得するには、パフォーマンス カウンタを使用します。このデータは、Silk Performance Explorer で分析できます。
  • 適切な形式の CSV ファイルを TSD 形式へ変換する
    CSV ログ ファイルを、時系列データ形式に変換するには、csv2tsd.exe を使用します。このデータは、Silk Performance Explorer を使用して分析できます。
親トピック: リアルタイム監視


Windows 7/2008 R2 で CSV ファイルをリモート サーバー上で生成する

コマンドライン ツールで指定するパフォーマンス カウンタ ログ (CSV) ファイルはすべて、Windows のパフォーマンス モニタ ツール ( 管理ツール > パフォーマンス ) で生成される形式にしてください。 そのため、csv2tsd.exe を使用する前に、データのインポートが許可される設定でパフォーマンス カウンタを作成してください。

  1. Windows のパフォーマンス モニタ ツールを開きます ( 管理ツール > パフォーマンス )。
  2. ツリーを パフォーマンス > データ コレクター セット > ユーザー定義 の順に展開します。
  3. 右クリックしてコンテキスト メニューから 新規作成 > データ コレクター セット を選択します。
  4. 名前を入力し、手動で作成する (詳細) を選択して 次へ をクリックします。
  5. データ ログを作成し、パフォーマンス カウンター を選択します。 次へ をクリックします。
  6. CSV ファイルの場所を指定し、次へ をクリックします。
  7. オプション： 別のユーザーとして実行 で異なるユーザーを指定します。 保存 をクリックしてダイアログ ボックスを閉じます。
  8. 定義したデータ コレクター セットを右クリックし、コンテキスト メニューから 新規作成 > データ コレクター を選択します。
  9. 名前を入力し、パフォーマンス カウンター データ コレクター を選択します。 次へ をクリックします。
  10. 追加 をクリックして、パフォーマンス カウンタを追加します。
  11. 結果を追跡するコンピュータ (ローカルとリモートの両方の場合もあります) およびパフォーマンス カウンタ インスタンスを指定します。
  12. このデータ コレクター セットのプロパティを開く を選択して、次へ をクリックします。
  13. パフォーマンス カウンター タブで、コンマ区切り とするログ形式を指定します。
  14. ファイル タブを選択してファイル名を指定します。
  15. OK をクリックして、ダイアログを閉じます。
  16. パフォーマンス モニタを閉じます。
ログの結果が csv2tsd.exe で TSD 形式に変換されるようにパフォーマンス カウンタを構成すると、パフォーマンス カウンタを使用した動作データの取得を開始できるようになります。
親トピック: CSV から TSD にデータを変換する


パフォーマンス カウンタ ログ データを取得する

ログの結果が csv2tsd.exe で TSD 形式に変換されるようにパフォーマンス カウンタを構成すると、パフォーマンス カウンタを使用したリモート サーバー ログ データの取得を開始できるようになります。

  1. Windows のパフォーマンス モニタ ツールを開きます (管理ツール > パフォーマンス)。
  2. パフォーマンス ログと警告 ツリー ノードを展開します。
  3. カウンタ ログ ノードをクリックします。
  4. 右側のウィンドウのカウンタ ログを右クリックし、コンテキスト メニューの 開始 をクリックします。 アクティブなカウンタが緑色で表示されます。 非アクティブなカウンタは赤色で表示されます。 生成された CSV カウンタ ログ ファイルは、次の形式になります。
    "(PDH-CSV 4.0) (W. Europe Standard Time)(-60)","\\JONES\Processor(_Total)\% Interrupt Time","\\JONES\Processor(_Total)\% Privileged Time","\\JONES\Processor(_Total)\% Processor Time"
"02/25/2008 23:24:23.826"," "," "," "
"02/25/2008 23:24:38.841","0","0.10406093659265107","0.10150087105497141"
"02/25/2008 23:24:53.841","0.052084666700800877","1.8229633345280307","2.4454192693999621"
"02/25/2008 23:25:08.840","0.052084666700800877","3.0729953353472514","5.4663299380464103"
"02/25/2008 23:25:23.840","0.052084666700800877","0.57293133370880955","1.0391332684783428"
親トピック: CSV から TSD にデータを変換する


適切な形式の CSV ファイルを TSD 形式へ変換する

  1. csv2tsd.exe を起動します (スタート > すべてのプログラム > Silk > Silk Performer 21.0 > 分析ツール > CSV to TSD Converter)。
  2. ファイルのインポートおよびエクスポートの設定を次の形式で入力します。Csv2Tsd <csvFile> <tsdfile> [[+/-]<time offset>]。 <csvFile> は、インポートする CSV ファイルのフル パスです。 <tsdFile> は、生成する TSD ファイルのフル パスです。 <time offset> は、秒単位の時差です (デフォルトは 0)。
  3. Enter キーを押して、変換を実行します。

    例：

    Csv2Tsd C:\perflogs\Test1.csv C:\perflogs\Test1.tsd

親トピック: CSV から TSD にデータを変換する


要約測定値

要約測定値 グループは、グローバル レベルの要約された測定値です。他の測定値グループの個別の測定値を集約した測定値や、他の測定値グループには含まれないグローバル レベルの情報を表す測定値タイプです。

このグループは、カウンタのみで構成されており、タイマは含まれません。測定期間中にのみ収集された、一連のグローバルな測定値 (固定値) であり、負荷テストの準備期間およびシャットダウン期間は除外されます。要約測定値 グループには、リアルタイム データおよび時系列データ (.tsd) として使用できる測定値タイプがあります。

  • 一般的な測定値
    概要レポートの先頭に表示される測定値を示します。
  • エージェントの健全度管理測定値
    エージェントの健全度を分析するために使用する測定値について説明します。
  • インターネット関連の測定値
    インターネット接続に関する測定値について説明します。
  • Web 固有の測定値
    Web に固有の測定値について説明します。
  • IIOP 関連の測定値
    IIOP 操作に関する、スクリプト化された測定値について説明します。
  • データベース固有の測定値
    データベースに特有な測定値について説明します。
親トピック: 組み込みの測定値


一般的な測定値

概要レポートの先頭に表示される測定値を示します。
測定値 | 説明
アクティブなユーザー

アクティブな仮想ユーザーの数。仮想ユーザーがアクティブとみなされるのは、開始済みで、現在次のいずれかの状態にある場合です。

  • 実行中
  • ウォームアップ
  • データベース待ち
  • ドキュメントを読み込み中
  • リソース待ち
  • 待ち合わせ
  • 思考時間
  • シャットダウン

仮想ユーザーが非アクティブとみなされるのは、現在次のいずれかの状態にある場合です。

  • 開始中
  • キュー待ち
  • ユーザー待ち
  • 停止待ち
  • ペーシング時間
  • 中断
トランザクション 正常に終了したかどうかにかかわらず、終了した Silk Performer トランザクションの数。
概要レポートには、以下の内容が表示されます。
  • 1 秒間に終了したトランザクションの数を示すグラフ
  • 1 秒間に終了したトランザクション数の平均
  • 終了したトランザクションの合計数
エラー | インターネット、データベース、およびミドルウェアの API などの API エラーの数。深刻度が エラー 以上 (トランザクション終了 または プロセス終了) の場合に、API エラーと見なされます。重大度が 通知 または 警告 の場合は、無視されます。
実行中のユーザー 実行中の仮想ユーザーの数。仮想ユーザーが実行中とみなされるのは、開始済みで、停止されていない場合です。測定値 アクティブ ユーザー と異なり、次のいずれかの状態にある仮想ユーザーも含まれます。
  • キュー待ち
  • ユーザー待ち
  • 停止待ち
  • ペーシング時間
親トピック: 要約測定値


エージェントの健全度管理測定値

エージェントの健全度を分析するために使用する測定値について説明します。
測定値 | 説明
CPU 使用率 | プロセッサがタスクを実行するのにビジー状態である時間のパーセンテージ。プロセッサ使用率が 100% か 100% に近い場合、そのコンピュータの利用可能な処理能力が不足しています。
メモリ | ドライバ マシンによって割り当てられた (コミットされた) メモリ容量が、物理 RAM の総量に占めるパーセンテージ。高いメモリ使用率は、そのドライバ マシンの利用可能なメモリが少ないことを示し、コンピュータ全体のパフォーマンスが低下するディスク スワップの原因となることがあります。 注: オペレーティング システムによっては、タスク マネージャが異なるメモリ統計値を示すことがあります。
応答性 | 大部分の Silk Performer プロジェクト タイプでは、応答性の測定は内部測定のシステムの健全度によって直接決定されます。 SAP GUI、Citrix、ブラウザ駆動負荷テスト (BDLT) タイプの Silk Performer プロジェクトでは、応答性の測定はテスト対象のアプリケーション (SAP GUI または perfBrowserHost.exe) の健全度も考慮に入れます。この健全度は内部のアプリケーションの健全度の値によって表されます。全体の応答性の測定値はこれらの 2 つの健全度の値の悪い方の値となります。
親トピック: 要約測定値


インターネット関連の測定値

インターネット接続に関する測定値について説明します。
測定値 | 説明
同時接続数 | 現在開かれている TCP/IP 接続の数。
送信されたリクエスト | 低レベルの Web 関数が送信した HTTP リクエストの数、TCP/IP レベルの関数が送信したデータ パケットの数、あるいは POP3、SMTP、FTP、または LDAP の関数呼び出しによって送信されたコマンドの数。Silk Performer では、LDAP トラフィックもこの測定値に含まれ、送信された LDAP リクエストの数が報告されます。IIOP は別のカウンタを使用します。
失敗したリクエスト | 送信または実行が正常に行われなかった、上述のリクエストの数。IIOP は別のカウンタを使用します。
送信されたリクエスト データ | サーバーに送信されたデータ量 (KB)。TCP/IP 関連のすべてのトラフィック (HTTP、ネイティブ TCP/IP、IIOP、POP3、SMTP、FTP、および LDAP)、SSL/TLS を介したセキュアなトラフィックだけでなく、ヘッダー情報およびボディのコンテンツ情報も含まれます。ただし、SSL/TLS を使用した暗号化、またはその他の API 関連のトラフィック (TUXEDO ATMI、ODBC、Oracle OCI など) によって発生するデータのオーバーヘッドは含まれません。
受信したレスポンス | 低レベルの Web 関数が受信した HTTP レスポンスの数、TCP/IP レベルの関数が受信したデータ パケットの数、および POP3、SMTP、FTP、および LDAP の関数呼び出しによって受信されたレスポンスの数。IIOP は別のカウンタを使用します。
失敗したレスポンス | 受信するはずだったが、正常に受信されなかったレスポンスの数。IIOP は別のカウンタを使用します。
受信したレスポンス データ | サーバーから受信したデータ量 (KB)。TCP/IP 関連のトラフィック (HTTP、ネイティブ TCP/IP、IIOP、POP3、SMTP、FTP、および LDAP)、SSL/TLS を介したセキュアなトラフィックだけでなく、ヘッダー情報およびボディのコンテンツ情報も含まれます。API 関連のトラフィック (TUXEDO ATMI、ODBC、Oracle OCI など) は含まれません。
正常な接続 | 低レベル、TCP/IP レベル、IIOP、SMTP、POP3、FTP、または LDAP の各関数によって確立された、リモート ホストに対する正常な TCP/IP 接続の数。
失敗した接続 | 無効なホスト名、無効な IP アドレス、無効なポート番号、利用できないリモート ホスト、ネットワーク関連の問題、または認証の失敗が原因で失敗した TCP/IP 接続の数。このカウンタは、低レベル、TCP/IP レベル、IIOP、SMTP、POP3、FTP、および LDAP の関数で使用されます。デフォルトでは、低レベルの Web 関数は 3 回まで (再試行は 2 回まで) 接続を試みます。試行がすべて失敗した場合のみ、失敗が記録されます。
再試行された接続 | 1 回目の接続に失敗した場合に、サーバーへの接続を試みた回数。
ページ データ | リクエストと、すべての埋め込みオブジェクトを含む Web ページ全体の取得に関係する、すべてのリクエスト データおよびレスポンス データの合計 (KB)。
埋め込みオブジェクト データ | Web ページに埋め込まれたオブジェクトのリクエストおよび取得に関連するすべてのリクエスト データおよびレスポンス データの合計 (KB)。
親トピック: 要約測定値


Web 固有の測定値

Web に固有の測定値について説明します。
測定値 | 説明
再試行された HTTP リクエスト | クライアントがリクエストを再試行しなければならなかった回数。クライアントがリクエストを送信しようとしている間にタイムアウトが発生したために、サーバーが継続的な接続 (キープアライブが有効、または HTTP/1.1 を使用した場合に利用可能) を切断した場合に、発生することがあります。このカウンタは、低レベルの Web 関数でのみ使用されます。
HTTP リダイレクト | Web サーバーのレスポンスのステータス コードが 3xx だったために、実行された HTTP リダイレクトの数。この測定値を増加させるのは、Web 関数のみです。
HTTP 再認証 | Web サーバーから返されたステータス コードが 401 または 407 だったために、必要となった再認証の数。このカウンタは、基本認証を実行する Web の関数でのみ使用されます。
HTTP ヒット数 | Web サーバーに届いた HTTP リクエストの数。この測定値を増加させるのは、Web 関数のみです。
失敗したヒット数 | 失敗した HTTP リクエストの数。この測定値を増加させるのは、Web 関数のみです。
HTTP 1xx レスポンス | ステータス コードが、コンテンツのステータスが informational であることを示す、HTTP レスポンスの数。この測定値を増加させるのは、Web 関数です。
HTTP 2xx レスポンス | ステータス コードが、リクエストが成功したことを示す、HTTP レスポンスの数。この測定値を増加させるのは、Web 関数です。
HTTP 3xx レスポンス | ステータス コードが、リクエストがリダイレクトされたことを示す、HTTP レスポンスの数。この測定値を増加させるのは、Web 関数です。
HTTP 4xx レスポンス | ステータス コードが、クライアント エラーを示す、HTTP レスポンスの数。この測定値を増加させるのは、Web 関数です。
HTTP 5xx レスポンス | ステータス コードが、サーバー エラーを示す、HTTP レスポンスの数。この測定値を増加させるのは、Web 関数です。
HTTP キャッシュの条件付き再ロード | コンテンツが最後にキャッシュに置かれてから、その内容が変更された場合に、項目をダウンロードするために、サーバーに送信されたリクエストの数。
HTTP キャッシュのヒット数 | リクエストがキャッシュで処理された回数。
送信された HTTP クッキー | 低レベルの Web 関数が送信したクッキーの数。HTTP クッキー リクエストのヘッダー行は複数のクッキーを含み、そのヘッダー内の各クッキーが測定されます。
受信した HTTP クッキー | 低レベルの Web 関数が受信したクッキーの数。HTTP レスポンスは、複数のクッキー ヘッダー行を含み、それらのヘッダー行の各クッキーが測定されます。
HTTP ページ | ページ レベルの Web API がリクエストした HTML ページの数。
親トピック: 要約測定値


IIOP 関連の測定値

IIOP 操作に関する、スクリプト化された測定値について説明します。
測定値 | 説明
IIOP メッセージ | Silk Performer が送信した IIOP メッセージの数。
IIOP リクエスト | Silk Performer が送信した IIOP リクエスト メッセージの数。
IIOP ロケート リクエスト | Silk Performer が送信した IIOP ロケート リクエスト メッセージの数。
送信された IIOP フラグメント | Silk Performer が送信したフラグメント化された IIOP メッセージの数。
IIOP レスポンス (OK) | Silk Performer が受信した、ステータスが OK の IIOP レスポンス メッセージの数。
IIOP レスポンス (例外) | Silk Performer が受信した、ステータスが 例外発生 の IIOP レスポンス メッセージ の数。ユーザー例外とシステム例外が含まれます。
IIOP レスポンス (オブジェクトが移動) | ステータスが オブジェクト移動済み の IIOP レスポンス メッセージの数。このステータスのメッセージを受信すると、Silk Performer は新しい場所にリクエストを再発行します。
IIOP リクエスト タイムアウト | 保留されたレスポンスを待っている間に、データ受信の時間制限 (負荷テスト スクリプトで指定) を超過した回数。時間制限を超過した場合は常に、レスポンスは受信されず、Silk Performer は IIOP の CancelRequest メッセージを送信して、中止された操作をサーバーに通知します。
IIOP ロケート レスポンス (オブジェクトが存在) | Silk Performer が受信した、ステータスが オブジェクトが存在 の IIOP の LocateReply メッセージの数。
IIOP ロケート レスポンス (オブジェクトが不明) | Silk Performer が受信した、ステータスが オブジェクトが不明 の IIOP の LocateReply メッセージの数。
IIOP ロケート レスポンス (オブジェクトが移動) | Silk Performer が受信した、ステータスが オブジェクトが移動 の IIOP の LocateReply メッセージの数。
IIOP メッセージ エラー | Silk Performer が受信した IIOP エラー メッセージの数。
受信した IIOP フラグメント | Silk Performer が受信したフラグメント化された IIOP メッセージの数。
IIOP ロケート リクエスト タイムアウト | 保留されたロケート レスポンスを待っている間に、データ受信の時間制限 (負荷テスト スクリプトで指定) を超過した回数。時間制限を超過した場合は常に、ロケート レスポンスは受信されず、Silk Performer は IIOP の CancelRequest メッセージを送信して、中止された操作についてサーバーに通知します。
親トピック: 要約測定値


データベース固有の測定値

データベースに特有な測定値について説明します。
測定値 | 説明
SQL コマンド | 実行のために DBMS に送信された SQL コマンドの数。
開いているデータベース ログイン | 現在開いているデータベース セッションを測定します。OCI、ODBC、および ODBC の高水準インターフェイスに関連します (この測定値は、レポート ファイルでは使用できません)。
開いているデータベース カーソル | 現在開いているデータベース カーソル (ハンドル) を測定します。OCI、ODBC、および ODBC の高水準インターフェイスに関連します。ODBC の場合、この測定値が減らされるのは、SQL_DROP オプションを伴う OdbcClose が呼び出されたときのみです。(この測定値は、レポート ファイルでは使用できません。)
親トピック: 要約測定値


トランザクションの測定値

トランザクションの測定値グループは、トランザクション レベルのレスポンス時間データです。負荷テスト スクリプトで定義されているトランザクションごとに、この測定値グループが 1 つ自動的に作成され、トランザクション名が測定値用のキーとして使われます。カウントされた値を含む測定値のみが表示されます。つまり、トランザクションが 1 つも失敗していない場合、Trans.failed は表示されません。

注: トランザクション TInit および TEnd は、負荷テスト測定値に対してカウントされません。開始および終了トランザクションは、テストしているアプリケーションに関連する測定値を含んでいないはずだからです。

対応する測定値タイプを次の表で説明します。

測定値 | 説明
トランザクション OK | 正常なトランザクションのレスポンス時間 (秒)。トランザクション内で実行された API 関数呼び出しがエラー メッセージを返していない場合に、そのトランザクション時間がこの測定値タイプとして測定されます。
トランザクション (ビジー) OK | 正常なトランザクションのビジー時間 (秒)。トランザクション ビジー時間は、トランザクション レスポンス時間から思考時間、待機時間、関数変換に要する時間を省いた時間です。トランザクション内で実行された API 関数呼び出しがエラー メッセージを返していない場合に、そのトランザクション時間がこの測定値タイプとして測定されます。
トランザクション失敗 | 失敗したトランザクションのレスポンス時間 (秒)。トランザクション内で重大度が エラー 以上のエラーが、1 回以上発生した場合に、そのトランザクション時間がこの測定値タイプとして測定されます。
トランザクション (ビジー) 失敗 | 失敗したトランザクションのビジー時間 (秒)。トランザクション ビジー時間は、トランザクション レスポンス時間から思考時間、待機時間、関数変換に要する時間を省いた時間です。トランザクション内で重大度が エラー 以上のエラーが、1 回以上発生した場合に、そのトランザクション時間がこの測定値タイプとして測定されます。
トランザクション キャンセル | キャンセルされたトランザクションのレスポンス時間 (秒)。スクリプト内の return 文が 戻り値 1 で発行された場合に、そのトランザクション時間がこの測定値タイプとして測定されます。
親トピック: 組み込みの測定値


Web フォーム測定値

Web フォーム測定値グループは、負荷テスト スクリプトの dclform セクションで宣言されているフォームに関する測定値タイプです。Web フォーム測定値グループは、スクリプト化された関数呼び出しによって送信される POST、GET、および HEAD コマンドでのフォーム送信の、レスポンス時間およびスループットを示します。dclform セクションで宣言されているフォームごとに、フォーム名をキーとして、測定値グループが自動的に作成されます。対応する測定値タイプを次の表で説明します。

測定値 | 説明
サーバー ビジー時間 | 測定 (秒) は、ユーザーがリクエスト全体を送信し終わった後に開始され、ユーザーがレスポンスの最初の部分を受信したときに終了します。
ラウンドトリップ時間 | リクエストを送信してから適切なレスポンスを受信するまでの時間 (秒)。接続が継続的でない場合は、接続およびシャットダウンの時間も含まれます (キープアライブ オプションが有効な場合、または HTTP/1.1 が使用されている場合は、接続が継続されます)。
ヒット数 | 成功したフォーム送信の数。
送信されたリクエスト データ | フォームの送信中に Web サーバーに送信されたデータ量 (KB)。HTTP ヘッダーおよびボディ コンテンツの情報も含まれます。カウントは、送信された Web サーバー リクエストの数を示します。
受信したレスポンス データ | フォーム送信のレスポンスとして Web サーバーから受信したデータ量 (KB)。HTTP レスポンスのヘッダーおよびボディ コンテンツの情報も含まれます。カウントは、受信した Web サーバー レスポンスの数を示します。
親トピック: 組み込みの測定値


Web ページ測定値

Web ページ測定値グループは、Web ページに関する測定値タイプです。負荷テスト中にダウンロードされた Web ページごとに、Web ページ名をキーとして、測定値グループが自動的に作成されます。対応する測定値タイプを次の表で説明します。

測定値 | 説明
ページ時間 | Web ページ全体をサーバーから取得するのにかかった時間 (秒)。すべての HTML ドキュメント、および、すべての埋め込みドキュメント (画像、ビデオ、および音声ファイルなど) の取得にかかった時間です。
ドキュメント ダウンロード時間 | Web ページ内のすべての HTML ドキュメントを取得するのにかかった時間 (秒)。
サーバー ビジー時間 | サーバーで Web ページ リクエストを処理するのにかかった時間 (秒)。この測定は、仮想ユーザーがリクエストの最後の 1 バイトを送信し終わった後に開始され、ユーザーがレスポンスの最初の 1 バイトを受信したときに終了します。
ページ データ | リクエストと、すべての埋め込みオブジェクトを含む Web ページ全体の取得に関係する、すべてのリクエスト データおよびレスポンス データの合計 (KB)。
埋め込みオブジェクト データ | リクエストと、Web ページに埋め込まれたオブジェクトの取得に関係する、すべてのリクエスト データおよびレスポンス データの合計 (KB)。
親トピック: 組み込みの測定値


ブラウザ駆動型の測定値

対応する測定値タイプを次の表で説明します。
測定値 | 説明
DOM インタラクティブ（DOM Interactive） | リクエストからブラウザがすべての HTML 要素を解析し、DOM を構築するまでの期間を表します。
DOM 完了（DOM Complete） | リクエストからブラウザがすべてのリソース（画像、スタイルシート、スクリプトなど）をダウンロードし、処理を完了するまでの期間を表します。
ロード終了（Load End） | リクエストからブラウザが onLoad 関数の実行を完了するまでの期間を表します。すべてのページのロード処理の最後のステップとして、ブラウザーは onLoad 関数をトリガーする onLoad エベントを送信します。onLoad 関数が実行されると、さらにアプリケーションのロジックが実行される場合があります。
描画開始（First Paint） | リクエストからページの表示が始まるまでの期間を表します。この測定値は、Internet Explorer の場合にのみ使用できます。
操作開始時間（Time to Interact） | リクエストからすべての TTI 関連要素がページ上で利用可能になるまでの期間を表します。この時点で、ユーザーは Web ページを操作できるようになります。
アクション時間（Action Time） | リクエストからブラウザがすべてのリソースをダウンロードし、処理を完了するまでの期間を表します。この期間の終了は、定義された同期モードによって異なります。同期モードが HTML の場合、onLoad 関数の完了時にアクション時間が終了します。同期モードが AJAX の場合、非同期アプリケーション ロジック フェーズ中にアクション時間が終了します。
重要: TTI 機能を使用すると、ここに挙げた測定値以外のものは、利用できなくなったり、正しくない値が表示されることがあります。
親トピック: 組み込みの測定値
関連概念
操作開始時間
関連タスク
TTI に要素を含める


CORBA 固有の測定値

IIOP 測定値グループは、負荷テスト スクリプトの中で呼び出される IIOP 操作に関する測定値タイプです。API 関数 IiopRequest が発行した、IIOP 操作呼び出しのレスポンス時間とスループット比率を示します。IiopObjectSetMeasures 関数を使って、特定の CORBA オブジェクトの操作に関連付ける、測定値グループ名の接頭辞を指定できます。指定しない場合、操作の名前が対応する測定値グループの名前として使用されます。対応する測定値タイプを次の表で説明します。

測定値 | 説明
ラウンドトリップ時間 | IiopRequest 関数呼び出し処理開始から、CORBA オブジェクトの応答処理終了までの測定時間 (秒)。
サーバー ビジー時間 | 測定 (秒) は、ユーザーが CORBA 操作呼び出しの最後の 1 バイトを送信した後に開始され、ユーザーがレスポンスの最初の 1 バイトを受信したときに終了します。 注: アプリケーションおよびリクエストの内容によっては、サーバー ビジー時間は最後の 1 バイトが送信される前に開始され、ユーザーが最初の 1 バイトを受信した後も継続されることがあります。そのため、サーバー ビジー時間は、多くの場合近似値にすぎません。

ブロッキングされていない IIOP リクエストについて、これらの測定値は、同じ方法で測定されます。このため、測定時間すべての合計が、負荷テストの時間全体より長くなることがあります。

CORBA オブジェクトにリクエストをリダイレクトされた場合、IiopRequest 関数はそのリクエストを別の場所に再発行しなければなりません。その結果、リクエスト メッセージとレスポンス メッセージのペアが 2 つになり、両方が別々に測定されます。IiopRequest 関数の測定時間の場合と同様に、両方の (別々に測定された) リクエストとレスポンスのペアの合計が表示されます。

親トピック: 組み込みの測定値


SQL データベース固有の測定値

対応する測定値タイプを次の表で説明します。

測定値 | 説明
Parse | SQL コマンドの準備 (Oracle の用語では "解析") にかかった時間 (秒)。SQL コマンドの準備には、通常、SQL コマンドをサーバーに送信するときのサーバー ラウンドトリップ時間が含まれます。SQL コマンドは、サーバーで解析され、その後でそのSQL コマンドが呼び出されたとき再利用できる内部形式に変換されます。 注: ORA_DEFERRED オプションを用いて OraParse 関数を使用した場合、SQL コマンドの解析は実行ステップまで遅延されます。そのため、解析ステップで、サーバー ラウンドトリップ時間が生じます。この場合、この測定値タイプは無意味です。
Exec | SQL コマンドの実行にかかった時間 (秒)。SQL コマンドの実行には、SQL コマンドの実行を可能にするために、コマンドを送信して結果が返されるまでのサーバー ラウンドトリップが、少なくとも 1 回分含まれます。1 つの SQL コマンドを処理するのに、サーバーでは多くのデータ処理が必要なので、SQL コマンドの実行は、通常、データベース サーバーにかかる負担の大部分を占めます。SQL 測定値グループには、データの取得に関する、別の測定値タイプがあります。データの取得は、実行ステップの一部にするか、別のステップにするか設定できます。後者の場合、結果は SQL 測定値グループに含まれません。
ExecDirect | SQL コマンドの準備および実行にかかった時間 (秒)。
親トピック: 組み込みの測定値


ミドルウェア固有の測定値

TUXEDO 測定値グループは、負荷テスト スクリプトで実行される TUXEDO サービス呼び出しに関する測定値タイプです。関数 (Tux_tpcall、Tux_tpacall、Tux_tpsend、Tux_tprecv、Tux_tpgetrply、Tux_tpenqueue、Tux_tpdequeue) が発行した、TUXEDO サービス呼び出しのレスポンス時間およびスループットを示します。これらの TUXEDO 関数で使用される TUXEDO サービスごとに、サービス名をキーとして測定値グループが自動的に作成されます。対応する測定値タイプを次の表で説明します。

測定値 | 説明
レスポンス時間 | TUXEDO サービス呼び出しのレスポンス時間 (秒)。同期サービス呼び出しの場合、レスポンス時間には、サーバーでその呼び出しを処理するのにかかる時間が含まれます。非同期サービス呼び出しの場合、Silk Performer は、リクエストの送信からレスポンスの受信までの間に経過した時間に、リクエスト待ちの時間を加えて報告します。非同期サービス呼び出しの場合は、サーバーでサービスを実行するのにかかる時間は測定されません。送信呼び出しおよびリクエスト呼び出しの場合、Silk Performer は、開かれている接続にデータを送信する時間と、開かれている接続からデータを受信する時間を測定します。キューイング通信の場合、サービス呼び出しをキューに送信するのにかかった時間、およびサービス呼び出しの結果を取得するのにかかった時間の両方が測定されます。
送信されたリクエスト データ | 特定のサービスを送信するために TUXEDO サーバーに送信されたデータの量 (KB)。Silk Performerは、ネットワークに転送されたバイト数ではなく、サービス呼び出しによって使用されたアプリケーション データ バッファのサイズを測定します。
受信したレスポンス データ | 特定のサービスが TUXEDO サーバーから受信したデータの量 (KB 単位)。Silk Performerは、ネットワークに転送されたバイト数ではなく、サービス呼び出しによって使用されたアプリケーション データ バッファのサイズを測定します。
親トピック: 組み込みの測定値


Citrix 固有の測定値

Citrix の同期点測定値グループは、既に実行済みの同期関数の数を示します。この測定値の主な目的は、トランザクションの進行状況を視覚化することです。

測定値 | 説明
Citrix の同期点 | 実行済みの Citrix 同期関数 (CitrixWaitForXXX) の数。
親トピック: 組み込みの測定値


カスタム タイマ測定値

カスタム タイマ測定値グループは、負荷テスト スクリプト内で MeasureStart 関数および MeasureStop 関数を使って定義される一連のタイマです。

測定値 | 説明
レスポンス時間 | MeasureStart 関数呼び出しから MeasureStop 関数呼び出しまでの測定時間 (秒)。
ビジー時間 | MeasureStart 関数呼び出しから MeasureStop 関数呼び出しまでを測定したビジー時間 (秒)。 ビジー時間は、レスポンス時間から思考時間、待機時間、関数変換に要する時間を省いた時間です。
注: MeasurePause 関数または MeasureResume 関数を使って、タイマの一時停止または再開ができます。
親トピック: 組み込みの測定値


カスタム カウンタ測定値

カスタム カウンタ測定値グループは、負荷テスト スクリプト内で MeasureInc 関数を使って定義される、一連のカウンタです。

測定値 | 説明
カスタム カウンタ | MeasureInc 関数で設定された値をカウントします。
親トピック: 組み込みの測定値


ストリーミングの測定値

対応する測定値タイプを次の表で説明します。

測定値 | 説明
実ビデオ再生時間 | すべてのダウンロードしたメディア セグメント（完全なストリーム）の再生時間（秒）。
総ダウンロード時間 | すべてのメディア セグメントのダウンロード時間（秒）。
セグメント数 | すべてのダウンロードしたメディア セグメントの数。
クリティカル D/P 比セグメント数 | 0.9 以上の D/P 比（ダウンロード時間/再生時間比率）のメディア セグメントの数。
ストリーム D/P 比 | 再生時間に対するダウンロード時間の比率（D/P 比）。値が 0.9 を超える場合は、ラグの発生や、ちらつき、バッファリングが発生する可能性を示します。
ストリーム サイズ | すべてのダウンロードしたメディア セグメント（完全なストリーム）のサイズ（キロバイト）。
最初のセグメントにかかる時間 | ページの読み込みから最初のメディア セグメントのダウンロードの完了までの経過時間。
親トピック: 組み込みの測定値


コマンド ライン パラメータ

Performance Explorer には、コマンド ライン インターフェイスから実行できるパラメータがいくつか用意されています。

  • 使用できるコマンド
    コマンド ライン インターフェイスで使用できる Performance Explorer コマンドの一覧、およびサンプルを示します。
  • コマンド ファイル
    XML 形式のコマンド ファイルを送信するための構文について説明します。
親トピック: Performance Explorer21.0


使用できるコマンド

次の表に、コマンド ライン インターフェイスで使用できる Performance Explorer コマンドの一覧を示します。

コマンド | 説明
/TSD:<ファイル> | 指定した .tsd ファイルを開きます。
/ADDLOADTEST:<ファイル | 指定した .tsd ファイルを含む負荷テスト結果を開きます。
/OVT:<テンプレート> | 指定したテンプレートを、概要レポートを手動生成する際にあらかじめ選択されている概要レポート テンプレートとして設定します。
/MONITORDIR:<ディレクトリ> | 監視出力ファイル用の出力ディレクトリを設定します。
/MONCREATE:<ディレクトリ> | 監視モードで始めます (BDL スクリプトの生成)。
/ACTION:STDGRAPH | 一般タイプの定義済みのグラフを開きます。指定した .tsd ファイル (/TSD:<ファイル>) を使用します。
/ACTION:SELGRAPH | ウィザードを開き、グラフのテンプレートを選択します。指定した .tsd ファイル (/TSD:<ファイル>) を使用します。
/ACTION:MONSERVER | サーバー監視ウィザードを開始します。
/ACTION:STARTALLMONITORS | すべての監視グラフを開始します。
/ACTION:STOPALLMONITORS | すべての監視グラフを停止します。
/ACTION:OVERVIEWREPORT [:<テンプレート>] | 指定した .tsd ファイル (/TSD:<ファイル>) に対する概要レポートを生成します。テンプレート ファイルを適用できます。マージした .tsd ファイル (m@) を指定してください。
/ACTION:WORDOVERVIEWREPORT | 指定した .tsd ファイル (/TSD:<ファイル>) に対する Word 概要レポートを生成します。マージした .tsd ファイル (m@) を指定してください。パラメータ /WORDTEMPLATE と /WORDTARGET は省略可能です。Performance Explorer を GUI なしモードで実行します。
/WORDTARGET:<ファイル> | 生成する Word 文書 (.docx) の絶対パス。このパラメータは、パラメータ /ACTION:WORDOVERVIEWREPORT より前に指定する必要があります (以下の例を参照)。
/WORDTEMPLATE:<ファイル> | 生成する Word 概要レポートのテンプレートとして使用される Word 文書 (.docx) の絶対パス。このパラメータは、パラメータ /ACTION:WORDOVERVIEWREPORT より前に指定する必要があります (以下の例を参照)。
/EXPORTOVR:<ファイル> | 最近生成した概要レポート ビューを <ファイル> にエクスポートします。HTML の場合は file.htm を、Web アーカイブへのエクスポートの場合は file.mht を使用します。
/NOGUI | Performance Explorer を表示状態か非表示状態 (GUI なしモード) のどちらで実行するかを指定します。/NOGUI は、DOS ベースのコマンドラインで /NOEXIT が使用されている場合にのみ適切に機能します。
/SINGLEINSTANCE[:NOSTARTUP] | 既存のインスタンスを検索します。NOSTARTUP も指定すると、新しいインスタンスは作成されません。
/PEW:<ワークスペース ファイル> | 指定したワークスペースを開くか作成します。/SINGLEINSTANCE も指定すると、既存のインスタンスが指定のワークスペース ファイルを使用している場合、そのインスタンスのみが選択されます。指定しない場合、新しいインスタンスが作成されます。
/COMMANDFILE:<XML ファイル> | 指定した XML ファイルからコマンドをロードします。
/EXIT | .tsd ファイルを保存した後、ワークスペースに対する変更を保存せずに Performance Explorer を終了します。
/NOEXIT | Performance Explorer をコマンド ラインの実行後開いたままにします。
/? | Performance Explorer で使用できるコマンド ライン パラメータを表示します。

使用例

上記のコマンドのいくつかの使用方法を以下に示します。

最初の例に示すように、パラメータ /TSD を PerfExp.exe コマンドに指定する場合、Performance Explorer が開かれ、指定した .tsd ファイルが表示されます。さらに、パラメータ /ACTION:STDGRAPH と /ACTION:STARTALLMONITORS を指定すると、定義済みのグラフ (一般タイプ) が開かれ、すべての監視が自動的に開始されます。

PerfExp.exe /TSD:"c:\test.tsd" /ACTION:STDGRAPH /ACTION:STARTALLMONITORS

この 2 番目の例では、Performance Explorer を開始し、指定した .pew ファイルを開きます (/PEW)。さらに、監視ディレクトリが設定され (/MONITORDIR)、.pew ファイルに含まれるすべての監視が自動的に開始されます (/ACTION:STARTALLMONITORS)。これらすべてのアクションは、ユーザー インターフェイスを表示せずに実行されます (/NOGUI)。最後に、パラメータ /SINGLEINSTANCE によって、Performance Explorer の既存のインスタンスが検索され、パラメータ /NOEXIT によって、コマンド ラインの実行後に Performance Explorer が開いたままになります。

PerfExp.exe /PEW:"c:\test.pew" /MONITORDIR:"c:\temp\perf" /ACTION:STARTALLMONITORS /NOGUI /SINGLEINSTANCE /NOEXIT

3 番目の例は、次のような動作になります。Performance Explorer を開始し、指定した .pew ファイルを開きます (/PEW)。起動中に Performance Explorer は既存のインスタンスを検索します。インスタンスが見つかると、新しいインスタンスは開始されません (/SINGLEINSTANCE)。監視ディレクトリが設定され (/MONITORDIR)、すべての監視が停止します (/ACTION:STOPALLMONITORS)。ユーザー インターフェイスは表示されません (/NOGUI)。最後に、.tsd ファイルが保存され、ワークスペースへの変更は保存されずに Performance Explorer が閉じます (/EXIT)。

PerfExp.exe /PEW:"c:\test.pew" /MONITORDIR:"c:\temp\perf" /ACTION:STOPALLMONITORS /NOGUI /SINGLEINSTANCE:NOSTARTUP /EXIT

4 番目の例は、Word 概要レポートを生成します。まず、ユーザー インターフェイスを表示せずに Performance Explorer が開始され (パラメータ /ACTION:WORDOVERVIEWREPORT により)、指定した .tsd ファイルが開きます (/TSD)。マージした .tsd ファイル (m@) を指定してください。それから、生成される Word 文書のパスと名前 (/WORDTARGET)、および適用する Word テンプレートのパスと名前が指定されます (/WORDTEMPLATE)。最後に、パラメータ /ACTION:WORDOVERVIEWREPORT によりレポートが生成されます。

PerfExp.exe /TSD:"c:\test.tsd" /WORDTARGET:"c:\report.docx" /WORDTEMPLATE:"c:\template.docx" /ACTION:WORDOVERVIEWREPORT
親トピック: コマンド ライン パラメータ


コマンド ファイル

コマンドラインでコマンドを直接送信するだけでなく、XML 形式のコマンド ファイルを送信することもできます。コマンドは、次の構文を使って指定します。
Perfexp.exe /COMMANDFILE:<CmdFile>

コマンド ファイルは、バッチ操作用に指定します。

コマンド ファイルとして使用する XML ファイルの構造は、PerfExpCommandFile というルート ノードと、OverviewReport と Command という省略可能な 2 つのサブノードから成ります。

PerfExpCommandFile

ルート ノード PerfExpCommandFile では、以下を指定できます。
  • NoGui="True" / NoGui="False"

    Performance Explorer を表示状態か非表示状態のどちらで起動するかを指定します。

  • LogFile="<filename>"

    ログ ファイルの名前と場所を指定します。

ルート ノードの下には、さまざまな Command ノードと OverviewReport ノードを指定できます。

OverviewReport

OverviewReport ノードでは、Performance Explorer で使用する TSD ファイルを指定します。以下の属性を使用できます。
  • File

    使用する .tsd ファイルを指定します。省略すると、Performance Explorer で最後にロードしたファイルを使用します。

  • Export
    概要レポートを保存する出力ファイルを指定します。次の形式を使用できます。
    • HTML (.htm)
    • Web アーカイブ (.mht)
  • Template

    オプションで概要レポートに使用するテンプレート ファイル (.ovt) を指定します。

コマンド

Command ノードのテキストは、コマンドライン パラメータとして解釈されます。ノードは順に実行されます。

次のコードは、XML コマンド ファイルを示しています。

<?xml version="1.0" encoding="UTF-8" ?>
<PerfExpCommandFile NoGui="True"
      LogFile="c:\TEMP\Results\PerfExp.log">
 <OverviewReport
      File="c:\TEMP\Results\m@host@Simple.tsd"
      Export="c:\TEMP\Results\Simple.mht"
  />
   <Command>PEW:"c:\test.pew"</Command>
   <Command>SINGLEINSTANCE</Command>
   <Command>ACTION:STARTALLMONITORS</Command>
   <Command>EXIT</Command>
</PerfExpCommandFile>

ヘルプ コマンド

/? ヘルプ コマンドは次の構文で使用します。
Perfexp.exe /?

Performance Explorer が開き、コマンドライン ヘルプが表示されます。

親トピック: コマンド ライン パラメータ


表示をカスタマイズする

Performance Explorer には、グラフ、グラフの時系列、およびレポートの表示をカスタマイズするためのさまざまなオプションがあります。さまざまな表示設定のデフォルト値を設定したり、個々のグラフ、グラフの時系列やレポートの特定のオプションを設定することができます。

  • デフォルト オプション
    グラフやグラフの時系列、レポートについて設定することのできるデフォルト オプションの一覧を列挙します。
  • グラフ表示をカスタマイズする
    グラフの表示をカスタマイズする方法について説明します。
  • グラフの線表示をカスタマイズする
    グラフの線表示をカスタマイズする方法について説明します。
  • 測定値の限界を表示する
    グラフ内で設定された測定値の限界を、カラー領域で表示する方法について説明します。
  • パフォーマンス レベルの条件を表示する
    パフォーマンス レベルの条件をカラーの境界線としてグラフに表示する方法について説明します。
親トピック: Performance Explorer21.0


デフォルト オプション

グラフやグラフの時系列、レポートを表示するためのデフォルト オプションを変更することができます。

  • デフォルトのグラフ オプションを設定する
    グラフのデフォルトの表示オプションと倍率オプションを指定します。
  • デフォルトの時系列データ オプションを設定する
    NULL 値の表示、線の幅、グラフ マーカー、数値の桁数などの、時系列データ オプションを設定します。
  • デフォルトのグラフ エクスポート オプションを設定する
    グラフをエクスポートするためのデフォルトの解像度や、ファイルの種類を設定します。
  • デフォルトのローソク グラフ オプションを設定する
    ローソクおよびマーカーのデフォルトのスタイルを設定します。
  • デフォルトの監視オプションを設定する
    デフォルトの背景、テキスト、グリッドの色、およびデータ間隔オプションを設定します。
  • デフォルトの TSD 出力オプションを設定する
    時系列データの出力に使用される時間間隔と時間単位のオプションを設定します。
  • デフォルトのレポート作成オプションを設定する
    概要レポートを自動的に生成する、グラフに NULL 値を表示するか、概要レポートのデフォルト レポート テンプレートを使用するための、オプションを設定します。
親トピック: 表示をカスタマイズする


デフォルトのグラフ オプションを設定する

  1. Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。
  2. 選択された時系列を強調表示する チェック ボックスをオンにすると、現在選択している時系列を太線で強調して表示できます。
    注: このオプションは、グラフで作業しているときには便利ですが、グラフをエクスポートまたは印刷する前には、このチェック ボックスをオフにしてください。
  3. 時系列を重ね合わせる チェック ボックスをオンにすると、グラフに表示されるすべての時系列が同じ時間に開始すると想定します。 開始時間が異なるテストの時系列を含むグラフを表示する場合に、このオプションを使用します。
  4. 背景色 ボックスの一覧から、グラフの効果を高めるために使用する色を選択します。 カスタム色を使用するには、リスト ボックスの右側の参照 (...) ボタンをクリックします。 Performance Explorer により、背景イメージとして 1 つ目の色から 2 つ目の色へと縦方向に遷移する色が表示されます。
  5. テキストおよびグリッドの色 ボックスの一覧から、グラフの軸情報とグリッドに使用する色を選択します。 カスタム色を使用するには、リスト ボックスの右側の参照 (...) ボタンをクリックします。
  6. 倍率 領域で、次の機能を有効化できます。
    • 0 から 100 までの値に拡大縮小する を有効化すると、実際の時系列データ値ではなく、拡大縮小された値を表示できます。
    • 類似した時系列に同じ倍率を適用する を有効化すると、同じ種類の時系列に対して同じ倍率を設定できます。
  7. OK をクリックします。
親トピック: デフォルト オプション


デフォルトの時系列データ オプションを設定する

  1. Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。
  2. 時系列 タブをクリックします。
  3. デフォルトで NULL 値を表示するには、NULL 値を表示する チェック ボックスをオンにします。 時系列 タブの 表示 グループで NULL 値 をクリックすると、個々の測定値に対して NULL 値の有効/無効を設定できます。オプション ダイアログのチェック ボックスでは、すべての測定値に対する NULL 値の有効/無効が設定されます。
  4. 要約とカウンタ値の表示間隔 リスト ボックスから、時系列データの表示に使用する時間単位を選択します。
    • 間隔 を選択すると、.tsd ファイルに設定されている計算間隔でデータが表示されます。
    • 秒 を選択すると、データが 1 秒間隔に拡大縮小して表示されます。
    デフォルトの計算間隔を変更するには、プロファイル - <プロファイル名> - 結果 ダイアログの 時系列 タブを使用します。
  5. デフォルトの線幅 リストから、新しい測定値をグラフに追加するときに使用する線幅を選択します。
  6. 各時系列の測定値ごとにグラフ マーカーを表示し、正確な測定値を示すには、グラフ マーカーを表示する チェック ボックスをオンにします。
  7. 数値の桁数 フィールドに、グラフ マーカーに表示する数字の桁数を入力します。 グラフ マーカーを使用すると、グラフ内の各測定値に対して正確な測定した値を表示できます。
  8. OK をクリックします。
親トピック: デフォルト オプション


デフォルトのグラフ エクスポート オプションを設定する

  1. Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。
  2. HTML ビュー タブをクリックします。
  3. グラフ画像の解像度 領域の、いずれかのオプションをクリックして、グラフを HTML ドキュメントとしてエクスポートするときに生成される画像の解像度を指定します。 画像ファイルのサイズは、直接解像度に比例します。そのため、画像の解像度が高いほど、解像度の低い画像より Web に転送する時間も長くなります。
  4. 画像のタイプ 領域を使用して、HTML ドキュメントのグラフの画像形式を選択します。
    • JPEG をクリックすると、HTML ドキュメントのグラフが JPEG ファイルになります。
    • BMP (Internet Explorer を使用する場合のみ) をクリックすると、HTML ドキュメントのグラフが BMP ファイルになります。
  5. OK をクリックします。
親トピック: デフォルト オプション


デフォルトのローソク グラフ オプションを設定する

  1. Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。
  2. ローソク タブをクリックします。
  3. 枠線の色 ボックスの一覧から、現在のグラフのローソクの枠線に使用する色を選択します。 カスタム色を使用するには、リスト ボックスの右側の参照 (...) ボタンをクリックします。
  4. ローソクの幅 ボックスに、現在のグラフのローソクの幅を入力します。
  5. マーカーの色 ボックスの一覧から、マーカーに使用する色を選択します。 カスタム色を使用するには、リスト ボックスの右側の参照 (...) ボタンをクリックします。
  6. マーカーの高さ ボックスに、マーカーの高さを指定します。
  7. OK をクリックします。
親トピック: デフォルト オプション


デフォルトの監視オプションを設定する

  1. Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。
  2. 監視 タブをクリックします。
  3. 間隔 フィールドに、グラフを更新する間隔を設定します。
    注: 監視間隔を、実行中にデフォルトの最小間隔より小さな値に変更すると、間隔は、保存したワークスペースを再度開くときに最小監視間隔にリセットされます。
  4. ページ サイズ フィールドに、各グラフの水平軸上に表示する、測定値の数を設定します。
  5. 履歴サイズ フィールドに、グラフ全体の水平軸上に保存する、測定値の数を設定します。
  6. 背景色 ボックスの一覧から、グラフの効果を高めるために使用する色を選択します。 カスタム色を使用するには、リスト ボックスの右側の参照 (...) ボタンをクリックします。 Performance Explorer により、背景イメージとして 1 つ目の色から 2 つ目の色へと縦方向に遷移する色が表示されます。
  7. テキストおよびグリッドの色 ボックスの一覧から、グラフの軸情報とグリッドに使用する色を選択します。 カスタム色を使用するには、リスト ボックスの右側の参照 (...) ボタンをクリックします。
  8. OK をクリックします。
親トピック: デフォルト オプション


デフォルトの TSD 出力オプションを設定する

  1. Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。
  2. TSD 出力プログラム タブをクリックします。
  3. 間隔 フィールドで、時系列データの出力に使用される、時間間隔と時間単位を選択します。
  4. OK をクリックします。
親トピック: デフォルト オプション


デフォルトのレポート作成オプションを設定する

  1. Performance Explorer のアプリケーション ボタン (左上) をクリックし、オプション をクリックします。
  2. レポート作成 タブをクリックします。
  3. テスト結果の検討を開始するときに、概要レポートを自動的に表示するには、概要レポートを自動的に生成する チェック ボックスをオンにします。 概要レポートには、アクティブであった仮想ユーザーの数、実行されたトランザクションの数、発生したエラーの数などの、テストの最も重要な結果が含まれます。
  4. グラフに NULL 値を表示するには、グラフに NULL 値を表示する チェック ボックスをオンにします。 このチェック ボックスをオフにした場合、Performance Explorer は、各 NULL 値を、直前の値とその次の値を結ぶ直線に置き換えます。
  5. 概要レポートの作成用に保存しておいたテンプレートを使用するには、概要レポートの新規作成時にテンプレートを使用する チェック ボックスをオンにしてから、参照 (...) をクリックして、テンプレートを選択します。 選択されたテンプレートは、すべてのプロジェクトで、新しい概要レポートを作成するのに使用されます。
  6. OK をクリックします。
親トピック: デフォルト オプション


グラフ表示をカスタマイズする

Performance Explorer は、グラフを標準形式で表示しますが、カスタマイズできる部分が多数あります。倍率、グラフの重ね合わせ、グラフの強調表示、グラフのエクスポートなどを行えます。これらの表示オプションは、コンテキストに依存して表示される、グラフ タブにあります。グラフを作成または選択したときに、このタブが表示されます。

  1. グラフを作成し、ツリーからグラフに測定値をドラッグします。
  2. グラフ タブの グラフ グループには、次のオプションがあります。
    • 倍率：倍率機能 (スケーリング) を使用すると、グラフを一様に表示することができます。つまり、大きい値を持つ測定値と小さい値を持つ測定値が適切に表示され、有意義なグラフが描画されます。スケーリングを行わないと、小さい値を持つ測定値は平坦なグラフとして表示され、大きい値を持つ測定値は変動の激しいグラフとして表示されてしまいます。個々のグラフに対して特定の倍率を設定するには、時系列 タブの 時系列 グループで 倍率 リストから倍率を選択します。
    • グラフの重ね合わせ：グラフを重ね合わせると、すべてのグラフが実際の開始時間を　無視して共通の開始時間にシフトされます。開始時間が異なるテストの測定値を含むグラフを表示する場合に、このオプションを使用します。
    • 対数 (Y 軸)：Y 軸を線形軸から対数軸に変更します。
    • 強調表示：選択したグラフを太線で強調します。
      ヒント: グラフの強調表示は、Performance Explorer でグラフを表示して作業しているときには有用です。しかし、グラフをエクスポートしたり印刷する前に、このオプションをオフにするのを忘れないでください。
    • 類似した測定値の拡大縮小： Performance Explorer は、類似した測定値 (時系列) に同じ倍率を適用します。類似した測定値とは、同じタイプの測定値を言います (測定値リストの タイプ 列を参照)。この機能を使用するには、次の手順に従います。あるタイプの測定値を空のグラフにドラッグします。測定値を右クリックして、自動 以外の倍率を選択します。グラフ タブで 類似した測定値の拡大縮小 をクリックします。同じタイプの測定値をさらにグラフにドラッグします。 Performance Explorer は、最初の測定値に対して手動で指定した倍率を自動的に適用します。
    • プロパティ：プロパティで、グラフの タイトル と 説明 を入力できます。これらは、エクスポートしたり印刷したときに、グラフの上部に表示されます。
    • エクスポート：作業中のグラフを .csv ファイル、または Excel 文書にエクスポートします。CSV ファイルとしてエクスポート をクリックすると、.csv、.htm、.mht、.png などの種々のファイルの種類から選択できます。
  3. 表示 グループには、次のオプションがあります。
    • 時系列ポイント：すべてのグラフの時系列ポイントを表示します。
    • 縮小：拡大表示をリセットします。
    • 拡大表示：拡大表示は、デフォルトで有効になっています。X 軸と Y 軸の拡大縮小率を保ったまま、グラフを拡大表示できます。拡大表示を無効化すると、X 軸のみ拡大されます。
    • 測定値リスト：測定値リストの表示/非表示を切り替えます。測定値リストは、グラフの凡例でもあります。ただし、各測定値について、他にも多くの情報が提供されます。
  4. 生成 グループには、次のオプションがあります。
    • 監視出力：監視グラフのリアルタイム測定値を使って新しい監視出力を作成します。
    • 仮想ユーザー ベースのグラフ：作業中の時間ベースのグラフと同じ測定値を使用して新しい仮想ユーザー ベースのグラフを作成します。時間ベースのグラフは、測定値を Y 軸に、時間を X 軸に表示します。仮想ユーザー ベースのグラフは、仮想ユーザーの数を X 軸に表示します。
  5. データ グループには、次のオプションがあります。
    • 監視グラフのクリア：作業中の監視グラフのすべてのグラフをクリアします。
    • ブラウザで表示：作業中のグラフを HTML ドキュメントとしてブラウザで表示します。
親トピック: 表示をカスタマイズする


グラフの線表示をカスタマイズする

Performance Explorer は、グラフの線を標準形式で表示しますが、カスタマイズできる部分が多数あります。色、線の幅、線のスタイルを変更できます。倍率オプションやマーカーの挿入などを変更できます。これらの表示オプションは、コンテキストに依存して表示される、時系列 タブにあります。グラフを作成または選択したときに、このタブが表示されます。

  1. グラフを作成し、ツリーから測定値をグラフにドラッグし、グラフの線または測定値リストから測定値を選択します。
  2. 時系列 タブの 線のスタイル グループには、次のオプションがあります。
    • スタイル：さまざまな線のスタイルから選択します。
    • 色：色を選択します。
    • 幅：幅を選択します。
  3. 時系列 グループには、次のオプションがあります。
    • 倍率：倍率機能 (スケーリング) を使用すると、グラフを一様に表示することができます。つまり、大きい値を持つ測定値と小さい値を持つ測定値が適切に表示され、有意義なグラフが描画されます。スケーリングを行わないと、小さい値を持つ測定値は平坦なグラフとして表示され、大きい値を持つ測定値は変動の激しいグラフとして表示されてしまいます。グラフのすべての線に対して倍率を有効にするには、グラフ タブの グラフ グループで 倍率 をクリックします。
    • 表示形式：選択したグラフの表示形式を選択します。線、ローソク、ローソク足、領域 から選択できます。
    • ソース タイプ：次のソース タイプのいずれかを選択します：平均、カウント、合計、最大、最小、標準偏差。
  4. 表示 グループには、次のオプションがあります。
    • マーカー：マーカーは測定した値をグラフに表示します。
    • NULL 値：選択したグラフに NULL 値を表示します。
    • 測定値の限界：選択したグラフに境界を表示します。負荷テストを開始する前に、しきい値の自動生成 ダイアログでこれらの境界を設定できます。
    • パフォーマンス レベルの条件：選択したグラフにパフォーマンス レベルを表示します。パフォーマンス レベルは、レポート タブで定義および割り当てることができます。
    • 正規化値：選択したグラフに正規化値を表示します。正規化した値は、秒ごとの値です。
    • 標準偏差領域：選択したグラフに標準偏差を表示します。
    • 表示：このチェック ボックスをクリックして、選択したグラフの表示/非表示を切り替えます。測定値リストのチェック ボックスを使用して、グラフの表示/非表示を切り替えることもできます。
親トピック: 表示をカスタマイズする


測定値の限界を表示する

負荷テストを開始する前に、下限と上限を しきい値の自動生成 ダイアログで、またはスクリプト内で直接定義する必要があります。限界値は、概要レポートに表示されます。

測定値の限界をグラフに表示するには：
  1. グラフを作成または開きます。
  2. 限界を定義した測定値をグラフにドラッグします。
  3. 測定値リスト内の測定値をクリックしてアクティブにします。
  4. 時系列 タブの 表示 グループで、測定値の限界 をオンにします。
グラフに赤色と黄色のカラー領域が表示されます。赤色のカラー領域は、上限を超えた領域です。黄色のカラー領域は、上限と下限の間の領域です。
注: カラー領域は、測定値が設定されたしきい値を超えた場合のみ表示されます。Performance Explorer には、一度に 1 つのグラフィカルな測定値の限界だけが表示されます。測定値の限界を表示する際は、グラフのスケールが自動的に調整されます。
Performance Explorer には、次の測定値の 平均、 最大、および 最小 の各値の限界がグラフィカルに表示されます。
  • ページおよびアクション タイマ - アクション時間
  • ページおよびアクション タイマ - ページ時間
  • タイマ - レスポンス時間
  • トランザクション - トランザクション(ビジー) OK
親トピック: 表示をカスタマイズする


パフォーマンス レベルの条件を表示する

グラフにパフォーマンス レベルを表示するには、あらかじめパフォーマンス レベルを定義して割り当てておく必要があります。この作業は、負荷テストの実行前（能動的アプローチ）、または実行後（受動的アプローチ）に行うことができます。

パフォーマンス レベルの条件をグラフに表示するには：

  1. グラフを作成または開きます。
  2. パフォーマンス レベルを割り当てた測定値をグラフにドラッグします。
  3. 測定値リスト内の測定値をクリックしてアクティブにします。
  4. 時系列 タブの 表示 グループで、パフォーマンス レベルの条件 をオンにします。
割り当てられたパフォーマンス レベルの条件に対するカラーの境界線と、それを説明する小さな凡例がグラフに表示されます。例：現在のパフォーマンス レベルに P90 < 0.2 のような条件が含まれている場合、グラフの 90% が表示された境界線以下であれば、条件は満たされます。
注: Performance Explorer には、一度に 1 つの測定値に対するパフォーマンス レベルの条件だけが表示されます。
親トピック: 表示をカスタマイズする


Micro Focus へのお問い合わせ

Micro Focus は、世界的規模のテクニカル サポートおよびコンサルティング サービスを提供します。すべての顧客のビジネスを成功に導くために、信頼できるサービスをタイムリーに提供するように、Micro Focus はワールドワイドのサポート体制を整えています。

保守およびサポート契約を結んだすべてのお客様、および製品を評価中のお客様は、カスタマー サポートを受けることができます。高度なトレーニングを積んだスタッフが、お客様の質問にできる限り迅速かつ専門的にお答えします。

http://supportline.microfocus.com/assistedservices.asp にアクセスするか、またはメールを supportline@microfocus.com に送信して、Micro Focus SupportLine と直接連絡できます。

また、http://supportline.microfocus.com の Micro Focus SupportLine では、 最新のサポートに関するニュースや、さまざまなサポート情報を得ることができます。 このサイトに初めてアクセスした場合は、ユーザー登録が必要な場合があります。

  • Micro Focus SupportLine が必要とする情報
    お客様の問題を解決するために役立つ Micro Focus SupportLine が必要とする情報について説明します。


Micro Focus SupportLine が必要とする情報

Micro Focus SupportLine をご利用の場合は、可能な限り次の情報を提供ください。情報が多ければ多いほど、Micro Focus SupportLine はお客様に適切なサービスを提供できます。

  • 問題の原因と思われるすべての製品の名前およびバージョン番号
  • 使用しているコンピュータの製造元およびモデル
  • システム情報 (オペレーティング システムの名前やバージョン、プロセッサやメモリの詳細など)
  • 問題の詳細な説明 (問題の再現手順など)
  • 発生したエラー メッセージ
  • お客様のシリアル番号

これらの番号は、Micro Focus から受け取った Electronic Product Delivery Notice 電子メールの件名および本文に記述されています。

親トピック: Micro Focus へのお問い合わせ


Cloud Agent Manager を起動する

開始する前に、Enterprise Cloud Services のユーザー名およびパスワードを販売代理店に問い合わせてください。

  1. ツール > Cloud Agent Manager を選択します。
  2. Enterprise Cloud Services の ユーザー名 および パスワード に値を入力し、OK をクリックします。
  3. OK をクリックします。


セキュアな接続を介してテスト スクリプトを記録する

  1. ワークフロー バーの スクリプトの作成 をクリックします。 ワークフロー - スクリプトの作成 ダイアログ ボックスが表示されます。
  2. 記録プロファイル リストから、テスト予定のクライアント アプリケーションのプロファイルを選択します。使用するアプリケーションのプロファイルがまだセットアップされていない場合は、リストの右側にある 設定 をクリックして、セットアップします。
  3. プロジェクトの種類に応じて、URL フィールドにアプリケーションの URL を、または コマンド ラインフィールド にアプリケーションの場所を入力します。
  4. セキュリティで保護された接続を使用して記録 をクリックします。 セキュリティで保護された記録の設定 ダイアログ ボックスが表示されます。
  5. セキュリティで保護された記録の設定 ダイアログ ボックスで、Micro Focus CA (認証機関) 証明書を使用するか、テスト対象のシステムの証明書を使用するかを選択します。どちらのアプローチを使用していいかわからない場合は、「セキュアな接続と証明書」を参照してください。
    Micro Focus 証明書の設定 を選択した場合：
    1. Micro Focus CA 証明書のインストール をクリックします。
    2. 証明書のインポート ウィザード の指示に従います。
    3. 証明書のインポートが完了したら、記録の開始 をクリックします。
    サーバー証明書の設定 を選択した場合：
    1. サーバー証明書 フィールドで、使用する証明書を指定します。
    2. Recorder が使用するサーバー証明書がパス フレーズで保護されている場合は、パス フレーズ フィールドに使用するパス フレーズを入力します。
    3. 省略可能：SSL ハンドシェークの間に Recorder がルート CA 証明書を送信する場合は、SSL ハンドシェークの間にルート CA を送信する チェック ボックスをオンにします。Recorder サーバー証明書に署名した認証機関を認証するために、クライアントがルート CA 証明書をリクエストする場合があります。
    4. 省略可能：ルート CA 証明書 フィールドで、使用するルート CA 証明書を指定します。
    5. サーバー証明書の設定が完了したら、記録の開始 をクリックします。
    [Silk Performer Recorder - [<プロファイル名>]] ダイアログが最小化されて表示され、クライアント アプリケーションが起動されます。
  6. 記録中に発生したアクションのレポートを表示するには、GUI サイズの変更 をクリックして [SilkPerformer Recorder - [<プロファイル名>]] ダイアログを最大化します。 [SilkPerformer Recorder - [<プロファイル名>]] ダイアログが最大化され、アクション ページに表示されます。
  7. クライアント アプリケーションを使用して、テストでシミュレートするターゲット サーバーでの操作などを実行します。この操作を、Recorder が取得して、記録します。 これらのアクションとダウンロードされたデータのレポートが、アクション ページに表示されます。
  8. 記録フェーズ中に、トランザクションとタイマをテスト スクリプトに挿入します。トランザクションとタイマは必要なだけ作成できます。トランザクションを挿入するには、トランザクションの新規作成 をクリックします。トランザクションとは、仮想ユーザーに割り当てることができる作業のことです。
  9. [トランザクションの新規作成] ダイアログで、トランザクション名を入力して、OK をクリックします。 新しいトランザクションが アクション ログに表示されます。
  10. タイマを挿入するには、タイマ セッションの新規作成 をクリックします。タイマは、テスト内でユーザーが定義する測定期間です。パフォーマンスを分析するトランザクションのコンポーネントごとに、タイマを作成してください。確認ダイアログで、タイマ名を入力して、OK をクリックします。
  11. 記録を終了するには、記録停止 をクリックします。
  12. .bdf ファイルの名前を入力し、保存します。キャプチャ ファイル ページが表示されます。スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。
関連概念
セキュアな接続と証明書


概要レポートを表示する

  1. ワークフロー バーの 結果の検討 ボタンをクリックします。 ワークフロー - 結果の検討 ダイアログが表示されます。
  2. Silk Performance Explorer ボタンまたはリンクをクリックします。 設定 > オプション > レポート作成 ダイアログで 概要レポートを自動的に生成する チェック ボックスをオンにしてある場合、Performance Explorer が開き、最新の負荷テストの概要要約レポートが表示されます。 また、このダイアログでは、概要レポートの生成用に以前格納したテンプレートを使用することも選択できます。 この設定はグローバル設定であり、使用しているワークロード プロジェクトに関係なく Performance Explorer で使用されます。
  3. 概要レポートが自動的に表示されない場合は、ワークフロー バーの 概要レポート ボタンをクリックします。
    1. 作業する負荷テストのディレクトリに移動し、対応する .tsd ファイルを選択し、開く をクリックします。
    2. 次へ をクリックします。
    3. 必要に応じて、テンプレート フィールドで参照 (...) ボタンをクリックし、使用するテンプレート ファイルを探します。
    4. 終了 をクリックします。
    5. 選択した負荷テストによっては、関係のあるすべてのファイルをプロジェクトにロードするのか確認するメッセージが表示される場合があります。
    概要レポートが開きます。