Перейти к содержимому

Фотография

web_submit_data: Изменяемое кол-во параметров.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 Jackie

Jackie

    Постоянный участник

  • Members
  • PipPipPip
  • 206 сообщений
  • Город:Москва

Отправлено 15 июня 2006 - 17:17

Здравствуйте.
Столкнулся с интересной задачей:
Инструмент: LR 8.0
Протокол: web

ЛР записывает скрипт, в котором количество пунктов в операторе web_submit_data будет постоянно расти:

web_submit_data("MyAction",
"Action=http//MyURL",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Mode=HTML",
ITEMDATA,
"Name=leftbox", "Value=97", ENDITEM,
"Name=rightbox", "Value=97", ENDITEM,
"Name=rightbox", "Value=96", ENDITEM,
"Name=rightbox", "Value=97", ENDITEM,
"Name=rightbox", "Value=97", ENDITEM,
"Name=rightbox", "Value=15", ENDITEM,
"Name=rightbox", "Value=97", ENDITEM,
"Name=rightbox", "Value=97", ENDITEM,
LAST);

Количество rightbox-ов увеличивается с каждой итерацией, т.е. в примере, указанном выше, кол-во rightbox = 7. При следующей итерации их будет 8 и.т.д. Кто-нибудь сталкивался с подобной проблемой?

Спасибо.
  • 0

#2 Dmitry_NJ

Dmitry_NJ

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 3 122 сообщений
  • ФИО:Дмитрий Шевченко
  • Город:New Jersey, USA

Отправлено 15 июня 2006 - 21:32

Я сталкивался несколько раз с такими штуками. Проблема решается кодированием программной логики, которая будет обрабатывать динамическое число параметров ITEMDATA. Посмотрите в LR KB статью за номером 9208. Там хорошо расписана идея и есть даже пример скрипта, реализующего требуемую логику.
  • 0
Дмитрий Шевченко

HP Software

#3 Yury

Yury

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Yury

Отправлено 16 июня 2006 - 00:24

web_submit_data("MyAction",
  ITEMDATA,
  "Name=leftbox", "Value=97", ENDITEM,
  "Name=rightbox", "Value=97", ENDITEM,
  "Name=rightbox", "Value=96", ENDITEM,
  "Name=rightbox", "Value=97", ENDITEM,
  "Name=rightbox", "Value=97", ENDITEM,
  "Name=rightbox", "Value=15", ENDITEM,
  "Name=rightbox", "Value=97", ENDITEM,
  "Name=rightbox", "Value=97", ENDITEM,
                                LAST);

Просмотр сообщения

Интересно, а как всё это обрабатывается сервером?
Что он делает с несколькиими Name/Value парами с одинаковыми именами "rightbox"?
Вы не пробовали просто посылать только одно значение "Name=rightbox", "Value=97"?
Как при этом себя ведет ваше приложение?
  • 0

#4 Jackie

Jackie

    Постоянный участник

  • Members
  • PipPipPip
  • 206 сообщений
  • Город:Москва

Отправлено 16 июня 2006 - 05:24

Дмитрий, большое спасибо! :acute:
Это как раз то, что нужно.

Yury,
я не знаю, что делает сервер с этими значениями. Мне самому хотелось бы взглянуть в глаза того, кто написал такой код - если представить только, что при каждом обращенни пересылаются десятки и сотни rightbox-ов, то говорить о производительности тут не придется. :good:
Я пробовал пересылать только одно значение - тогда исчезают предыдущие введенные значения.
  • 0

#5 MidnightSun

MidnightSun

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Подцепилова Елена Владимировна

Отправлено 22 октября 2010 - 14:19

Посмотрите в LR KB статью за номером 9208. Там хорошо расписана идея и есть даже пример скрипта, реализующего требуемую логику.


Дмитрий, помогите, пожалуйста, найти эту статью.
Заранее благодарна...
  • 0

#6 Axaxa

Axaxa

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Axaxa

Отправлено 15 декабря 2010 - 14:13

Нужно вместо web_submit_data использовать web_custom_request

Вот решение:
/*	now write out changed and saved parameters		*/
	for (i = 0;  i < numrecords;  i++)
		{
		sprintf(tmpname, "xxxxxxxnts%d", i);
		lr_save_string(rget_parm(tmpname), "VALUE");
		make_html_parm("VALUE");
		strcat(wcr_buf, tmpname);
		strcat(wcr_buf, "=");
		strcat(wcr_buf, lr_eval_string("{HTML_VALUE}"));
		strcat(wcr_buf, "&");
	
		for (j = 1;  j <= 3;  j++)
			{
			sprintf(tmpname, "xxxxxxe%d_%d", j, i);
			lr_save_string(rget_parm(tmpname), "VALUE");
			make_html_parm("VALUE");

			strcat(wcr_buf, tmpname);
			strcat(wcr_buf, "=");
			strcat(wcr_buf, lr_eval_string("{HTML_VALUE}"));
			strcat(wcr_buf, "&");
			}
		}

	strcat(wcr_buf, "command=Save+Changes");

	web_reg_find("Text=Your changes have been saved", LAST);

	web_revert_auto_header("Pragma");

	lr_start_transaction("xxxxxxxxxxxxxxxx_Save");

	web_custom_request("xxxxxxxxxxxxx_3",
		"URL=http://{SERVER_NAME}/{APP_BASE_DIR}/xxxxxxxxxxxxr",
		"Method=POST",
		"Resource=0",
		"RecContentType=text/html",
		"Referer=http://{SERVER_NAME}/{APP_BASE_DIR}/CppController",
		"Snapshot=t5.inf",
		"Mode=HTTP",
		[b]wcr_buf,[/b]
		LAST);

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных