раздуплите плз:)))

Cleric-Lviv

Lotus team
03.01.2008
600
0
#1
вобщем вопрос такой:

есть главний док пробую добавить к нему респонз
на кверисейв респонза
If Source.IsNewDoc Then
dv = 0
Set item = New NotesRichTextItem(doc, "wf$Attachment")
Call source.Refresh(True)
Else
dv = Cint(doc.GetItemValue("DocVer")(0))
Set item = doc.GetFirstItem("wf$Attachment")
Call source.Refresh(True)

End If
если делать через @command([compose]; "form")
то дебагер показивает что все гуд тоесть, берет что документ новий и dv = 0 + создает новий итем
но если делать через скрипт(добавлять доку)
Код:
Sub Click(Source As Button)
Dim ses As New NotesSession
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim resdoc As NotesDocument
Dim db As NotesDatabase
Dim Task As Variant

Set db = ses.CurrentDatabase
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set resdoc = db.CreateDocument
resdoc.Form = "wf+document"
Call resdoc.MakeResponse(doc)
Task = doc.GetItemValue("wfTaskName")(0)
If Task = "" Then
Task = "Створення"
End If
Call resdoc.ReplaceItemValue("wf$stagename", Task)
Call ws.EditDocument(True, resdoc, True)
End Sub
то на квери сейв
док уже не новий и dv = Cint(doc.GetItemValue("DocVer")(0)) и дальше по коду.....

почему если создавать документ через скрипт, система не принимает документ как новий.....или я гдето неправильно написал строчку кода.....???
 

Xalet

Well-known member
08.08.2008
410
0
#2
ну так все правильно. делайте и скриптом компоуз вместо Set resdoc = db.CreateDocument
 

hosm

* so what *
18.05.2009
2 442
6
#3
либо проверять скриптом IsNewNote, если документ еще не сохраняли. так тоже жить можно )

Добавлено: т.е. если не скомпозили:
If Source.IsNewDoc Then
elseIf Source.Document.IsNewNote Then ' вроде так работает, т.е. бекендовый уже есть и определен (не Nothing)
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#4
OKEN

угу так работает:) спасибки....

но скажите пожалуйста почему оно так работает, тоесть если делать через скрип и проверять If Source.IsNewDoc Then, тогда етот документ не новий.....чтото я не понимаю........
 

hosm

* so what *
18.05.2009
2 442
6
#5
Потому что документ создан не через Compose, он создан уже в бекенде (и даже заполнены некоторые поля), а потом док только открывается через уи. Еще проверку IsNewNote можно использовать для профайла.
Я не помню, описано ли это нормально в справке - посмотрите, но так работает. :) пусть кто-то умный скажет больше или объяснит лучше...
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#6
OKEN
и на том спасибки....

так а теперь к умникам: обясните:))) ето обращение адресовано: Akupaka, ToxaRat, Morpheus, Tia, Omh, сори если кого неправильно написал и не дописал:))))))
 

Omh

Lotus team
04.07.2007
2 210
1
#7
Ну коли уж обратились лично, то напишу, что UiDoc.IsNewDoc возвращает true, только если док создан через ws.ComposeDocument или через формульный @Command([Compose/ComposeWithRefrence]; "Form").
В противном случае он возвращает false.

Надо принять как данность.

Мне нравиться проверка на doc.NoteID
Если там нолик, значит документ ещё не был сохранён, как бы он не был создан.

Можно ещё суровей: из view, где отображаются все документ базы и где первый столбец @text(@DocumentUniqueID) на QuerySave попробовать найти документ по UNID текущего открытого документа.
Если во view документа нет, то он ещё не был сохранён.
Видал и такую проверку.
Не скажу, что сильно плохая, но медленная.