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

Тема в разделе "Lotus - Программирование", создана пользователем kilcher, 18 авг 2008.

  1. kilcher

    kilcher Гость

    Добрый день!

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Профильные документы(Profile forms + F1).
    А не поздно ли делать проверку? Полчаса заполнял документ, а потом опа... ;)
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    исходя из того, что профильные доки могут глючить, то и для одного документа можно создать вид... а если правильно его обдумать, то он может служить и не для одного документа настроек, а нескольких разных, т.е. создать такой вид, что позволяет найти нужный документ по ключу.
    такой вид не будет занимать много места, еще можно сделать, чтобы он обновлялся только вручную, и ничего страшного в этом не будет...

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

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

    kilcher Гость

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


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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    видать 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
     
  6. kilcher

    kilcher Гость

    Спасиб. Сделала так:

    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?
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    тип текущей базы? :) исходя из кода, тебе нужно сравнить имена серверов...
    глянь класс NotesName
    должно сработать подобное:
    Код (Text):
    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, хорошо бы проверить документ, т.к. его может и не быть:
    Код (Text):
    Set doc=view.GetFirstDocument
    if not(doc is nothing) then
    ' документ есть, можно с ним работать
    else
    ' документа нету! надо че-то делать
    end if
     
  8. kilcher

    kilcher Гость

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

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

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

    Constantin A Chervonenko Well-Known Member

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

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

    Akupaka А че я?.. О.о

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

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

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Кеширование - не глюк, а вполне детерминированный механизм. Ради него профайлы и придуманы. В 4-ке это декларировалось открыто: профайл - часть дизайна, со всем дизайновским кешированием и наследованием (или кеширование дизайна - это тоже зло?).
    В 5-ке индусы завибрировали и разжаловали профайлы в документы. В 6-ке произошел "возврат к вечным ценностям" (частичный ;) )
     
  12. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    да нет же :rolleyes: результаты кеширования, обычно воспринимаются пользователями как глюки, т.е. пользователь меняет значение в профайле, но функция, читающая профайл, возвращает старое значение, и это уже изменяет логику приложения!
    и, если бы тестировщик софта, не учитывая эту лотусовую фичу, увидел такой результат работы, то обязательно записал бы баг! :)
    я же не говорю, что кеширование - зло! но не всякий пользователь знает, что это фича ;)

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

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

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