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

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

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

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

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

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
вобщем вопрос такой:

есть главний док пробую добавить к нему респонз
на кверисейв респонза
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)) и дальше по коду.....

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

Xalet

ну так все правильно. делайте и скриптом компоуз вместо Set resdoc = db.CreateDocument
 
H

hosm

либо проверять скриптом IsNewNote, если документ еще не сохраняли. так тоже жить можно )

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

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
OKEN

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

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

hosm

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

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
OKEN
и на том спасибки....

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

Omh

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

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

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

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

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