• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Автозаполнение Полей.

  • Автор темы TAPAKAHATOP
  • Дата начала
T

TAPAKAHATOP

XPages только осваиваю поэтому вопрос скорее всего окажется совсем от чайника.
Есть нотусовая форма, которая при открытии для создания нового документа (Через Notes естесно) автоматически подтягивает необходимые данные из разных справочников в определенные поля, освобождая пользователя от необходимости их заполнять самому.
Как реализовать тоже самое на XPages.
Сделал пэйдж с аналогичными полями, и привязал их к аналогичным полям в форме.
Часть полей сделал ридонлии прикрутил к ним дефолтные значения получаемые из справочников, которые корректно отображаются при открытии формы... но
при сабмите, документ сохраняется только с теми полями которые заполнялись вручную.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
читайте!
Тут куча ссылок на книги.. в нете на ютубе куча примеров
 
Z

Zeka

Ненадо перетягивать лотусиные принципы в xPages.
readonly поля не сохраняются, т.к. пользователь такое поле изменить не может. Поэтому оно не обрабатывается во время субмита.
Инициализацию таких полей засунь в beforePageLoad.
Для отображения таких полей используют не реадонли поля, а Computed Field.
 

KingGLEB

Active member
08.05.2008
30
0
BIT
0
NickProstoNick, ткни плиз носом. Я тут тоже пытаюсь такую же проблему решить и чего-то у меня никак не выходит каменный цветочек.
Ситуация следующая. Есть xpages, на котором размещены все элементы (меню слева/сверху, представления, форма документа), т.е. все элементы сделаны как custom controls и добавлены на одну xpages (documents.xsp).
Есть один CustomControl который называется "Doc". Из представления для открытия документа используется открытие выделенного документа с использованием "/documents.xsp?content=doc". Вот тут всё отлично открывается.
В CustomControl "Doc" есть DataSource "docMain".
<xp:this.data>
<xp:dominoDocument var="docMain" formName="Doc" computeWithForm="onload" action="openDocument"></xp:dominoDocument>
</xp:this.data>
Также в нем есть диалоговые окна, которые открываются по кнопке.

А вот теперь вопрос. Как мне создать кнопку, которая создаст новый документ, заполнить в нем нужные мне поля и оставит эту форму для заполнения пользователю, при этом не сохранит документ на сервере и dataSource "docMain" будет соответствовать новому документу?

Кнопку я создал типа
<xp:button id="button1" value="Создать документ" styleClass="lotusBtn lotusBtnAction">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{java script:var url=view.getPageName()+"?content=docs_form&action=newDocument"
context.redirectToPage(url);}]]></xp:this.action>

НО когда открывается новый документ, то с ним всё хорошо до тех пор пока не нажмешь кнопку на этом customcontrol. Как только жмешь кнопку, то сразу документу присваивается новый UNID.

Никак не пойму как оно работает. Помогите понять плиз.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Ну честно говоря не скажу про UNID, но кажется он у меня не меняется
и не соглашусь с Zeka. Поля ReadOnly хорошо высчитываются и во время заполнения формы.
У меня есть DataSource (у меня имя для обращения SourceDoc) с опцией Create document.
При открытии правда у меня ничего автоматически не вычисляется, но по ходу заполнения формы - я вычисляю данные о пользователе.
Все поля на форме - это EditBox. В одних разрешено редактирование - в других нет (Read Only).

Все поля связаны с существующими полями в Notes-документе.
01.png
Документ сохраняется кнопкой Submit.

Данные вычисляются по OnChange поля "Идентификатор"
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Пример SSJS-кода автозаполнения</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>var fio = "";
var phone = "";
var ln = "";

var doc:NotesXspDocument = getPersonDoc1( getComponent("inputText1").value );

if(doc != null){
fio = doc.getItemValueString("NRULast") + " " + doc.getItemValueString("NRUFirst") + " " + doc.getItemValueString("NRUMiddle");
ln = doc.getItemValueString("LotusName");
phone = doc.getItemValueString("Phone");

}


SourceDoc.setValue("AuthorLotusName", ln);
getComponent("inputText2").value = fio;
getComponent("inputText3").value = phone;[/CODE]
Заполнять можно как обращаясь к полю документа SourceDoc.setValue("AuthorLotusName", ln);
Так и к компоненту WEB-формы: getComponent("inputText2").value = fio;
 

KingGLEB

Active member
08.05.2008
30
0
BIT
0
А кнопка как выглядит, которая высвечивает эту форму?
 

KingGLEB

Active member
08.05.2008
30
0
BIT
0
Я понял почему у меня не получалось ничего.
Еле определил в чем дело. Создаю новый документ через кнопку:
<xp:button id="button1" value="Создать документ" styleClass="lotusBtn lotusBtnAction">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{java script:var url=view.getPageName()+"?content=docs_form&action=newDocument"
context.redirectToPage(url);}]]></xp:this.action>

В customControl "docs_form" есть кнопка, которая открывает диалог (dialog.show()), в котором в свою очередь тоже есть кнопка (buttonDialog). Так вот, жмем кнопку создать документ, жмем кнопку вызова диалога и если нажать кнопку buttonDialog, происходит сохранение нового документа и тут же создается новый.

Не надо использовать кнопки (button) в диалоговых окнах. Если в формах вместо них использовать ссылки (link) с соответствующим стилем (lotusBtn), то все работает как надо.

Для Скришитон: если создать в datasource в событии postNewDocument скриптик, типа
currentDocument.replaceItemValue("Subject", "Тема")
то должно всё получится и все равно какое поле и есть ли оно у тебя на странице.

PS: базу делал вот по этой link removed.
 
Z

Zeka

и не соглашусь с Zeka. Поля ReadOnly хорошо высчитываются и во время заполнения формы.
Я не говорил, что они не высчитываются. Я говорил, что они не сохраняются в датасурсе во время субмита! И в случае, когда инфа должна только отображаться, надо использовать не Edit Box с readonly="true", Computed Field.

readonly поля не сохраняются, т.к. пользователь такое поле изменить не может. Поэтому оно не обрабатывается во время субмита.
Инициализацию таких полей засунь в beforePageLoad.
Для отображения таких полей используют не реадонли поля, а Computed Field.

Перепроверил. Обсчитываются, но не сохраняются:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="doc" formName="ReadOnlyTest"></xp:dominoDocument>
</xp:this.data>
<xp:inputText id="readOnlyField" value="#{doc.readOnlyField}" defaultValue="#{java script:1+2}" readonly="true"></xp:inputText>
<xp:inputText id="normalField" value="#{doc.normalField}" defaultValue="#{java script:1+2}"></xp:inputText>
<xp:button value="Save" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:saveDocument></xp:saveDocument>
</xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
 
T

TAPAKAHATOP

Ненадо перетягивать лотусиные принципы в xPages.
readonly поля не сохраняются, т.к. пользователь такое поле изменить не может. Поэтому оно не обрабатывается во время субмита.
Инициализацию таких полей засунь в beforePageLoad.
Для отображения таких полей используют не реадонли поля, а Computed Field.
Спасибо, да это помогло... от части =)
Есть замечательные поля Readers и Authors
А вот заполнение их чтото не догнал.
При просмотре документа через толстый клиент, поля вроде есть и тип их правильный. А вот при пересохранении документа, он исчезает и я его больше видеть не могу.
Пробовал как написанно на одном из буржуазных форумов:
Код:
var doc=Document.getDocument();
var item:NotesItem=doc.replaceItemValue("DocReaders",Authors);
item.setReaders(true);
Document.replaceItemValue("DocReaders",Authors);
item:NotesItem=doc.replaceItemValue("DocAuthors",Authors);
item.setAuthors(true);
Document.replaceItemValue("DocAuthors",Authors);

После сабмита все сохраняется верно, но при пересохранении опять улетает док в неизвестном направлении.
 
H

hosm

а что такое Authors в контексте приведенного кода, оно содержит список нужных значений? попробовать можно: вместо приведенных в коде 3х строк для авторс вот такая колбаса не прокатит: doc.replaceItemValue("DocAuthors",Authors).setAuthors(true); и аналогично для ридерс.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Я делаю так:
Код:
	var Author: NotesItem = SourceDoc.getDocument().replaceItemValue("Access", "*")
Author.setAuthors(true)

SourceDoc.save();
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!