Не удается создать "ответы" на "документ" (заявка)

  • Автор темы Автор темы LordLeo
  • Дата начала Дата начала
2)
Возможные причины:
- Форма не респонсная, после сохранения признак респонса умирает.
- У вас на сохранении перебивается форма документа на FRequest (которая, кстати, не респонс и происходит описанная выше ситуация)
 
Форма "FJobs" отмечена как "Response".
У вас на сохранении перебивается форма документа на FRequest (которая, кстати, не респонс и происходит описанная выше ситуация)

почему она может перебиваться? по каким причинам? и если проблема из-за этого, что надо изменить?
 
Форма "FJobs" отмечена как "Response".


почему она может перебиваться? по каким причинам? и если проблема из-за этого, что надо изменить?

Судя по всему, автор базы не Вы. Посмотрите что происходит при сохранении респонса. Код проанализировать можете? А мы без того, что бы посмотреть на кодж сказать ничего не сможем...
 
Нет, я автор БД, части кода которой я выкладываю. Эта БД - программа, которую я делаю для дипломного проекта.

Так как потомки исчезают из представления после того, как я их открою, привожу код события PostOpen:
[codebox]
Sub Postopen(Source As Notesuidocument)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim view As NotesView
Dim parent As NotesDocument
roles=source.Document.ParentDatabase.QueryAccessRoles(session.UserName)
'если открывший документ, является исполнителем
If (HasElement(roles,"[Performer]")=True) Then
'если выполнение работ еще не началось
If Not Isdate(source.FieldGetText("MiniBeginTime")) Then
'если текущий режим режим просмотра, изменить на режим редактирования
If source.EditMode=False Then ws.EditDocument(True)
'запись в заявку-потомок текущего времени, как время начала работ
Call source.FieldSetText("MiniBeginTime",Cstr(Now))
'сохранить заявку-потомок
source.Save
'получение родителя-документа
pUNID=source.Document.ParentDocumentUNID
Set parent=source.Document.ParentDatabase.GetDocumentByUNID(pUNID)
'если выполнение заявки еще не началось, то записать в заявку-родитель текущее время, как время начала выполнения
If Not Isdate(parent.GetItemValue("StartTime")) Then Call parent.ReplaceItemValue("StartTime",source.FieldGetText("MiniBeginTime"))
'сохранить заявку-родитель
Call parent.Save(True,False)
End If
End If
'обновить представление
Set view=session.CurrentDatabase.GetView("VRequests")
Call view.Refresh
End Sub[/codebox]
 

Вложения

  • _________________.JPG
    _________________.JPG
    118,1 КБ · Просмотры: 497
Сейчас протрассирую.
Но что я делаю не правильно в логической реализации идей, скажи, чтобы я знал как правильно надо делать?

Протрассировал один потомок.
При создании потомка в заявке после метода Call childdoc.MakeResponse(uidoc.document)
у потомка $Ref приравнялся D12DC0062471C19D4625745F002EECB7.

При открытии потомка, было видно, что $Ref не менялся.

Замечу: потомок исчезает именно после события PostOpen (в queryopen я ничего не забивал). Значит в коде этого события, что-то не так. Но с другой стороны код корректно работает, делает то, что надо.
 
С конца.
1.
Код:
Set view=session.CurrentDatabase.GetView("VRequests")
Call view.Refresh
Это для чего? Смысла нет. Почитай хелп.
2.
Код:
If Not Isdate(parent.GetItemValue("StartTime")) Then Call parent.ReplaceItemValue("StartTime",source.FieldGetText("MiniBeginTime"))
Поле StartTime какого типа? Дата? Тогда зачем в него писать текст?
3.
Код:
If source.EditMode=False Then ws.EditDocument(True)
'запись в заявку-потомок текущего времени, как время начала работ
Call source.FieldSetText("MiniBeginTime",Cstr(Now))
'сохранить заявку-потомок
source.Save
Сама идея сохранять документ сразу после открытия(при этом переводя документ в режим редактирования) имхо неправильная. Т.е. ты принуждаешь пользователя начать работу сразу после открытия. А если я просто посмотреть захотел? Если так надо записать дату открытия, то используй дополнительный документ-респонз.
4. Еще не нравится проверка:
Код:
If (HasElement(roles,"[Performer]")=True) Then
Чувствую, что можно обойтись полями Authors.

Замечу: потомок исчезает именно после события PostOpen (в queryopen я ничего не забивал). Значит в коде этого события, что-то не так.
Не факт.
Поле $REF есть на форме?
Какие еще события формы есть?
 
Код события PostOpen несколько изменил:
Sub Postopen(Source As Notesuidocument)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim view As NotesView
Dim parent As NotesDocument
'если открывший документ, является закрепленным за документом исполнителем
If session.UserName=source.Document.PerfNName(0) Then
'если выполнение работ еще не началось
If Not Isdate(source.FieldGetText("MiniBeginTime")) Then
'если текущий режим - режим просмотра, изменить на режим редактирования
If source.EditMode=False Then source.EditMode=True
'запись в заявку-потомок текущего времени, как время начала работ
Call source.FieldSetText("MiniBeginTime",Cstr(Now))
'сохранить заявку-потомок
source.Save
'перевести в режим просмотра
source.EditMode=False
'получение родителя-документа
pUNID=source.Document.ParentDocumentUNID
Set parent=source.Document.ParentDatabase.GetDocumentByUNID(pUNID)
'если выполнение заявки еще не началось, то записать в заявку-родитель текущее время, как время начала выполнения
If Not Isdate(parent.GetItemValue("StartTime")) Then Call parent.ReplaceItemValue("StartTime",Cdat(source.FieldGetText("MiniBeginTime")))
'сохранить заявку-родитель
Call parent.Save(True,False)
End If
End If
End Sub



Форма потомка в событиях, кроме PostOpen кода не имеет.

Сама идея сохранять документ сразу после открытия(при этом переводя документ в режим редактирования) имхо неправильная.
После необходимых изменении в полях в коде добавил source.EditMode=False.
 
Теперь потомки не исчезают из представления, хотя я так и не определил почему.

source.EditMode=False убрал, так как, когда в событии PostOpen выполняется EditMode=false, то после того, как трассировка доходит до конца кода события, она заново по второму разу проходит это событие. Наверное, если бы не было условия if, выполнение БД зависло бы на этом событии. Говорю наверное, так как не пробовал условие убрать.
 
Код:
Do While(i<=uidoc.FieldGetText("perCount"))
ошибка потому, что сравниваешь разные типы данных - число (i=1) и строку (FieldGetText)
 
Мы в соцсетях:

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