Накосячил с полем типа Readers

Тема в разделе "Lotus - Программирование", создана пользователем rainstor, 13 авг 2009.

  1. rainstor

    rainstor Гость

    Вобщем такая ситуация.

    В документе есть поле AReaders (тип, соответственно, Readers). Поле многозначное.
    При сохранении документа этому полю присваивается значение в зависимости от выбора радиобаттона. И я следующим образом присвоил значение этому полю:

    If Source.FieldGetText("field1") = "var1" Then
    Call Source.FieldSetText("AReaders", "[rol1]")
    Call Source.FieldAppendText("AReaders", "[rol2]")
    End If

    И теперь я не могу ни просмотреть этот документ и вообще ничего-либо с ним сделать. Пробовал и на локальной копии и на сервере. Пробовал агентом и обновлять значение поля и удалять это поле. Ничего не помогает... Документ просто не отображается и все!

    Помогите плиз.
     
  2. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ну дык назначь себе эти роли. делов-то
    а вообще - заведи роль [Admin] и добавляй ее по умолчанию во все документы в поле AuthorsID. И назначь эту роль себе... или еще кому-нить
     
  3. rainstor

    rainstor Гость

    Так эти роли назначены у меня :) В том-то и дело. И обе сразу назначал, и по отдельности каждую...
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ну начнем с того что ты ридерс делал :) а надо было авторс
     
  5. rainstor

    rainstor Гость

    Почему авторс должен быть? И что мне теперь делать с этим документом? Можно его как-то сделать видимым или хотя бы удалить?
     
  6. abbatik

    abbatik Lotus team
    Lotus team

    Регистрация:
    20 окт 2008
    Сообщения:
    277
    Симпатии:
    0
    Серверный агент видит этот документ?

    С Full Access Admininstration документ видно?
     
  7. rainstor

    rainstor Гость

    Нет, агента запускал и на серверной и на локальной копии
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    AuthorsID - поле предназначено для предоставления прав автора. т.е. если пользователь указан в этом поле - он получает возможность редактировать документ не только в UI но и в бекэнде
    ReadersID - для предоставления прав на просмотр.

    Если важны документы - попробуй сделать копию на локаль, но без наследования ACL. должно помочь.
    Если и это не поможет - поменяй расширение базы на ntf и создай по этому "шаблону" новую базу

    Ну и надеюсь понятно, что это все лучше делать с копией рабочей базы?

    ну а вообще - разработку и тестирование надо вести на отдельной базе (шаблоне) а не сразу на боевой

    Так.... что-то я пропустил... с этими ролями ты не видишь документ вообще? или просто не можешь его редактировать?
     
  9. rainstor

    rainstor Гость

    Я на сервере не являюсь администратором. Я просто программист
    Непомогло
    Непомогло
    Я в курсе об этом. Просто база - небольшая, вспомогательная и не особо важная. С другими базами так и делаю :)
    Вообще не вижу документ, которому присвоены эти роли.

    А вообще роли я правильно присвоил? В смысле по коду?
     
  10. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Запусти Lotus Administator.
    Открой сервер, где находится база.
    Включи режим Administration->Full Access Administrator. (Предполагается, что ты прописан в поле Full Access Administrators на вкладке Security в настройках сервера)
    После перезахода в базу ты сможешь видеть все документы в базе.

    Как уже сказали, на будущее заведи в базе роль, которую прописывай в поле типа Readers для всех документов с непустым полем типа Readers.

    Update: если ты не имеешь права администрирования сервера, то попроси проделать все вышеописанное администратора.
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Программист с обрезанными правами это круто!!!!

    меня терзают смутные сомнения по поводу правильности кода. Такие манипуляции надо делать в бекэнде
    Почитай хелп по NotesItem class.
    Обрати внимание на свойства IsAuthors, IsNames, IsReaders
     
  12. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Вообще-то это правильно. :)
     
  13. rainstor

    rainstor Гость

    Что интересно, если полю AReaders присваивать значение следующим образом и убрать multiple value, то все нормально роли работают:

    If Source.FieldGetText("field1") = "var1" Then
    Call Source.FieldSetText("AReaders", "[rol1]:[rol2]")
    End If
     
  14. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Насчет правильности кода:
    1. Действительно, не рекомендуется это делать UI методами.
    2. По результатам работы кода в поле будет одно значение "[rol1][rol2]" потому что notesUIDocument.FieldAppendText добавляет текст, а не новое значение. Чтобы данный код работал, нужно дополнительно добавить любой из разделителей, указанных в свойствах поля. Поскольку впоследствие вы легко можете решить изменить в поле разделитель, используемый для ввода, и не вспомните, что это разделитель еще где-то используется, то мы приходим к одному из обоснований пункта 1.
     
  15. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    хм... интересно... у меня установлено multiple value и все работает без проблем

    просто тут
    Код (Text):
    If Source.FieldGetText("field1") = "var1" Then
    Call Source.FieldSetText("AReaders", "[rol1]")
    Call Source.FieldAppendText("AReaders", "[rol2]")
    End If
    не правильно написано. по итогам этих операций у тебя будет установлена "[rol1][rol2]". И multiple value тут не при чем
     
  16. rainstor

    rainstor Гость

    :)
    Тогда вопрос. Какими еще методами можно это сделать при сохранении документа? (Сильно не пинайте - я в Лотусе новичек :))
    Я так и понял что метод добавляет текст - поэтому в заголовке и написал что накосячил :)
    Т.о. у меня сейчас в поле AReaders всего 1 значение ("[rol1][rol2]")? И соответсвенно такую роль мне никогда не создать...
    Но что самое противное, во вью, категоризованному по дате, отображается дата создания этого документа, а сам документ нет (он 1 в этой дате), и соответственно в тоталсах этот документ также считается... И как убрать это теперь, я не знаю. Сам документ я создам заново за 1 мин
    Да я думаю и у меня будут работать, просто когда пробовал снял эту галку.
     
  17. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Заводишь на форме скрытые поля со всеми нужными аттрибутами. Выставляешь опцию Computed when Composed
    И в свойстве Value пишешь "[rol1]":"[rol2]"
     
  18. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    1. Что делать со старым документом, я написал выше: нужно пойти к администратору и проделать вышеописанные действия на его машине.
    2. Как программно, рекомендуемо сделать поле типа Readers с нужным значением.

    Const READERS_FIELD = "Readers"
    Dim doc As NotesDocument ' объект через который делаются все операции чтения/записи полей документа гуру Лотуса
    Dim itReaders As NotesItem

    Set doc = uidoc.Document ' считаем, что объект типа NotesUIDocument был уже получен ранее
    Set itReaders = doc.ReplaceItemValue(READERS_FIELD, "")
    itReaders.IsReaders = True
    ' Всякие роли, группы и конкретные пользователи, которые должны иметь доступ
    Call itReaders.AppendToTextList("[rol1]")
    Call itReaders.AppendToTextList("[rol2]")
    Call itReaders.AppendToTextList("1-я Группа пользователей")
    Call itReaders.AppendToTextList("2-я Группа пользователей")
    Call itReaders.AppendToTextList("CN=Конкретный Пользователь/OU=Наша фирма")
    Call itReaders.AppendToTextList("CN=Другой Пользователь/OU=Наша фирма")
    If itReaders.Text <> "" Then
    ' Если поле непустое, то обязательно добавляем группу видящих все документы в базе.
    Call itReaders.AppendToTextList("[ReadAll]")
    End If

    P.S. И не плодите поля типа Readers в документе. Таких полей должно быть максимум одно
     
  19. rainstor

    rainstor Гость

    Ясно, спасибо.
    И еще 1 вопросик. Почему в локальной копии (скопировал на уровне файловой системы) я не могу что-то делать с этими документами. Насколько я знаю на локальной машине не работает ACL. Или я ошибаюсь?
    Админ щас в отпуске :(. Да и живет он в другом городе совсем, поэтому выцепить его - маловероятно...
     
  20. K-Fire

    K-Fire Гость

    Плохой совет. Очень плохой совет. Это все конечно дело вкуса, но в 100% приложений что я видел, везде используют несколько ридерских/авторских полей. И я сам использую всегда несколько, ибо с такой схемой работать гораздо проще и глюков меньше.
     
Загрузка...

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