I have a form that autofills some text fields based on a date field. It works great, but when I open the form, the fields are already populated with a default date, when I actually set the "Week Starting" date, it changes to what I want, I just dont want the fields to have anything in them when the form is opened. The FormCalc script I'm using is as follows
var dateNum = date2num(form1.Checklist.weekStart.formattedValue,"MMMM DD, YYYY")
$.rawValue = num2date(dateNum,"MM/DD")
Here is a link to the file itself
Solved! Go to Solution.
Views
Replies
Total Likes
It's FormCalc, that block just checks the calendar dropdown to make sure they select a Monday.
I like to put as much of my code as I can in one spot so it's easier to change things. That's why I suggested doing it all from the calendar dropdown.
So you could do something like:
var selectedDate = Date2Num($,"YYYY-MM-DD")
var dayOfWeek = Num2Date(selectedDate, "E")
if (dayOfWeek <> 2) then
xfa.host.messageBox("Week Starting must be a Monday")
$ = null
xfa.host.setFocus("$")
endif
Table1.Row1.dayMonday = num2date(selectedDate, "MM/DD")
Table1.Row1.dayTuesday = num2date(selectedDate + 1, "MM/DD")
Table1.Row1.dayWednesday = num2date(selectedDate + 2, "MM/DD")
Table1.Row1.dayThursday = num2date(selectedDate + 3, "MM/DD")
Table1.Row1.dayFriday = num2date(selectedDate + 4, "MM/DD")
Table1.Row1.daySaturday = num2date(selectedDate + 5, "MM/DD")
Table1.Row1.daySunday = num2date(selectedDate + 6, "MM/DD")
(I ungrouped the table first as it was causing the need to use xfa.resolvenodes.)
Views
Replies
Total Likes
You need to wrap the statement in an if statement to test if the date field has a value.
if (weekStart <> null) then
$.rawValue = num2date(dateNum,"MM/DD")
endif
This will show a zero in the fields, to get rid of that set their display patterns to "Allow Zero" to rid of that.
Personally I'd put all the code on the date field and populate the other fields from there instead of using the Calculate event of the fields themselves.
Also your changing the date field to readOnly after date selection may not be that great of a user experience, if they pick the wrong date they'll have to re-open the form. You could put a check in for making sure they select a Monday and I'd move the code to the Exit event of the date field:
var selectedDate = Date2Num($,"YYYY-MM-DD")
var dayOfWeek = Num2Date(selectedDate, "E")
if (dayOfWeek <> 2) then
xfa.host.messageBox("Week Starting must be a Monday")
$ = null
xfa.host.setFocus("$")
endif
Views
Replies
Total Likes
So your saying it would be best to use the second batch of code:
on the Exit event of the weekStart and then have the days of the week be dayOfWeek[0], dayOfWeek[1], and so on? This is FormCalc correct?
UPDATE: I renamed weekStart to selectedDate, I put the code above in the Exit event of the selectedDate, removed the code I had on the week days, changed them all to be dayOfWeek, preview it, select a Monday, it pops up and says "Week Starting must be Monday", I go back do design view and check everything, looks good, I preview it again, the warning pops up again and LiveCycle locks up. If I use my code and shange my 2nd statement to match the first part of your message, all the fields have )') in them before I select a date.
Views
Replies
Total Likes
It's FormCalc, that block just checks the calendar dropdown to make sure they select a Monday.
I like to put as much of my code as I can in one spot so it's easier to change things. That's why I suggested doing it all from the calendar dropdown.
So you could do something like:
var selectedDate = Date2Num($,"YYYY-MM-DD")
var dayOfWeek = Num2Date(selectedDate, "E")
if (dayOfWeek <> 2) then
xfa.host.messageBox("Week Starting must be a Monday")
$ = null
xfa.host.setFocus("$")
endif
Table1.Row1.dayMonday = num2date(selectedDate, "MM/DD")
Table1.Row1.dayTuesday = num2date(selectedDate + 1, "MM/DD")
Table1.Row1.dayWednesday = num2date(selectedDate + 2, "MM/DD")
Table1.Row1.dayThursday = num2date(selectedDate + 3, "MM/DD")
Table1.Row1.dayFriday = num2date(selectedDate + 4, "MM/DD")
Table1.Row1.daySaturday = num2date(selectedDate + 5, "MM/DD")
Table1.Row1.daySunday = num2date(selectedDate + 6, "MM/DD")
(I ungrouped the table first as it was causing the need to use xfa.resolvenodes.)
Views
Replies
Total Likes
Well this is strange, when I preview it in LiveCycle, it works fine, but after I save it and open it in Acrobat Pro, the fields don't get populated when I select a date.
Views
Replies
Total Likes
Works fine for me...did you remove all the old code?
Views
Replies
Total Likes
OK, what was happening was I had an action that disabled editing of the weekStart date once a date is entered, this was at the request of the IT manager, so I need to add that into the script. Would I just add selectedDate.access = readOnly before the endIf?
Views
Replies
Total Likes
No you need to reference the field itself, selectedDate is just a variable, so after all the code above you'd put:
$.access = "readOnly".
As I said above though, not a great user experience if they pick the wrong date, but the check for choosing a Monday should help.
Views
Replies
Total Likes
Thanks for all your help!
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies