Динамическая Таблица

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

  1. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Привет, еще вопросик.
    Имеется формочка, она отображается в dialogbox. На этой формочке кнопка. Пользователь на нее нажимает, появляется окно с вьюхой, из которой выбирается значение. Пользователь может выбрать сколько угодно значений. Все эти значения надо вносить в таблицу на формочке, которую отображаем в Dialogbox. В данный момент таблица на формочке статическая, в ней ограниченное число строк, которые появляются по мере добавления значений. Посоветуйте, пожалуйста, как бы лучше сделать динамическую таблицу.
    Заранее спасибо
     
  2. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    стандартными средствами динамически ну никак... хотя может как-то через java, но я не знаю как
     
  3. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Многозначные поля я использую если значений не шибко много.
    Также можно использовать "дополнительные документы", которые будет отображаться во внедренном представлении и будут завязаны на нужном документе по ключу.
     
  4. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    смотри в сторону applet
     
  5. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    можно обойтись и обычной папкой
     
  6. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Я NotesRichTextTable пытаюсь использовать, затем добавлять в нее строки методом AppendTable. Только проблема такая, что чтоб эта таблица отобразилась, документ надо обязательно сохранить, что не очень удобно. Я пытаюсь воспользоваться переоткрытием документа. Т.е. пользователь выбрал значения, затем документ, в котором создается таблица, закрылся, потом создается документ по той же форме, но значения его полей заменяются на те, который имел закрытый документ. Т.е. вот код кнопки на форме в диалогбоксе. Пользователь ее кликнет, появится вьюха, из которой пользователь выберет значения, потом эти значения должны отобразиться в динамической таблице на форме из диалогбокса

    Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim ws As New NotesUIWorkspace
    Set db = session.CurrentDatabase

    Dim doc As New NotesDocument(db)
    Call doc.AppendItemValue("Form", "WorksRegistration1")

    Dim rti As New NotesRichTextItem(doc, "Body")
    Call rti.AppendText("Paragraph of text")
    Call rti.AddNewLine(2)

    Dim rows As Integer, columns As Integer
    rows = 2
    columns = 9
    Dim tabs() As String

    Call rti.AppendTable(rows, columns)

    // потом присоединяем столько-то строк, в зависимости от того, сколько выбрали во вьюхе, потом

    ws.CurrentDocument.Close

    Dim docInputWorks As NotesDocument
    Set docInputWorks = ws.CurrentDatabase.Database.CreateDocument
    With docInputWorks
    .ReplaceItemValue "Form", "WorksRegistration1"
    // замена значений полей документа docInputWorks на те, что имеет doc
    Dim rti1 As New NotesRichTextItem(docInputWorks, "Body")
    rt1=rt
    End With

    ws.EditDocument False, docInputWorks
    End Sub

    Документ переоткрывается, но таблица не отображается без Call doc.Save(True, False)

    Как это обойти, чтоб таблица отобразилась без сохранения?
     
  7. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
  8. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    если данные хранить не в таблице то достаточно и компютедРТ
    тогда при открытии формироваться РТ и будет достаточно
     
  9. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Спасибо, понял, получилось.
    Но столкнулся с другой проблемкой.
    RT Поле Body лежит на форме. Когда форму открываю, в ее событии QueryOpen я в это поле добавляю таблицу, навигатором рисую ей шапку. Все отлично, обновляю - и форма открывается с нарисованной шапкой таблицы в поле Body. Дальше надо нажимать на кнопку, отобразить окошко с вьюхой, из которой надо выбрать значение и вставить в таблицу.
    В коде кнопки пишу:

    Dim rti As NotesRichTextItem
    Set rti = doc.GetFirstItem("Body")
    Dim rtnav As NotesRichTextNavigator
    Set rtnav = rti.CreateNavigator

    If Not rtnav.FindFirstElement(RTELEM_TYPE_TABLE) Then
    Messagebox "Could not find table",, "Fatal error"
    Exit Sub
    End If
    Dim rtt As NotesRichTextTable
    Set rtt = rtnav.GetFirstElement(RTELEM_TYPE_TABLE)

    Все просто, так и в Хелпе пишут, да вот rtnav.FindFirstElement(RTELEM_TYPE_TABLE) таблицу в Boby не находит. Таблица добавлялась в событии QueryOpen. Никто с таким не сталкивался?
     
  10. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    переоткрывай форму
     
  11. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    А форма-то в Dialogbox отображается. Как-нибудь ее можно переоткрыть в таком случае?
    Попытался решить эту проблему так: юзер открывает форму с пустой динамической таблицей, жмет на кнопку "Добавить", выбирает значения из вьюхи. Жмет ОК. И из кода кнопки "Добавить" идет вызов еще одного диалогбокса, в котором в таблице формы выбранные значения без проблем отображаются. Ну т.е. после выбора значений на кнопке срабатывает код
    Dim docInputWorks As NotesDocument
    Set docInputWorks = ws.CurrentDatabase.Database.CreateDocument
    With docInputWorks
    .ReplaceItemValue "Form", "WorksRegistration1" // WorksRegistration1 - имя формы документа, в котором таблица
    .ReplaceItemValue "FromRequest", 0
    Dim rtitemBody1 As New NotesRichTextItem(docInputWorks, "Body")

    Set rtitemBody1 = docInputWorks.GetFirstItem("Body")
    Call rtitemBody1.AppendTable(1, 9) //шапка таблицы
    // шапку заполним
    Dim rtnavBody1 As NotesRichTextNavigator
    Dim rtTable1 As NotesRichTextTable
    Set rtnavBody1 = rtitemBody1.CreateNavigator
    Set rtTable1 = rtnavBody1.GetFirstElement(RTELEM_TYPE_TABLE)
    rtTable1.AddRow collServices.Count //добавляем столько строк, сколько юзер выбрал значений
    //и сами значения в ячейки записываем
    rtitemBody1.Update
    End With

    Только плохо, что под новым диалогбоксом прежний диалогбокс не получается закрыть. Возможно как-нибудь это сделать?
     
  12. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    1. Таблицы динамически не рисуются
    2. Окно диалога не масштабируется... ни мышью ни от содержимого
    3. Переоткрыть диалог нельзя
    4. Не нужно вставлять RT-поле в таблицу. Потом работать с содержимым поля сложно. Особенно если в содержимом будут таблицы. Ты ее просто не найдешь. Собственно это
    именно по причине того, что RT-поле у тебя в таблице.

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

    Но ПОМНИ - ТАБЛИЦЫ ДИНАМИЧЕСКИ НЕ РИСУЮТСЯ! ПРИДЕТСЯ ПЕРЕОТКРЫВАТЬ ДОКУМЕНТ

    А вообще - пользуйся поиском на форуме. тут ОЧЕНЬ много тем по RT-полям
     
  13. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    чего вы за фигню гоните?

    из вас что никто для диалог-бокса никогда не рисовал свои кнопки ОК - Отмена

    При срабатывании кода - ЗАКРЫВАТЬ диалог-бокс и открывать заново

    подсказко - диалог-бокс закрывается как и обычный документ
     
  14. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Подскажите, плиз, как это сделать. Не через UI точно, так не переоткрывает
    Кнопка на диалогбоксе
    Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim ws As New NotesUIWorkspace
    Set db = session.CurrentDatabase
    Dim doc As NotesDocument
    Set doc=ws.CurrentDocument.Document

    //вызов вьюхи для выбора значений

    //диалог-бокс так закрыть не получилось д последующего переоткрытия

    ws.ReloadWindow
    ws.CurrentDocument.Close True

    //вот и делаю второй диалог, тольо первый, зараза, под ним не закрывается

    Dim docInputWorks As NotesDocument
    Set docInputWorks = ws.CurrentDatabase.Database.CreateDocument
    With docInputWorks
    .ReplaceItemValue "Form", "WorksRegistration1"
    .ReplaceItemValue "FromRequest", 0
    Dim rtitemBody1 As New NotesRichTextItem(docInputWorks, "Body")

    Set rtitemBody1 = docInputWorks.GetFirstItem("Body")
    'rt1=rt
    Call rtitemBody1.AppendTable(1, 9)
    ' Set rtitemBody = docCur.GetFirstItem("Body")
    rtitemBody1.Update
    Dim rtnavBody1 As NotesRichTextNavigator
    Dim rtTable1 As NotesRichTextTable
    Set rtnavBody1 = rtitemBody1.CreateNavigator
    Set rtTable1 = rtnavBody1.GetFirstElement(RTELEM_TYPE_TABLE)
    rtTable1.AddRow collServices.Count
    rtitemBody1.Update
    End With

    ws.DialogBox "WorksRegistration1" , True , True , False , , , , "Введите выполненные работы", docInputWorks, True,
     
  15. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    Динамические встроенные представления создаются через апплеты - 100%(имхо, стопудова, зуб даю и т.п. и т.д.).
    Разберись в них, результат тебя самого порадует! А NotesRichTextTable это проще, но это компромис с совестью)


    P.S.
    Знал бы как тут скрин вставить, показал бы как красиво это выглядит)
     
  16. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    >Знал бы как тут скрин вставить, показал бы как красиво это выглядит)
    почитайте Как можно приложить картинку на форуме? + при загрузке с компа есть 3-5Mб лимит по размеру, точное число от вашей группы зависит
     
  17. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    И куда этот апплет? В агент?
     
  18. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    Нет, applet это элемент дизайна и подгружается на форму
    Пример:
    Форма_поиска_с_апплетом.png
     
  19. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    А можно ссылочку, откуда это взято?
     
  20. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
Загрузка...

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