• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Ls: Азы

  • Автор темы Dimok-163rus
  • Дата начала
D

Dimok-163rus

Подскажите пжлст как создать копию выбранного(выделенного) документа

Sub Click(Source As Button)

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim session As New NotesSession

Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim item As NotesItem

Set uidoc = ws.CurrentDocument
Set pdoc = uidoc.Document
Set db = session.CurrentDatabase

...
... :)
...

Exit Sub

End Sub
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
Вопрос из серии RTFM.
Смотри хелп дизайнера.
Класс NotesDatabase, метод CreateDocument.
Класс NotesDocument, методы CopyAllItems, CopyToDatabase, ComputeWithForm (это не всегда нужно), Save

Есть аналогичные классы в Java, только называются иначе: Database и Document, методы там есть.
Ветка FAQ: https://codeby.net/forums/lotus-faq.35/
С чего начать: https://codeby.net/threads/19433.html
 
A

alexas

Dim-ok для кнопки в виде:
Код:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uiview As NotesUIView
Dim s As New NotesSession
Dim db As NotesDatabase
Dim SelectedDocInView As NotesDocument
Set uiview = ws.CurrentView
Set db = s.CurrentDatabase
'получаем док, выделенный в виде (на котором курсор)
Set SelectedDocInView = db.GetDocumentByID(uiview.CaretNoteID)
'делаем его копию в ту-же базу	
Call SelectedDocInView.CopyToDatabase(db)
'обновляем, что-бы сразу появился в виде
Call ws.ViewRefresh	
End Sub
плюс рекомендации от savl-a
 
D

Dimok-163rus

Спасибо ребята, помогли! Сижу классы штудирую
 
D

Dimok-163rus

При копировании документа, необходимо возрастание поля "Organ" на 1
Ругается на несоответствие типов:

Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument

Set doc = ws.CurrentDocument
'Organ - имя поля 1документа
Organ = doc.FieldGetText("Organ")
'Organ - имя поля копии документа
Organ = Organ + 1
Call doc.FieldSet.Text("Organ", Organ)
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
При копировании документа, необходимо возрастание поля "Organ" на 1
Ругается на несоответствие типов:

Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument

Set doc = ws.CurrentDocument
'Organ - имя поля 1документа
Organ = doc.FieldGetText("Organ")
'Organ - имя поля копии документа
Organ = Organ + 1
А почитать в хелпе какой тип данных возвращает FieldGetText?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
Dim-ok
Опять же Хелп:NotesUIWorkspace, NotesUIDocument

NotesUIWorkspace.CurrentDocument - возвращает объект класса NotesUIDocument
И вот уже у этого объекта есть метод FieldGetText.
А у NotesDocument, который у тебя в коде, такого метода нет. Вот и ошибка.
Сделай себе обработчик ошибок:
Код:
Sub Click(Source As Button) 'для агента это Sub Initialize
On Error goto handler

{твой код кнопки}

Goto endh

handler:
Msgbox {Error #} & Err & {: } & Error$ & { in line } & Erl
resume Endh
endh:
End Sub
Если работать с NOtesDocument, то надо использовать методы ReplaceItemValue и GetItemValue
 
D

Dimok-163rus

savl, прописал корректно сейчас, ошибок в Designer не показывает, а в lotuse(пользователя) о5 пишет "Несоответствие типов в методе OP_IS: найдено EMPTY, ожидался Unknown@.
Сейчас попробую прописать аналогию с использованием методов ReplaceItemValue и GetItemValue
 
D

Dimok-163rus

с аналогией пока худо, вернулся к началу ^_^

'Присваивание значения в поле документа
Set uidoc = ws.CurrentDocument

Organ = uidoc.FieldGetText("Organ") (ругается на эту строку в режиме пользователя на типы)
Call uidoc.FieldSetText("Organ", Organ)

что может быть о5 нитак то?
 
D

Dimok-163rus

savl, тип проставлял сначала да...
Код:
'получаю представление, где и создана кнопка
Dim ws As New NotesUIWorkspace
Dim UIview As NotesUIView
Set UIview = ws.CurrentView

'получаем документ
Set uidoc = ws.CurrentDocument



Добавлено: при создании формы, в поле Organ прописан тип "число"
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
Dim-ok
ws.CurrentDocument возвращает документ открытый на экране...
Если он закрыт, его так не получить. Вернее можно получить, если какой-то другой открыт.
Хочешь получить из представления, надо действовать по другому.
 
D

Dimok-163rus

savl, можно намекнуть как по другому? Да, действую из представления
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
Код:
Dim ws As New NotesUIWorkspace
Dim currNoteID As String
Dim ses As New NotesSession
Dim parentDoc As NotesDocument	
Dim childDoc As NotesDocument
dim Organ as variant

currNoteID = ws.CurrentView.CaretNoteID
Set parentDoc = ses.CurrentDatabase.GetDocumentByID(currNoteID) ' документ из представления, копия которого будет сделана
If parentDoc Is Nothing Then Error 5002, "Ошибка при получении основного договора"
Set childDoc = parentDoc.CopyToDatabase( ses.CurrentDatabase)
Organ = parentDoc .GetItemValue ("Organ")(0) ' получить значение, может быть ошибка, если пустое
Call childDoc.ReplaceItemValue("Organ ",Cint(Organ) +1) ' +1
call ws.EditDocument(true,childDoc) ' Открыть на редактирование
 
D

Dimok-163rus

Ошибок не обнаружено, сейчас буду разбираться дальше, спасибо за новую мысль!
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Код:
		dim Organ as variant
Organ = parentDoc .GetItemValue ("Organ")(0) ' получить значение, может быть ошибка, если пустое
Call childDoc.ReplaceItemValue("Organ ",Cint(Organ) +1) ' +1
all ws.EditDocument(true,childDoc) ' Открыть на редактирование

Че то взрыв мозга какой то...

Organ - если поле числовое и обязательно заполнено то так
Код:
		Dim Organ as integer 'Если номера бывают большие то лучше сразу Long
Organ = parentDoc.GetItemValue ("Organ")(0)
Call childDoc.ReplaceItemValue("Organ ",Organ + 1) ' +1
all ws.EditDocument(true,childDoc) ' Открыть на редактирование


Organ - если поле может быть пустым то нужно проверять че там в поле, и принимать соотв. действия
устанавливать какое либо значение, не копировать документ...от задачи зависит
 
D

Dimok-163rus

Да, поле числовое - это порядковый номер документа, у меня вообще задача:
При нажатии на кнопку(в представлении) должны создаваться копии документа(сколько док-тов должно создаться будет оговорено позже, но точно ни один) по форме родителя, и чтобы поле organ в каждом последующем док-те возрастало на +1
 
A

alexas

Call childDoc.ReplaceItemValue("Organ ",Cint(Organ) +1) ' +1
так не пойдет, значение в childDoc.Organ не изменится
добавить единицу надо так: childDoc.Organ = Organ +1
и если не контролировать док открытием в UI, то после присвоения - сохранить и обновить View
Call childDoc.Save(True,False)
Call ws.ViewRefresh
Dim-ok если не получится - выкладывай весь свой код кнопки, чтобы разобрать ошибки по твоему коду раз и навсегда.

PS. И пользуйся дебагером, что-бы понять, что накодил (Tools - Debug Lotus Script - поставить галочку)
Что-бы оно заработало, надо переоткрыть вид (или базу).
 
Мы в соцсетях:

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