Chris Heyne
Chris Heyne

Reputation: 1

Missing fields when rendering lotus notes document to RTF,DXL with Java API

I'm attempting to render a notes document to RTF, then DXL using the Java API. Once I have the DXL, I'm converting it to HTML with an XSL stylesheet. My goal is to produce an HTML document that displays as close as possible to the document rendering in the notes client.

However, computed fields are missing from the rendered RTF and DXL.

Here is the code used to generate the DXL:

private String renderDocumentToDxl(lotus.domino.Document lotusDocument)
        throws Exception {
    Database db = getDatabase();
    lotus.domino.Document tmp = db.createDocument();

    RichTextItem rti = tmp.createRichTextItem("Body");
    lotusDocument.computeWithForm(true, false);
    lotusDocument.save();
    lotusDocument.renderToRTItem(rti);

    DxlExporter dxlExporter = getSession().createDxlExporter();
    dxlExporter.setOutputDOCTYPE(false);
    dxlExporter.setConvertNotesBitmapsToGIF(true);
    return dxlExporter.exportDxl(tmp);
}

Fields added to the document by the call to computeWithForm are not present in the generated DXL.

Is there any way to get the computed fields into the generated DXL with the Java API? Or is there a better way to generate an HTML representation of a notes document using the domino Java API?

Upvotes: 0

Views: 847

Answers (2)

Knut Herrmann
Knut Herrmann

Reputation: 30960

You can get the HTML representation of a RichText field with the URL

http://server/db.nsf/view/docunid/RichTextFieldname?OpenField

So, save your tmp document, get the docunid and read the result via http from URL

http://server/db.nsf/0/tmpdocunid/Body?OpenField

You don't need to call lotusDocument.computeWithForm as lotusDocument.renderToRTItem does execute form's input translation and validation formulas already.
Be aware that for both methods form's LotusScript code won't be executed - just in case your fields gets calculated this way.

In case you can use XPages this would be an alternative: http://linqed.eu/2014/07/11/getting-html-from-any-richtext-item/

Upvotes: 0

Richard Schwartz
Richard Schwartz

Reputation: 14628

I'm not quite clear on your objective. There are two possibilities:

1) You want the items from lotusDocument to exist in tmp, and to be exported as actual tag data in the DXL. Your code does not do this.

2) You want the values of the non-hidden Items from lotusDocument to exist as text within the rich text Body item in tmp, and you want those values to be included within the DXL that is exported from tmp - as text within the tag for the Body item. This should be what your code is doing.

If you expected the former, then that's not what renderToRTItem does. What it does is the latter. I.e., it gives you a snapshot of the values of the items in lotusDocument - but if and only if they would be displayed to a user who opens the document. You do not get the items themselves, and they won't appear separately in the DXL. If that's all you expected, and it's not happening, then there's something else going wrong and you haven't given enough infornmation here to figure it out.

If you wanted the former, i.e., the actual items from lotusDocument to exist as separate tag elements within the DXL exported from tmp, then you should be using

lotusDocument.copyAllItems(tmp,true);,

or sequences of

Item tmpItem = lotusDocument.getFirstItem(itemName); tmp.copyItem(tmpItem,"");

Upvotes: 0

Related Questions