Как проверить, является ли пользователь редактором документа или нет?

Тема в разделе "Lotus - Программирование", создана пользователем fvoice, 12 фев 2008.

  1. fvoice

    fvoice Гость

    хотел использовать @Authors, но эта функция не возвращает конкатенированного списка полей Authors..
    какие еще способы есть?
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Смотря для чего нужно.
     
  3. fvoice

    fvoice Гость

    хочу скрывать кнопку, котрая редактирует текущий документ.. т.к. используется DialogBox с временным документом, то информация о невозможности сохранить изменения выходят только при нажатии на кнопку сохранить в диалогбоксе..

    как вариант, как на LS можно проверить может ли пользователь редактировать документ?
     
  4. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Может так?
    !@Contains(@UserName; поле_авторсов)
     
  5. fvoice

    fvoice Гость

    Для: wowa
    вариант конечно.. но не очень оптимальный, т.к. колличество полей Authors может расшириться и тогда формула будет работать некорректно :unsure:
     
  6. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: fvoice
    Вроде нет нормального способа.
    Как вариант могу предложить создание временного документа(серверным агентом в момент открытия документа) с полями Readers, куда включить всех авторов. Потом, при попытке редактирования, смотреть этот документ. Если виден, то редактируем.
    Потом эти временные документы удаляем.
     
  7. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Для: fvoice
    я не сталкивался с таким что используют несколько полей авторсов
    Зачем их несколько?
    Чем плохо, что в одном поле содержится список пользователей которые могут редактировать док...
    А даже если их и несколько, то:

    !@Contains(@UserName; поле_авторсов1 : поле_авторсов2 : поле_авторсов3 ...... )
     
  8. Sandr

    Sandr Гость

    @IsNotMember(@UserName;MyAuthorField)
     
  9. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Forall x in doc.Items
    if x.Type = AUTHORS then
    'собираем авторов в array/list
    end if
    End forall

    'Проверяем текущего юзера на наличие в array/list
     
  10. fvoice

    fvoice Гость

    Для: Omh
    О, чуть-чуть по другому сделал:
    Код (Text):
    Function MyIsEditor(doc As NotesDocument ) As Boolean

    Dim ws As New NotesUIWorkspace
    Dim Authors As Variant
    Dim UserNamesList As Variant
    Dim i As Integer
    Dim j As Integer

    If ws.CurrentDatabase.Database.CurrentAccessLevel >3 Then
    MyIsEditor = True
    Exit Function
    End If

    UserNamesList = Evaluate({@UserNamesList},doc)
    Authors = doc.Authors

    Forall item In doc.Items
    If item.IsAuthors Then
    Authors = Fulltrim(Arrayunique(Arrayappend(Authors,item.Values)))
    End If
    End Forall

    For i = 0 To Ubound(Authors)
    For j = 0 To Ubound(UserNamesList)
    If Authors(i) = UsernamesList(j) Then
    MyIsEditor = True
    Exit Function
    End If
    Next
    Next
    MyIsEditor = False

    End Function
     
  11. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Arrayappend - кмк, не комильфо метод.
    Я вообще не очень люблю этот метод, неизвестно, что он там внутри делает.
     
  12. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А это? Ведь неправильно.
    <!--QuoteBegin-fvoice+12:02:2008, 11:50 -->
    <span class="vbquote">(fvoice @ 12:02:2008, 11:50 )</span><!--QuoteEBegin-->Authors = doc.Authors
    [snapback]97703" rel="nofollow" target="_blank[/snapback]​
    [/quote]

     
  13. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для: Medevic
    Глаз - алмаз, я не приметил
     
  14. fvoice

    fvoice Гость

    Для: Omh
    а как лучше писать? вручную добавлять?

    Для: Medevic

    ну да.. депозитор наверное может быть автором, а вот редактировать документ и не сможет.. или я не о том? ну в общем я понял.. написал чтобы Authors значения приобрел.
    а что если модифицировать блок:
    Код (Text):
        Forall item In doc.Items
    If item.IsAuthors Then
    Authors = item.Values
    Authors = Fulltrim(Arrayunique(Arrayappend(Authors,item.Values)))
    End If
    End Forall
    а ту строчку удалить..
     
  15. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для: fvoice
    Я делал бы:
    1. вручную ArrayGetIndex + Redim Preserve
    (не лучший выход, но на небольших размерах массива работает быстро)
    2. list as string

    Но я не настаиваю, просто ArrayAppend меня не бодрит.
     
  16. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Имейте в виду, что AUTHORS-поле будет содержать имя группы и/или роль, а не только имя юзера
     
  17. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-Constantin A Chervonenko+12:02:2008, 14:22 -->
    <span class="vbquote">(Constantin A Chervonenko @ 12:02:2008, 14:22 )</span><!--QuoteEBegin-->Имейте в виду, что AUTHORS-поле будет содержать имя группы и/или роль, а не только имя юзера
    [snapback]97763" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Вот поэтому я и использую специальные документы.
    Т.е. есть какой-то настроечный документ, который разруливает различными правами. Пусть, например, видимость кнопки. При его сохранении создаются/изменяются спец. документы. Точнее в поля типа Readers записываются имена и группы. Потому по видимости этого документа легко определяем доступ.
    Плюсы очевидны: минимум кода, удобно.
    Минусы: есть ощущения, что что-то не так. :)
     
  18. fvoice

    fvoice Гость

    Для: Omh
    Были ли прецеденты когда ArrayAppend подводил? У меня очень много действий строятся на этой функции, не хотелось бы иметь осложнений..
    переписал код на:
    Код (Text):
        Forall item In doc.Items
    If item.IsAuthors Then
    Forall value In item.values
    If Not value = "" Then
    Redim Preserve Authors(Ubound(Authors)+1)
    Authors(Ubound(Authors)-1) = value
    End If
    End Forall
    End If
    End Forall
    имхо юзать ArrayAppend гораздо удобней :)
    <!--QuoteBegin-Constantin A Chervonenko+12:02:2008, 17:22 -->
    <span class="vbquote">(Constantin A Chervonenko @ 12:02:2008, 17:22 )</span><!--QuoteEBegin-->Имейте в виду, что AUTHORS-поле будет содержать имя группы и/или роль, а не только имя юзера
    [snapback]97763" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    вроде @UserNamesList возвращает полный список имен, групп и ролей пользователя относительно БД, в которой находится doc, передаваемый в Evaluate.

    Для: Medevic
    настроечный документ для каждого документа или для группы документов? а если для разных документов разный доступ, заранее не известный?
     
  19. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-fvoice+12:02:2008, 15:02 -->
    <span class="vbquote">(fvoice @ 12:02:2008, 15:02 )</span><!--QuoteEBegin-->настроечный документ для каждого документа или для группы документов? а если для разных документов разный доступ, заранее не известный?
    [snapback]97776" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Для групп. Но никто не мешает так делать для отдельных документов. Только база потолще будет, да и при очень большом количестве документов скорость сильнее упадет.
     
  20. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    <!--QuoteBegin-fvoice+12:02:2008, 14:02 -->
    <span class="vbquote">(fvoice @ 12:02:2008, 14:02 )</span><!--QuoteEBegin-->Были ли прецеденты когда ArrayAppend подводил?
    [snapback]97776" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Не было, т.к. не юзаю.
    Но где-то читал нечто нелицепиятное о ней, хотя бы тут
     
Загрузка...

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