より特殊なルールの作成

セッション 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 セクションを拡張することで (以下の例で示す通り)、ルール ヒットはこれらの特殊な条件下でのみ使用されます。

スクリプト生成でのさらなる特殊化

<?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>
      <ReplaceIn>FormFieldValue</ReplaceIn>
      <Conditions>
        <CompareData>
          <Data>sid</Data>
          <ApplyTo>FormFieldName</ApplyTo>
        </CompareData>
      </Conditions>
    </ScriptGen>
  </HttpParsingRule>
  
</RecordingRuleSet>

属性 ScriptGen\ReplaceIn は、Recorder がフォーム フィールド値をスクリプト化するときにのみルール ヒットが使用されるように指定します。加えて、関連したフォーム フィールド名が sid である場合のみ、置換が許可されるように条件を指定します。この変更したルールを使って記録すると、元のルールを使用して生成されたスクリプトとほほ同じスクリプトを生成します。