Протоколирование изменений полей в документе

Тема в разделе "Lotus - Программирование", создана пользователем Oksana, 18 апр 2006.

  1. Oksana

    Oksana Lotus team
    Lotus team

    Регистрация:
    10 янв 2006
    Сообщения:
    330
    Симпатии:
    0
    Задача следующая:
    К документам базы данных доступ на редактирование имеют несколько человек. Необходимо возле некоторых полей отображать имя того кто его правил в последний раз.
    Как я поняла языком функций здесь не обойдешься (если можно скажите как), а на скрипте еще ничего сама не писала.
    Пожалуйста, скажите с чего начать. Алгоритм вроде понятен, считываем значение поля при переходе в режим редактирования, сравниваем со значением поля в момент сохранения, если не совпадает, в нужное поле прописываем имя текущего пользователя. Вроде так.
    Но вот куда и в каком виде это все вставить? )
     
  2. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Можно попробовать сделать следующее...
    В документе где необходимо сделать отметку о последнем изменении документа завести два поля - первое Avtor (names), второе Adata (дата изменения) к примеру. Оба поля естественно вычисляемые.
    И на событие QueryOpen в этом документе повесить следующее:

    Код (Text):
    Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
    Set docs = Source.Document
    Dim user As String
    Dim session As New NotesSession
    Dim cdoc As NotesDocument
    Dim k As Integer
    Dim S As String

    User = session.UserNameList(0).abbreviated

    If IsNewDoc Then
     Exit Sub
    End If


    Source.Document.Avtor    = Source.Document.Authors(Ubound(Source.Document.Authors))
    Source.Document.AData  = Source.Document.LastModified 
    End Sub
    должен отображаться только тот кто внёс последнее изменение в документ в поле Avtor
     
  3. Oksana

    Oksana Lotus team
    Lotus team

    Регистрация:
    10 янв 2006
    Сообщения:
    330
    Симпатии:
    0
    Спасибо, но не совсем то что нужно.
    Например, есть поля А и В. Зашел Иванов и исправил только поле А (вот рядом с этим полем я хочу видеть Иванов), затем зашел Петров и исправил поле В (соответственно сохраняем его имя). В результате видим поле А правил Иванов, поле В правил Петров. Причем кто из них был последним не так важно.
     
  4. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    ну тогда на событие OnChange поля какого надо повесь код получения пользователя и записывай в рядом стоящее поле получить на OnChange значение поля можно и с помощью Entry ев ...
    ну а там в принципе только останется записать в рядом стоящее поле значение entryя Ну чёто в голову не лезет на вскидку больше ниего))
    хотя есть ещё варианты...

    Код (Text):

    Sub Onchange(Source As Field)
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim acl As NotesACL  
    Dim entry As NotesACLEntry
    Dim uidb As NotesUIDatabase
    Dim d As Variant

    Set uidb = workspace.CurrentDatabase
    Set db = session.CurrentDatabase
    Set acl = db.ACL
    Set entry = acl.GetEntry( session.UserName)

    d = entry.Name
    Set uidoc = workspace.CurrentDocument
    Call uidoc.FieldSetText("dddd",d)

    End Sub
    [\code]
    ну если всё так сделать то в поле dddd предполагается оно будет рядом стоящее с необходимым полем где нужно изменения произвести отобразится пользователь кто его поменяет
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Gor
    А зачем так сложно ? Можно без всяких entry имя пользователя записать.
    через session.UserName
    или session.Usernamelist(1).Common - альтернативное имя.
     
  6. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Medevic
    Ну в принципе да :)
    Я же говорю что первое в голову пришло...
    но насчёт этого не знал
    почёму то мне при решении любой задачи на ум сразу приходят более тяжёлые решения...так уж...может понадобиться потом роли вытянуть или ещё чего нить...из ацль
    но этот действительно вариант попроще...
     
  7. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    1. Если это частный случай ( т.е. нужно только для двух полей) то можно это дело обработать при сохранении документа - сравнить со значениями до и после ...

    2. Хорошо бы иметь универсальный тул для протокола, в виде логов с конфигурационными документами (Форма + отслеживаемые поля). При сохранениии какой-то формы, я отслеживаю указанные поля и делаю запись в логе протокола. А потом успешно пользуюсь этой информацией. Гибко и практично. В этом случае лучше предоставить пользователю видеть весь протокол по изменению полей. А для того чтобы видеть имя изменившего, которого нужно показывать на против поля, нужно будет постараться положить инфу так, чтобы потом ее можно было выделить из протокола.
     
Загрузка...

Поделиться этой страницей