• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Россыпь мелких вопросов

  • Автор темы Vagor.ini
  • Дата начала
I

Isk

Veselinka Привет, в очередной раз обращаюсь за помощью. Не подскажешь? Как в документе запретить редактирование? полностью. Вот что попробовал сделать, но виснет все!!!!

Sub Postopen(Source As Notesuidocument)
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim acl As NotesACL

Set db=ses.CurrentDatabase
Set acl=db.ACL
Set source=ws.CurrentDocument
Set doc=source.Document

If source.IsNewDoc Then
Exit Sub
Else
If acl.Roles="[AdminBD]" Then
source.EditMode=True
Else
Call ws.EditDocument(False)
End If

End If

End Sub


Блин!!!!!!!! Спасибо
 
V

Veselinka

Isk, естьу формы такое событие QueryModeChange

у него как и у всех событий типа Query есть параметр Continue, который при установке его на False, не даст свершиться тому действию, которому событие предшествует.

Кроме того на Postopen действительно надо запретить переход в режим редактирования.

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

А теперь я хочу прокоментировать твой код, может Это заставит тебя читать спецификацию и понимать - что пишешь:

Sub Postopen(Source As Notesuidocument)

Dim ses As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim acl As NotesACL

Set db=ses.CurrentDatabase
Set acl=db.ACL
Set source=ws.CurrentDocument

нафига присваивать переданному тебе открываемому документу Source еще что-то - тебе его и так в этом методе передают - зачем его еще каким-то образом искать? Может перед тем как чем-то пользоваться - почитать сначала что это такое? Ты же не расчесываешься по утрам вилкой и если видишь незнакомый предмет - выясняешь - для чего он нужен, перед тем как пользоваться - почему бы тебе мануалы наконец не начать читать? Если ты не начнешь этого делать - то твои вопросы НИКОГДА не иссякнут.

Set doc=source.Document

If source.IsNewDoc Then
Exit Sub
Else
If acl.Roles="[AdminBD]" Then


Syntax
To get: stringArray = notesACL.Roles

При сравнении массива со строкой что происходит? Правильно - все падает - ибо они не сравнимы! Кроме того наверное смысл твоего кода - не проверить наличие в ACL твоей базы такой роли, а проверить ее наличие у текущего пользователя. Значит перед тем как пользоваться методом - надо выяснить - что он возвращает и имеет ли смысл его употр*цензура*ть. Здесь надо использовать что-то совсем иное... Что? Вопрос для самостоятельного выснения. Подсказка - почитай про @userRoles И про то как использовать выполнение формул из лотус скрипта.

source.EditMode=True
Else
Call ws.EditDocument(False)

вот это меня просто прибило...
у тебя документ УЖЕ открывается в рабочей области -зачем же его открывать опять? Я даже не знаю как поведет себя нотес в такой ситуации - если все упадет с красным экраном я не удивлюсь.

Ты же уже начал рулить параметром edit mode - ну и продолжай с ним работать.

End If

End If

Если бы я писала код на PostOpen событии, то я бы написала вот так:


Mode=source.editmode

If not source.IsNewDoc then
tmp=evaluate(|@IsMember("[AdminBD]";@UserRoles)|)
if tmp(0)=0 then
' Это значит, чтопользователь не админ
source.editMode=Mode

end if

end if
 
V

Veselinka

послалось, раньше чем я закончила редактирование этого поста:

Mode=source.editmode

If not source.IsNewDoc then
tmp=evaluate(|@IsMember("[AdminBD]";@UserRoles)|)
if tmp(0)=0 then
' Это значит, что пользователь не админ
source.editmode=false
else
source.editMode=Mode
end if

end if
 
N

nor

Gogan.exe
1. Форму открыть нельзя в UI (User Interface). Так же как нельзя открыть в UI, например, Script Library. Можно по форме создать документ. Форма является "заготовкой", "скелетом" документов.
2. Насчет твоей пробной бд с песнями. Меню слева, как я понял, у тебя располагается в левом Frame (пусть его имя будет "left_frame"). Отображение информации о конкретной песне, как я понял, у тебя располагается справа, в главном Frame (пусть его имя будет "main_frame"). Каждый раз, когда ты, пользуясь навигацией, расположенной слева, открываешь документы, они отображаются в новом окне. Это происходит потому что ты не указал имя фрэйма по-умолчанию для открытия ссылок левого фрэйма. Таким образом, Framesets - <имя фрэймсета> - <Frame Properties левого фрэма ("left_frame"), в котором располагается навигация> - Defualt targets for links in frame - <указываешь имя правого, главного фрэйма ("main_frame"), в котором по идее должны открываться ссылки (из левого фрэма)> .

Если что-то не получится, то пиши.
 
I

Isk

Veselinka Приму к сведению, спасибо, я же говорил что с англ. у меня проблемы. Хэлп я читаю, но честное слово не всегда все понятно. А насчет событий я ведь еще только учусь. Но если ты не против то я у тебя все равно буду консультироваться. А насчет вилки по утрам это прикольно надо попробовать. Хотя у меня дома только палочки. Спасибо еще раз.
 
I

Isk

подскажите народ как сделать профайл и что для этого вообще надо сделать.
 
I

Isk

Простите уже нашел, я сам мир знаю еще раз извините
 
G

Gogan.exe

НОР, я указал дефолт и открываются ссылки в правом фрейме как и надо, но вот в верхнем меню список открытых окон увеличивается. Получается, что то, что раньше было в правом (мейн_фрейм) не закрывается, а новая ссылка открывается как-то поверх что ли. Извини, что не могу точнее все написать.
Может нужно где-то галочку поставить на обновление фрейма?
И еще вопрос. В той моей БД есть поля типа «автор» «название» и т.п.
Во-первых, что должно быть в кнопке «сохранить» а то приходиться сохранять кнопкой из верхнего меню.
Во-вторых, что и где нужно указать, чтобы после сохранения, поля отчищались и были готовы для приема новой инфы.
Еще раз прошу прощения за ламерские вопросы – я попутно читаю мануал, но по ходу чтения возникают такие вот вопросы.
 
N

nor

Isk
Из твоего запроса я понял следующее: тебе нужно запретить редактирование документа всем, кроме роли AdminBD.
Так как ты внятно не описал проблему, то могу предположить, что созданный документ, вне зависимости от его автора и последующего статуса, должен быть доступен для всех только в режиме чтения, а для роли AdminBD - в режиме редактирования. Будем исходить из этого.

Код:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)	
Dim user_names As Variant

user_names = Evaluate("@UserNamesList", doc)
If Isnull (Arraygetindex(user_names, "[AdminBD]", 0)) Then Continue = False 

End Sub
 
N

nor

Gogan.exe
1. Я совершенно не понимаю, почему у тебя так открываются ссылки. Возможно тебе кто-нибудь другой сможет помочь. (У меня открыватся как положено, без новых окон... :D )
2. В кнопке сохранить должно быть: @Command([FileSave]).
3. В событии Querysave пишешь скрипт, который очищает нужные тебе поля. Доступ к документу можно получить посредством параметра события Source. Не забудь сохранить изменения методом Save.
 
I

Isk

nor Еще раз спасибо, именно это и надо было.
 
G

Gogan.exe

Все ясно… чтобы добавить песни – я открывал новый фреймсет. Если в кнопке просто написать «@Command([Openview]; "ViewOne")» тогда справа и правда открывается ВьюВн, но вот левое меню заменяется на какой-то дефолтовый! Что не так?
Понятно почему ссылки появлялись - это ссылки на открытые фреймы.
 
V

Veselinka

Isk - прости, мне очень стыдно, я злобно наехала на тебя...

Я сидела - меня достали на работе, я писала пост, просто в очень плохом настроении... и вовсе его в таком виде не собиралась посылать и выливать на ни в чем не повинного человека - ушат отстоя, к нему не относящийся, а оно послалось - когда я писала код и табуляции пыталась в него вставлять - перескочило из окошка на кнопку отправки поста - как я понимаю. Вот и получилось... я сегодня даже ночью уснуть не могла ... психовала, что обидела тебя... извини еще раз - если можешь. Я не горжусь тем, что я написала..... :D
 
I

Isk

Veselinka Да я не обиделся честное слово, а вопросы все равно буду присылать и писать, никуда не денешься. Спасибо
 
I

Isk

Не подскажете, если есть агент который помечает документ как снятый с контроля, я так понял что это делается агентом
Dim ws As NotesUIWorkspace
Dim ses As NotesSession
Dim db As NotesDatabase
Dim controldb As NotesDatabase
Dim col As NotesDocumentCollection
Dim agent As NotesAgent
Dim action(2) As String
Dim response As String
Dim cdoc As NotesDocument
Dim item As NotesItem
Dim asitem As NotesItem

On Error Goto er

Set ws = New NotesUIWorkspace

action(0) = "Снять с контроля"
action(1) = "Восстановить контроль"
response = ws.Prompt (PROMPT_OKCANCELLIST, "Сервис","Выберите тип сервиса",action(0), action)
If response="" Then Exit Sub

Set ses = New NotesSession
Set db = ses.CurrentDatabase
Set controldb = ses.GetDatabase(db.Server,GetBasePath("ControlDB")
Set agent = controldb.GetAgent("Service")
Set col = db.UnprocessedDocuments
Set cdoc = col.GetFirstDocument

While Not cdoc Is Nothing
If cdoc.Form(0)="IN" Or cdoc.Form(0)="KR" Or cdoc.Form(0)="KP" Or cdoc.Form(0)="Q" Then
Set asitem = cdoc.GetFirstItem("agentstart")
Select Case response
Case "Снять с контроля":
cdoc.agentstart=Replace(cdoc.agentstart,"ServiceRestoreControl","")
asitem.AppendToTextList "ServiceResetControl"
cdoc.ServiceParameter = ses.UserName
Case "Восстановить контроль":
cdoc.agentstart=Replace(cdoc.agentstart,"ServiceResetControl","")
asitem.AppendToTextList "ServiceRestoreControl"
cdoc.ServiceParameter = ses.UserName
End Select
cdoc.Save False,False
End If
Set cdoc = col.GetNextDocument(cdoc)
Wend

' Call agent.RunOnServer
ws.ViewRefresh
Exit Sub

er:
Msgbox "Ошибка "+Error+" " +Cstr(Erl),16,"Ошибка "
Resume en
en:



вот код, не могу найти агента с этим именем ServiceRestoreControl
вопрос где бы это могло храниться, и как?
 
N

nor

Isk
:) Извини, пожалуйста, но я не понимаю твой вопрос. :blink: Агенты - это набор процедур, их можно найти в Дизайнере на закладке Agents. Слово "ServiceRestoreControl" встречается у тебя в строчке cdoc.agentstart=Replace(cdoc.agentstart,"ServiceRestoreControl",""....
И отключай смайлики, когда пишешь код.
 
G

Gogan.exe

Теперь я решил создать для пробы сайтик на базе лотус. На всех страничках поставил галочку «Treat contents as HTML», но почему-то при запуске експлорера с сайта или из дизайнера, он отвечает, что страница не найдена. В чем дело?
 
V

Veselinka

Описываю ситуацию:
1. Есть документ с вложенными атачментами
2. Документ редактируется через web
3. Домино генерит внизу уродскую надпись "Mark attachments for deletion" и список атачей с чекбоксами для удаления

Чего хочется:
Привести дизайн и локализацию этого куска формы к общему стилю.

Если конкретно - то желательно бы перенести этот кусок ближе к середине документа
Русифицировать, и одеть на него стили, сейчас домино там генерит таг font с параметрами, от него надо бы избавиться, чтобы стили оделись.

Проблема наверняка - часто встречающаяся у разработчиков веб сайтов на домино. Но я в данной области девелопмента под домино - не особо сильна и не знакома со стандартными приемами.

В хэлпе по этому поводу не нашла ничего подходящего....
Может быть можно с <div> поиграться и задвинуть его куда-нибудь и сгенерить самой этот блок... но этот как-то сложно, может быть по-проще можно? Кто знает?
 
N

nor

Veselinka
К сожалению, я не вижу возможности решить эту проблему мне известными стандартными методами. Буду крайне признателен, если тебе что-то получится сделать в этом плане и ты поделишься со всеми нами результатами.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!