Alex
Alex

Reputation: 2335

Lotus Notes and C#: NotesRichTextItem how to recreate content or loop through elements in respective order

I am currently exporting a lotus notes database using the C# Interop Domino assembly from NuGet,

I haven't found a way to identify objects or elements in a NotesRichTextItem in the order they were entered, for example, maybe I enter a paragraph first, then a table , then an attachment. Is there a way to loop through the elements in their respect order ?

I have found a way to find elements with FindFirstElement, but you have to pass what element type you are looking for, this is very difficult as extracting all elements without order would make the content to lose its context.

thanks

Upvotes: 4

Views: 1405

Answers (2)

Knut Herrmann
Knut Herrmann

Reputation: 30960

There is a way to analyze Notes document's RichText items using DXL - a special XML format for Notes. Use DxlExporter to export a Notes document to DXL format. You can "walk" then through XML and get the content of RichText item with elements in right order.

For this RichText item e.g.

enter image description here

you'd get this DXL

<item name='Body'>
    <richtext>
        <pardef id='1'/>
        <par def='1'>aaaaaaa</par>
        <table widthtype='fixedleft' refwidth='1.0667in'>
            <tablecolumn width='0.6729in'/>
            <tablecolumn width='0.3938in'/>
            <tablerow>
                <tablecell>
                    <pardef id='3' keepwithnext='true' keeptogether='true'/>
                    <par def='3'>111</par></tablecell>
                <tablecell>
                    <pardef id='4' keepwithnext='true' keeptogether='true'/>
                    <par def='4'>222</par></tablecell>
            </tablerow>
            <tablerow>
                <tablecell><par def='3'>333</par></tablecell>
                <tablecell><par def='4'>444</par></tablecell>
            </tablerow>
        </table>
        <pardef id='5' leftmargin='1.2500in' list='bullet'/>
        <par def='5'>xxx</par>
        <par def='5'>yyy</par>
        <par def='5'>zzz</par>
        <pardef id='6' leftmargin='1in'/>
        <par def='6'>
            <attachmentref name='icon16.gif' displayname='icon16.gif'>
                <picture height='34px' width='61px'>
                    <notesbitmap>lQAmAAAAAAAAAAAAA...</notesbitmap>
                    <caption>icon16.gif</caption>
                </picture>
            </attachmentref>
        </par>
    </richtext>
</item>

Here is a Java agent which exports selected documents to a file.

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    @Override
    public void NotesMain() {

        try {
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            DocumentCollection dc = agentContext.getUnprocessedDocuments();
            String filename = "c:/temp/exportDocs.dxl";
            Stream stream = session.createStream();
            if (stream.open(filename)) {
                stream.truncate();
                DxlExporter exporter = session.createDxlExporter();
                exporter.setRichTextOption(0);
                exporter.setMIMEOption(0);
                stream.writeText(exporter.exportDxl(dc));
            } else {
                System.out.println("Cannot open " + filename);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Upvotes: 3

Ken Pespisa
Ken Pespisa

Reputation: 22266

Unfortunately the API gives you no way to do this:

Navigation is within elements of the same type. You can find or get the first element of a type, the next element of a type, and the nth element of a type. You cannot find or get an element regardless of type.

http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_NOTESRICHTEXTNAVIGATOR_CLASS.html

UPDATE: I forgot to mention that you may want to check out a third-party tool from Genii Software called MidasLSX that possibly could help you. http://www.geniisoft.com/showcase.nsf/MidasLSX

Upvotes: 2

Related Questions