ОБСУЖДЕНИЕ

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

11 ответов 5,4 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
народ, помогите, пожалуйста!
Необходимо из вьюшки создавать ответный документ по нажатию кнопки. Форма для ответа создана, Кнопка "response" на вьюшке тоже (@Command([ComposeWithReference]; ""; "resp"; 2)). Вопрос вот в чем: при нажатии в Internet explorer созданной мной кнопки, выскакивает ошибка 500! В чем же дело? причем если форму "resp" сделать простой, а не response, то все открывается без проблем...:)
 
Гмм, а как вы себе в вебе представляете определение кто для респонза является парентом? ;)
 
ComposeWithReference @Command
...
This command does not work on the Web
@Commands on the Web
...
Compose
The Compose @command creates a new document.
To create a main document in the current database, specify only the form parameter and implement Compose in a view, page, or navigator. The following example, implemented as a view action, creates a main document based on the "Main Topic" form.
@Command([Compose]; "Main Topic")
To create a response document, specify the @command as above but implement it in an open document. For example, if the following code is implemented as an action on the "Main Topic" form, opening a document based on that form and pressing the button creates a response document:
@Command([Compose]; "Response")
To create a main document in another database, specify the database and form parameters. You must specify server as an empty string because the browser cannot access another server. The following example creates a new document in "document examples.nsf" based on the "Main Topic" form in that database.
@Command([Compose]; "" : "document examples.nsf"; "Main Topic")
These @commands are equivalent to URL commands formatted as follows:
http://host/database/view?OpenForm
http://host/database/form?OpenForm&ParentUNID=mainunid
 
Видите ли, я всего лишь начинающий, а сделать нужно много за маленький промежуток времени...;)никак не представляю, как определить в вебе парента для респонза:) потому я сюда и написал
 
Видите ли, я всего лишь начинающий
не отмазывайся, читай то, что тебе написали, думай, задавай вопросы! ;)
с помощью кнопки и js можно открыть урл по форме (выше описание из справки)
http://host/database/form?OpenForm&ParentUNID=mainunid
документ, который создается при этом будет "думать", что он дочерний от того, чей унид указан параметром ParentUNID
 
2 akupaka.
Спасиба, но @Command([Compose],"resp"); работать тоже не хочет. В content help есть указание на то, что необходимо в form formula у вьюшки написать следующую команду: @If(@IsNewDoc; @Return(Form); @IsResponseDoc;"Response";"MainTopic"), однако это тоже не возымело эффекта...
Кста, а как работать с UNIDами? назначать или ...?
 
ну, чтение хелпа это хорошо, но ты куда-то не туда ушел :)

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

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 знаешь? веб-страницы умеешь делать? в домино-приложениях полный новичек или под нотес умеешь писать?..
 
спасибо, Akupaka, за простой и понятный пример:) в нем-то я разобрался. JS, Perl знаю немного, web-странички писать умею, и скрипты к ним, а вот в Lotus - новичек, только в рамках учебного курса в институте владею.
 
ну, раз разобрался, то спрашивай дальше :)
 
Возник новый вопрос - чтобы сделать респонз из вьюшки, необходимо ParentUnid куда-нить записать, а затем вставить оттуда в адресную строку(этго если я все правильно понимаю). Так вот, есть ли какие @commands, позволяющие помещать и извлекать текст из, скажем, поля?
 
вообще, я из стандартных средств не помню возможности создать в вебе ответный по выделенному в виде...
чтобы из вида в вебе создать дочерний придется поиграться с JS и, возможно, вид определенным образом подстроить...
посмотри, что твой вид генерит в html, можешь ли ты оттуда вытащить унид дока, который выделяешь для создания дочернего?

если включить возможность выделения доков в вебе (свойства вида, 5-я закладка, Web Access / Allow selection of documents), то каждый "док" будет содержать чекбокс (<INPUT TYPE=checkbox NAME="$$SelectDoc" VALUE="EE433F6647FBD158C22575C1002B19F8">) из которого можно достать унид. т.е. можно написать скрипт, который будет определять выделенный док и открывать урл
http_ ://servername/dbname.nsf/WebResp?OpenForm&ParentUNID=хххххххххххххххххххххххххххххххх

т.е. тут чистый 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, то откроется новое окно с новым дочерним доком к первому выделенному в виде...
 

Похожие темы

Статистика тем

Создано
killa007,
Последний ответ от
killa007,
Ответы
11
Просмотры
5 352