- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-29-2015 07:59 AM
Seems that I'm missing something easy here. On my Change Request form... I'm trying to enforce some mandatory fields in order to request approvals and think I am over-complicating my solution. At the end of the day, I'm looking for recommendations on how to make the Planned Start/End Dates, Change/Test/Backout Plans all mandatory only when requesting approvals by clicking "Request Approvals" or changing the approval field to "Requested." These fields are not mandatory to simply save or submit the form.
I initially tried to setup a UI Policy with various conditions (Approval is Requested and Planned Start Date is not empty or Planned End date is not empty or ...). I also set the color of the fields to something to highlight them so that people could visibly see where to go to make changes easily. The problem I ran in to was that my highlighting and such was always active... it's like the conditions for the UI Policy didn't matter. No matter what I used I could never get the UI Policy to work as intended so I finally gave up and thought to try this with a Business Rule.
The Business Rule checks for various conditions like Approval is Requested, Change Type is Comprehensive, etc. I then have an advanced script that tosses an error at the top of my Change Form if the condition isn't met. The Backout Plan, for example, has the Advanced Script condition of "current.backout_plan.nil()" and then simply runs the following script... gs.addErrorMessage("Backout Plan needs populated to request approvals."); . I have 5 of these Business Rules setup... one for each of the required fields that I want filled out if someone requests approval.
The Business Rules seem to work as expected but has a side effect of leaving the form in the state that the user was initially moving it to... Requested. Because the requirements aren't met I want to leave the approval field in the "Not Yet Requested" state. If I script the current.approval back to "Not Yet Requested" I only get one error at a time at the top of my form even though all 5 fields might be missing. I hate to tell my end user about one field at a time if I don't have to.
This is an example of what the form looks like if I were to submit a test Change Request with all 5 fields empty.
Pointers? I'm ok if I keep the Business Rules in place and simply highlight the Approval field telling the user to change the state back to Not Yet Requested if that's easiest, too.
Thanks!
Andy
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-02-2015 02:52 PM
Thanks for being patient. I think this what you're after.
//Client-side 'onclick' function.
function RequireFields(){
var bPlan = g_form.getValue("backout_plan");
var tPlan = g_form.getValue("test_plan");
// declare your variables or your additional fields
if (bPlan == "" || tPlan == "") { //check for empty fields. Use OR condition with your additional fields
if (bPlan == "") { //back out plan is empty
g_form.hideFieldMsg("backout_plan");
g_form.flash("change_request.backout_plan", "#FF0000", -4);
g_form.showFieldMsg('backout_plan','Required to submit approvals.','info');
g_form.addInfoMessage("Backout Plan is required to submit for Approval.");
}
if (tPlan == "" ) { //test plan is empty
g_form.hideFieldMsg("test_plan");
g_form.flash("change_request.test_plan", "#FF0000", -4);
g_form.showFieldMsg('test_plan','Required to submit approvals.','info');
g_form.addInfoMessage("Test Plan is required to submit for Approval.");
}
//add your code here for each additional field
return false; //Abort submission
}
//Call the UI Action and skip the 'onclick' function
...
I did have a comment about your server side function.
current.approval = "Requested" should be current.approval = "requested";
For coding, always set the Value since it may be different than the label e.g. requested/Requested
//Server-side function
function runBusRuleCode(){
current.approval = "Requested";
current.update();
gs.addInfoMessage('It worked'); //tell me it worked, I'll remove this later
action.setRedirectURL(current);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-03-2015 09:08 AM
This works!! Well, everything except my "it works" message at the top of the screen. If you see something wrong with that I would appreciate getting it to work (I'll tell the user that approvals have been requested). Otherwise, the code above it is working as intended. Thanks so much!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-03-2015 03:35 PM
That's odd, "It works" appears all fields have been completed and I've seen it show up on my dev instance.