• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Помогите разобраться с Repeatform

  • Автор темы nik3528
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nik3528

Всем доброго времени суток.
Уважаемые мастера подскажите следующий момент
Нашел пример использования RepeatForm как в почтовой базе только у меня возникла с ним проблема
При создании документа Repeat Test и назначении повторов до его сохранения все хорошо,
но если сперва создать документ сохранить а потом войти в него и попробовать назначить повторы он выдает ошибки
 
N

nik3528

Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
' since subform is used by by both To Do's and CalendarEntries we need to calculate EventType
On Error Goto processError
Dim bEventType As Integer
Dim bInitFlags As Long
bInitFlags = 128

If source.Document.hasItem("TaskType") Then
bEventType = 2
Else 
bEventType=1
End If

'** the form name of the underlying document MUST be "Appointment"
'** when we call Init on the NotesCSEventOwnerDocument object (we can
'** change it back after the Init call is done)
oldform = source.Document.Form
source.Document.Form = "Appointment"
Set csEventObj= New CSCalendarEntry( bEventType, source.document, source )
Call csEventObj.m_BEobject.Init(source.document, bInitFlags)
source.Document.Form = oldform
Exit Sub

processError:
Dim errMsg As String
If (Err = 4670) Then
errMsg = "Error 4670: make sure there's a form called 'CalendarProfile' in this database."
Else
errMsg = "Error " & Err & " on line " & Erl & ": " & Error$
End If

Print errMsg
Msgbox errMsg
Resume Next

End Sub

Вот код на котором срабатывает ошибка
 
N

nvyush

nik3528
Не мешало бы ещё указать, что за ошибка, в какой строке и при каких условиях возникает. "Портянки" кода желательно заворачивать в спойлер.
 
N

nvyush

Если речь о диалоге — никак. Можно выводить контрольные значения переменных с помощью Print или MsgBox.
 
N

nik3528

Если вставить msgbox после каждой строчки кода то ошибка выскакивает на

Код:
Call csEventObj.m_BEobject.Init(source.document, bInitFlags)

вот сам класс

Код:
Class CSCalendarEntry
Public m_ws As NotesUIWorkspace
Public m_uidoc As NotesUIDocument
Public m_note As notesdocument
Public m_nEventType As Integer
Public m_beobject As Variant

Sub New(nEventType As Integer, note As notesdocument, source As notesuidocument)
Set m_ws = New NotesUIWorkspace
Set m_uidoc = source
Set m_note = note
m_nEventType = nEventType
Msgbox"3/5"	
Set m_beobject = New NotesCSEventOwnerDocument(nEventType)
Msgbox"3/6"	
End Sub

Sub Delete()
If Not (m_beobject Is Nothing) Then Delete m_beobject
End Sub

End Class
 
N

nvyush

nik3528
В огороде бузина, в Киеве — дядька... Судя по строке, где вылетает ошибка, csEventObj является ссылкой на объект совсем другого класса. Сообщения трассировки лучше выводите в строку состояния Print'ом, так нагляднее, видны все сообщения сразу. И, в конце концов, где текст сообщения об ошибке? Здесь не телепаты, важно знать не только где ошбика, но и какая именно.
 
N

nik3528

Ошибки следующие

Error item not found
далее
Object variable not set
и так несколько раз

я не могу понять какая переменная не установлена :)
 
N

nvyush

Ошибка "Object variable not set" возникает при попытке выполнить метод или получить свойство не инициализированного объекта, например, для новых документов такой код в событии формы QueryOpen вызывает подобную ошибку:
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Msgbox Source.Document.GetItemValue("Form")(0)
End Sub
потому что Source.Document — Nothing.
Попробуйте в подозрительных местах прежде чем обращаться к объектам проверять их на Nothing:
Код:
Set doc = Source.Document
If doc Is Nothing Then ...
 
N

nik3528

В том то и дело что ошибка возникает не на новых документах а на старых, то есть если создать документ и сразу добавить список повторов то все хорошо и в дальнейшем документ работает нормально, но если в созданный документ пытаешься добавить повторы после его сохранения то появляется эта ошибка.
А за
Код:
If doc Is Nothing Then
спасибо попробую
 
N

nvyush

Советую во всех процедурах/функциях иметь обработчики ошибок. Кое-чего можно почерпнуть тут:
link removed
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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