• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Object Variable Not Set & Isnewnote

  • Автор темы Автор темы Cleric84
  • Дата начала Дата начала

Cleric84

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

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

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

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

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

Хотя, конечно, странно...
 
Где этот скрипт расположен?
Откуда берётся объект 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
 
doc.isValid?
ты бы его сохранил что ле :)
 
Отколе данное свойство действительно для вновь созданного документа?

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

Добавлено:
ты бы его сохранил что ле
А, если документ нужен только для работы в памяти?
Короче, каким ты был... :)
 
А строку ошибки правильно определили? Если в эклипсе, то через Navigation\Goto Err line смотрели?
 
А строку ошибки правильно определили? Если в эклипсе, то через 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
 
Судя по коду ф-ии StartWF, тут жёстко разит глобальными переменными.
 
А ты обработчик всегда вызываешь, что ли? :)
 
Чудес в программировании не бывает

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

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

короче бред какойто.....каким ето боком может косатся моей ошибки я не понимаю......так что думаю ошибка в другом...в чем не знаю..
 
выложи весь код той части между созданием дока и вызовом процедуры, если не секрет, может догадаемся о чем-то
 
Все документи теперь должни ити по моршруту (IWF.New). поетому я прописал :
ProcessName$ = "IWF.1.New"
разные имена в тексте и коде, так надо с 1 или нет?
Фишка в том что у мну ошибки нет.....О_о
тестовые мессаги вставлять и дебажить вместе с юзером или под его айдишкой не пробовали? :)
 
разные имена в тексте и коде, так надо с 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
 
Добавьте обработчик ошибок во ВСЕ процедуры/функции, включая Initialize, добавьте в вывод сообщения об ошибке Getthreadinfo(1) (имя процедуры)
 
Cleric-Lviv
начни с того, что сделай функцию LockDocument в том виде, что я писал раньше. Это же не сложно :) Интересно каков будет результат.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab