Права На Редактирование Документов

Тема в разделе "Lotus - Программирование", создана пользователем Kizarek86, 6 апр 2012.

  1. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Как бы проверить есть у пользователя доступ на редактирование документа или нету?
    Есть какой нибудь универсальный механизм, без обхождения всех полей Authors?
     
  2. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Пока нет. На ideajam много раз просили сделать такую функцию/метод, но воз и ныне там.

    Можно облегчить себе "участь" - застандартизировать в своих приложухах item'ы для хранения "доступов". Обычно хватает 4 отдельных item'а для:
    - серверов;
    - групп;
    - ролей;
    - персон.

    Добавлено: в условиях имеющегося приложения пробегаться по всем item'ам и из них пытаться определять...
     
  3. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Агентом создавать вспомогательный документ с полем Readers. В него запихнуть всех из Authors-полей основного документа.
    В нужный момент проверяем существование вспомогательного документа.
     
  4. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Печально, в общем сделал через опу)
    Тупо пытаюсь сохранить документ и ловлю ошибку.
     
  5. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    А может попробовать Lock?
     
  6. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    kizarek
    Наоборот, это элегантный выход :)
     
  7. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а чем вам пересохранить не устраивает? :)
     
  8. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    С использованием Notes C API никаких лишних сейвов. Метод не сработает если права даются/отбираются после получения документа из БД:

    Код (LotusScript):
    Declare Private Sub NSFNoteGetInfo_WIN32 Lib "nnotes.dll" Alias "NSFNoteGetInfo" (Byval hNote&, Byval Note_Member%, Value_ptr%)

    Function IsDocumentWritable(cdoc as NotesDocument) as integer

    On Error Goto ErrHnd
    If False Then
    ErrHnd:         Error Err, Error$ & Chr(10) & Getthreadinfo(1) & " (line " & Erl & ")"
    End If

    Const NOTE_FLAGS%           =&B111
    Const NOTE_FLAG_READONLY%   =&B001

    Dim NoteFlags%

    If cdoc Is Nothing Then Error 1234, "Wrong argument"

    Call cdoc.GetItemValue("$$AccessAnyFieldForInitializeHandle")
    Call NSFNoteGetInfo_WIN32(cdoc.Handle, NOTE_FLAGS, NoteFlags)
    IsDocumentWritable=(NoteFlags And NOTE_FLAG_READONLY)=0
    End Function
     
  9. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    да, обычно этим и пользуются, однако вопрос, а что дает этот вызов
    Call cdoc.GetItemValue("$$AccessAnyFieldForInitializeHandle") ?

    ps. или это сделано для вида - типа хоть какое-то действие с документом, чтоб красного малевича не словить?
     
  10. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    многие я так понимаю не знаю фишку с сейвом

    Фишка:
    Если вы беретё док и тут же его сохраняете без измений в документе чего либо то док не сохраняется - не меняется дата модификации
    Так что всё что нужно это лишь увидеть флаг ТРУ при сохранении :)
     
  11. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    >Так что всё что нужно это лишь увидеть флаг ТРУ при сохранении
    Многие также не знают, что Save всегда возвращает False если в документе ничего не менялось

    Добавлено: >или это сделано для вида - типа хоть какое-то действие с документом, чтоб красного малевича не словить?
    Ответ в имени поля :) AccessAnyFieldForInitializeHandle.
    Т.е. cdoc.Handle не определён пока не будет какого-либо чтения из документа.
     
Загрузка...

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