Object Variable Not Set & Isnewnote

Тема в разделе "Lotus - Программирование", создана пользователем Cleric-Lviv, 15 сен 2011.

  1. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Всем привет!

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

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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Где этот скрипт расположен?
    Откуда берётся объект doc?

    Хотя, конечно, странно...
     
  3. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

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

    Код (LotusScript):
    агент
    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
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    doc.isValid?
    ты бы его сохранил что ле :)
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Отколе данное свойство действительно для вновь созданного документа?

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А строку ошибки правильно определили? Если в эклипсе, то через Navigation\Goto Err line смотрели?
     
  7. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Думаю что да..... обработчик ошибок есть но дебагер не переходит на обработку ошибки...

    Код (LotusScript):
    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
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Судя по коду ф-ии StartWF, тут жёстко разит глобальными переменными.
     
  9. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    поставь еще головной обработчик - в агенте
     
  10. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    ефект = 0 , видает ошибку в строке "0"

    Фишка в том что у мну ошибки нет.....О_о
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А ты обработчик всегда вызываешь, что ли? :)
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    А перед меткой обработчика стоит Exit Sub/Function?
     
  13. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    блин, ..... конечно нет! перед меткой стоин Exit Sub/Function
     
  14. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Чудес в программировании не бывает
     
  15. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    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).....

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    выложи весь код той части между созданием дока и вызовом процедуры, если не секрет, может догадаемся о чем-то
     
  17. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    разные имена в тексте и коде, так надо с 1 или нет?
    тестовые мессаги вставлять и дебажить вместе с юзером или под его айдишкой не пробовали? :)
     
  18. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0

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

    Код (LotusScript):
    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
     
  19. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Добавьте обработчик ошибок во ВСЕ процедуры/функции, включая Initialize, добавьте в вывод сообщения об ошибке Getthreadinfo(1) (имя процедуры)
     
  20. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Cleric-Lviv
    начни с того, что сделай функцию LockDocument в том виде, что я писал раньше. Это же не сложно :) Интересно каков будет результат.
     
Загрузка...
Похожие Темы - Object Variable Not
  1. iosif88
    Ответов:
    11
    Просмотров:
    5.152
  2. motogarri
    Ответов:
    6
    Просмотров:
    327
  3. vsokol
    Ответов:
    0
    Просмотров:
    1.090
  4. imendan
    Ответов:
    7
    Просмотров:
    1.546
  5. alik86
    Ответов:
    31
    Просмотров:
    4.651

Поделиться этой страницей