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

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

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

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

Object Variable Not Set & Isnewnote

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
Всем привет!

столкнулся с проблемкой. У меня все ок но вот у пользователей видает ошибку:)

Код:
If doc Is Nothing Then Exit Function
If doc.IsNewNote Then Exit Function - здесь у пользователей Object variable not

передистория етих двух строчек:

Ошибку видает только когда копирую скриптом документ( создаем новий документ и копируем нужные поля)
дальше проверяю на Is Nothing и IsNewNote где и получаю ошибку
 
O

Omh

Где этот скрипт расположен?
Откуда берётся объект doc?

Хотя, конечно, странно...
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
Где этот скрипт расположен?
Откуда берётся объект doc?

Хотя, конечно, странно...

копируем агентом, в агенте создаем новий документ, дальше визиваем функцию из библиотеки.... в етой функции еще раз проверяем есть ли документ

Код:
агент
Set dnew = db.CreateDocument
Forall it In doc.Items
Call it.CopyItemToDocument(dnew,it.Name)
End ForAll
ProcessName$ = "IWF.1.New"
Call StartWF(ProcessName$,dnew)

функция
Function StartWF(UNIC As String,sdoc As NotesDocument) As Boolean
If sdoc Is Nothing Then
Set db = s.CurrentDatabase
Set doc = db.CreateDocument
Else
Set db = sdoc.Parentdatabase
Set doc =sdoc
End If
-----

If LockDocument(doc) Then

StartWF = true

end if

end function

Function LockDocument(doc As NotesDocument) As Boolean

If doc Is Nothing Then Exit Function
If doc.IsNewNote Then Exit Function

end function
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
doc.isValid?
ты бы его сохранил что ле :)
 
A

Akupaka

Отколе данное свойство действительно для вновь созданного документа?

Cleric-Lviv
1) имена переменных я бы все же в коде и в параметрах использовал разные, а то вдруг у тебя doc объявлен вообще в общих декларациях?
2) переделай функция таким образом:
Код:
Function LockDocument(ADoc As NotesDocument) As Boolean
If not(ADoc Is Nothing) Then
If not(ADoc.IsNewNote) Then
'...
End If
End If
end function

Добавлено:
ты бы его сохранил что ле
А, если документ нужен только для работы в памяти?
Короче, каким ты был... :)
 
H

hosm

А строку ошибки правильно определили? Если в эклипсе, то через Navigation\Goto Err line смотрели?
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
А строку ошибки правильно определили? Если в эклипсе, то через Navigation\Goto Err line смотрели?

Думаю что да..... обработчик ошибок есть но дебагер не переходит на обработку ошибки...

Код:
On Error GoTo er

If doc Is Nothing Then Exit Function
If doc.IsNewNote Then Exit Function

er:
EBody = Error$ & { #строка: } & Erl & { #UNIC: } & UNIC
MessageBox EBody 
LockDocument=False
 
O

Omh

Судя по коду ф-ии StartWF, тут жёстко разит глобальными переменными.
 
A

Akupaka

А ты обработчик всегда вызываешь, что ли? :)
 
A

Akupaka

Чудес в программировании не бывает
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
Чудес в программировании не бывает

ну да, я впринципе методом тыка вичислил когда ошибка не виваливается.........

когда делается копия документа вичисляется маршрут по которому будет ити документ. есть два маршрута старий (IWF) и новий (IWF.New). Все документи теперь должни ити по моршруту (IWF.New). поетому я прописал :
ProcessName$ = "IWF.1.New"

Раньше маршрут вичислялся так: If doc.HasItem({WF}) Then ProcessName$ =doc.WF(0)
если вернуть ету строчку If doc.HasItem({WF}) Then ProcessName$ =doc.WF(0) то все ок, но мне не подходит ето так как doc.WF(0) может равнятся (IWF).....

короче бред какойто.....каким ето боком может косатся моей ошибки я не понимаю......так что думаю ошибка в другом...в чем не знаю..
 
A

Akupaka

выложи весь код той части между созданием дока и вызовом процедуры, если не секрет, может догадаемся о чем-то
 
H

hosm

Все документи теперь должни ити по моршруту (IWF.New). поетому я прописал :
ProcessName$ = "IWF.1.New"
разные имена в тексте и коде, так надо с 1 или нет?
Фишка в том что у мну ошибки нет.....О_о
тестовые мессаги вставлять и дебажить вместе с юзером или под его айдишкой не пробовали? :)
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
разные имена в тексте и коде, так надо с 1 или нет?

тестовые мессаги вставлять и дебажить вместе с юзером или под его айдишкой не пробовали? :)


так дебажу под юзером, видает ошибку,.... на счет имен маршрутов ето я так "скорочував".....

Код:
Set db = ss.CurrentDatabase
Set agent = ss.CurrentAgent
Set doc =db.GetDocumentByID(agent.ParameterDocID)

Set dnew = db.CreateDocument
Forall it In doc.Items
If Lcase$(it.Name) Like {tm_*} Then			
Call it.CopyItemToDocument(dnew,it.Name)
End Select	
End If
End ForAll

ProcessName$ = "IWF.1.New"
Call StartWF(ProcessName$,dnew)



Function StartWF(UNIC As String,sdoc As NotesDocument) As Boolean
Dim ESubject As String
Dim EBody As String
Dim s As New NotesSession

Dim w As New NotesUIWorkspace
Dim db As NotesDatabase
Dim cdoc As NotesDocument
Dim doc As NotesDocument
Dim view As NotesView

On Error GoTo er

If sdoc Is Nothing Then
Set db = s.CurrentDatabase
Set doc = db.CreateDocument
Else
Set db = sdoc.Parentdatabase
Set doc =sdoc
End If

Set view = db.GetView({Configurations})
Set cdoc = view.GetDocumentByKey(UNIC)	

Dim un As New NotesName(s.UserName)
Dim aDbMail As Variant
aDbMail = Evaluate({@MailDbName},doc)

If Not doc.HasItem({Form}) Then Call doc.ReplaceItemValue({Form},{MainDoc})
Call CopyWFFields(cdoc.UniversalID,doc)
Call doc.ReplaceItemValue({WFCurrentApprover},s.UserName)
Call doc.ComputeWithForm(True,False)
Call doc.ReplaceItemValue({Form},{MainDoc})
If LockDocument(doc) Then Call w.EditDocument(True,doc)

StartWF = True
Exit Function
er:

StartWF = False
EBody = Error$ & { #строка: } & Erl & { #UNIC: } & UNIC
Resume en
En:
End Function

Function LockDocument(doc As NotesDocument) As Boolean

If doc Is Nothing Then Exit Function
If doc.IsNewNote Then Exit Function -- здесь ошибка

End Function
 
N

nvyush

Добавьте обработчик ошибок во ВСЕ процедуры/функции, включая Initialize, добавьте в вывод сообщения об ошибке Getthreadinfo(1) (имя процедуры)
 
A

Akupaka

Cleric-Lviv
начни с того, что сделай функцию LockDocument в том виде, что я писал раньше. Это же не сложно :) Интересно каков будет результат.
 
Мы в соцсетях:

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