Ls: Азы

Dimok-163rus

Well-known member
20.06.2013
89
0
#1
Подскажите пжлст как создать копию выбранного(выделенного) документа

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 136
105
#3
Вопрос из серии RTFM.
Смотри хелп дизайнера.
Класс NotesDatabase, метод CreateDocument.
Класс NotesDocument, методы CopyAllItems, CopyToDatabase, ComputeWithForm (это не всегда нужно), Save

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

alexas

#4
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
 

Dimok-163rus

Well-known member
20.06.2013
89
0
#6
При копировании документа, необходимо возрастание поля "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

Lotus team
20.07.2007
864
4
#7
При копировании документа, необходимо возрастание поля "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 136
105
#8
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
 

Dimok-163rus

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

Dimok-163rus

Well-known member
20.06.2013
89
0
#11
с аналогией пока худо, вернулся к началу ^_^

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

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

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

Dimok-163rus

Well-known member
20.06.2013
89
0
#13
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 136
105
#14
Dim-ok
ws.CurrentDocument возвращает документ открытый на экране...
Если он закрыт, его так не получить. Вернее можно получить, если какой-то другой открыт.
Хочешь получить из представления, надо действовать по другому.
 

savl

Lotus team
28.10.2011
2 136
105
#16
Код:
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) ' Открыть на редактирование
 

Dimok-163rus

Well-known member
20.06.2013
89
0
#17
Ошибок не обнаружено, сейчас буду разбираться дальше, спасибо за новую мысль!
 

Kizarek86

Lotus team
20.07.2007
864
4
#18
Код:
		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 - если поле может быть пустым то нужно проверять че там в поле, и принимать соотв. действия
устанавливать какое либо значение, не копировать документ...от задачи зависит
 

Dimok-163rus

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

alexas

#20
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 - поставить галочку)
Что-бы оно заработало, надо переоткрыть вид (или базу).