• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

Поля типа Richtext

  • Автор темы velitchestvo
  • Дата начала
Статус
Закрыто для дальнейших ответов.
V

velitchestvo

#1
В зависимости от роли пользователя необходимо запретить или разрешить редактирование содержимого поля. На событии 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
 

Andre

Well-known member
29.07.2004
108
0
#2
А если задать себе вопрос - отрабатывает ли вообще в вашем контексте событие Querymodechange? например из view нажимаем Ctrl + E либо action с @Command([EditDocument]) и благополучно минуем сие событие и открываем документ в режиме редактирования. Тут нужно проверять еще и как отрабатывает QueryOpen.

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

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

velitchestvo

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

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

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

да я учёл этот момент , на 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 вообще не доступно.
 

Andre

Well-known member
29.07.2004
108
0
#4
А проблема в следующем, нужно чтоб содержимое поля открылось для чтения всем пользователям (даже если они не имеют роли) но нельзя чтоб они смогли его редактировать.
В данном случае почему не знаю редактирование запрещено но удаление проходит на ура.
Ну тогда варианты решений:
секция с контролируемым доступом - уже озвучен
использовать в документе computedSubform . Делаем 2 Subform на которых размещено richText поле - на одной Subform оно Editable на другой - computed. Открытие конкретной необходимой subform в зависимости от наличия роли или поля Edit в твоем случае.

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

velitchestvo

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

velitchestvo

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

Andre

Well-known member
29.07.2004
108
0
#8
тогда такой вопрос: как переписывать содержимое поля что editable в поле что computed?
Если ставить по умолчанию название поля что editable в computed то файл не передаётся.
Все просто. Вариант с subform.
Есть richText поле называемое например rtField.
Делаем 2 subform.
На первой делаем поле типа richText с названием rtField - тип Editable
На второй делаем поле типа richText с названием rtField - тип Computed. Formula для поля = rtField.

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

velitchestvo

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

SOFTOBZOR.ru

#10
<!--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
 
D

Dikobraz Grey

#11
На первой делаем поле типа richText с названием rtField - тип Editable
На второй делаем поле типа richText с названием rtField - тип Computed. Formula для поля = rtField.

На основной форме поле rtField более без надобности его и убираем. Добавляем computedSubform с формулой которая открывает нужные нам subform в зависимости от наличия\отсутствия роли.
Имейте ввиду, что 7 версия LD (7.0.3 точно) проверяет наличие одинаковых полей на computed subform'ах. То есть в описанном способе будет ругань при компиляции на одинаковые имена поля.
 
J

johny

#12
Имейте ввиду, что 7 версия LD (7.0.3 точно) проверяет наличие одинаковых полей на computed subform'ах. То есть в описанном способе будет ругань при компиляции на одинаковые имена поля.
дык а зачем две сабформы пихать в док??? подменяйте их в зависимости от наличия ролей и все. а на самом деле лучше юзать controlled access section, не надо будет делать изменения в дизайне синхронно в двух сабформах, ну а если не хочеца так, то лучше вместо двух сабформ сделать два поля - одно компутед а другое едитабле и скрывать их в зависимости от ролей
 
D

Dikobraz Grey

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

computed subform

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

Sandr

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