# Escrevendo um script personalizado - API V1 ### A seguir, há um arquivo Python de exemplo para sua referência. O arquivo de script cria um chamado no JIRA quando uma solicitação é criada com o Tipo de Solicitação como **"Bug"** e o Impacto como **"High"**. O ID da solicitação, assunto, descrição, prazo e prioridade da solicitação são enviados ao JIRA para a criação do chamado. Após a criação bem-sucedida do chamado no JIRA, o ID do chamado do JIRA e a URL do chamado são obtidos da resposta para serem adicionados como uma nota na solicitação do ServiceDesk Plus. Os campos personalizados **"JIRA_ISSUE_ID"** e **"JIRA_ISSUE_URL"** também são atualizados com os valores correspondentes. ### #Requisitos - Módulo Requests deve estar instalado - A ser configurado pelo usuário: `url`, `jirausername`, `jirapassword`, `Jira_Server`, `Port_Number` - Comando: `py CreateJiraTicket.py $COMPLETE_JSON_FILE` ```python import requests import sys import json import datetime #Para abrir e acessar o arquivo json file_Path = sys.argv[1] with open(file_Path) as data_file: data = json.load(data_file) #Obtendo os valores necessários request_obj = data['request'] workorderid = request_obj['WORKORDERID'] subject = request_obj['SUBJECT'] desc = request_obj['SHORTDESCRIPTION'] priority = request_obj['PRIORITY'] duebytime = request_obj['DUEBYTIME'] #Transformar o horário de milissegundos para formato de data duebydate = datetime.datetime.fromtimestamp(int(duebytime) / 1e3).strftime('%d %b %Y, %H:%M:%S') #Criando o objeto json a ser fornecido como entrada para a chamada de API jsonData = '''{ "fields": { "summary": "'''+subject+'''", "description": "'''+desc+'''", "issuetype": { "name": "BUG" }, "project": { "key": "ServiceDesk Plus issues" }, "duedate": "'''+duebydate+'''", "priority": { "name": "'''+priority+'''" }, "customfield_10003": "'''+workorderid+'''" } }''' jirausername = 'jirausername' jirapassword = 'jirapassword' string = username + ":" + password stringbytes = bytes(string, "utf-8") base64string = base64.b64encode(stringbytes) base64string = base64string.decode("utf-8") #Especificando os cabeçalhos HTTP necessários para enviar a chamada de API headers = ''' { "X-Version" : "1", 'Content-Type':'application/json', "Accept" : "application/json", "Authorization" : "Basic " + base64string }''' #Construindo a URL para a chamada de API e enviando-a ao servidor Jira with requests.Session() as s: url = "[Jira_Server]:[Port_Number]/rest/api/2/issue/" r = s.post(url, verify=True, data=jsonData, headers=headers) #Se a chamada retornar sucesso, crie uma nota e atualize os campos personalizados if (r.status_code == 202): responseobj = r.json() jiraissueid = responseobj['id'] jiraissueurl = responseobj['self'] note = {} note["notestext"] = "Solicitação Jira criada com ID: " + jiraissueid + "
Link da Issue: " + jiraissueurl noteObject = {} noteObject["notes"] = note addNoteJson = {} addNoteJson['INPUT_DATA'] = [] addNoteJson['INPUT_DATA'].append(noteObject) addNoteJson["OPERATIONNAME"] = "ADD_NOTE" updateReqArray = {} updateReqArray['JIRA_ISSUE_ID'] = jiraissueid updateReqArray['JIRA_ISSUE_URL'] = jiraissueurl updateFieldsJson = {"INPUT_DATA": []} updateFieldsJson['INPUT_DATA'].append(updateReqArray) updateFieldsJson["OPERATIONNAME"] = "EDIT_REQUEST" resultjson = {} resultjson["result"] = "success" resultjson["message"] = "Uma solicitação Jira foi criada. Uma nota com o ID da Issue e a URL foi adicionada." resultjson["operation"] = [] resultjson["operation"].append(addNoteJson) resultjson["operation"].append(updateFieldsJson) #Retornando o JSON print(resultjson) else: print("Problema ao enviar a solicitação") print(r.json()) ```