Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Deleted user
Level
0 / 0 points
Next:
badges earned

Your Points Tracker
Challenges
Leaderboard
  • Global
  • Feed

Badge for your thoughts?

You're enrolled in our new beta rewards program. Join our group to get the inside scoop and share your feedback.

Join group
Recognition
Give the gift of kudos
You have 0 kudos available to give
Who do you want to recognize?
Why do you want to recognize them?
Kudos
Great job appreciating your peers!
Check back soon to give more kudos.

Past Kudos Given
No kudos given
You haven't given any kudos yet. Share the love above and you'll see it here.

It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Insight customField update in Scriptrunner Edited

Hi, I am not able to update Insight CustomField in Jira using Script listener

 

On their site, you can find this link:
https://documentation.mindville.com/display/INSSERV/Update+Insight+Custom+Field

When I am running it in console, everything works, but when I try to use the same code as the Listener, there is problem with this part:

def objects = iqlFacade.findObjectsByIQLAndSchema(1, "Name = \"" + workstationName + "\"");

 

When working as Listener, above code return 0 results. The same IQL works in Jira and in console

2 answers

0 votes
Hana Kučerová Community Leader Aug 20, 2020

Hi @Damian Wodzinski ,

could it be, that the script is somehow affected by the user, who executes the script?

Are there any users, who are not able to view the objects in Insight?

Would you please provide me the whole code? I'll try to test it using my instance.

Which versions of Jira/ScriptRunner/Insight do you have?

Thank you.

I posted code below, 

Jira version: 8.4.1
ScriptRunner version:  6.6.0 
Insight version:  8.6.4 

Hi, thanks for suggestion. I will try to change user to a person who do have access. Meantime I am pasting my code (this is a bit messy). 

In console, instead of trying to use captured issue upon "New issue creation event" I am just using some example issue.

import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.event.type.EventDispatchOption;
import com.atlassian.jira.issue.fields.CustomField;;
import java.util.regex.*;
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.*;
import com.atlassian.jira.issue.util.*;
import com.atlassian.jira.issue.ModifiedValue;
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.IQLFacade.*;
import com.atlassian.jira.bc.issue.*;
import com.atlassian.jira.issue.*;
import com.atlassian.jira.component.*;
import com.atlassian.jira.issue.IssueImpl.*;
import com.atlassian.jira.event.type.EventDispatchOption;

def issueManager = ComponentAccessor.getIssueManager();
Issue issue = issue;
if(issue.getIssueTypeId() == '10600'){
log.error(issue.getIssueTypeId())
String Description = issue.getDescription().toString();
String description;
String workstation;
def Label = issueManager.getIssueObject("IT-390").getLabels();
log.error(Label)
MutableIssue iss = issue;
iss.setLabels(Label)
Pattern pattern = Pattern.compile("\\w{3}\\d{5}\\w");
Matcher matcher = pattern.matcher(Description);
while (matcher.find()){
workstation = matcher.group(0);
}
pattern = Pattern.compile("What happened: (.*)");
matcher = pattern.matcher(Description);
while (matcher.find()){
description = matcher.group(1);
}
log.error(workstation)
def changeHolder = new DefaultIssueChangeHolder()
def customFieldManager = ComponentAccessor.getCustomFieldManager();
def issueDescription = customFieldManager.getCustomFieldObject("customfield_11101");
issueDescription.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(issueDescription), description), changeHolder);
def pc = customFieldManager.getCustomFieldObject("customfield_11100");
Class iqlFacadeClass = ComponentAccessor.getPluginAccessor().getClassLoader().findClass("com.riadalabs.jira.plugins.insight.channel.external.api.facade.IQLFacade");
def iqlFacade = ComponentAccessor.getOSGiComponentInstanceOfType(iqlFacadeClass);
String iql = "Name = \"" + workstation + "\""
log.error(iql)
try{
iqlFacade.validateIQL(iql)
def objects = iqlFacade.findObjectsByIQLAndSchema(3, "Name = \"" + workstation + "\"");
log.error(objects)
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
if (objects) {
MutableIssue mi = (MutableIssue) issue;
mi.setCustomFieldValue(pc, objects);
ComponentAccessor.getIssueManager().updateIssue(user, mi, EventDispatchOption.DO_NOT_DISPATCH, false);
} else {
log.error("There is no such an object")
}
} catch (Exception e){
log.error("Wrong iql")
}
}

Matcher is catching the name of the workstation from Description, and I can confirm it is working correctly. After I run IQL search, objects variable is empty.

 

Example log than I have from code above:
 

2020-08-19 09:32:46,828 ERROR [runner.ScriptBindingsManager]: 10600
2020-08-19 09:32:46,844 ERROR [runner.ScriptBindingsManager]: [Sophos]
2020-08-19 09:32:46,857 ERROR [runner.ScriptBindingsManager]: PPL20032L
2020-08-19 09:32:46,875 ERROR [runner.ScriptBindingsManager]: Name = "PPL20032L"
2020-08-19 09:32:46,954 ERROR [runner.ScriptBindingsManager]: []
2020-08-19 09:32:46,954 ERROR [runner.ScriptBindingsManager]: There is no such an object

So, user is catched after iql method, so that didn't help. I cannot perform update on empty object.

Hi Damian,

the problem is definitely in the search part. I've tested the code below ("validate IQL and find object with name "Test" in object schema 1 in Insight").

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueImpl.*
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.IQLFacade.*

Class iqlFacadeClass = ComponentAccessor.getPluginAccessor().getClassLoader().findClass("com.riadalabs.jira.plugins.insight.channel.external.api.facade.IQLFacade")
def iqlFacade = ComponentAccessor.getOSGiComponentInstanceOfType(iqlFacadeClass)

final String objectName = "Test"
final int objectSchemaId = 1

String iql = "Name = \"" + objectName + "\""
log.error(iql)
try {
iqlFacade.validateIQL(iql)
def objects = iqlFacade.findObjectsByIQLAndSchema(objectSchemaId, iql)
if (objects) {
log.error(objects)
} else {
log.error("There is no such an object")
}
} catch (Exception e){
log.error("Wrong iql")
}

It works for me in console and also as a listener code.

I'm not able to find the objects, when I limit the access to Insight scheme for the user, who creates the issue (then the Issue created event is fired and the listener code is executed).

In your code, the user object is used for the issue update operation, but this is not important. I think the problem is with the user, who performs the search in Insight - I believe the user, who creates the issue, is the one who is used for the search operation. When you use this code in console, search is performed by your user, so it works.

Is it possible explanation? Who does create the issues in your project?

Yeah I understand what you suggest. I have mail handler to create tickets, I added the reporter to the Insight but it does not work. I am not sure if reporter is the one who is creating it, or maybe there is some generic user that performs those actions.

 

For now it is not working, even when I added the reporter to Insight, I will try to check which user is used to create issues.

hi

 

any chance someone could modify the script from the Insight documentation to copy the values in a labels field to an insight field?

 

I'm currently doing it by sending tickets through an insight post function on a global transition, but that triggers the issue updated event which spews old tickets back onto peoples boards :( As far as I'm aware when you do these edits via scriptrunner it doesnt trigger the issue updated event.

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Marketplace Apps & Integrations

New Cloud Apps Roundup - April 2021

Atlassian's marketplace partners have had a very productive start to 2021! Since our last roundup, our developer community has added over 160 new cloud apps to the Atlassian Marketplace to help you...

283 views 3 20
Read article

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you