#lotus-notes #lotus-domino #lotusscript
#lotus-notes #lotus-domino #lotusscript
Вопрос:
У меня есть документ и копия документа. Я хочу создать блокировку документа для документа с помощью LotusScript.
Я отдельно поместил текущий документ в представление компьютера и скопировал документ в черновик. Ниже приведено действие по созданию копии.
Создать копию
Sub Click(Source As Button)
Dim ns As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim newdoc As NotesDocument
Dim dc As NotesDocumentCollection
Set db= ns.CurrentDatabase
Set dc= db.UnprocessedDocuments
If dc.Count<>1 Then
Messagebox "No or too many documents selected"
Exit Sub
End If
Set doc= dc.GetFirstDocument
Set newdoc= doc.CopyToDatabase(db)
Call newdoc.ReplaceItemValue("PStatus", "Draft")
Call newdoc.Save(True, False)
End Sub
Кнопка сохранения
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim view As NotesView
Set uidoc = workspace.CurrentDocument
Set db = session.CurrentDatabase
Set view = db.GetView("Draft")
Set doc = view.GetDocumentByKey("Draft", True)
vpswd = Inputbox$("Pls input code to save :")
If vpswd = "o" Then
uidoc.EditMode = True
Set doc = uidoc.Document
Set doc = view.GetFirstDocument
If doc.PStatus(0) = "Draft" Then
Set newdoc= doc.CopyToDatabase(db)
Call newdoc.ReplaceItemValue("PStatus", "Active")
Call newdoc.Save(True, False)
End If
Call uidoc.FieldSetText("SaveOptions" , "1")
Call uidoc.Save
Call uidoc.Close
End If
End Sub
Как я могу блокировать текущий документ каждый раз, когда я создаю копию документа? Например, текущий документ будет заблокирован при создании копии документа.
Другой вопрос в том, что для копирования документа после сохранения я хочу заменить текущий документ как документ копии, а документ копии будет живым документом. При этом текущий документ не будет удален из базы данных, а будет удален из компьютерного представления и отображен в «Архивном» представлении.
А в режиме черновика копия документа будет удалена из просмотра. Любая помощь будет оценена. Спасибо!
Ответ №1:
Блокировка документа должна быть неявной. Убедитесь, что вы используете поле статуса во всех документах. Например, при создании копии установите статус скопированного документа на «Скопировано», а для нового документа nt — на «Черновик». Вы должны охватить все различные изменения статуса. Лучше всего также добавить одно поле, содержащее уникальный идентификатор документа, который никогда не может быть изменен. Возможно, также добавьте номер версии.
Примеры состояний:
- Черновик: разрабатываемый документ (только один, копировать нельзя)
- Текущий: действительный документ (только один, может быть скопирован)
- Скопировано: текущий документ, который был скопирован (только один, копировать нельзя)
- Архивирован: документ, который был заменен (более одного, скопировать невозможно)
Это может помочь создать STD, диаграмму перехода состояний.
Комментарии:
1. Я постараюсь установить статус в соответствии с вашим предложением. Я все еще новичок в notes, поэтому я немного медленно справляюсь с этим, но совершенствуюсь. Могу я спросить, можете ли вы предложить какой-либо синтаксис или способ, как я могу заменить документ данными другого документа, когда я нажимаю сохранить. Любая помощь, которую я ценю!
2. Это имеет мало общего с Заметками… Вам следует изучить статусы и операции, выполняемые с документами, которые могут изменить статус. Операции могут быть незаконными или разрешенными, в зависимости от статуса. Почему вы хотите заменить документ? В какой ситуации вам нужно это сделать?
3. Как я уже упоминал в своем вопросе, я хочу сохранить черновик документа как активный, а текущий активный документ изменить на статус неактивного. Таким образом, проект документа заменит активный документ. Вот почему я хочу заменить документ. Надеюсь, вы понимаете 🙂
4. Неактивный или архивированный? Все, что вам нужно сделать, это изменить статус обоих документов, одного со статусом Черновик на активный, а другого с активного на архивированный. Я полагаю, что ваш реальный вопрос здесь таков: когда я нахожусь в черновике документа, как я могу получить текущий активный документ? Вам нужно будет искать его в режиме поиска, используя тот же ключ, который использовался для черновика документа. Поиск в представлении выполняется с помощью GetDocumentByKey . Создайте представление, желательно скрытое и используемое только для поиска, с 2 столбцами: поле documentId и статус поля.
5. Ранее я предлагал присвоить документу уникальный идентификатор. Я думаю, что большая часть путаницы возникает из документа word, что означает либо (физический) Документ Notes или ваш документ более высокого уровня (логический). Вы должны найти разные слова для обозначения этих сущностей, например «История» и «Версия». История уникальна, у нее должен быть только один идентификатор истории, но может быть много версий одной и той же истории. Каждая версия имеет статус и по умолчанию. существует только одна версия со статусом Черновик, и только одна активна. Если вы присвоите каждой версии свой собственный номер версии, то также сможете однозначно идентифицировать Версию.
Ответ №2:
Я сделал что-то подобное. Когда создается новая версия, как я ее называю, это «черновик» документа. Предыдущий документ является «одобренным» документом. Пользователь может видеть только утвержденный документ до тех пор, пока не будет утверждена новая версия, затем более старый утвержденный документ архивируется из базы данных. Если вы хотите, чтобы все версии оставались в базе данных, но отображался только более новый документ, вы можете использовать то, что я называю полем historyId . По сути, у меня есть поле в каждом документе, в котором содержится до трех значений:
TheUNID
ParentUNID:TheUNID:Родительский
идентификатор: Дочерний идентификатор:Дочерний
Поле «theUNID» вычисляется при составлении, поэтому оно никогда не изменяется. Если создается новая версия или черновик, идентификатор истории теперь будет иметь два значения:
TheUNID
TheUNID:дочерний идентификатор: родительский
Это позволит вам узнать, что теперь у вас есть новый черновик и документ, в котором вы работаете, на самом деле является родительским. «Дочерний идентификатор» на самом деле является «идентификатором» черновика документа, который вы только что создали.
В дочернем документе или новом черновике документа, который вы ввели в historyId:
TheUNID ParentUNID: TheUNID:Родительский
Таким образом, ваш черновик знает, кто является его родителем.
В вашем коде в вашей базе данных у вас просто есть любой документ, который открывается, сначала проверьте поле historyId. Если есть дочерний элемент, вы переводите пользователя к дочернему элементу. Не имеет значения, какой родительский элемент открывается или как далеко назад уходят поколения, ваш код продолжает перебирать historyId, пока не будет найден текущий дочерний документ, у которого нет родительского элемента. Звучит хорошо?
Дайте мне знать, если вам нужны разъяснения.
Комментарии:
1. Могу ли я узнать, сколько именно полей мне нужно вставить внутри формы. И как я могу реализовать это внутри lotusscript?
2. Я использую три поля. UNID — это уникальный идентификатор документа. Он изменяется на основе UniqueID и является вычисляемым полем. Я использую поле LookupID, которое является уникальным идентификатором на момент создания, но никогда не меняется. Затем я использую поле historyId, как описано ранее. Вот дамп кода, который может быть полезен. Мои инструкции находятся в форме инструкций базы данных. skylab.ironclads.com/upload.nsf /…