Я сделал нечто подобное. Когда создается новая версия, как я ее называю, это «черновой» документ. Предыдущий документ является «утвержденным» документом. Пользователь может просматривать только утвержденные документы до тех пор, пока не будет утверждена новая версия, после чего более ранние утвержденные документы архивируются из БД. Если вы хотите, чтобы все версии оставались в БД, но только был выведен новый документ, вы можете использовать то, что я называю полем HistoryID. В основном у меня есть поле в каждом документе, в котором может быть до трех значений:
TheUNID
ParentUNID: TheUNID: Родитель
TheUNID: ChildUNID: Ребенок
Поле «theUNID» вычисляется при составлении, поэтому оно никогда не изменяется. Если новая версия или черновик созданы, HistoryID теперь будет иметь два значения:
TheUNID
TheUNID: ChildUNID: Родитель
Это означает, что теперь у вас есть новый черновик, и документ, на котором вы находитесь, фактически является родительским. «ChildUNID» на самом деле является «UNID» проекта черновика, который вы только что создали.
В дочернем документе или новом черновом документе, который вы указали в HistoryID:
TheUNID
ParentUNID: TheUNID: Родитель
Таким образом, ваш черновик знает, кто его родитель.
В вашем коде в вашей базе данных у вас просто есть открываемый документ, сначала проверьте поле HistoryID. Если есть ребенок, вы отводите пользователя к ребенку. Неважно, какой родительский объект открыт или как далеко зашли поколения, ваш код продолжает перебирать HistoryID, пока не будет найден текущий дочерний документ, у которого нет родителя. Звучит хорошо?
Дайте мне знать, если вам нужны разъяснения.