Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

How to gather the value of a form field in order to use in in a custom picker custom field?

Antoine [Klee Group]
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
July 22, 2024

Hello,

I want to create a custom picker scripted field (so your builtin example that calls the country api perfectly fill the need)

BUT I want this list (more like the API call made to the external service) filtered based on the value of a field from the issue creation screen.

The flow is as follows:

  1. The service desk customer selects a “project” custom field on the portal form.
  2. The “S/N” field on the portal form is filtered based on what’s in the “project” custom field.

I tried using the getFieldByName('project').value function from the behaviour’s but it is not recognized.

Should I need to import a specific library in order to use this function? which one? (it’s not listed in the doc).

Best.

 


 

 

To clarify:

Based on your answer and this community answer https://community.atlassian.com/t5/Marketplace-Apps-Integrations/Re-formField-getValue-Select-List-as-string/qaq-p/1245219/comment-id/62436#M62436 

Here is my MNWE (minimal non-working example):

I created from this template: "custom picker".

import com.onresolve.scriptrunner.canned.jira.fields.model.PickerOption

// Imported from the community answer
import com.onresolve.jira.groovy.user.FieldBehaviours
import com.onresolve.jira.groovy.user.FormField
import groovy.transform.BaseScript
@BaseScript FieldBehaviours fieldBehaviours

FormField field = getFieldById(getFieldChanged())
// Get the value of the summary in the creation screen
def summary = getFieldById("summary")

// Simulate an API response, which is a list of values
List myList = [
"some default value"
]

// Append the value of the "summary" form field to the list
myList.add(summary.getValue().toString())
log.info(myList)


/*
Search is called when the user opens the drop-down, and when they start typing.
`inputValue` will contain what they type to search through the list. It may be an empty string.
This should return a Collection of "objects", e.g. Version, ApplicationUser - in this case we will return a Map.
*/

search = { String inputValue ->
def result = myList.findAll {it ->
it.toLowerCase().contains(inputValue.toLowerCase())
}
result ?: ["Other (in description)"]
}


/*
`toOption` will be called for each item returned by `search`.
The first parameter will have the type of whatever object we are representing, in this case Map.
You are also passed a Closure that can be used to highlight search matches in the display value.
You must return a com.onresolve.scriptrunner.canned.jira.fields.model.PickerOption, with at least `value` and `label` keys.
The `value` should be a String, and is the unique identifier that is stored in the database.
We will call `getItemFromId` with this ID to convert back to the "object".
The `label` value is used for sorting and uniqueness, and will be displayed if the `html` key is not used.
The `html` value should be used if you want to highlight the matching search term(s) within the result, or include other HTML in the option.
Optionally, you can include an `icon` key which should be the URL to an icon representing this option.
*/

toOption = { String it, Closure<String> highlight ->
new PickerOption(
value: it,
label: it,

// The second argument `false` means to highlight the search term even in the middle of the result.
// Without this, or if this is `true`, only matches at the beginning of words are highlighted.
html: highlight(it, false),
)
}


/*
`getItemFromId` is called to convert from the ID back to the object you are representing, in this case a Map.
If the object no longer exists then you should return null.
*/
getItemFromId = { String it ->
it
}
/*

`renderItemViewHtml` is called to get the view HTML when viewing an issue.
You can use HTML in the value to be displayed, and include other information from the object.
*/
renderItemViewHtml = { String it ->
it
}


/*
`renderTextOnlyValue` is called when doing a CSV export or View -> Printable.
You should not include HTML in output from this closure.
*/

renderItemTextOnlyValue = { String it ->
it
}

 

There are the results:

The value in the “summary” does not appear in the list below.

image.png

Hope it's clearer

1 answer

0 votes
Antoine [Klee Group]
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
July 23, 2024

To clarify:

Suggest an answer

Log in or Sign up to answer