I was working on a project where there was a scenario of searching for a course by its first name or wild cards. The search returns different number of results for different queries. This request is followed by another web_submit_data where the ITEMDATA depends on number of search results.
There are three dynamic variables here – length of the course variable, results returned and the third one being the ITEMDATA of the request itself.
The solution is to build dynamic data on the fly and create a web_custom_request for the web_submit_data
The following function will build the item data -
const char* BuildItemData(int pageSize,const char*ItemDataStart,const char*ItemDataEnd, int lengthOfCourseVar, const char* ArrayName){
char* ItemData;
There are three dynamic variables here – length of the course variable, results returned and the third one being the ITEMDATA of the request itself.
The solution is to build dynamic data on the fly and create a web_custom_request for the web_submit_data
The following function will build the item data -
const char* BuildItemData(int pageSize,const char*ItemDataStart,const char*ItemDataEnd, int lengthOfCourseVar, const char* ArrayName){
char* ItemData;
int iCount,lengthOfOneItem;
lengthOfOneItem = lengthOfCourseVar+strlen(ItemDataStart)+strlen(ItemDataEnd);
ItemData = (char*)malloc((pageSize*(lengthOfOneItem))*sizeof(char));
ItemData[0]=”;
for(iCount=1;iCount<=(pageSize);iCount++)
{
strcat(ItemData,ItemDataStart);
strcat(ItemData,lr_paramarr_idx(ArrayName,iCount));
strcat(ItemData,ItemDataEnd);
}
return ItemData;
}
I changed the web_submit_data to web_custom_request and used the string output as a parameter like this:
lr_save_string( BuildItemData(lr_paramarr_len(“cor_Arr_ClassIDs”),”offId[]=class”,”&”,strlen(lr_paramarr_idx(“cor_Arr_ClassIDs”,1)),”cor_Arr_ClassIDs”),
“ItemDataOnTheFly” );
web_custom_request(“xxxxxxx.aspx”,
“URL=https://{par_Environment_URL}/xxxxxx/xxxxxx.aspx”,
“Method=POST”,
“TargetFrame=”,
“Resource=0″,
“RecContentType=text/html”,
“Referer=https://{par_Environment_URL}/xxx/xxx/xxx/xxxx/xx/xxxxxx?xxxxxx={par_Location}”,
“Snapshot=t12.inf”,
“Mode=HTML”,
“EncType=application/x-www-form-urlencoded; charset=utf-8″,
“Body={ItemDataOnTheFly}&lrnid=xxxxx/{par_UserID}”,
LAST);
lengthOfOneItem = lengthOfCourseVar+strlen(ItemDataStart)+strlen(ItemDataEnd);
ItemData = (char*)malloc((pageSize*(lengthOfOneItem))*sizeof(char));
ItemData[0]=”;
for(iCount=1;iCount<=(pageSize);iCount++)
{
strcat(ItemData,ItemDataStart);
strcat(ItemData,lr_paramarr_idx(ArrayName,iCount));
strcat(ItemData,ItemDataEnd);
}
return ItemData;
}
I changed the web_submit_data to web_custom_request and used the string output as a parameter like this:
lr_save_string( BuildItemData(lr_paramarr_len(“cor_Arr_ClassIDs”),”offId[]=class”,”&”,strlen(lr_paramarr_idx(“cor_Arr_ClassIDs”,1)),”cor_Arr_ClassIDs”),
“ItemDataOnTheFly” );
web_custom_request(“xxxxxxx.aspx”,
“URL=https://{par_Environment_URL}/xxxxxx/xxxxxx.aspx”,
“Method=POST”,
“TargetFrame=”,
“Resource=0″,
“RecContentType=text/html”,
“Referer=https://{par_Environment_URL}/xxx/xxx/xxx/xxxx/xx/xxxxxx?xxxxxx={par_Location}”,
“Snapshot=t12.inf”,
“Mode=HTML”,
“EncType=application/x-www-form-urlencoded; charset=utf-8″,
“Body={ItemDataOnTheFly}&lrnid=xxxxx/{par_UserID}”,
LAST);