• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

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

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

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

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

imendan

Green Team
22.09.2010
159
4
Приветствую всех! Это мой первый опыт не только в Xpages, но и в технологии веб-приложений. Методом тыка и изучения всех доступных видео и электронных материалов я создал базу Служебные записки. Мне необходимо при создании новой служебной записки определить из справочника должность и департамент автора. Пробовал в beforePageLoad, afterPageLoad, queryNewDocument, но все мои попытки неудачны. Очень нуждаюсь в вашей помощи...
 
определить из справочника должность и департамент автора.
это же в поля надо получить?
делаешь их computed и там берёшь их из нужного справочника по username (на SSJS), если юзер уже авторизован при открытии базы
 
Код:
<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>

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

Код:
<xp:inputHidden id="inputText1" value="#{document1.UserNameV2}" defaultValue="#{javascript:session.getEffectiveUserName()}"></xp:inputHidden>
 
это же в поля надо получить?
делаешь их 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. Значение не передается в карточку ((( ЧТО ДЕЛАТЬ?
 
Последнее редактирование модератором:
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
 
Мы в соцсетях:

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

Курс AD