1. Уважаемые участники и гости, 19 октября codeby будет работать в режиме "Только чтение". Регистрация новых участников будет закрыта. 20 октября портал продолжит работу в прежнем режиме.

Отображение ответа в Web

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

  1. killa007

    killa007 Гость

    Репутация:
    0
    народ, помогите, пожалуйста!
    Необходимо из вьюшки создавать ответный документ по нажатию кнопки. Форма для ответа создана, Кнопка "response" на вьюшке тоже (@Command([ComposeWithReference]; ""; "resp"; 2)). Вопрос вот в чем: при нажатии в Internet explorer созданной мной кнопки, выскакивает ошибка 500! В чем же дело? причем если форму "resp" сделать простой, а не response, то все открывается без проблем...:)
     
  2. K-Fire

    K-Fire Гость

    Репутация:
    0
    Гмм, а как вы себе в вебе представляете определение кто для респонза является парентом? ;)
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
     
  4. killa007

    killa007 Гость

    Репутация:
    0
    Видите ли, я всего лишь начинающий, а сделать нужно много за маленький промежуток времени...;)никак не представляю, как определить в вебе парента для респонза:) потому я сюда и написал
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    не отмазывайся, читай то, что тебе написали, думай, задавай вопросы! ;)
    с помощью кнопки и js можно открыть урл по форме (выше описание из справки)
    http://host/database/form?OpenForm&ParentUNID=mainunid
    документ, который создается при этом будет "думать", что он дочерний от того, чей унид указан параметром ParentUNID
     
  6. killa007

    killa007 Гость

    Репутация:
    0
    2 akupaka.
    Спасиба, но @Command([Compose],"resp"); работать тоже не хочет. В content help есть указание на то, что необходимо в form formula у вьюшки написать следующую команду: @If(@IsNewDoc; @Return(Form); @IsResponseDoc;"Response";"MainTopic"), однако это тоже не возымело эффекта...
    Кста, а как работать с UNIDами? назначать или ...?
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    ну, чтение хелпа это хорошо, но ты куда-то не туда ушел :)

    итак, формулы!
    объяснять буду просто, не используя ничего лишнего! рекмендую сначала тоже создать минимум для примера, чтобы понять как работает, а потом переделывать существующее приложение под веб.

    1) создай на сервере (лучше) базу для тестов, дай доступ Anonymous - Author (чтобы без аутентификации работать)
    2) создай форму для основного (родительского дока), тип Document, имя/alias "WebMain"
    - помести на ней поле "thisUnid" тип text - computed when composed, формула @Text(@DocumentUniqueID)
    - помести кнопку Save: @Command([FileSave])
    - помести кнопку Compose Resp: @Command([Compose]; "WebResp")
    3) создай форму для ответного (дочернего дока), тип Response или Response to Response, имя/alias "WebResp"
    - помести на ней поле "thisUnid" тип text - computed when composed, формула @Text(@DocumentUniqueID)
    - помести кнопку Save: @Command([FileSave])

    теперь попробуй создать в веб новый родительский документ, зайдя по урлу
    http://servername/dbname.nsf/WebMain?OpenForm
    откроется форма с полем и двумя кнопками. в виду описанной выше особенности в поле будет некоторое значение-унид, но после нажатия на кнопку сохранения он изменится. именно после сохранения дока (в веб) значение будет реальным унидом, до сохранения - фигня.
    (если нажать на кнопку Compose Resp до сохранения, то будет ошибка 500 - сервер попытается создать дочерний док к несуществующему, где-то там у него возникнет исключение и браузер покажет сообщение об 500-й ошибке)
    теперь, после сохранения, нажми на кнопку Compose Resp. откроется (в текущем окне) новая форма - дочернего дока. как и прежде поле с унидом будет содержать фигню.
    но нам интересно, что URL открытого дока будет иметь не просто вид http://servername/dbname.nsf/WebResp?OpenForm,
    а там появится еще параметр http://servername/dbname.nsf/WebResp?OpenForm&ParentUNID=хххххххххххххххххххххххххххххххх
    где хххххххххххххххххххххххххххххххх будет иметь значение такое же, как в предыдущем документе в поле (т.е. реальный унид родительского документа!).
    единственное, что получить его в дочернем доке с помощью привычной формулы @InheritedDocumentUniqueID нельзя.
    нужно распарсить URL такой формулой @UrlQueryString("ParentUNID")

    теперь добавь на форму WebResp еще поле "ParentUNID" text, computed when composed с формулой @UrlQueryString("ParentUNID")
    и попробуй создать снова новый родительский док, сохранить его, потом нажать Create Resp. в новом родительском доке будет второе поле, с тем же значением, что и в URL-параметре ParentUNID.

    все. у тебя есть простой механизм создания основного и ответного к нему документа.

    зы: к сожалению, такой простой способ не всегда самый удобный. но для понимания принципов лучше начинать с простого.
    зы2: ты javascript знаешь? веб-страницы умеешь делать? в домино-приложениях полный новичек или под нотес умеешь писать?..
     
  8. killa007

    killa007 Гость

    Репутация:
    0
    спасибо, Akupaka, за простой и понятный пример:) в нем-то я разобрался. JS, Perl знаю немного, web-странички писать умею, и скрипты к ним, а вот в Lotus - новичек, только в рамках учебного курса в институте владею.
     
  9. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    ну, раз разобрался, то спрашивай дальше :)
     
  10. killa007

    killa007 Гость

    Репутация:
    0
    Возник новый вопрос - чтобы сделать респонз из вьюшки, необходимо ParentUnid куда-нить записать, а затем вставить оттуда в адресную строку(этго если я все правильно понимаю). Так вот, есть ли какие @commands, позволяющие помещать и извлекать текст из, скажем, поля?
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    вообще, я из стандартных средств не помню возможности создать в вебе ответный по выделенному в виде...
    чтобы из вида в вебе создать дочерний придется поиграться с JS и, возможно, вид определенным образом подстроить...
    посмотри, что твой вид генерит в html, можешь ли ты оттуда вытащить унид дока, который выделяешь для создания дочернего?

    если включить возможность выделения доков в вебе (свойства вида, 5-я закладка, Web Access / Allow selection of documents), то каждый "док" будет содержать чекбокс (<INPUT TYPE=checkbox NAME="$$SelectDoc" VALUE="EE433F6647FBD158C22575C1002B19F8">) из которого можно достать унид. т.е. можно написать скрипт, который будет определять выделенный док и открывать урл
    т.е. тут чистый JS-скрипт.
    вот пример, возможно не самый лучший, но рабочий :)
    в виде две кнопки:
    Create Main: Client/Formula:
    Код:
    @Command([Compose]; "WebMain")
    Create Resp: Web/java script:
    Код:
    var selDoc = document.getElementsByName("$$SelectDoc");
    var parentUNID = "";
    var respURL = "";
    if (selDoc.length > 0) {
    for (var i = 0; i < selDoc.length; i++) {
    if (selDoc[i].checked) {
    parentUNID = selDoc[i].value;
    break;
    }
    };
    };
    respURL = "WebResp?OpenForm&ParentUNID=" + parentUNID;
    //alert(respURL);
    window.open(respURL);
    если поставить галочку в виде и нажать на Create Resp, то откроется новое окно с новым дочерним доком к первому выделенному в виде...
     
  12. killa007

    killa007 Гость

    Репутация:
    0
    Офигеть....Пасиба:)
     
Загрузка...

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