In my current job, I have to support multiple applications that I didn't design or develop. Some of them are great apps, but some of them have a few problems, too. One app I inherited didn't have validation for a large number of type 'number' fields, and users could delete the default zero and still save the document. When a user then tries to reopen the document, the cascaded computed fields bomb out and the document won't open. After I inherited the app I added validation to prevent this from happening in the future, but many, many documents have been saved with this problem, and they still surface from time to time.
Luckily, I have two things going for me here. First, I have a First Level Support (FLS) structure in place. These folks are my first line of defense for application problems. Second, I have R5, which is kind enough to tell me the exact field name that is having problems. I was fixing these fields manually with a simple formula agent that I would modify each time I needed it, but after the fifth phone call I decided to make a simple tool for the First Level Support folks to allow them to fix these fields without my help. It's a LotusScript agent that prompts the FLS member for the field name to be zeroed out. It checks to ensure that the field exists, and if it does, zeros it out.
This agent is very simple, and it has saved me hours in support calls. It can also be easily modified to increase functionality for other needs. The agent uses the NotesDocumentCollection class in the UnprocessedDocuments property of the NotesDatabase class. See the Notes Help files for more information on the specifics of this property.
When should this agent run?
Manually from Actions Menu
Which document(s) should it act on?
What should this agent run?
Dim ns As notesSession Dim ndb As notesDatabase Dim ncol As notesDocumentCollection Dim ndoc As notesdocument Dim ni As notesitem Dim fieldname As String Sub Initialize Set ns = New notesSession Set ndb = ns.currentDatabase Set ncol = ndb.unprocessedDocuments Set ndoc = ncol.getfirstdocument 'prompt the user for the fieldname to zero out... fieldname = Inputbox("Please enter the fieldname that you want to zero out:") Set ni = ndoc.getfirstitem(fieldname) 'check to make sure the field exists If ni Is Nothing Then 'it doesn't exist Msgbox("Couldn't find a field with that name. Try again.") Else 'found a field with that name, so zero it out Call ndoc.replaceitemvalue(fieldname,0) Call ndoc.save(True,True) End If End Sub