Поля типа Richtext

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

Статус темы:
Закрыта.
  1. velitchestvo

    velitchestvo Гость

    В зависимости от роли пользователя необходимо запретить или разрешить редактирование содержимого поля. На событии querymodechange я запрещаю редактирование, но почему-то удалять содержимое поля всё равно можно.
    Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
    Dim s As New Notessession
    Dim db As NotesDatabase
    Dim ws As New NotesUIWorkspace
    Dim doc As NotesDocument

    Set db = s.CurrentDatabase
    Set doc = ws.CurrentDocument.Document

    If doc.Edit(0) = "0" Then
    continue = True
    Else
    continue = False
    End If
    End Sub
     
  2. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    А если задать себе вопрос - отрабатывает ли вообще в вашем контексте событие Querymodechange? например из view нажимаем Ctrl + E либо action с @Command([EditDocument]) и благополучно минуем сие событие и открываем документ в режиме редактирования. Тут нужно проверять еще и как отрабатывает QueryOpen.

    Ну и для полноты ощущений - doc.Edit(0) = "0" - это что такое и зачем ?
    Свойство EditMode класса NotesUIDocument вам в помощь, читаем подробнее в хелпе и будет вам счастье.

    Но это решает проблему запрета\разрешения открытия всего документа в режиме редактирования. А если нужно конкретное поле, причем RichText, да еще в зависимости от роли, то по идее в секцию с контролируемым доступом его
     
  3. velitchestvo

    velitchestvo Гость

    /////////////////////////////////////////////

    да я учёл этот момент , на postopen я проверяю режим открытия:

    If doc.edit(0) = "1" Then
    uidoc.EditMode = False
    End If

    на querymodechange:

    Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
    Dim s As New Notessession
    Dim db As NotesDatabase
    Dim ws As New NotesUIWorkspace
    Dim doc As NotesDocument

    Set db = s.CurrentDatabase
    Set doc = ws.CurrentDocument.Document

    If doc.Edit(0) = "0" Then
    continue = True
    Else
    If doc.Edit(0) = "0" And Source.EditMode = True Then
    continue = True
    Else
    If doc.Edit(0) = "1" And Source.EditMode = False Then
    continue = False

    End If
    End If
    End If
    If Source.EditMode = True Then
    Call Source.Save
    End If
    End Sub


    а поле Edit документа на queryopen записывается 0 если чувак имеет роль для редактирования и 1 если не имеет этой роли (это поле нужно и для других целей)

    А проблема в следующем, нужно чтоб содержимое поля открылось для чтения всем пользователям (даже если они не имеют роли) но нельзя чтоб они смогли его редактировать.
    В данном случае почему не знаю редактирование запрещено но удаление проходит на ура.

    Спасибо что отозвались. Ещё я видел варианты (не знаю как это реализовано) когда кнопки Edit Delet при открытии файла в полях типа richtext вообще не доступно.
     
  4. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Ну тогда варианты решений:
    секция с контролируемым доступом - уже озвучен
    использовать в документе computedSubform . Делаем 2 Subform на которых размещено richText поле - на одной Subform оно Editable на другой - computed. Открытие конкретной необходимой subform в зависимости от наличия роли или поля Edit в твоем случае.

    А удаление как реализовано ? Если у меня в принципе есть права на редактирование документа - то невозможность редактирования поля решается только через помещение его в секцию с контролируемым доступом. Все остальное - интерфейсные рюшечки, которые достаточно просто обходятся. Например агентик или action со скриптом или @-формулами и с полями в документе делай все что хочешь - несмотря на внешнюю невозможность редактирования и удаления.
     
  5. velitchestvo

    velitchestvo Гость

    тогда такой вопрос: как переписывать содержимое поля что editable в поле что computed?
    Если ставить по умолчанию название поля что editable в computed то файл не передаётся.
     
  6. Chernom0r

    Chernom0r Гость

    appendrtitem в хелпе дизайнера
     
  7. velitchestvo

    velitchestvo Гость

    а такой вопрос: можно как нибудь проверить лежит в поле типа RichText файл или может текст вбит?
     
  8. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Все просто. Вариант с subform.
    Есть richText поле называемое например rtField.
    Делаем 2 subform.
    На первой делаем поле типа richText с названием rtField - тип Editable
    На второй делаем поле типа richText с названием rtField - тип Computed. Formula для поля = rtField.

    На основной форме поле rtField более без надобности его и убираем. Добавляем computedSubform с формулой которая открывает нужные нам subform в зависимости от наличия\отсутствия роли.
    Все. Больше никаких телодвижений совершать необходимости нету
     
  9. velitchestvo

    velitchestvo Гость

    Доброго всем дня!
    Никто не знает как проверить находится ли в поле типа RichText какой-нибудь файл, ссылка, то есть не пустое ли оно?
    Проверка на размер содержимого не подходит т.к. это поле по умолчанию имеет сколько-нибуть байт.
    Спасибо.
     
  10. SOFTOBZOR.ru

    SOFTOBZOR.ru Гость

    <!--QuoteBegin-velitchestvo+16:07:2006, 05:55 -->
    <span class="vbquote">(velitchestvo @ 16:07:2006, 05:55 )</span><!--QuoteEBegin-->Никто не знает как проверить находится ли в поле типа RichText какой-нибудь файл
    [snapback]40210" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    @Atachment
     
  11. Dikobraz Grey

    Dikobraz Grey Гость

    Имейте ввиду, что 7 версия LD (7.0.3 точно) проверяет наличие одинаковых полей на computed subform'ах. То есть в описанном способе будет ругань при компиляции на одинаковые имена поля.
     
  12. johny

    johny Гость

    дык а зачем две сабформы пихать в док??? подменяйте их в зависимости от наличия ролей и все. а на самом деле лучше юзать controlled access section, не надо будет делать изменения в дизайне синхронно в двух сабформах, ну а если не хочеца так, то лучше вместо двух сабформ сделать два поля - одно компутед а другое едитабле и скрывать их в зависимости от ролей
     
  13. Dikobraz Grey

    Dikobraz Grey Гость


    computed subform

    Код (Text):
    @if(условие;"subforma1"; "subforma2")
    при этом форма с такой computed subform не компилится если и на subform1 и на subform2 есть поле с именем field1.
    Создание двух RT в доке не рентабельно. А если там файл? и не маленький? Я вижу выход только в управляемой секции
     
  14. johny

    johny Гость

    полностью согласен :) тока товарищ помоему не хочет ее юзать...
     
  15. Sandr

    Sandr Гость

    Не майтесь ерундой - управляемая секция - самый лучший выход...
    Скрытие РТ полей ваще работать корректно не будет, так как формула скрытия для РТ полей применяется только один раз...
     
Загрузка...
Статус темы:
Закрыта.

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