コンテキストのない関数と異なり、コンテキストのある関数は前の関数呼び出しの結果を使用するように作られています。 結果の使用方法は、動的データを組み込まない方法で指定されます。
Silk Performer ページレベルの API のコンテキストのある関数には次のようなものがあります。
WebPageLink 関数は、リンクのターゲット URL をダウンロードします。
<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 フィールドの値を使用するため、スクリプト内にコードを指定する必要がありません。
Silk Performer では、BDL スクリプトのフォーム定義の構文が強化されているため、個々のフィールドがスクリプトに含まれる値を使用するかどうか、HTML コードからの値を使用するかどうか、またはまったく使用しないかどうかを指定することができます。
そのような仕様は、フォーム属性と呼ばれる構文要素を使用して実現されます。 フォーム属性は、フォーム フィールドのエンコーディング タイプの指定にも使用されます。
WebPageSubmit 関数を使用してコンテキストを持たせて使用されるフォームでは、次の使用属性が許可されています。
USE_SCRIPT_VAL は、スクリプトのフィールド値が送信に使用されることを意味しています。 これはデフォルトの属性であり、省略できます。
USE_HTML_VAL は、HTML フォーム定義のフィールド値が使用されることを意味します。 スクリプトの値は無視され、"" に設定されます。 スクリプトのフォーム フィールドは、HTML フォーム定義のフォーム フィールドと名前で照会されます。
SUPPRESS は、指定した名前を持つフィールドが HTML フォーム定義にある場合でも、フィールドの名前もその値も送信されないことを意味しています。 よって、スクリプトのフィールド値には意味がなく、無視されます。