Dialogbox...

Тема в разделе "Lotus - Программирование", создана пользователем Gor, 16 июн 2006.

Наш партнер Genesis Hackspace
  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Недавно столкнулся с такой проблемкой...
    У меня на вьюхе очень много Actions для составления отчётов а отчёты все однотипные.
    Вот захотелось бы как нибудь это структуризировать. Построить некое дерево. Создал кнопку одну на вьюхе которая вызывает - @DialogBox("tree";[AutoHorzFit] :[AutoVertFit] :[NoCancel]:[NoOkCancel];"Составление отчётов"). На Layout Повесил 6 Button - ов с выполнением разных отчётов.
    И ситуация получилась такая... Когда вызываю Action появляется Dialogbox с моим Layoutom и кнопками для функций... но функции не отрабатываются ошибки одни и теже Object Variable not set.
    Так вот вопрос такой как сделать так чтобы при нажатии на кнопку расположенную на вызванной Сабформе с определённым названием сначала закрывалась текущая сабформа а уж потом выполнялся отчёт соответствующий данной кнопке а дальше шло определение текущей вьюхи итд итп....В общем то хочется узнать как закрыть программно из LotusScript текущую сабформу а потом сразу перейти к дальнейшим действиям.
    Ниже приведён пример кода на кнопке расположенной на сабформе (конечно же урезанный)

    Код (Text):
        Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim cView As String
    Dim formula As String
    Dim supplier As String 
    Dim doc As NotesDocument
    Dim ws As New NotesUIWorkspace
    Dim p,s,a,f As Variant
    Set doc = New NotesDocument( session.currentDatabase )
    Set ws = New NotesUIWorkspace



    Set v = ws.CurrentView.View
    Set db = session.CurrentDatabase

    Call ws.DialogBox(".win.send", True, True, False, False, False, False, "Составление отчёта", doc )
    p = doc.GetItemValue("datanac")(0)

    p = Right(p,4) + ";" + Left(Right(p,7),2) + ";" + Left(p,2)
    s = doc.GetItemValue("datakon")(0)

    s = Right(s,4) + ";" + Left(Right(s,7),2) + ";" + Left(s,2)
    a = doc.GetItemValue("vnk")(0)
    f = doc.GetItemValue("vno")(0)
    А может как нибудь ещё проще можно создать дерево для отчётов? структуризировать это всё?
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Попробуй в кнопки добавить код.
    Код (Text):
    Dim ws As New NotesUIWorkspace
    Call ws.RefreshParentNote
    Call ws.CurrentDocument.Close
     
  3. Elena Nefedova

    Elena Nefedova Гость

    Надо:
    Код (Text):
    b = ws.DialogBox(".win.send", True, True, False, False, False, False, "Составление отчёта", doc )
    чтобы проверять, если Cancel нажато.

    Какая переменная не установлена? doc?
     
  4. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Добавил в кнопки код
    Код (Text):
    Sub Click(Source As Button)
    On Error Goto Errhandle

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim cView As String
    Dim formula As String
    Dim supplier As String 
    Dim vecoll
    [b]Dim ws As New NotesUIWorkspace[/b]  
    Set ws = New NotesUIWorkspace
    [b] Call ws.RefreshParentNote
    Call ws.CurrentDocument.Close[/b]  
    Set v = ws.CurrentView.View
    Set db = session.CurrentDatabase
    Всё равно выводит ошибку при нажатии кнопки на сабформе - 91Object variable not set
    Какая переменная не установлена определить не могу( не запускается почему то дебаггер...
     
  5. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    В таких случаях надо в обработчике ошибок сделать вывод номера строки:
    Код (Text):
    Errhandle:
    Msgbox "Ошибка " + Error$ + " в строке " + Cstr(Erl)
     
  6. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Сейчас выводится ошибка NotesUIDocument object is no longer valid при нажатии на кнопку на сабформе(
     
  7. Elena Nefedova

    Elena Nefedova Гость

    Чтобы работал дебаггер во вьюхе, надо включать его, пока база еще закрыта.
     
  8. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    :) ну это уже как истина:))) с Errhandle попробую...
     
  9. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Затыкается на 14 строке - Object variable not set...
    а при повторном нажатии уже выдаёт ошибку - NotesUIDocument object is no longer valid...
    Код (Text):
    Sub Click(Source As Button)
    On Error Goto Errhandle
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim cView As String
    Dim formula As String
    Dim supplier As String 
    Dim doc As NotesDocument
    Dim ws As New NotesUIWorkspace
    Dim p,s,a,f As Variant
    Set doc = New NotesDocument( session.currentDatabase )
    Set ws = New NotesUIWorkspace
    Call ws.RefreshParentNote
    Call ws.CurrentDocument.Close
    14 [color=#FF0000]Set v = ws.CurrentView.View
    15 Set db = session.CurrentDatabase[/color]
    с чем может быть связано? без дебаггера сложно понять....(
    Sub click идёт из сабформы....а сабформа вызывется из Actions на вьюхе...
     
  10. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Gor, а дальше что? Вызываешь другой DialogBox? Если ты хочешь из одного DialogBox вызвать другой и при этом закрыть первый, то, имхо, ничего у тебя не получится.
     
  11. Elena Nefedova

    Elena Nefedova Гость

    Значит, считает, что нет ничего в UI.
    Можете проверить if ws.CurrentDocument Is Nothing then ...

    Кстати, зачем у вас New NotesUIWorkspace 2 раза задается?
     
  12. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Medevic
    так и есть...ну по крайней мере задумка была такая....почему нет?
    а может тогда как нибудь по другому структуризировать отчёты можно? :) Чтобы во вьюхе не 10 кнопок было на панели а чтобы можно было что нибудь вызвать с перечнем и по перечню перейти (все функции для отчётов строятся по текущей вьюхе)? дерево функций какое нить к примеру?
    Или я просто мечтаю уже? :)
    Просто Dialog Box я хотел использовать именно чтобы оттуда отчёты вызывать по перечню...
    Для: Elena Nefedova
    копировал кусок кода не заметил... ну это не особо принципиально...
    проверку тоже можно сделать...тут дело в том что можно в принципе или нет и если нет то как можно)
     
  13. Elena Nefedova

    Elena Nefedova Гость

    Вариант 1 - присвоить отчетам некие внутренние номера и выбирать из них
    Код (Text):
        Redim arVariant(200)        ' все лишние пустоты потом уберем с fulltrim
    arVariant(0) = "Отчет утренний"
    arVariant(1) = "Отчет дневной" 
    arVariant(2) = "Отчет вечерний"   
    v_variant = ws.Prompt(4, "Выбор отчета", "Укажите название отчета", arVariant(0), Fulltrim(arVariant))
    If Isempty(v_variant) Or Isnull(v_variant) Then Goto EndLab
    v_ind = Arraygetindex(arVariant, Cstr(v_variant))
    После этого
    Код (Text):
         select case v_ind
    case 0
    ...
    Вариант 2 - зарегистрировать каждый отчет в отдельном документе. При этом названия можно задавать иерархические, как то "Мыло\Хозяйственное"
    Далее выбирать из вьюхи, категоризированной по имени отчета
     
  14. Domino6

    Domino6 Гость

    Алгоритм

    1.Основной код в нем вызов диалога

    2.В диалоге простая кнопка без кода которая выставляем признак действия (к примеру поле Action) и закрывает диалог с сохранение (т.е. возврат в основной код)

    3. Считиваем код дейсвия и выполняем нужное

    Смысл весь код в одном месте а из диалога регулируем что выполнять
     
  15. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member
    Lotus team

    Регистрация:
    30 май 2006
    Сообщения:
    1.298
    Симпатии:
    1
    Лучше - из другой вьюхи этой-же базы. Иначе попрут события самой базы (PostOpen, Init etc)
     
Загрузка...

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