How to Sync Rich Text and HTML Between Xurrent and Other Systems

    Xurrent uses its own rich text format for comments and custom fields. When syncing with other systems like Jira, ServiceNow, or Zendesk, you need to convert between formats.

    This guide explains how to use the NodeHelper methods to convert rich text in your sync rules.




    Available NodeHelper Methods

    MethodFromToUse Case
    convertWikiToXurrent(text)Wiki/JiraXurrentFrom Jira to Xurrent
    convertHtmlToXurrent(text)HTMLXurrentFrom ADO to Xurrent
    convertXurrentToWiki(text)XurrentWiki/JiraFrom Xurrent to Jira
    convertXurrentToHtml(text)XurrentHTMLFrom Xurrent to ADO
    stripHtml(text)HTMLPlain textRemove all formatting

    Limitations

    Jira Wiki → Xurrent (convertWikiToXurrent)

    The following Jira Wiki elements are NOT supported and will not be converted:

    ElementJira Wiki SyntaxStatus
    Tables| or ||Not supported
    Code Snippets (with language){code:java}...{code}Not supported
    Action Items / Checkboxes[x] or [ ]Not supported
    Panels{panel}...{panel}Not supported
    Macros{jira:KEY-123}Not supported

    Xurrent → Jira Wiki (convertXurrentToWiki)

    The following Xurrent elements are NOT supported and will not be converted:

    ElementXurrent SyntaxStatus
    TablesN/ANot supported
    Record References<request#456>Not supported

    Note: Basic formatting (bold, italic, headers, lists, links, images, quotes, code blocks) is fully supported in both directions.


    Syncing Comments

    Outgoing Sync (Xurrent → Other System)

    To Jira (Wiki format)

    // Data Filter - Outgoing to Jira
    // Convert Xurrent comments to Jira Wiki format and exclude internal comments
    
    replica.comments = entity.comments.findAll { !it.internal }.each {
        it.body = nodeHelper.convertXurrentToWiki(it.body)
    }
    

    To ADO (HTML format)

    // Data Filter - Outgoing to Zendesk or ServiceNow
    // Convert Xurrent comments to HTML format and exclude internal comments
    
    replica.comments = entity.comments.findAll { !it.internal }.each {
        it.body = nodeHelper.convertXurrentToHtml(it.body)
    }
    

    To Plain Text (strip all formatting)

    // Data Filter - Outgoing as plain text
    // Strip all formatting from comments
    
    replica.comments = entity.comments.findAll { !it.internal }.each {
        it.body = nodeHelper.stripHtml(nodeHelper.convertXurrentToHtml(it.body))
    }
    

    Incoming Sync (Other System → Xurrent)

    From Jira (Wiki format)

    // Incoming Processor - From Jira
    // Convert Jira Wiki comments to Xurrent format
    
    replica.comments.each {
        it.body = nodeHelper.convertWikiToXurrent(it.body)
    }
    entity.comments = commentHelper.mergeComments(issue, replica)
    

    From ADO (HTML format)

    // Incoming Processor - From Zendesk or ServiceNow
    // Convert HTML comments to Xurrent format
    
    replica.comments.each {
        it.body = nodeHelper.convertHtmlToXurrent(it.body)
    }
    entity.comments = commentHelper.mergeComments(issue, replica)
    

    Syncing Rich Text Custom Fields

    Outgoing Sync

    To Jira (Wiki format)

    // Data Filter - Outgoing
    // Convert a rich text custom field to Wiki format
    def richTextField = entity.customFields."my_rich_text_field"?.value
    if (richTextField) {
        replica.customKeys."rich_text_converted" = nodeHelper.convertXurrentToWiki(richTextField)
    }
    

    To HTML-based systems

    // Data Filter - Outgoing
    def richTextField = entity.customFields."my_rich_text_field"?.value
    if (richTextField) {
        replica.customKeys."rich_text_converted" = nodeHelper.convertXurrentToHtml(richTextField)
    }
    

    Incoming Sync

    From Jira (Wiki format)

    // Incoming Processor
    // Convert Wiki format to Xurrent for a custom field
    entity.customFields."custom_rich_text" = nodeHelper.getCustomField(247648, "custom_rich_text",nodeHelper.convertWikiToXurrent(replica.description))
    

    From HTML-based systems

    // Incoming Processor
    entity.customFields."custom_rich_text" = nodeHelper.getCustomField(247648, "custom_rich_text",nodeHelper.convertHtmlToXurrent(replica.description))