Есть в основном два способа связать эти данные в модели данных, которую вы описываете.Если данные связаны через иерархии ответных документов, они будут немного отличаться от ключевых структур документов.
Покажите это своему разработчику, и он должен буквально иметь возможность подключить код, чтобы включить требования «переместить участников», о которых вы говорите.
Несколько вещей, на которые следует обратить внимание.
- Я предполагаю, что все данные, которыми вы должны манипулировать, находятся в одной базе данных.
- Я беру вашу диаграмму, которую вы предоставили буквально.
Для структур документов на основе ключей вам необходимо проверить используемые представления и значения ключей, чтобы найти документы участников.В частности, проверьте эти 2 строки в подразделе «MoveAttendeesKeyBased»:
Set vwAttendeesByCourseID = db.GetView ("(LkupAllAttendeesByCourseID)")
Set dcAttendees = vwysedeDourDourDourCoursetDourCoursetDourCourseDD0CourseFD0CourseFD (0BC)), True)
Код предназначен для просмотра поля с именами «CourseID», «Status» и значения «Wait Listed» для значения статуса участников, которые необходимо переместить.
На написание обеих версий этой функции потребовалось около 20 минут.
Для структур документов на основе ответов
Sub MoveAttendeesResponseBased(docCourseFrom As notesDocument, docCourseTo As NotesDocument)
%REM
A simple move attendees function if the relationship between courses and attendees is based on
response document hierarchies
%END REM
On Error Goto errHandle
Dim dcAttendees As notesDocumentCollection
Dim docAttendee As notesDocument
Dim iAvailablePlaces As Integer
Dim bMoved As Boolean
If Not (docCourseFrom Is Nothing Or docCourseTo Is Nothing) Then
iAvailablePlaces = docCourseTo.availablePlaces(0)
If 0 < iAvailablePlaces Then
bMoved = False
Set dcAttendees = docCourseFrom.Responses
Set docAttendee = dcAttendees.GetFirstDocument
While Not docAttendee Is Nothing And 0 < iAvailablePlaces
If Ucase(Trim(docAttendee.Status(0)))= "WAIT LISTED" Then
Call docAttendee.MakeResponse(docCourseTo)
If docAttendee.Save(True,True) Then
iAvailablePlaces = iAvailablePlaces - 1
bMoved = True
End If
End If
Set docAttendee = dcAttendees.GetNextDocument(docAttendee)
Wend
If bMoved Then
docCourseTo.availablePlaces = iAvailablePlaces
Call docCourseTo.Save(True,False)
End If
End If
End If
Exit Sub
errHandle:
Messagebox Lsi_info(2) + " - " + Str(Err) + " : " + Error(Err) + ", at line " + Str(Erl)
Exit Sub
End Sub
Для структур документов на основе ключей
Sub MoveAttendeesKeyBased(docCourseFrom As notesDocument, docCourseTo As notesDocument)
%REM
A simple move attendees function if the relationship between courses and attendees uses
(non-response) key based documents
%END REM
On Error Goto errHandle
Dim session As New notesSession
Dim dcAttendees As notesDocumentCollection
Dim docAttendee As notesDocument
Dim iAvailablePlaces As Integer
Dim bMoved As Boolean
' a view that lists attendees by Course ID
Dim vwAttendeesByCourseID As notesView
Dim db As notesDatabase
If Not (docCourseFrom Is Nothing Or docCourseTo Is Nothing) Then
iAvailablePlaces = docCourseTo.availablePlaces(0)
If 0 < iAvailablePlaces Then
Set db = session.CurrentDatabase
' do a lookup of all attendees based on the CourseFrom document course id
Set vwAttendeesByCourseID = db.GetView("(LkupAllAttendeesByCourseID)")
' this is the collection of all attendees under the CourseFrom document
Set dcAttendees = vwAttendeesbyCourseID.GetAllDocumentsByKey(docCourseFrom.CourseID(0), True)
bMoved = False
Set docAttendee = dcAttendees.GetFirstDocument
' While there are attendee documents to process and there are available places to goto
While Not docAttendee Is Nothing And 0 < iAvailablePlaces
' if the attendee's status is "Wait Listed" then move them
If Ucase(Trim(docAttendee.Status(0)))= "WAIT LISTED" Then
' Update the course ID for the Attendee
docAttendee.CourseID = docCourseTo.CourseID(0)
If docAttendee.Save(True,True) Then
' decrement the available places
iAvailablePlaces = iAvailablePlaces - 1
bMoved = True
End If
End If
Set docAttendee = dcAttendees.GetNextDocument(docAttendee)
Wend
If bMoved Then
' available places may be >= 0. Just update the available places so you don't over book the course
docCourseTo.availablePlaces = iAvailablePlaces
Call docCourseTo.Save(True,False)
End If
End If
End If
Exit Sub
errHandle:
Messagebox Lsi_info(2) + " - " + Str(Err) + " : " + Error(Err) + ", at line " + Str(Erl)
Exit Sub
End Sub
Документы на основе ключей - немного больше работы, но я думаю, что это лучшая структура, потому что вы можете легко перемещать документы в базах данных и восстанавливать из резервных копий, копировать и вставлять.С ответными документами у вас могут возникнуть проблемы с восстановлением резервных копий, поскольку в ответных документах используются родительские документы UNID, с которыми они ассоциируются, а также, если вы случайно переместили участника, было бы невозможно узнать, на какой курс его вернуть, без исходной информации о курсе.тем самым возвращая вас к ключевой структуре документов. (но это только мое мнение) .....