Hey there,
I want to create a scripted post function which creates issues in project X. Project is depending on a custom field "customer" on the transition - screen.
Has anyone experience with this and / or could help me with this?
This is the code a colleague hand me over but it doesn't work right:
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.link.IssueLink
import com.atlassian.jira.util.ImportUtils
import com.opensymphony.workflow.WorkflowContext
import org.apache.log4j.Category
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.crowd.embedded.api.CrowdService
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.bc.issue.IssueService;
import com.atlassian.jira.issue.IssueInputParameters
log = Category.getInstance("com.onresolve.jira.groovy.DelegateIssue")
log.error("Processing: " + issue.key);
CustomFieldManager customFieldManager = ComponentManager.getInstance().getCustomFieldManager();
IssueManager issueManager = ComponentAccessor.getIssueManager();
IssueService issueService = ComponentAccessor.getIssueService();
Object readLocalCustomField(issue, String fieldName) { // Read by NAME
CustomFieldManager customFieldManager = ComponentManager.getInstance().getCustomFieldManager();
def cf = customFieldManager.getCustomFieldObjects(issue).find {it.name == fieldName}
return cf.getValue(issue) //return issue.getCustomFieldValue(cf)
}
def project = readLocalCustomField(issue, "customer")
log.error("Customer: " + project);
issueMgr = ComponentManager.getInstance().getIssueManager()
projectMgr = ComponentManager.getInstance().getProjectManager()
String currentUserName = ((WorkflowContext) transientVars.get("context")).getCaller();
UserManager userManager = ComponentAccessor.getUserManager();
ApplicationUser currentApplicationUserObj = userManager.getUserByName(currentUserName);
User currentUserObj = currentApplicationUserObj.getDirectoryUser();
//User currentUserObj = CrowdService.getUser(currentUserName);
def wasIndexing = ImportUtils.indexIssues
ImportUtils.indexIssues = true
IssueInputParameters issueInputParameters = issueService.newIssueInputParameters();
// Regular Fields
issueInputParameters.setProjectId(project.id);
issueInputParameters.setIssueTypeId(issue.getIssueTypeId());
issueInputParameters.setSummary(issue.summary);
issueInputParameters.setReporterId(issue.getReporterId());
issueInputParameters.setDescription(issue.description);
// Custom Fields
def customField = customFieldManager.getCustomFieldObjects(issue).find {it.name == "foo"};
issueInputParameters.addCustomFieldValue(customField.getIdAsLong(), "bar");
IssueService.CreateValidationResult result = issueService.validateCreate(currentUserObj, issueInputParameters);
if(!result.isValid()) {
log.error("could not create issue: " + result.getErrorCollection());
}
newissue = issueService.create(currentUserObj, result).getIssue()
// get the current list of outwards Blocks on links to get the sequence number
linkMgr = ComponentManager.getInstance().getIssueLinkManager()
def sequence = 0
for (IssueLink link in linkMgr.getInwardLinks(issue.id)) {
if ("Blocks" == link.issueLinkType.name) {
sequence++;
}
}
linkMgr = ComponentManager.getInstance().getIssueLinkManager()
// TODO: Should check that 10000 is always the link id for Blocks
linkMgr.createIssueLink (newissue.id, issue.id, 10000, sequence, currentUserObj)
ImportUtils.indexIssues = wasIndexing
Any idea?
I'm grateful for any hint.
Greets
Simon