Example: web_reg_save_param
The following examples are presented for web_reg_save_param.
- Example 2: Saving a text by using binary boundaries
- Example 3: Saving a text specified with an offset and length
- Example 4: Boundaries containing special characters
Example 1: Saving simple text strings
In this example, web_reg_save_param is used to save a value from the response to a web_submit_form call. The value saved is used in a subsequent web_submit_form call.
In the Mercury Tours sample program, the server response to the web_submit_form call below contains the following radio button options:
FlightDeparture timeCost
outboundFlight value=230;378;11/20/2003 checked >Blue Sky Air 2308am$ 378
outboundFlight value=231;337;11/20/2003>Blue Sky Air 2311pm$ 337
and so on.
To submit a reservation, the outboundFlight value is required. web_reg_save_param is used to save the outboundFlight value.
Case of saving a single string
To reserve the default flight, save the "checked" value, and pass it to web_submit_form. The html segment for the default value is:
name=outboundFlight value=230;378;11/20/2003 checked >
/*This web_reg_save_param call applies to the following action function: web_submit_form. */
web_reg_save_param("outFlightVal",
"LB=outboundFlight value=", "RB= checked >", LAST);
web_submit_form("reservations.pl",
"Snapshot=t4.inf",
ITEMDATA,
"Name=depart", "Value=
"Name=departDate", "Value=11/20/2003", ENDITEM, "Name=arrive", "Value=
"Name=seatPref", "Value=None", ENDITEM,
"Name=seatType", "Value=Coach", ENDITEM,
"Name=findFlights.x", "Value=83", ENDITEM,
"Name=findFlights.y", "Value=16", ENDITEM,
LAST);
/*
The result of the web_reg_save_param having been called before the web_submit_form is:
Action.c(15): Notify: Saving Parameter "outFlightVal = 230;378;11/20/2003"
*/
// Now use the saved outFlightVal
web_submit_form("reservations.pl_2",
"Snapshot=t5.inf",
ITEMDATA,
"Name=outboundFlight", "Value={outFlightVal}", ENDITEM,
"Name=reserveFlights.x", "Value=92", ENDITEM,
"Name=reserveFlights.y", "Value=10", ENDITEM,
LAST);
/*
Action.c(34): Notify: Parameter Substitution: parameter "outFlightVal" = "230;378;11/20/2003" */
Case requiring handling arrays
If you want to test the last option returned by the web_submit_form call, save all the matches and then handle the array.
This example shows the use of web_reg_save_param with "ORD=ALL" to get an array of parameters. The last item in the array is then used to correlate a web_submit_form call.
char outFlightParam[50]; // The name of the parameter for correlation
char outFlightParamVal[50]; // The formatted value of outFlightParam
/*
This web_reg_save_param call applies to the following action function, web_submit_form. Because of the "ORD=ALL" argument, it saves all the values that have the given left and right boundaries to an array of parameters.
The SaveLen argument is used to restrict the length to 18 characters because the default value is "230;378;11/20/2003 checked >". We restrict the length so as not to capture the " checked ".
*/
web_reg_save_param("outFlightVal",
"LB=outboundFlight value=", "RB=>",
"ORD=ALL",
"SaveLen=18",
LAST);
web_submit_form("reservations.pl",
"Snapshot=t4.inf",
ITEMDATA,
"Name=depart", "Value=
"Name=departDate", "Value=11/20/2003", ENDITEM,
"Name=arrive", "Value=
"Name=returnDate", "Value=11/21/2003", ENDITEM,
"Name=numPassengers", "Value=1", ENDITEM,
"Name=roundtrip", "Value=
"Name=seatPref", "Value=None", ENDITEM,
"Name=seatType", "Value=Coach", ENDITEM,
"Name=findFlights.x", "Value=83", ENDITEM,
"Name=findFlights.y", "Value=16", ENDITEM,
LAST);
/*
The result of the web_reg_save_param having been called before the web_submit_form is:
Notify: Saving Parameter "outFlightVal_1 = 230;378;11/20/2003"
Notify: Saving Parameter "outFlightVal_2 = 231;337;11/20/2003"
Notify: Saving Parameter "outFlightVal_3 = 232;357;11/20/2003"
Notify: Saving Parameter "outFlightVal_4 = 233;309;11/20/2003"
Notify: Saving Parameter "outFlightVal_count = 4"
The next problem is to get the highest array element, identified with the parameter outFlightVal_count. This parameter is automatically created by the script recorder. You do not have to enter anything in the script.
*/
/* Get the name of the parameter, in this case "outFlightVal_4".
Put it in brackets so it can be an input to an lr_eval_string call.
Note that the brackets in the second argument to sprintf are not indicating a script parameter to sprintf. They are string literals that will be part of outFlightParam after the call.
In the second call to sprintf, those brackets indicate a parameter to lr_eval_string.
*/
sprintf(outFlightParam, "{outFlightVal_%s}",
lr_eval_string("{outFlightVal_count}"));
/* outFlightParam is now "{outFlightVal_4}" */
/* Now get the "Value" argument for web_submit_form, in the
format "Value=xxxx")
*/
sprintf(outFlightParamVal, "Value=%s",
lr_eval_string(outFlightParam));
lr_message("The value argument is : %s", outFlightParamVal);
// The value argument is : Value=233;309;11/20/2003
/* Now the string outFlightParamVal can be passed
to web_submit_form */
web_submit_form("reservations.pl_2",
"Snapshot=t5.inf",
ITEMDATA,
"Name=outboundFlight",outFlightParamVal, ENDITEM,
"Name=reserveFlights.x", "Value=92", ENDITEM,
"Name=reserveFlights.y", "Value=10", ENDITEM,
LAST);
Example 2: Saving a text by using binary boundaries
The following example uses BIN type boundaries. The left boundary is composed of 3F and DD. The right boundary is composed of CC and b.
web_reg_save_param("p", "LB/BIN=\\x3F\\xDD", "RB/BIN=\\xCCb", LAST);
Example 3: Saving a text specified with an offset and length
The following example specifies an offset and length. The boundaries for the HTML string "Astra on TESTSERVER", are "Astra " (note the space which follows the word) and "TestServer". This should return "on" but since the offset is 1 (i.e. start at the second character) and the length of data to save is 1, then the string saved to TestParam is "n".
web_reg_save_param("Param1", "LB=Astra ", "RB= TESTSERVER",
"SaveOffset=1", "SaveLen=1", LAST);
Example 4: Boundaries containing special characters
The following example shows the use of escaping in the C language when the boundaries contain special characters.
The following HTML segment contains new line characters (paragraph markers) after each "" and quote marks around each class name. We want to save "Georgiana Darcy" to parameter "UserName". The segment containing the new line and quotes has to be included in the left boundary because "Name:", which precedes the segment, is required for the occurrence to be unique. The ORD attribute cannot be used in this case because the length of the list preceding the relevant element varies.
UserID:
Revere18041775
Name:
Georgiana Darcy
Company:
Pride and Prejudice
The function is:
web_reg_save_param("UserName",
"LB=Name: \n \"surveyAnswerReview\">",
"RB=
",
LAST);
Note the \n for the new line character, and that the quote characters need to be escaped: \".