• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

настройка для документа

  • Автор темы Автор темы kilcher
  • Дата начала Дата начала
K

kilcher

Добрый день!

Помогите,пожалуйста, в решении одного вопроса. ;)
Существует форма,документы по которой можно создавать на определенном сервере(сервер задается администратором).
Для этого я решила создать форму-настройку,где будет указываться сервер. Затем в форме,где создается документ в Querysave добавить проверку на имя сервера. Только вот как эту проверку осуществить? Как брать значение из поля формы настройки,ведь создавать view для одного документа нет смысла.
Помогите,пожалуйста!
 
исходя из того, что профильные доки могут глючить, то и для одного документа можно создать вид... а если правильно его обдумать, то он может служить и не для одного документа настроек, а нескольких разных, т.е. создать такой вид, что позволяет найти нужный документ по ключу.
такой вид не будет занимать много места, еще можно сделать, чтобы он обновлялся только вручную, и ничего страшного в этом не будет...

а на счет проверки, то Medevic прав ;)
что-то в последнее время проверять все в конце стало модно ;)

проверку можно сделать либо перед открытием документа QueryOpen + IsNewDoc
либо сделать агент, который будет выполнять проверку и создавать документ, если условия выполнены, а агент уже запускать из вида вместо простого создания документа... ну или по своему :)
 
Спасибо за советы! Начала писать и что то,видимо, не очень удачно ;)


Dim workspace As New NotesUIWorkspace,db1 As NotesUIDatabase,doc As NotesDocument, v As NotesView,N As String
Set db1 = workspace.GetCurrentDatabase
' так я выясняю какя текущая база,затем нахожу нужный документ
Set v=db1.GetView("Настройка")
Set doc=v.GetFirstDocument
N=doc.getItemValue("Server")
Разве GetView не работает текущей базой? Выдает ошибку именно на этой строке
 
видать db1 не инициализирован тем что надо... workspace.GetCurrentDatabase вернет объект класса NotesUIDatabase, а не NotesDatabase...


попробуйте

Set db1 = workspace.GetCurrentDatabase
Set v=db1.Database.GetView("Настройка")

или

dim s as new notessession
dim db as NotesDatabase
set db = s.currentDatabase
 
Спасиб. Сделала так:

Sub Click(Source As Button)
Dim session As New NotesSession, doc As NotesDocument, N As String
Dim db As NotesDatabase
Dim view As NotesView
Set db = session.CurrentDatabase
Set view = db.GetView( "Настройка" )
Set doc=view.GetFirstDocument
N=doc.getItemValue("Server")


Можно еще вопросик? :) После всего этого я сравниваю значение N cо значением текущей базы. Как можно конвертировать тип текущей базы,чтобы его можно было сравнить со значением N?
 
тип текущей базы? :) исходя из кода, тебе нужно сравнить имена серверов...
глянь класс NotesName
должно сработать подобное:
Код:
N=doc.getItemValue("Server")
dim paramName as notesName
set paramName = new NotesName(N)
if paramName.canonical = db.Server then
else
end if
еще хорошо бы использовать вместо имен видов алиасы, и делать проверки инициализации объектов, например,
после того, как ты инициализировала документ с помощью этого кода Set doc=view.GetFirstDocument, хорошо бы проверить документ, т.к. его может и не быть:
Код:
Set doc=view.GetFirstDocument
if not(doc is nothing) then
' документ есть, можно с ним работать
else
' документа нету! надо че-то делать
end if
 
Красота!!!! Все работает!!!! :)
Только пришлось избавится от посредника N,вылезали ошибки. Вот такая строчка получилась.

Set paramName = New NotesName(doc.GetItemValue("Server")(0))

Спасибо огромное!!! Ты МЕГА-МОЗГ!
 
исходя из того, что профильные доки могут глючить, то и для одного документа можно создать вид.
"Просто Вы не умеете их готовить!"(с)
Профайлы НЕ ГЛЮЧАТ. Они ведут себя в точном соответствии с док-цией. Вот формы их изредка глючат (в части Authors-полей).

В контексте вопроса: профайл - самое онО для данной задачки
 
2 Constantin A Chervonenko
под глюками профайлов, подразумевается их кеширование клиентом и возникающими при этом некорректными результатами обращения к ним...
к стати, наверное, вопрос, что лучше использовать - профайлы или просто документы, все еще может побудить большие споры :)

2 kilcher
с N ошибка возникла, потому что ты его объявила как строку, а GetItemValue возвращало массив...
ты вот параметром в конструктор объекта передала уже не массив, а конкретный его элемент ( Set paramName = New NotesName(doc.GetItemValue("Server")(0)) ), потому ошибки нет, так же можно было запихать сначала его в N, а потом передать конструктору...
ЗЫ: я не мега, я просто немного опытнее
 
2 Constantin A Chervonenko
под глюками профайлов, подразумевается их кеширование клиентом
Кеширование - не глюк, а вполне детерминированный механизм. Ради него профайлы и придуманы. В 4-ке это декларировалось открыто: профайл - часть дизайна, со всем дизайновским кешированием и наследованием (или кеширование дизайна - это тоже зло?).
В 5-ке индусы завибрировали и разжаловали профайлы в документы. В 6-ке произошел "возврат к вечным ценностям" (частичный ;) )
 
да нет же :rolleyes: результаты кеширования, обычно воспринимаются пользователями как глюки, т.е. пользователь меняет значение в профайле, но функция, читающая профайл, возвращает старое значение, и это уже изменяет логику приложения!
и, если бы тестировщик софта, не учитывая эту лотусовую фичу, увидел такой результат работы, то обязательно записал бы баг! :)
я же не говорю, что кеширование - зло! но не всякий пользователь знает, что это фича ;)

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

(модерам: если тут начнется обсуждение этого вопроса, то его лучше отделить в новую тему, имхо)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab