• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

Object Variable Not Set & Isnewnote

Cleric-Lviv

Lotus team
03.01.2008
600
0
#1
Всем привет!

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

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

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

Omh

Lotus team
04.07.2007
2 210
1
#2
Где этот скрипт расположен?
Откуда берётся объект doc?

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

Cleric-Lviv

Lotus team
03.01.2008
600
0
#3
Где этот скрипт расположен?
Откуда берётся объект 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
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#5
Отколе данное свойство действительно для вновь созданного документа?

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
Добавлено:
ты бы его сохранил что ле
А, если документ нужен только для работы в памяти?
Короче, каким ты был... :)
 

hosm

* so what *
18.05.2009
2 442
6
#6
А строку ошибки правильно определили? Если в эклипсе, то через Navigation\Goto Err line смотрели?
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#7
А строку ошибки правильно определили? Если в эклипсе, то через 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
 

Omh

Lotus team
04.07.2007
2 210
1
#8
Судя по коду ф-ии StartWF, тут жёстко разит глобальными переменными.
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#15
Чудес в программировании не бывает
ну да, я впринципе методом тыка вичислил когда ошибка не виваливается.........

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

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#16
выложи весь код той части между созданием дока и вызовом процедуры, если не секрет, может догадаемся о чем-то
 

hosm

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

Cleric-Lviv

Lotus team
03.01.2008
600
0
#18
разные имена в тексте и коде, так надо с 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
 

nvyush

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#20
Cleric-Lviv
начни с того, что сделай функцию LockDocument в том виде, что я писал раньше. Это же не сложно :) Интересно каков будет результат.