This
approach also protects scripts from system updates that change imported class files
. Since SIL scripts
don't directly access these classes, they aren't affected by such changes. Instead,
Power Scripts
handles API class
updates,
allowing scripts
to continue functioning normally after updates.
Tip |
---|
When using |
AI tools to |
convert Groovy scripts to SIL |
, remove import statements before |
starting the conversion process. |
Even though AI tools are trained on |
SIL, they tend to replicate Groovy patterns in their output. Removing imports prevents the AI from attempting to reproduce patterns that shouldn't exist in SIL. |
Class initialization
SIL is designed to avoid direct use of Atlassian API classes, making it simpler to use. This approach makes SIL easier to use
, protects scripts from
class-level changes, and eliminates the class initialization step that Groovy requires (as shown in lines 12-13
of the example
below).
While removing initialization code lines
before AI
conversion
is optional, they should be deleted if the AI
attempts to replicate this pattern in SIL
.
Example
1
Expand | ||
---|---|---|
|
| |
This |
Groovy script |
identifies projects where a specific Jira group is used |
in the project’s permission scheme, either directly or through a project role.
|
Initializing the issue
Similar to initializing classes, it is not required in SIL to initialize the issue so that it is editable (line 7 in the example groovy scriptIssue initialization
In SIL, you don't need to initialize an issue to make it editable, unlike Groovy, which requires this initialization step (shown in line 7 in Example 2 below). This is
particularly true
when the script
runs in the
issue's context. This example shows the difference:
Code Block |
---|
// |
Groovy approach def issue = Issues.getByKey('SR-1') as MutableIssue //SIL approach string key = "SR-1"; |
Functions for setting values
In the SIL language it is also not required to useGroovy gets the issue and makes it editable (MutableIssue); SIL simply stores the issue key as a string.
Setting values
Unlike Groovy, SIL doesn't require a function to set
field values (
shown in lines 12-13 in Example 2).
AI conversion tools often incorrectly retain this Groovy pattern when converting to SIL.
This example shows the difference in setting values:
Code Block |
---|
// |
Groovy approach setPriority('Highest') //SIL approach priority = "Highest"; |
Groovy uses a function call (setPriority
) and takes the priority as a parameter; SIL uses direct assignment and treats priority like a regular variable.
Function for storing issue data
The saveModifiedIssues()
function in SIL (
Cloud only)
serves for memory optimization, not for saving changes; it's not required for storing issue data. Unlike Groovy's explicit save operation (shown in line 16 in Example 2), SIL automatically commits all changes when the script completes.
Reindexing
SIL
automatically reindexes issues when changes are made, making Groovy's explicit reindex command (shown in line 17) unnecessary; it can be deleted.
Example
2
Expand | ||
---|---|---|
|
| |
This script |
performs bulk issue updates without triggering emails, modifying last update times, or creating change history records.
|
Basic error handling
SIL simplifies coding by automating common tasks. Most functions in SIL come with built-in protection against data that is null, missing, or invalid in
ways that can cause
code error
and result in
code
crashes. This makes Groovy's explicit error handling (as shown in lines 15-21 in Example 3 below) unnecessary in SIL.
SIL provides
Type conversion
SIL
is very
flexible when it comes to type conversion
; it handles most conversions automatically.
Example
3
Expand | ||
---|---|---|
|
|
This script validates a |
custom template field, returning false if no template is selected and true if a template value exists. It logs the validation status through error messages.
|
|
|
|
|
|
|
Contents:
Best practices
SIL aliases
SIL includes a built-in feature called SIL aliases that simplifies managing custom field IDs in your code. Using aliases makes code more readable and migrations easier, making it a good practice when converting from Groovy to SIL.
Troubleshooting
runnerLog()
When writing scripts in the SIL Manager, you can use a special function called runnerLog() to write output to the console. These output messages are only visible in the SIL Manager or the SIL Runner Gadget and can safely remain in your code, even when scripts run elsewhere (such as post functions).
The output messages are helpful for understanding script execution and debugging.
Run and debug scripts
To test and troubleshoot scripts, you can run them as if they were triggered by a specific issue. To do this:
In SIL Manager, open the script you want to test.
From the Run menu, select Default Script Context.
In the Script context configuration dialog window that opens, select a specific issue.
Click Run to test your script.
Use the script debugger for troubleshooting.