I am currently working on a huge application which exists for many years now, and has a long history with different developers and just a few manuals and/or documentations. But as often it is a critical business application which is in use across different countries 24/7. The more danger, the
more less honor: Every fault is just a further nail in the coffin of the developer…
Today I had to develop an extension for this application, and this has driven me crazy, because it was a pain to identify to problem: After creating a document from a XPage the workflow stopped. When filling out the form in in the NotesClient the problem did not occur. But using the same form in a XPage (with computeWithForm) did not work.
After investigating I found out that the problem was caused by a required field which was not created. It was just not there, nothing, nada.
In the form it was defined as a computed field…
… but even with a simple XPage …
<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <xp:this.data> <xp:dominoDocument var="document1" formName="Doc" computeWithForm="onsave"> </xp:dominoDocument> </xp:this.data> <xp:button value="Save" id="buttonSubmit"> <xp:eventHandler event="onclick" submit="true" refreshMode="complete" immediate="false" save="true" /> </xp:button> <xp:br /> <xp:messages id="errMessages" /> </xp:view>
… the field was not created:
[I have tried the computeWithForm parameter with every available option.]
Searching for a quick workaround I tried to use an oldschool LS agent, but even then the mystery was not solved. Instead, it grew:
%REM Agent ComputeWithForm Created Jul 17, 2013 by Sven Hasselbach/Hasselba/CH %END REM Option Public Option Declare Sub Initialize Dim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Set db = session.Currentdatabase Set doc = New NotesDocument( db ) doc.Form = "Doc" doc.Computewithform True, true doc.Save true, false End Sub
This was the resulting error message:
When opening the form in the NotesClient and saving the document, everything works as expected:
What’s going on here? It was really interesting to find the reason. In the last years I always thought that computed fields have always values defined in the form. But this is not a requirement for author fields:
Adding a simple @UserName to the field, and the issue was solved.
ComputeWithForm has more surprises in stock for XPiNC. Is seems (I haven’t 100% verified that yet), that if a ComputeWithForm triggers an UI Action (like prompting something) then the XPiNC application looses the focus to some (haven’t determined how the „some“ is picked) classic tab and then a facescontext.getExternalContext.redirect will not fire.
XPiNC and ComputeWithForm are very odd bed fellows indeed