Avoid syncing existing comments (before exalation comments)

Originally asked by Henry on 13 March 2020 (original question)


Env: JIRA cloud next-gen board, “Local synchronization”

In the Outgoing script, we can use findAll to select out what we want.

But sometimes the filter condition is not that simple, we have to do the filter in the “Incoming sync” script.

Use case:

We have 2 boards, “INT” for Internal and “EXT” for External.

Before we sync a ticket from INT to EXT, we want to make sure that all existing comments won’t be synced.

So my code is like,

issue.comments = commentHelper.mergeComments(issue, replica, { 
    comment ->
    if (firstSync) {
        // no need to sync historical comments
        comment.body = '[HISTORY]'
    }
    comment
})

It turns all historical comments into “[HISTORY]” so that EXT users won’t see the content.

But actually I don’t want those historical comments to show up in EXT at all. I want to do something like “skip” or “continue”, just exclude those special ones.

I tried set comment.body to “” (empty string) or null, it doesn’t work.

What should we do?

Best regards,

Henry


Answer by Juan Grases on 13 March 2020

At the moment there is not an easy way to avoid syncing the already existing comments before the exalation. I can see some workarounds:

  1. Instead of exalate, use the connect operation. That would mean that the issue needs to be created on the other side manually so it can be connected with the source. The connect operation, by default, doesn’t include existing comments/attachments/worklogs.
  2. Get a custom field that represent the exalation date, make sure it gets filled by the incoming sync on first time. And then filter out comments that were created before that time.

Would any of those make sense for you?

Best regards,

Juan


Comments:

Henry commented on 13 March 2020

Hi Juan,

Thanks for the workarounds suggestion!
#1 is not workable for us because we have many tickets.
For #2, a question is: how to “filter out comments that were created before that time”?
If you mean doing this by “findAll” in outgoing script, how can I get the “first exalation time” of the twin ticket? And what about the first sync? When a ticket with 10 comments get exalated for the first time, there is no such “first exalation time” yet.

Juan Grases commented on 13 March 2020

Yes, we don’t store the first exalation time. That’s why the solution includes creating a custom field where this would be stored. This could be done on the receiving side:
Incoming sync on receiving side:

if(firstSync){
  issue.customFields."First Sync Date".value = new java.util.Date()
}

def firstTimeExalation = issue.customFields."First Sync Date".value
replica.addedComments = replica.addedComments.findAll{it.created.getTime() > firstTimeExalation.getTime() }
issue.comments = commentHelper.mergeComments(issue, replica)


Of course this would require creating that custom field “First Sync Date” on the receiving Jira (which might be a hidden field I believe). We will evaluate internally the possibility to exalate to store internally the date of the first sync.

Best regards,

Juan

Henry commented on 13 March 2020

Thanks. Your team is the greatest team I’ve ever met.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.