Hi,
I want to mark a field as required only when the DueDate has been modified. I have this behavior in the "serverside script" for the DueDate field.
However, currently the behavior is executed when anything is modified, not just the DueDate. I've tried elaborate ways to overcome this, but there has to be something simpler. What is the effect of defining the behaviour under a particular field? How can I make my code execute only when one particular field is changed?
See code:
import com.atlassian.jira.issue.Issue import com.atlassian.jira.issue.MutableIssue import com.atlassian.jira.issue.fields.CustomField import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.component.ComponentAccessor import org.apache.log4j.Category import com.atlassian.jira.issue.util.DefaultIssueChangeHolder import com.atlassian.jira.ComponentManager import com.atlassian.jira.issue.ModifiedValue def reasonBox = getFieldById("customfield_11100"); //clear reason box reasonBox.setFormValue(null); //require reason box so that user is forced to enter text reasonBox.setRequired(true);
Hi Samantha,
So the script below will make the description required when the due date the user selects during edit is different than the due date the issue already has.
def currentDueDate = underlyingIssue?.dueDate?.dateString log.debug "Due date for the issue : $currentDueDate " def dueDate = getFieldById(getFieldChanged()) def description = getFieldById("description") log.debug "Field changed : $dueDate and it's value is ${dueDate.rawValue} " if ((dueDate.value as Date).dateString != currentDueDate.toString()) { description.setRequired(true) } else { description.setRequired(false) }
This behaviour is assigned to the due date field. I would propose to set a log message and check the value the due date has every time you select one.
Please let me know if this does the trick
regards, thanos
Hi Thanos,
Thanks very much for your answer!
This will set the description to required only if the due date equals a specific date. But I don't know what date it will be in advance. Do you know if there's any way to test if the due date is simply different to what it was before?
Basically I want it so that when the user is in Edit View and changes the DueDate, a text box field is required.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Samantha
I updated the answer above.
What actually you have to do is compare dates. The underlyingIssue?.dueDate will actually give you the date that the issue has, if any, currently.
And then the getFieldById(getFieldChanged()).value will change avery time you select a date in the edit screen.
And then compare them.
I will advise you to check the logs in order to make sure in what kind of format the dates are, even though I believe getting the dateString will do the trick, give it a go and let me know.
regards, Thanos
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Thanos,
Thanks, this is getting me very close. Can one specify a custom field in place of dueDate in 'underlyingIssue?.dueDate'? Because it appears to be a custom field in our instance of JIRA.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
So,
If you want to get the value of a custom field with name First DateTime and type Date Time Picker the way is
def cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("First DateTime") def currentDueDate = (underlyingIssue?.getCustomFieldValue(cf) as Date)?.dateString
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You're awesome! Thanks, that did the trick!
The only problem now is if someone changes the due date, and then changes it back, within the same edit view, the text field is still mandatory. If you have any ideas they're welcome. But in any case you have already helped me tremendously
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Ah never mind, with the 'else' statement everything works perfectly To anyone who might have a similar issue, here is my code:
import com.atlassian.jira.issue.Issue import com.atlassian.jira.issue.MutableIssue import com.atlassian.jira.issue.fields.CustomField import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.component.ComponentAccessor import org.apache.log4j.Category import com.atlassian.jira.issue.util.DefaultIssueChangeHolder import com.atlassian.jira.ComponentManager import com.atlassian.jira.issue.ModifiedValue import org.apache.log4j.Logger import org.apache.log4j.Level //grab reason box def reasonBox = getFieldById("customfield_11100"); //grab due date in edit view def dueDate = getFieldById(getFieldChanged()); //grab current due date from database CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager(); CustomField currentDueDate = customFieldManager.getCustomFieldObject('customfield_10025'); String currentDueDateAsString = (underlyingIssue?.getCustomFieldValue(currentDueDate) as Date)?.dateString; //see date was changed in edit view (note null safe operator [?] which allows dueDate to be null without throwing an exception) if((dueDate?.value as Date)?.dateString != currentDueDateAsString) { //clear reason box reasonBox.setFormValue(null); //require reason box so that user is forced to enter text reasonBox.setRequired(true); } else { reasonBox.setRequired(false); }
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Great,
Just a minor thing, I would suggest to use the null safe operator in your if statement, like
if((dueDate?.value as Date)?.dateString != currentDueDateAsString) { // rest of the script }
so in case that an issue does not have a due date, to not break the behaviour.
regards, Thanos
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.