変更されたフォーム

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 > 記録タブ > 設定の表示)。