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

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

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

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

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

Мелкие Вопросы Rtfm

  • Автор темы serko
  • Дата начала
S

serko

Здравствуйте. Только начал осваивать среду и пользоваться вкладкой Help :lol:
Заранее прошу прощения, если я не в тот раздел написал(а я скорее всего написал не в тот раздел). Это единственный форум, который я смог найти по Domino B)
Передо мной стоит задача: написать в View для Action код на открытие документа с автоматическим заполнением полей. Почти все сделал, но встретил последний подводный камень. Я пытался написать на LotusScript, но т.к. я в Help ничего не нашел, чтобы открыть этот документ, был вынужден прибегнуть к @-формулам. Не знаю, может вы поставите меня в нужное русло, т.к. я перегибаюсь между двумя языками. Потыкав Help я понял, что @формулы подходят для простых команд типа сохранить,удалить,создать...
Ну, не об этом. К делу...
На @-формулах написал следующее:
field= @GetField("addres");
@Command([Compose]; "form1");
@SetDocField(docUNID;"addres"; field);

Проблема заключается в том, что я не знаю как получить docUNID. Есть @DocumentUniqueID, которая годится для текущего документа, но мне надо, чтобы она работала на несозданном документе. Т.е. пользователь выбирает документ, нажимает на action и перед ним открывается создаваемый документ с уже заполненным полем addres из того документа, который был выделен перед нажатием на action(скорее всего с этого и надо было начать мой флуд). Зная UNID создаваемого документа я бы смог вставить значение в поле. Меня просто разрывает между лотусом и формулами. Помогите новичку и с выбором разобраться, пожалуйста. :mellow:
 
S

serko

Если брать в качестве языка лотус, то у меня возникают другие проблемы:
1) Документ создается, я в коде прописал форму, но почему-то View с выборкой не отображает документ с этой формой, а если ставить выборку на все документы и попытаться открыть этот документ, то открывается форма, которую я установил в коде. Так почему же выборка не видит мой документ?
2) Документ сразу сохраняется(после doc.save). Мне так делать нельзя(т.к. идентификатор должен у документа быть, а я его сохраняю БЕЗ, а это грубая ошибка). Мне надо лишь, чтобы открылась форма для заполнения.
Эх. Искал, искал, но так и не нашел никакой процедуры на лотусе типа Open, только Create, который ничего не отображает B)
 

swyatogor

Green Team
24.02.2014
593
24
BIT
0
Ну для напримера.. Вам ни кто не мешает сделать на кнопке создания документа
@SetEnvironment("address";@Text(@GetField("test")))
а в поле нового дока default value
@If(@IsNewDoc;@Environment("address");"")
 
S

serko

Ну для напримера.. Вам ни кто не мешает сделать на кнопке создания документа
@SetEnvironment("address";@Text(@GetField("test")))
а в поле нового дока default value
@If(@IsNewDoc;@Environment("address");"")
Большое спасибо за информацию! В жизни не додумался бы :mellow:
Еще интересно узнать про LotusScript. Можно ли через него осуществить подобное и выйдет ли проще, чем на языке формул? B)
Плюсанул бы, но не активна кнопка :lol:
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
Эх. Искал, искал, но так и не нашел ...
Лиха беда начало :)
Конечно, тут удобней LS. Попробуйте так:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">В кнопе на view</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uiview As NotesUIView
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument	'выделенный док
Dim newDoc As NotesDocument		'новый док
Set uiview = ws.CurrentView
Set db = s.CurrentDatabase
Set doc = db.GetDocumentByID(uiview.CaretNoteID)		'получен док, выделенный в виде
'	Msgbox doc.addres(0)	'показ содержимого поля (item) addres выделенного дока
Set newDoc = db.CreateDocument	'создан новый док
newDoc.Form = "form1"	'в item Form нового дока записано имя формы по которрой будем открывать
newDoc.addres = doc.addres 'записали содержимое item addres из выделенного дока в новый
Call ws.EditDocument(True, newDoc)	'открыли подготовленный док в UI (в режиме редактирования)
End Sub
 

swyatogor

Green Team
24.02.2014
593
24
BIT
0
Подобное действие можно конечно сделать и через LS.. проще не будет)
Сам по себе язык альфа формул - это не язык как таковой - это набор микромакросов, если сравнивать с LS, то типа sub..

Код:
	Dim uidoc As NotesUIDocument
Dim uiview As NotesUIView 
Dim w As New NotesUIWorkSpace
Dim doc As NotesDocument

Set db = w.CurrentDatabase 
Set uiview = w.CurrentView 
If uiview.Documents.Count = 0 Then 
Msgbox "Невыбрано ни одного документа!",MB_ICONEXCLAMATION+MB_OK+MB_APPLMODAL,"Ошибка!"
Exit Sub
Else
Set doc = curview.Documents.GetFirstDocument()
Do Until (doc Is Nothing)

Set uidoc = w.ComposeDocument(,,"Форма для нового документа",,)
Call uidoc.FieldAppendText("adress",doc.GetFirstItem("addr")(0))

ну как то вот так для начала.. ну и там далее в том же духе)

на LS проще писать в том плане что он более предсказуем и легко дебажится.. на формулах иногда можно получить результат отличающийся от желаемого))
 
S

serko

Всем огромное спасибо! Честно, повысил бы репутацию, если бы мог :)
Очень-очень помогли! Я уж начал думать, что LS и формулы ограничены в чем-то. Оказывается, я ошибался :D
 

garrick

Lotus Team
26.10.2009
1 342
150
BIT
128
Если создаваемый документ является ответным (response) главному, то установите на форме документа свойства "Formulas inherit values from selected document" (вторая закладка) и пропишите в формулах вычисления полей ссылки на нужные поля родительского документа.
 
S

serko

Даны на форме 3 Action: Закрыть, редактировать, Сохранить. Надо, чтобы при открытии были видны только кнопки Закрыть и Редактировать. При нажатии на Редактировать появляется кнопка Сохранить и документ переходил в режим редактирования. Смог лишь добиться режима редактирования с помощью @Command([EditDocument]). Если возможно реализовать без кода появление/скрытие кнопки Сохранить, то буду благодарен <_<
 
S

serko

Нашел ответ. Открываем Shared Action в верхней шапке в меню заходим в Design-->Shared Action Properties и в открывшемся окне заходим во вторую вкладку и ставим галочку напротив пунктов previewed for reading и opened for reading
 
S

serko

Здравствуйте. Вылетает ошибка на месте "ОШИБКА". До ""222Warning!!!" выполнение не доходит.
Функция getDB возвращает базу данных, т.е. я уже её проверил и пришел к выводу, что косяк где-то во View, но косяка я так и не нашел.
Код:
Public Function getDoc(ID As String) As NotesDocument
Dim db As NotesDatabase
Set db = me.getDB()
Dim view As NotesView
Set view = db.Getview("myView")
MsgBox "Вьюшка получена!"
Dim doc As NotesDocument
Set doc = view.Getdocumentbykey(ID, True) 'ПОДОЗРИТЕЛЬНО!!!!
MsgBox "Warning!!!"
MsgBox doc.Getitemvalue("Server") ' ОШИБКА!!!!
MsgBox "222Warning!!!"
MsgBox doc.Getitemvalue("Path")
Set getDoc = doc	
End Function
 
T

ty3uk

во вьюхе обязана быть первая сортированная колонка в которой находятся ваши ID-шники
после того как вы взяли документ из вьюхи, может имеет смысл проверить, получили-вы его или нет?
Код:
if (doc is nothing) then
MsgBox "Где документ? Кто спёр?"
End if
 
S

serko

во вьюхе обязана быть первая сортированная колонка в которой находятся ваши ID-шники
после того как вы взяли документ из вьюхи, может имеет смысл проверить, получили-вы его или нет?

Вывело: Документ никто не спёр!!! <_<
Код:
If (doc Is Nothing) Then
MsgBox "Где документ? Кто спёр?"
Else
MsgBox "Документ никто не спёр!!!!"
End If
Я нашел я нашел!!! Ахаха. Вот я идиот!!! Это ж масссив!!! :) :) :lol:
MsgBox doc.Getitemvalue("Server")(0) <--- Чертова скобка ахаха
Спасибо за ответ))
 
S

serko

Даны 3 вида форм: Фирма, отдел, рабочий и действия: создать фирму, создать отдел, создать рабочего.
При нажатии на кнопку создать отдел при выделенной фирме в новом документе должно самостоятельно заполняться поле с названием фирмы. Аналогичная ситуация с отделом и рабочим (по полю название отдела). Проставил в настройках формы для фирмы тип Документ, для отдела - Response to Response и Formulas inherit values... и для рабочего тоже response tor esponse и formulas inherit values...
View не сортируется пока что. Пока вывел просто все документы по порядку. Проблема в том, что при выделении отдела и нажатии Создать рабочего значение полей не заполняется, хотя все поля одноименные. В чем может быть косяк? Если выбрать фирму и на ней создать отдел, то поля заполняются отлично. <_<
 
S

serko

Нашел косяк. Рабочий создается не через @Command([Compose... а через LS
 
S

serko

Хочу получить список баз данных, располагающихся на сервере, только вот выводит мне не заголовок БД, а одну и ту же надпись "Activity Trends(6)"
Код:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim dbcur As NotesDatabase
Set dbcur = s.CurrentDatabase

Dim dbdir As NotesDbDirectory
Set dbdir = s.GetDbDirectory(dbcur.Server)
Dim db As NotesDatabase
Set db = dbdir.GetFirstDatabase(DATABASE)
Msgbox db.Title
'While Not(db Is Nothing)
'	Msgbox db.Title, , db.FileName
'Wend

End Sub
 

savl

Lotus Team
28.10.2011
2 591
309
BIT
138
где получение следующей базы в цикле?
Код:
Set db= DbDirectory.Getnextdatabase()

P.s. Не всегда у вас отработает, особенно если доступа к базе нет - ошибку выдаст.
Для возврата Title нужно открыть базу. в противном случае лучше возвращать путь Filepath
кучу мелких тем создали, на обыденные вопросы...
Есть тема для мелких вопросов: вы же уже её нашли, как раз "вопрос-ответ".
И в целом, хотите получить все БД на сервере? Посмотрите базу catalog.nsf, в корне сервера лежит.
Вьюха {Applications\By Server}
 
S

serko

Мне надо получить выделенный документ, только вот uiview пустует. С остальными View код пашет.
Код:
Dim ws As New NotesUIWorkspace
Dim uiview As NotesUIView
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument	'выделенный док
Dim coldoc As NotesDocument
Set uiview = ws.CurrentView
Set db = s.CurrentDatabase
If uiview Is Nothing Then
Msgbox "ПУСТО"	
End If
Вьюшка состоит из 2 столбцов. Первый - отсортирован, второй - нет.
Для первого столбца прописал формулу @If(form = "Two"; TwoTitle; form="Three"; ThreeTitle; "")
Для второго столбца просто указал поле OneTitle
Иерархия во вьюшке идет от One к Two, а от Two к Three.
6ddd9b39ed681ac1c68f1467ad67c287.jpg
 

savl

Lotus Team
28.10.2011
2 591
309
BIT
138
Проще:
меняем код из кнопки на вызов агента
в агенте выставляем таргет "только выделенные документы"
далее в коде set documentCollection = NotesDatabase.UnprocessedDocuments ( постоянно ошибаюсь в написании)
В кнопке делаем вызов на собаке нашего агента.
 
Мы в соцсетях:

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