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

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

kilcher

Гость
#1
Добрый день!

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#2
Профильные документы(Profile forms + F1).
Затем в форме,где создается документ в Querysave добавить проверку на имя сервера.
А не поздно ли делать проверку? Полчаса заполнял документ, а потом опа... ;)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#3
исходя из того, что профильные доки могут глючить, то и для одного документа можно создать вид... а если правильно его обдумать, то он может служить и не для одного документа настроек, а нескольких разных, т.е. создать такой вид, что позволяет найти нужный документ по ключу.
такой вид не будет занимать много места, еще можно сделать, чтобы он обновлялся только вручную, и ничего страшного в этом не будет...

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

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

kilcher

Гость
#4
Спасибо за советы! Начала писать и что то,видимо, не очень удачно ;)


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 не работает текущей базой? Выдает ошибку именно на этой строке
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#5
видать 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
 
K

kilcher

Гость
#6
Спасиб. Сделала так:

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?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#7
тип текущей базы? :) исходя из кода, тебе нужно сравнить имена серверов...
глянь класс 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
 
K

kilcher

Гость
#8
Красота!!!! Все работает!!!! :)
Только пришлось избавится от посредника N,вылезали ошибки. Вот такая строчка получилась.

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

Спасибо огромное!!! Ты МЕГА-МОЗГ!
 

Constantin A Chervonenko

Well-Known Member
Lotus team
30.05.2006
1 333
4
#9
исходя из того, что профильные доки могут глючить, то и для одного документа можно создать вид.
"Просто Вы не умеете их готовить!"(с)
Профайлы НЕ ГЛЮЧАТ. Они ведут себя в точном соответствии с док-цией. Вот формы их изредка глючат (в части Authors-полей).

В контексте вопроса: профайл - самое онО для данной задачки
 

Akupaka

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

2 kilcher
с N ошибка возникла, потому что ты его объявила как строку, а GetItemValue возвращало массив...
ты вот параметром в конструктор объекта передала уже не массив, а конкретный его элемент ( Set paramName = New NotesName(doc.GetItemValue("Server")(0)) ), потому ошибки нет, так же можно было запихать сначала его в N, а потом передать конструктору...
ЗЫ: я не мега, я просто немного опытнее
 

Constantin A Chervonenko

Well-Known Member
Lotus team
30.05.2006
1 333
4
#11
2 Constantin A Chervonenko
под глюками профайлов, подразумевается их кеширование клиентом
Кеширование - не глюк, а вполне детерминированный механизм. Ради него профайлы и придуманы. В 4-ке это декларировалось открыто: профайл - часть дизайна, со всем дизайновским кешированием и наследованием (или кеширование дизайна - это тоже зло?).
В 5-ке индусы завибрировали и разжаловали профайлы в документы. В 6-ке произошел "возврат к вечным ценностям" (частичный ;) )
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#12
да нет же :rolleyes: результаты кеширования, обычно воспринимаются пользователями как глюки, т.е. пользователь меняет значение в профайле, но функция, читающая профайл, возвращает старое значение, и это уже изменяет логику приложения!
и, если бы тестировщик софта, не учитывая эту лотусовую фичу, увидел такой результат работы, то обязательно записал бы баг! :)
я же не говорю, что кеширование - зло! но не всякий пользователь знает, что это фича ;)

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

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