Как прочитать поле RichText?

У меня есть агент, который должен отображать базу данных Notes в формате XML. Я успешно получил все поля, кроме RichText. Это фрагмент кода:

Set session = New NotesSession
Set doc = session.DocumentContext
Set db = Session.CurrentDatabase
Set view = db.getview("myView")
Set doc = view.GetFirstDocument()

While Not(doc Is Nothing)
    Print "<job>"
    Print "<id>" & doc.id(0) & "</id>" ' Works fine since ID is a normal field
    Print "<text>" & doc.text(0) & "</text>" ' Does not work at all 
    Print "</job>"
    Set doc = view.GetNextDocument(doc)
Wend

Если я использую doc.text вместо doc.text(0), он записывает только первые два слова всего текста. Я полагаю, что мне нужно прокрутить весь текст, но, поскольку я новичок в Lotus Script, я понятия не имею, как это сделать. Спасибо вам, ребята.

РЕДАКТИРОВАТЬ: оказалось, что ответ Саймона правильный. Насколько я могу судить, проблема связана с кодировкой, если я удалю следующую печать:

Print |Content-Type:text/xml| & Chr$(13)

Все работает нормально. Думаю, мне нужно определить кодировку в заголовке...

РЕДАКТИРОВАТЬ: теперь я использую этот Print:

Print "<text><![CDATA[" & rtitem.getUnformattedText() & "]]></text>"

Однако, когда я вызываю агента из браузера, он все еще ломается при печати, поскольку игнорирует CDATA.


person raz3r    schedule 25.02.2013    source источник
comment
Вы должны поставить это как отдельный вопрос вместо того, чтобы каждый раз изменять свой вопрос.   -  person Simon O'Doherty    schedule 25.02.2013


Ответы (1)


Не используйте запись через точку. Чтобы получить поле Richtext, вам нужно будет использовать вызов метода getFirstItem() и связать его с объектом NotesRichTextItem. После этого вы сможете преобразовать его в текст с помощью метода getUnformattedText().

Dim rtitem As NotesRichTextItem
...
rtitem = doc.getFirstItem("text")

Print "<text>" & rtitem.getUnformattedText() & "</text>" 

Конечно, вам может понадобиться разобрать этот текст, чтобы исключить нестандартные символы в XML, или заключить его в блок CDATA.

person Simon O'Doherty    schedule 25.02.2013
comment
На самом деле это возвращает только первые несколько слов поля. Однако каждый раз, когда я вызываю агента, результат отличается, поскольку каждый раз он читает случайную строку. - person raz3r; 25.02.2013
comment
Спасибо, я отредактировал свой вопрос. Без CDATA, как я могу разобрать текст в Louts Script? Есть ли какая-нибудь библиотека? - person raz3r; 25.02.2013
comment
Midas LSX — это библиотека, на которую вы, возможно, захотите взглянуть. - person Karl-Henry Martinsson; 26.02.2013
comment
А почему бы не попробовать класс NotesDXLExporter? - person D.Bugger; 26.02.2013
comment
Я думал предложить это, но в этом случае им может понадобиться только подмножество данных для другой системы, а не вся база данных. Вы можете перевести его из DXL через XLST, но это еще более запутанно. - person Simon O'Doherty; 26.02.2013