• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

проблема с Richtext полем

  • Автор темы Maria
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Maria

Имеется документ, в нем обычная таблица с несколькими закладками. На первой закладке есть RichText поле RTField, а в нем таблица 4*4. Мне нужно обратиться к ячейкам таблицы и произвести определенные действия с текстом, котоорый находится в них.

Код:
Код:
Dim rti As NotesRichTextItem
Dim rtTable As NotesRichTextTable
Dim rtnav As NotesRichTextNavigator

Set rti = doc.GetFirstItem("RTField")

Set rtnav = rti.CreateNavigator

If Not rtnav.FindFirstElement(RTELEM_TYPE_TABLE) Then
Messagebox "item RTField does not contain a table,",, "Error"
Exit Sub
else
Set rtTable = rtnav.GetElement
End If

Так вот, выдается сообщение "item RTField does not contain a table". Если же поле RTField разместить не на первой закладке таблицы, а просто на форме, все ОК. Получается, что если я размещаю RichText-поле с таблицей в таблице, к нему нельзя доступиться. Кто-нить с этим сталкивался? И как с этим бороться?
 
O

Omh

Сталкивался.
Бороться невозможно: с nested tables в lotus'e беда.
 
G

Guest

А вы уверены что добрались до этого поля? Не пробовали обратиться к нужной ячейке таблицы, оттуда взять поле и уже потом использовать вышеописанный код???
 
G

Guest

Да так же как и к таблице, только указать
Код:
FindFirstElement(RTELEM_TYPE_TABLECELL)
, в общем смотрите хелп по FindFirstElement если что то не понятно. Но тут есть пара отвратительных нюансов: во-первых ткнуть в конкретную ячейку нельзя, можно ткнуть в первую, потом перейти ко второй и т.д. (если строка таблицы закончилась он автоматически переходит к 1 ячейке 2 строки и т.д.), а во-вторых: если ячейка таблицы пуста, то он проскачет мимо нее. Если у Вас поле находится в 1 ячейке таблицы, то проблем не будет. А вот если не в первой, тогда надо просчитывать (учитывая пустые ячейки). В общем РТ таблицы в 6 версии Лотуса (с которой я работаю) реализованы ужасно, может что в 7 или 8 изменилось к лучшему... Нельзя ли Вам отказаться от таблицы? Оставить таблицу с закладками, в ней разместить таблицу 4*4 и уже в ней разместить нужные Вам поля? Или у Вас сейчас так и сделано? Просто я работал с таблицой, используя ртнавигатор, именно по номерам ячеек и запихивал туда данные - удовольствие ниже среднего, а если же разместить поля, то обращение будет к полям, а не к таблице и вроде бы проблем должно быть меньше...
 
M

Maria

на самом деле про таблицу 4*4 я для примера написала. Проблема в том, что в таблице я заранее не знаю, сколько будет строк. Каждая строка содержит информацию определенного рода (например, название товара и цена). Но вводит информацию пользователь, поэтому и используется RichText, чтобы ему можно было добавлять строки самому.

Но поскольку это RichText-поле находится не просто на форме, а в таблице, то как написано было выше, с вложенными таблицами наверно действительно в Лотусе проблема, т.к. я не могу вообще к ней обратиться, не говоря уже о ячейках ее. Ведь свойство FindFirstElement это свойство RichTextNavigatorа, и RichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLE) и RichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLECELL) мне возвращают ошибку
 
O

Omh

Вот тогда кривой, но workaround:

Предварительно создаёшь временную форму, в которой у тебя только одно RT поле.
Во время обработки:
Сохраняешь этот док в котором юзер вводит данные (и где таблица в таблице), берёшь нужный RTItem.
Создаёшь док в базе на форме, которую мы создали предварительно, копируешь твой полученный RTItem в новый документ в то самое RT поле.
Обязательно пересохраняешь новый документ через UI. Да-да, обязательно через UI :unsure:
Берешь doc от свежесохранённого UI документа и, вуаля, таблица доступна :(

Вообще, говно workaround: что-то там мелькает, появляется, юзер в шоке...
Вытаскивай RT из таблицы. Может быть можно в секцию запихнуть.
Lotus limitations мать их.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!