動的データ

Siebel HTTP トラフィックには、HTTP リクエストでサーバーに送信されるさまざまな動的データが含まれます。このようなデータは、前のサーバー レスポンスから解析することができ、ハードコード値の変わりにスクリプトで置換されます。

次のデータが含まれます。

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"