Webquerysave агенты

Тема в разделе "Lotus - Программирование", создана пользователем imendan, 22 сен 2010.

  1. imendan

    imendan Well-Known Member

    Регистрация:
    22 сен 2010
    Сообщения:
    97
    Симпатии:
    0
    Здравствуйте, коллеги! Я никогда не писал на лотусе по Веб. Нужна ваша помощь!
    При сохранении в браузере под WebQuerySave я вызываю агент X'.
    При попытке сохранения документа данный агент проводит проверку на заполняемость,
    на повторяемость, на правильность заполнения и многие другие проверки. Если что-то
    заполнено неправильно или не заполнено, то на форму должно выйти сообщение о
    текущей ошибке. Сама форма в это время должна остаться неизменной, со всеми введенными
    данными в ней. Проверка происходит правильно, сохранять не дает. Но вот alert не работает.
    Я перерыл весь интернет, сроки жмут, начальство торопит, пробовал 312 вариантов. Но ничего
    не помогло. Что делать? SOS :)
    Примерный код:
    ...
    set doc = session.DocumentContext
    if doc.Field1(0)="" then
    _ doc.SaveOptions="0"
    _ Print |<script language="JavaScript" type="text/javaScript">|
    _ Print |history.back();|
    _ Print |alert("Заполните поле FIELD1");</script>|
    _ exit sub
    end if
    ...
     
  2. xKlonx

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
    Есть серверная и клиентская обработка, алерты нужно обрабатывать на стороне клиента,а не вызовом агента

    Добавлено: В вашем случае проверку можно сделать повесив яваскрипт код на событие onSubmit. Небольшой пример:
    Код (LotusScript):
    if (document.forms[0].Phone.value=="") {
    alert('Please enter a value for the "Phone" field');
    document.forms[0].SelectProduct.selectedIndex=0;
    document.forms[0].Phone.focus();
    return false; }
    return true
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    если хоца делать валидацию на сервере - мона заюзать Ajax
    в случае ошибки - плевать xml с ошибкой и парсить клиентом (кусок extJS месюг, но их можно на алерты заменить):
    Код (Javascript):
        var xml = response.responseXML;
    if(xml) var errors = xml.getElementsByTagName('error');

    if(!errors || !errors.length)
    {
    //здесь всё ок
    }
    else
    {
    var l = errors.length;
    var msg = '';
    for(var f=0; f<l; f++)
    {
    msg += errors[f].firstChild.nodeValue+'\n';
    }
    Ext.MessageBox.alert('Ошибка', msg,
    {icon: Ext.MessageBox.ERROR});
    }
    ошибка плювается так (java, мона переделать на LS):<!--shcode--><pre><code class='java'> public void printStackTrace(Exception e){
    e.printStackTrace();
    if (pwout!=null){
    printResponseHeader();
    pwout.print("<error>");
    e.printStackTrace(pwout);
    pwout.print("</error>");
    }
    }

    public void printResponseHeader(){
    if (!isPrintedHeader && pwout!=null) {
    pwout.println ("Content-Type: text/xml; charset=UTF-8");
    pwout.println ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    pwout.println("<response>");
    isPrintedHeader=true;
    }
    }
    public void printError(String msg){
    printResponseHeader();
    pwout.println("<object>"+this.getClass().getName()+"<error>"+msg+"</error></object>");
    }
    public void printResponseEnd(){
    if (isPrintedHeader && pwout!=null) {
    if(!isPrintedEnd){
    pwout.println("</response>");
    pwout.flush();
    isPrintedEnd=true;
    }
    }
    }
    public void close(){
    printResponseEnd();
    }
    public void finalize(){
    printResponseEnd();
    }[/CODE]
     
  4. K-Fire

    K-Fire Гость

    Надо content type установить в application/script, или типа того перед тем как принты будут отрабатывать.
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    K-Fire
    это рпавильно (Content-Type принтовать), но сама логика вывода (таким образом) скрипта - несколько "убога" :)
     
  6. K-Fire

    K-Fire Гость

    А что в разработке веба на лотусе не убого скажите мне? :)

    Да и вообще любая разработка под веб убога...
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    я касательно javascript выводить, в клиента, таким образом :)
    зачем пихать клиенту то, что он сам может делать (забрать ответ об ошибке и распарсить)
     
  8. K-Fire

    K-Fire Гость

    А как он это сделает? WQS возвращает респонз, по сути это другая страница уже. Нужно придумывать геморрой типа установки некого флага, на onload запускать скрипт который проверит флаг и выдаст алерт. При корректном завершении этот флаг сбрасывать. Бррр...

    Или делать еще больший гемор с вызовом WQS агента аяксом, а потом парсить респонз и понимать что там вообще произошло? Бррр... :)
     
  9. imendan

    imendan Well-Known Member

    Регистрация:
    22 сен 2010
    Сообщения:
    97
    Симпатии:
    0
    Тогда ставится вопрос, как этим скриптом войти выполнить следующую проверку:
    (еще пару строк из первого агента):
    set view = db.GetView("viewform1check")
    key = doc.Field1(0) + doc.Field2(0) + doc.Field3(0)
    set col = view.GetAllDocumentsBuKey(key)
    if col.Count>0 then
    Print |<script language="JavaScript" type="text/javaScript">|
    Print |history.back();|
    Print |alert("Ошибка! Запрещено вручать одну и ту же награду");</script>|
    end if

    Там еще проходит проверка на существование в полях разных ненужных символов (точка и т.д.),
    а также в русских полях, проверка на существования символов казахского языка (запрещено). Может
    ли кто привести пример как это сделать, тогда можно будет всю проверку проводить просто
    JavaScript-ом изначально.
     
  10. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    это можно, посмотрите для строки indexOf и регулярки.
    единственный минус, что яваскриптовую проверку можно легко отключить, так что лучше дублировать на сервере.
    тот код, что выше- имхо, можно через аджакс-запрос к серверу.
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    ещё больший Бррр - генерить часть клиентского кода на сервере - т.е будем программить одновременно в двух местах ага :)
    понятно gwt гугл создал - там оно автоматически, но руками, по собственной воле - м-да
     
  12. imendan

    imendan Well-Known Member

    Регистрация:
    22 сен 2010
    Сообщения:
    97
    Симпатии:
    0
    А вообще, кто-нибудь знает реально ли через WQS-агент делать alert-ы на веб форму? Если да, то как,
    если нет, то почему? Плиз помогите. Просто не охота делать другими методами, там уже столько проверок выполнено, что делать это на яве или другими методами, просто большая работа. :)

    Добавлено:
    А вообще, кто-нибудь знает реально ли через WQS-агент делать alert-ы на веб форму? Если да, то как,
    если нет, то почему? Плиз помогите. Просто не охота делать другими методами, там уже столько проверок выполнено, что делать это на яве или другими методами, просто большая работа. :newconfus:
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
  14. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Конечно реально, лет 15 уже:) Точно так же как и на других платформах - на PHP как это происходит?
    Сабитятся форма, апликуха проводит проверки и плюют обратно морду лица с внедренным уже алертом:)
    Есть более изящный варианты, когда перед сабмитом или в процессе ввода данных проверяются поля формы на валидность - тут уж AJAX вам в руки. Т.е. через AJAX запрос посылается значения полей и возвращается результат проверки. Т.е. ваши наработки можно сохранить:)
     
  15. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    я это предлагал - отвергают ;)
     
  16. imendan

    imendan Well-Known Member

    Регистрация:
    22 сен 2010
    Сообщения:
    97
    Симпатии:
    0
    :lovecodeby: Imike! Спасибо большое за совет! Я пришел к тому, что без Ajax не обойтись :)
    Честно говоря, я даже воспользоваться вашими не знаю как? может еще что-нибудь предложите?
    или скинете самый минимальный пример. а то никак ((( вообще не догоняю...
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    IMENDAN
    дык выше и написано - там минимум кода, что в нём непонятно?
    pw.println - это Print на LS
    в случае ошибки вызыв. либо эксепшн с printStackTrace либо printError

    close вызывается по окончании агента

    ну там защита от повторной печати хидера и закрывающего тега

    всё выводится строками, с нодами XML (какие пожелаете)
    на клиенте анализируется ответ (код javascript)
     
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
Загрузка...

Поделиться этой страницей