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

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

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

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

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

Определение данных и справочника при создании документа.

imendan

Green Team
22.09.2010
159
4
BIT
0
Приветствую всех! Это мой первый опыт не только в Xpages, но и в технологии веб-приложений. Методом тыка и изучения всех доступных видео и электронных материалов я создал базу Служебные записки. Мне необходимо при создании новой служебной записки определить из справочника должность и департамент автора. Пробовал в beforePageLoad, afterPageLoad, queryNewDocument, но все мои попытки неудачны. Очень нуждаюсь в вашей помощи...
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
определить из справочника должность и департамент автора.
это же в поля надо получить?
делаешь их computed и там берёшь их из нужного справочника по username (на SSJS), если юзер уже авторизован при открытии базы
 
R

romych2004

Код:
<xp:this.data>
	<xp:dominoDocument var="document1">
		<xp:this.postNewDocument><![CDATA[#{javascript:document1.replaceItemValue('UserName', session.getEffectiveUserName())}]]></xp:this.postNewDocument>
	</xp:dominoDocument>
</xp:this.data>
 
<xp:text escape="true" id="computedField1" value="#{document1.UserName}"></xp:text>

Если будут вопросы - пиши..
 
R

romych2004

Вот еще вариант.. просто положить филд, а в нем дефолт вэлью вычислить. Мне такой вариант нравится меньше)

Код:
<xp:inputHidden id="inputText1" value="#{document1.UserNameV2}" defaultValue="#{javascript:session.getEffectiveUserName()}"></xp:inputHidden>
 

imendan

Green Team
22.09.2010
159
4
BIT
0
это же в поля надо получить?
делаешь их computed и там берёшь их из нужного справочника по username (на SSJS), если юзер уже авторизован при открытии базы
Вот еще вариант.. просто положить филд, а в нем дефолт вэлью вычислить. Мне такой вариант нравится меньше)

Код:
<xp:inputHidden id="inputText1" value="#{document1.UserNameV2}" defaultValue="#{javascript:session.getEffectiveUserName()}"></xp:inputHidden>

Спасибо, ребят! Сделал вот так...
В beforePageLoad страницы повесил вот такой SSJS

var nd:NotesDocument = null;
if(null != document1){
nd = document1.getDocument();

var db: NotesDatabase = session.getDatabase("", "-.nsf");
if (db!=null){
var dc:NotesDocumentCollection = db.search("LNAddress=\"" + facesContext.getExternalContext().getRequest().getRemoteUser() + "\"");

if (dc.getCount()>0) {
var edoc:NotesDocument = dc.getFirstDocument();
nd.replaceItemValue('author', edoc.getItemValue("Name"));
nd.replaceItemValue('author_dep', edoc.getItemValue("Dep"));
nd.replaceItemValue('author_lna', edoc.getItemValue("Address"));
} else {
nd.replaceItemValue('author_dep', 'not found');
}



}

}

Когда Edit Box в обычном состоянии, то значение передается документу, но в случае ComputedField, почему-то не передается. Добавляю еще один скрытый Edit Box. Значение не передается в карточку ((( ЧТО ДЕЛАТЬ?
 
Последнее редактирование модератором:

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
1 есть некоторое недопонимание:
проверку дока на null убираем - он существует полюбэ
nd.replaceItemValue('author', edoc.getItemValue("Name")) меняем на
document1.replaceItemValue('author', edoc.getItemValue("Name"))
и т.д.
в первом случае реплейсится только значение в памяти клиента
во втором - в самом доке, созданном в памяти на сервере
2 док искать лучше по ключу в вьюшке (view.getDocumentByKey), а не во всей базе (db.search), так шустрее

ЗЫ
обрати внимание на ивенты документа (там же где ты использовал beforePageLoad, ток чуть нижэ, там где Data\document1)
в твоём случае логично использовать postNewDocument

ещё, var username = session.getEffectiveUserName() (как romych написал)
и, если это текущая база, то она просто database
 
Мы в соцсетях:

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