Worklog Verification Scripts
Both "Create/Update" and "Delete" scripts are provided with following build-in objects:
worklog: An instance of Worklog object and using this object it is possible to access Worklog parameters such as Issue, Project, Author and some other objects related with worklog.
worklogAttributes: A map of worklog attribute id as integer to provided attribute value as string.
If script returns any result other than null worklog verification fails and string value of returned object is displayed to user as error message.
All worklog attributes are accessible using "worklogAttributes" map as string , so don't forget to apply necessary conversion. It is a map from attribute id to attribute value.
Boolean: Either "yes" or "no"
Number: Number value as string, such as "12345". If you need integer value use Integer.valueOf.
Single Select: Id of attribute value as string, such as "1", "2".
Duration: String representation of duration in seconds. For example "2h 30m" is "9000".
Accessing Various Jira and WorklogPRO Services
This script access various Jira and WorklogPRO services using ComponentAccessor class. Note that to access WorklogPRO services you need to use "getOSGiComponentInstanceOfType" method. This script checked whether a "Billable" boolean attribute exist. If it doesn't exist logging work is allowed. If it exist, check worklog is marked as billable. If it is billable, it check whether the current user has "Service Desk Team" role in the project. If the user doesn't have "Service Desk Team" role, logging work is disallowed.
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.security.roles.ProjectRoleManager;
import com.deniz.jira.worklog.services.attr.AttrTypeService;
def authenticationContext = ComponentAccessor.getJiraAuthenticationContext();
def projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager.class);
//We need to load WorklogPRO classes differently using getOSGiComponentInstanceOfType
def attrTypeService = ComponentAccessor.getOSGiComponentInstanceOfType(AttrTypeService.class);
def billableAttrType = attrTypeService.getAttrTypeWithName("Billable").get();
if (billableAttrType == null) {
return; //there is no billable attribute
}
def isBillable = worklogAttributes.get(billableAttrType.getID());
def loggedInUser = authenticationContext.getLoggedInUser();
def serviceDeskTeamRole = projectRoleManager.getProjectRole("Service Desk Team");
def project = worklog.getIssue().getProjectObject();
println(worklogAttributes);
if (isBillable == "yes") { //boolean attributes are has either "no" or "yes" value.
if (!projectRoleManager.isUserInProjectRole(loggedInUser, serviceDeskTeamRole, project)) {
return "Only Service Desk Team can register billable worklogs!"
}
}
Accessing Other Apps's Components
import com.deniz.jira.versioning.CmpVersionMappingService;
import com.deniz.jira.worklog.scripting.WithPlugin;
import com.atlassian.jira.component.ComponentAccessor;
@WithPlugin("com.deniz.jira.versioning") //this is the plugin key. you can get it from "manage apps" screen
def cmpVersionMappingService = ComponentAccessor.getOSGiComponentInstanceOfType(CmpVersionMappingService.class);
Accessing Database within Scripts
import com.atlassian.jira.component.ComponentAccessor
import org.slf4j.*;
import com.deniz.jira.worklog.*;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.Issue;
import groovy.sql.Sql;
import java.sql.*;