• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

TAPAKAHATOP

XPages только осваиваю поэтому вопрос скорее всего окажется совсем от чайника.
Есть нотусовая форма, которая при открытии для создания нового документа (Через Notes естесно) автоматически подтягивает необходимые данные из разных справочников в определенные поля, освобождая пользователя от необходимости их заполнять самому.
Как реализовать тоже самое на XPages.
Сделал пэйдж с аналогичными полями, и привязал их к аналогичным полям в форме.
Часть полей сделал ридонлии прикрутил к ним дефолтные значения получаемые из справочников, которые корректно отображаются при открытии формы... но
при сабмите, документ сохраняется только с теми полями которые заполнялись вручную.
 
читайте!
Тут куча ссылок на книги.. в нете на ютубе куча примеров
 
Ненадо перетягивать лотусиные принципы в xPages.
readonly поля не сохраняются, т.к. пользователь такое поле изменить не может. Поэтому оно не обрабатывается во время субмита.
Инициализацию таких полей засунь в beforePageLoad.
Для отображения таких полей используют не реадонли поля, а Computed Field.
 
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.

Никак не пойму как оно работает. Помогите понять плиз.
 
Ну честно говоря не скажу про 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;
 
А кнопка как выглядит, которая высвечивает эту форму?
 
Я понял почему у меня не получалось ничего.
Еле определил в чем дело. Создаю новый документ через кнопку:
<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.
 
и не соглашусь с 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>
 
Ненадо перетягивать лотусиные принципы в 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);

После сабмита все сохраняется верно, но при пересохранении опять улетает док в неизвестном направлении.
 
а что такое Authors в контексте приведенного кода, оно содержит список нужных значений? попробовать можно: вместо приведенных в коде 3х строк для авторс вот такая колбаса не прокатит: doc.replaceItemValue("DocAuthors",Authors).setAuthors(true); и аналогично для ридерс.
 
Я делаю так:
Код:
	var Author: NotesItem = SourceDoc.getDocument().replaceItemValue("Access", "*")
Author.setAuthors(true)

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab