Dynamic Date updating

Have a date field on a form which I need to dynamically update based on the changing of a status field. The status field will start with a Pending status. The date field would be blank to start. Anytime going forward if the status field is changed as it goes thru the process, the date field would be updated with that days date. Essentially this field would be the last date the status was changed.

Any help is appreciated.
jforget1Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
mbonaciConnect With a Mentor Commented:
Yes, I use similar method, but it's usually better to compare values in QueryClose (from the point when user opens the doc, you usually don't want to register all saves, only the last one - so you wait for user to close the doc and register only values at that point).
On the other hand, you may want to know exact time the doc is last saved, it's up to your particular need.

Since you want to check the changes only if the doc was saved, create another global Boolean variable and set it to True in PostSave.
Globals - Declarations:
 Dim strOldStatus As String
 Dim flgDocSaved As Boolean
 
PostOpen:
 strOldStatus = source.document.strStatusFieldName(0)
 
PostSave:
 flgDocSaved = True
 
QueryClose:
 If flgDocSaved And strOldStatus <> source.document.strStatusFieldName(0) Then
     source.document.DateFieldName = Today
     Call source.document.Save( True, False, True )
 End if

Open in new window

0
 
Bill-HansonCommented:
I normally handle this type of operation in LotusScript.

1) In the form's PostOpen event, save the initial value of your status field.  You can store the value in a global variable or in a computed for display field.  If this is a web app, then use a WebQueryOpen agent and store the value in a computed for display field.

2) In the form's QuerySave event, compare the current value of your status field with the initial value that you saved in the PostOpen event.  For a web app, do the same in a WebQuerySave agent.  In either case, simply set the date field to Today or Now if the status changed.
0
 
jforget1Author Commented:
Just realized that I missed one element that might be an issue here. There are 10 different status fields for 10 different departments. Would the same code work?
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
Bill-HansonCommented:
Sure, you just need to have 10 global variables.
0
 
jforget1Author Commented:
OK working the code in now thanks.
0
 
jforget1Author Commented:
OK progress is happening, tried it first on just one record and it worked. I tired to code in a second status field, but that one did not update the date for the second group's date field. Below is the code I added into the Queryclose section. I am thinking I have the syntax wrong with the if...THen

	If flgDocSaved And exp_old_status <> doc.exp_status(0) Then
		doc.exp_date = Today
		If flgDocSaved And bd_old_status <> doc.bd_status(0) Then
			doc.bd_date = Today
			Call doc.Save(True,False)
		End If
	End If

Open in new window

0
 
jforget1Author Commented:
One other thing I noticed was that if I edited the doc and hit is esc,  it does not prompt me to save and the changes to the doc are not saving.
0
 
mbonaciCommented:
If you nest ifs like you did then bd_date wont change unless exp_date changed.

If I figured out right you mustn't nest ifs, like this:
Dim flgSomethingChanged As Boolean  'to avoid saving the doc multiple times
 
If flgDocSaved And exp_old_status <> doc.exp_status(0) Then
     doc.exp_date = Today
     flgSomethingChanged = True
End If
 
If flgDocSaved And bd_old_status <> doc.bd_status(0) Then
     doc.bd_date = Today
     flgSomethingChanged = True
End If
 
' ...  all other status/date fields
 
If flgSomethingChanged Then
     Call doc.Save(True,False)
End If

Open in new window

0
 
mbonaciCommented:
Delete SaveOptions field from the doc.
It's obviously there with value 0 inside, which is used to exit without saving and prompting (when you want to force closing the doc from the code without asking user about it).

You can do it in PostOpen, like this:
Call source.document.RemoveItem( "SaveOptions" )

Open in new window

0
 
jforget1Author Commented:
Excellent work here, this worked like a charm.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.