How to Access Case Fields via Issue Entity Properties in Jira Cloud

Nov 16, 2016 | Uncategorized

Use zAgile Connect to Access Case Fields

zAgileConnect stores Case data in JIRA Issue entity properties which can be accessed through the JIRA REST API: https://docs.atlassian.com/jira/REST/cloud/#api/2/issue/{issueIdOrKey}/properties-getPropertiesKeys

We store one entity property for each Case associated with a JIRA Issue. Each entity property name starts with “SF_ENTITY_”, as shown here:

The content of an entity property that stores Case info looks as shown in the example below (for Case attributes shared with JIRA):

Please note that only Case properties (fields) are stored in JIRA Issue Entity Properties.  Properties associated with Case-related objects, such as Account (ex: Name), Contact (ex: Name, Email), etc. must be passed through a Case formula field to JIRA.

To search for issues that have at least one related Case we can use the following JQL query.  The JQL query can be executed using JIRA REST API https://docs.atlassian.com/jira/REST/cloud/#api/2/search-search

issue.property[relatedSalesforceEntities].total>0

 

Atlassian provide some tutorials about how to access JIRA using the JIRA REST API https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials/jira-rest-api-version-2-tutorial

Example

Following is a sample python script that uses a small ‘optional’ helper library (restkit) to simplify the REST requests.

The example.py script executes a JQL query to:

  1. retrieve issues with at least one related Case
  2. access the Entity Properties for the first issue in the response
  3. retrieve the values for the CaseNumber attributes from the entity properties for all the related Cases for that Issue
Example.py
import optparse
import json
from restkit import Resource, BasicAuth, request
import ast
 
"""This scripts logins to the specified Jira, retrieves any issue
    with more than 4 linked cases, selects the first of those issues and
    prints the linked cases' ids."""
 
def getLinkedCaseNumbers(issuekey, auth):
    """Returns the case numbers linked to the issuekey."""
    resource = Resource(options.jira_url+('/rest/api/2/issue/%s/properties' % issuekey), filters=[auth])
    response = resource.get(headers={'Content-Type''application/json'}) # Retrieves the issue's properties.
    if response.status_int == 200:  # Verifies the response has content in it.
        entity_properties = json.loads(response.body_string())  # Turns the json response into a python dict.
 
    casenumbers_list = []
    for entity in entity_properties['keys']:
        if entity['key'].startswith('SF_ENTITY_') :
            resource = Resource(entity['self'], filters=[auth])
            response = resource.get(headers={'Content-Type''application/json'})  # Retrieves the linked cases.
            if response.status_int == 200:# Verifies the response has content in it.
                caseInfo = ast.literal_eval(response.body_string())  # Turns the obtained string into a python dict.
                casenumbers_list.append(caseInfo['value']['CaseNumber']) #Retrieves casenumber attribute, it could be any other case attribute stored in the entity property
    
    return casenumbers_list  # Returns the case numbers.
 
 
def getResolvedIssueKeysWithRelatedCases(auth):
    """Returns the issue keys for resolved issues that have at least 1 linked case."""
    resource = Resource(options.jira_url+'/rest/api/2/search?fields=Key&jql=issue.property[relatedSalesforceEntities].total>0+AND+resolved!=null', filters=[auth])
    response = resource.get(headers={'Content-Type''application/json'})
    #TODO: JIRA search REST API returns a max of 50 issues in the response, so we will need iterate over all the paginated results
    if response.status_int == 200:  # Verifying the response has content in it.
        issues = json.loads(response.body_string())  # Turn the json response into a python dict.
        issue_list = [issue['key'for issue in issues['issues']]  # Cleans any issue info that's not its key.
        return issue_list
 
 
def parse_args():
    """Generates command line arguments for the script."""
    parser = optparse.OptionParser()
    parser.add_option('-u''--user', dest='user',
                      help='Username to access Jira')
    parser.add_option('-p''--password', dest='password',
                      help='Password to access  Jira')
    parser.add_option('-j''--jira', dest='jira_url',
                      help='Jira URL')
    return parser.parse_args()  # Returns the user defined command line arguments.
 
 
if __name__ == '__main__':
 
    (options, args) = parse_args()
 
    auth = BasicAuth(options.user, options.password)  # Script uses basic auth to login to Jira.
 
    issue_list = getResolvedIssueKeysWithRelatedCases(auth)
    print ('Unresolved Issues with at least 1 related case:')
    print ', '.join(issue_list)
    cases = getLinkedCaseNumbers(issue_list[0], auth)
    print ('The issue %s has the following associated cases:' % issue_list[0])
    print cases

 

Example output

$ python example.py --user xxxyyy --password yyyxxx --jira https://jira-stg.atlassian.net

Unresolved Issues with at least one related Case:

SEL-25118, SEL-24879, SEL-24752, SEL-24611, SEL-24463, SEL-24299, SEL-24209, SEL-24042, SEL-23916, SEL-23756, SEL-23537, SEL-23427, SEL-23424, SEL-23422, SEL-23421, SEL-23420, SEL-23419, SEL-21919, SEL-21732, SEL-21314, SEL-21145, SEL-21000, SEL-20893, SEL-20730, SEL-20336, SEL-19952, SEL-19564, SEL-19365, SEL-18959, SEL-18865, SEL-18719, SEL-18637, SEL-18635, SEL-18634, SEL-18586, SEL-18457, SEL-18350, SEL-18248, SEL-17955, SEL-17760, SEL-17757, SEL-17601, SEL-17403, SEL-17284, SEL-17183, SEL-17094, SEL-16995, SEL-16603, SEL-16495, SEL-16391

The issue SEL-25118 has the following associated Cases:

[‘00080747’]

 

Tags:

> You Might Also Like

How to Notify Salesforce Case Owner on Jira Issue Transitions

How to Notify Salesforce Case Owner on Jira Issue Transitions

The steps below describe the integration of Jira Issue updates to Salesforce via zAgileConnect with Salesforce Flow and Process Builder. The objective in this example is to notify Salesforce Case owner via email based on certain Issue Updates posted to Salesforce from...

Salesforce Expiring Certificate Notification (oauthjira)

Salesforce Expiring Certificate Notification (oauthjira)

Background Example of Salesforce Expiring Certificate Notification: You have one or more certificates in your Salesforce org <org ID> that will expire soon. Review the list below and visit Certificate and Key Management from Setup to make an update. - oauthjira,...

Loading...