External connection configuration (JSD to Jira server)

Originally asked by maya on 11 September 2019 (original question)


Hi,

My scenario is a little bit complicated. so first, I would explain what I have tried to do

We have 2 Jiras instance
1. Jira service desk cloud-only customers are using this instance, which means we want to synced data manually to this side.
2. Jira software server- used by the customer’s support group and R&D group.

Our sync model is:
1. Customer opens a ticket in his JSD (Jira service desk) project
status:done
2. A trigger (by Exalate) openes a “mirror” ticket in Customer support group project
status:done by trigger
3. Customer support users read the ticket and decide whether to open a Jira/s to R&D group.
status: done by selecting the custom field “Target project to sync” --> if he select a value, a trigger opens a ticket to R&D chosen project
4. from now and on, the sync should work for every change.

So, some question that I didn’t find an answer for them in the documentation for External connection configuration (JSD to Jira server)

1. Should I create a connection for each project? we need more than 100 connections for this, and we want to avoid this situation. we want to understand how scale this app, is this will work slower?
I mean we want something like this
JSD project1 ---- connection1 — Jira server project1
JSD project2 ---- connection1 — Jira server project2
JSD project3 ---- connection1 — Jira server project3
and so on…

2. Different issue types with different custom fields- how can we make the sync ignore irrelevant fields without raising an error?

3. Reporter field sync - see attached pic
The reporter name needs to be the customer name which opened the ticket. customer doesn’t have user in the Jira server system. is this possible?

4. Custom fields sync:
a. Category — External Category
in both instances, this custom field is a list
with the same single choice list values.
b. Target due date - I try to do following this doc
unsuccessfully
https://docs.idalko.com/exalate/pages/viewpage.action?pageId=36766017
c. Target SW branch - in both instances, this
custom field is a list of versions. I didn’t find a
way to sync it.

5. Status (Workflow sync) - status needs to be always the same in both instances.
can you please explain stages 1 and 2 here https://docs.idalko.com/exalate/display/ED/Status+synchronization+on+Jira+Server
I can’t find $JIRA_HOME/scripts directory

for the last 2 issues, we want to find a way to restricted sync of comments and attachments to customers. this is our must requirement feature.
6. Attachments
7. Comments We also have a problem with this as discussed here:
https://community.exalate.com/questions/3702803/answers/3702850/comments/3702955

I appreciate your help, let me know if any clarification is needed.

Thanks,
Maya


Answer by Francis Martens (Exalate) on 11 September 2019

Let me try to answer the questions in one go.

Question 1: Do you need to have multiple connections

You can work perfectly with a single connection. Whenever you create a twin on the target Jira, you will specify the target project as follows

// Specify the mapping between the JSD project and the JSO project

def projectKeyMapping = [
    "JSD1" : "JSO1",
    "JSD2" : "JSO2",
    "JSD3" : "JSO3",
		
]


issue.projectKey = projectKeyMapping.get(replica.project.key) ?: "DEFAULT"


With the section above you define first the mapping between the Service Desk project and the Software project. The projectKeyMapping.get(…) will scan the mapping using the key of the remote side. If not found, the default project key is used.

Question 2: Different issue types with different custom fields

In incoming sync, you specify how an incoming message is applied onto the local issue. If you want to ignore certain custom fields, just don’t add them to the incoming sync.

Question 3: Reporter field sync

The reporter field requires a Jira user, so obviously - if you want to see the customer name, you will have either need to create the user (using the createUser method), or you can add the customer name to a custom field - like you suggested

issue.customFields."Customer Name".value = replica.reporter?.displayName 

Question 4: Custom Field Sync

a. Category - External Category

Looks like these are standard select lists.

Check ‘How to synchronize options custom fields’ for more details, but you should be able to do

/*
** Assuming that the category field is included in the replica
*/

/*
** The select list is an array  of options, and thus the choosen value also
** The label of the option is the field 'value' of that option 
*/

def remoteCategoryOption = replica.customFields."Category".value
def remoteCategoryOptionLabel = remoteCategoryOption?.value


issue.customFields."Target Category".value = remoteCategoryOptionLabel



b. Target due date

There is currently a bug in handling date-time fields from Jira cloud. The fix is being validated atm
Can you confirm that the target due date is a date-time field?

c. Target SW branch

Is it a multi-select list of versions? Can you raise another question with more details of what exactly you would like to sync

Question 5: Status Sync

  • The jira-home/scripts directory needs to be created if not available.

Question 6 and 7: Comment and attachment restrictions

Using the outgoing sync you can specify what information is synced. Check for instance the document ‘How to manage comment visibility’