Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по очистке полей
Форум программистов > Базы данных и администрирование > Lotus > Lotus - Программирование
Gor
Делаю бланк тестирования под WEB.

Возникла проблема.
На форме с тестированием на WebQueryOpen вешаю формульку для очистки всех полей от прошлых результатов.

@SetField("Reason1";"");
@SetField("Reason1_1";"");


В результате Одно поле чистится и срабатывает поле InputValidation, а другое не чистится...
В Input Validation в полях проверка @If(@ThisValue="";@Failure(ValidationErrorMsg+"You doesn't fill all fields");@Success)

Валидация не срабатывает изза того что не срабатывает WebQueryOpen одинаково для всех полей.

Поле Reason1 текстовое editable обычное
Поле Reason1_1 Radio button editable

Вот как раз @SetField("Reason1_1";""); не отрабатывается... Почему???

Как привести поле radio button к значению "" на момент открытия формы в WEB???
Gor
Дело в том что проблема точно в виде поля...
Пробовал менять поле Radiobutton на Editable. И на это же самое поле с таким же именем только другого типа Input Validation отрабатывает(((
Что делать??? Как всё таки почистить Radiobutton при открытии заявки в WEB до значения "" ???
Gor
Может быть кто нибудь тогда подскажет как сделать провеку поля на пустоту на JS?
Может у кого нибудь примерчик есть какой нибудь?
Akupaka
не используй ты эти InputValidation, сделай проверку JS, а потом дополнительно LS-проверку, на случай, если JS обойдут...

по JS смотри циклы, метод document.getElementsByName()
алгоритм такой, радио-группа с именем поля Radio1 будет представлена набором html-элементов на странице, поэтому тебе нужно взять их все, и проверить, что какой-то отмечен - имеет свойство checked = true
а в LS просто берешь значение итема Radio1, и сравниваешь с нужным...
Gor
Цитата
не используй ты эти InputValidation, сделай проверку JS, а потом дополнительно LS-проверку, на случай, если JS обойдут...

по JS смотри циклы, метод document.getElementsByName()
алгоритм такой, радио-группа с именем поля Radio1 будет представлена набором html-элементов на странице, поэтому тебе нужно взять их все, и проверить, что какой-то отмечен - имеет свойство checked = true
а в LS просто берешь значение итема Radio1, и сравниваешь с нужным...


Ок спасибо)
А вот эту проверку на JS script на каком событии делать???
На кнопке Submit??? Но у меня там же на формулах запуск агентов...Как сделать так чтобы сначала
поля проверить а потом агентов запустить Лотусовых типа @Do(@Command([ToolsRunMacro]; "(MegaFoodSubmitVote)");@Command([FileSave]);@Command([FileCloseWindow]))?
И не подскажете ещё какой нибудь ресурс где про JS под Лотус почитать можно??
Gor
Не пойму почему не получается проверка((

На OnClick поля радиобаттон повесил

// Радиобаттон выбран
function isValidRadio(UserInput_6) {
var valid = false;
for (var i = 0; i < UserInput_6.length; i++) {
if (UserInput_6[i].checked) {
return true;
}
}
alert("Выберете радиобаттон.");
return false;
}

По нажатию на кнопку Submit <input type="button" onclick="this.form.submit();" />
при неотмеченном поле ошибка не выходит ((( Почему?(
Akupaka
нету JS под нотес, во всяком случае, я нигде не нашел где описан JS работающий под нотесом, а на веб-страницах самый обычный JS, который работает в браузере! соотв, любую литературу можешь взять, их много, я сам пользуюсь MSDN, но он очень сильно заточен под IE...

для того, чтобы сделать проверки JS, то можно поступить разными способами, можно на сабмит, можно на кнопку, все зависит от того, как твой пользователь работает с документом!
например,
- на onSubmit можно прописать нужные проверки на JS, потом кликнуть по какой-то кнопке, которая уже запустит твой агент;
- можно поменять action для формы, и запустить нужный код, но это не самый удобный вариант, т.к. домино туда формирует нужный код, и его придется сохранять, чтобы потом выполнить, в общем, не самый удобный;
- если твой пользователь в конце работы с документом обязан нажать какую-то кнопку, то это не обязательно должна быть кнопка типа submit!, даешь ему другую кнопку, которая сначала выполняет проверки, потом либо кликает по кнопке, которая выполняет формулу, либо сама ж вызывает сабмит формы;

чтобы кодом кликнуть по кнопке нужно, чтобы была сама кнопка с указанным name и/или id, часто хорошо, если они одинаковые, т.е. на странице, в конце концов, должен появиться
<input type=button id="myButton1" value="clickMe" />

а код, который по ней кликает, может быть таким:
document.getElementById("myButton1").click();



------------------------------------------------------------------------------------------------------------------
потому что ты не вызов функции сделал, а объявил метод внутри функции обработчика...

повесь свою функцию в JS Header и запусти ее на обработчик onSubmit
Gor
Сделал следующим образом для полей типа text и radiobutton функция checkform

//var buttonClicked = '';
function checkform(form)
{
//    if (!(buttonClicked=='button')) return true;
    if  ( form.Reason1.value == '' ) {
        alert('Validation error: Please fill in "Вопрос1 field.');
        form.Reason1.focus(); return false;
    };
    var IsChecked = false;
    var TypeValue = '';
    for (var i=0; i<form.UserInput_6.length; i++)
    {
        if (form.UserInput_6[i].checked) {IsChecked=true;TypeValue=form.UserInput_6[i].value;break}
    }
    if (!IsChecked) {alert('Вопрос 2 field.');return false};}


повесил на JS Header... и вызываю по кнопке
<input type="button" onclick="checkform(form);" />
работает))

Но чёто я всё равно не совсем понял как сейчас если ошибок не появилось запустить код @Do(@Command([ToolsRunMacro]; "(MegaFoodSubmitVote)");@Command([FileSave]);@Command([FileCloseWindow])) по этой же самой кнопке??
Akupaka
smile.gif
сделай еще в JS Header функцию, например, MySubmit(), если твоя функция checkform возвращает true, если все хорошо, то можно ее такой сделать:

function MySubmit() {
if (checkform(document.forms[0]))
  document.getElementById("nextAction").click();
};


где nextAction - кнопка форме, у которой id = "nextAction", а на этой кнопке свои собаки напиши

тогда, если проверка проходит удачно, то JS "кликнет" по нужной кнопке, и запустится собака...

надеюсь, понятно все smile.gif
Gor
ну вроде понятно=)) только не работает)

мой jsHeader

function MySubmit() {
if (checkform(document.forms[0]))
  document.getElementById("nextAction").click();
};

//var buttonClicked = '';
function checkform(form)
{
//    if (!(buttonClicked=='button')) return true;
    if  ( form.Reason1.value == '' ) {
        alert('Validation error: Please fill in "Вопрос1 field.');
        form.Reason1.focus(); return false;
    };
    var IsChecked = false;
    var TypeValue = '';
    for (var i=0; i<form.UserInput_6.length; i++)
    {
        if (form.UserInput_6[i].checked) {IsChecked=true;TypeValue=form.UserInput_6[i].value;break}
    }
    if (!IsChecked) {alert('Вопрос 2 field.');return false};}


сделал кнопку обычную. В её закладке Html-> tag-> id = nextAction

И на картинке по событию Onclick -> MySubmit()

Проверки полей проходят, а вот агент не запускается)

@Do(@Command([ToolsRunMacro]; "(MegaFoodSubmitVote)");@Command([FileSave]);@Command([FileCloseWindow]))
Akupaka
а ты уверен, что твоя функция проверки возвращает true? smile.gif
добавь в ее конец возврат true:

if (!IsChecked) {alert('Вопрос 2 field.');return false}; return true}
Gor
добавил biggrin.gif
Теперь когда заполняешь все поля браузер ругается Error on page=)))

Может здесь чёто не так?

function MySubmit() {
if (checkform(document.forms[0]))
  document.getElementById("nextAction").click();
};
Akupaka
ну, ты бы для примера привел текст ошибки, что ли smile.gif

но, если он ругается на document.getElementById("nextAction"), значит у тебя нету в html'е элемента с таким айди, проверь исходники страницы, если такого элемента действительно нет, а кнопка есть, то значит она скрыта, а ее надо скрыть не от "страницы", а от юзеря, для этого нужно либо у нее прописать стиль display:hidden, либо поместить ее в какой-нить div с таким стилем...
Gor
Цитата
но, если он ругается на document.getElementById("nextAction"), значит у тебя нету в html'е элемента с таким айди, проверь исходники страницы, если такого элемента действительно нет, а кнопка есть, то значит она скрыта, а ее надо скрыть не от "страницы", а от юзеря, для этого нужно либо у нее прописать стиль display:hidden, либо поместить ее в какой-нить div с таким стилем...


да, действительно не находил, изза того что кнопка скрыта была... как кнопку открыл всё отработало
вот и откуда узнать такие тонкости?))

прописал в кнопке в закладке html - > display:hidden почему то всё равно видна(
буду пытаться в div засунуть тогда
Akupaka
надо в раздел Html tags / Style прописывать

тонкости эти - практика
Gor
надо в раздел Html tags / Style прописывать

А где этот раздел находится?
Akupaka
шутник однако smile.gif

раздел Html tags на последней закладке у свойств кнопки, а чуть ниже полей id, name и т.п., есть Style
Gor
конец дня наверно сказывается))
=)) ну я это и имел ввиду в моём сообщении выше -
Цитата
прописал в кнопке в закладке html - > display:hidden почему то всё равно видна(


т.е. в кнопке то я уже прописал display:hidden а кнопка всё равно не скрывается
Akupaka
ану-ка скинь в студию html твоей видимой кнопки со страницы smile.gif
Gor
<input type="button" value="nextAction" id="nextAction" style="display:hidden" onclick="return _doClick('C325742E0026962F.67d3ce88d2ec7980c325742e0026e8cf/$Body/0.8D52', this, null)"></td></tr>
smile.gif
Akupaka
ой, моя ошибка... display:none правильно писать...
вот нечего слушать каких-то там программистов с форума, надо справочник юзать wink.gif
Gor
Спасибо огромное за выдержку и терпение))) получилось))
Akupaka
нзч, это тоже практика wink.gif
Gor
Назрел ещё один вопрос smile.gif

Делаю как я уже говорил бланк тестирования. Необходимо сделать так, чтобы
люди, которые уже голосовали не могли проголосовать 2 раза. Для этого я сделал поле в которую записываются люди которые
голосовали ранее

@SetField("AlreadyVotedPersons";@Trim(AlreadyVotedPersons:@UserName));
@Success


Опять же вопрос, как мне им выдавать ошибку о том что они уже голосовали?

Повесил на button такой код

@If(@IsMember(@UserName; AlreadyVotedPersons); @Failure("Error: You have already voted"); @Do(@Command([ToolsRunMacro]; "(MegaFoodSubmitVote)")

К сожалению ошибка не выскакивает а просто не проходт Submit формы...(
Medevic
У тебя все голосуют в одном документе? Зачем так? Почему бы не сделать каждый голос отдельным документом.
Тогда проверку можно запихнуть в агент.
Gor
Да, голосуют все в одном... Да мне казалось что так удобнее будет в одном документе хранится история всех тех кто проголосовал.
В агенте у меня обработка ошибок вся есть. Но агент же не позволит визуализировать ошибки в WEB в риал тайме? А у меня именно проблема с визуализацией ошибок... Т.е. как пользователю вывести сразу на экран после того как он нажал на кнопку, что тестирование он уже проходил, беря значение из поля в текущей документе...
В агенте проверяется одной строчкой - If Instr(Join(doc.AlreadyVotedPersons), doc.Originator(0))>0 Then...
Medevic
Имхо, в отдельном будет лучше.
Проверку можно сделать как в WebQueryOpen(т.е. до открытия документа), так и в WebQuerySave(после submit, но это плохо).
В первом случае можно вывести сообщение, что пользователь уже голосовал. Причем можно вывести его результаты и даже дать возможность изменить что-то.

Цитата(Gor @ 14:08:2008 - 09:43) *
Т.е. как пользователю вывести сразу на экран после того как он нажал на кнопку, что тестирование он уже проходил, беря значение из поля в текущей документе...

Т.е. пользователь проголосовал, нажал кнопку, а ему сообщение, что он уже голосовал. Так неправильно делать. Зачем ему терять время?

Хотя насчет вывода сообщения я не уверен, но показать, что он голосовал можно. smile.gif
Akupaka
я бы сделал так:

- каждое голосование / тест в отдельном доке;
- начать голосование можно лишь нажав на определенную кнопку, которая располагается в виде, на какой-то форме, но не открывая документ голосования;
- кнопка запустила бы урл-агент (запускается от имени пользователя), агент бы проверил голосовал ли текущий юзер по определенной теме, т.е. есть ли уже документ голосования;
- если документ есть, агент принтит сообщение, что голосование уже было и либо ничего не делает, либо открывает тот документ где юзер уже голосовал;
- если документа нету - агент открывает урл нового согласования обычным принтом команды OpenForm, либо сначала создает на бэк-энде документ, сохраняет его и открывает принтя урл-команду EditDocument, что предпочтительнее;
- если выбрали вариант создания нового дока по урлу, то в агенте WebQueryOpen придется сделать доп. проверку наличия голосования, на случай, если "умный" юзер сам пойдет по урлу, а не через агент, и, если голосование было, то прописать в доке поле, которое должно быть проверено JS на onLoad, если там флаг, что было согласование, то поступать как агент - сообщение и закрытие, либо открытие старого дока-голосования...
Gor
На самом деле уже неохото переделывать угента по формированию отчётов в Excel...
Что я хочу сделать ещё это только проверить поле AlreadyVotedPersons. Ведь мой вариант тоже имеет право на жизнь?)

Так значит такого рода проверка походит?

@If(@IsMember(@UserName; AlreadyVotedPersons); @Failure("Error: You have already voted"); @Success);

Она у меня почему то не срабатывает на WebQueryOpen документа....не принтится ошибка....Главный вопрос как её вывести на экран например по открытию дока и прервать дальнейшие действия с документом?
Или как вывести ошибку на экран в веб по проверке If Instr(Join(doc.AlreadyVotedPersons), doc.Originator(0))>0 Then в скриптовом агенте??
Medevic
В WebQueryOpen нужно писать имя агента.

Цитата(Gor @ 14:08:2008 - 10:38) *
Или как вывести ошибку на экран в веб по проверке If Instr(Join(doc.AlreadyVotedPersons), doc.Originator(0))>0 Then в скриптовом агенте??

Print "<H1>Ошибка</H1>"
Akupaka
не ребята, принты в WQO игнорируются, придется писать в какое-то поле, и зачитывать на onLoad...
Medevic
Цитата(Akupaka @ 14:08:2008 - 11:19) *
не ребята, принты в WQO игнорируются, придется писать в какое-то поле, и зачитывать на onLoad...

Это да. Но не понятно где надо сообщение выводить. По submit или при открытии. smile.gif
Akupaka
что ж тут не понятного? - при открытии smile.gif
зачем сабмита дожидаться? ты же сам писал: "Зачем ему терять время?" wink.gif

еще можно поле, в котором флаг будет, в самом верху страницы уцепить, а за полем сделать <script>, в котором будет проверка, тогда можно даже до формирования документа выдать сообщ, и закрыться
Medevic
Цитата(Akupaka @ 14:08:2008 - 11:33) *
зачем сабмита дожидаться? ты же сам писал: "Зачем ему терять время?" wink.gif

Это я так думаю. А как Gor хочет я не знаю. smile.gif
Gor
Сделал проверку на JS. Правда повесил её всё таки на Submit=)) Нашёл на JS explode и пример массива)
Спасибо за помошь!!
Akupaka
ну, вот зачем с самого начала учиться плохому? smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.