Блокировка текущего документа с помощью lotusscript

#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 /…